Linux/Unix shell 脚本中调用SQL,RMAN脚本

Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle
的相关工作,也是DBA必不可少的技能之一。本文针对Linux/Unix shell脚本调用sql, rman 脚本给出了相关示例。

一、由shell脚本调用sql,rman脚本

[python] view plain copy print ?
  1. 1、shell脚本调用sql脚本
  2. #首先编辑sql文件
  3. oracle@SZDB:~>moredept.sql
  4. connectscott/tiger
  5. spool/tmp/dept.lst
  6. setlinesize100pagesize80
  7. select*fromdept;
  8. spooloff;
  9. exit;
  10. #编辑shell脚本文件,在shell脚本内调用sql脚本
  11. oracle@SZDB:~>moreget_dept.sh
  12. #!/bin/bash
  13. #setenvironmentvariable
  14. if[-f~/.bashrc];then
  15. .~/.bashrc
  16. fi
  17. exportORACLE_SID=CNMMBO
  18. sqlplus-S/nolog@/users/oracle/dept.sql#注意此处执行sql脚本的方法-S表示以静默方式执行
  19. exit
  20. #授予脚本执行权限
  21. oracle@SZDB:~>chmod775get_dept.sh
  22. -->执行shell脚本
  23. oracle@SZDB:~>./get_dept.sh
  24. DEPTNODNAMELOC
  25. -------------------------------------
  26. 10ACCOUNTINGNEWYORK
  27. 20RESEARCHDALLAS
  28. 30SALESCHICAGO
  29. 40OPERATIONSBOSTON
  30. 2、shell脚本调用rman脚本
  31. #首先编辑RMAN脚本
  32. oracle@SZDB:~>morerman.rcv
  33. RUN{
  34. CONFIGURERETENTIONPOLICYTORECOVERYWINDOWOF7DAYS;
  35. CONFIGUREBACKUPOPTIMIZATIONON;
  36. CONFIGURECONTROLFILEAUTOBACKUPON;
  37. CONFIGURECONTROLFILEAUTOBACKUPFORMATFORDEVICETYPEDISKTO'/users/oracle/bak/%d_%F';
  38. ALLOCATECHANNELCH1TYPEDISKMAXPIECESIZE=4G;
  39. ALLOCATECHANNELCH2TYPEDISKMAXPIECESIZE=4G;
  40. SETLIMITCHANNELCH1READRATE=10240;
  41. SETLIMITCHANNELCH1KBYTES=4096000;
  42. SETLIMITCHANNELCH2READRATE=10240;
  43. SETLIMITCHANNELCH2KBYTES=4096000;
  44. CROSSCHECKARCHIVELOGALL;
  45. DELETENOPROMPTEXPIREDARCHIVELOGALL;
  46. BACKUP
  47. DATABASEFORMAT'/users/oracle/bak/%d_FULL__%U';
  48. SQL'ALTERSYSTEMARCHIVELOGCURRENT';
  49. BACKUPARCHIVELOGALLFORMAT'/users/oracle/bak/%d_LF_%U'DELETEINPUT;
  50. DELETENOPROMPTOBSOLETE;
  51. RELEASECHANNELCH1;
  52. RELEASECHANNELCH2;
  53. }
  54. #编辑shell脚本文件,在shell脚本内调用rman脚本
  55. oracle@SZDB:~>morerman_bak.sh
  56. #!/bin/bash
  57. #setenvironmentvariable
  58. if[-f~/.bashrc];then
  59. .~/.bashrc
  60. fi
  61. exportORACLE_SID=CNMMBO
  62. $ORACLE_HOME/bin/rmantarget/cmdfile=/users/oracle/rman.rcvlog=/users/oracle/bak/rman.log
  63. exit
  64. #授予脚本执行权限
  65. oracle@SZDB:~>chmod775rman_bak.sh
  66. #执行shell脚本
  67. oracle@SZDB:~>./rman_bak.sh


二、嵌入sql语句及rman到shell脚本

[python] view plain copy print ?
  1. 1、直接将sql语句嵌入到shell脚本
  2. oracle@SZDB:~>moreget_dept_2.sh
  3. #!/bin/bash
  4. #Author:RobinsonCheng
  5. #Blog:http://blog.csdn.net/robinson_0612
  6. #setenvironmentvariable
  7. if[-f~/.bashrc];then
  8. .~/.bashrc
  9. fi
  10. exportORACLE_SID=CNMMBO
  11. sqlplus-S/nolog<<EOF#EOF在此表示当输入过程中碰到EOF后,整个sql脚本输入完毕
  12. connectscott/tiger
  13. spool/tmp/dept.lst
  14. setlinesize100pagesize80
  15. select*fromdept;
  16. spooloff;
  17. exit;#退出sqlplus环境
  18. EOF
  19. exit#推出shell脚本
  20. #授予脚本执行权限
  21. oracle@SZDB:~>chmodu+xget_dept_2.sh
  22. #执行shell脚本
  23. oracle@SZDB:~>./get_dept_2.sh
  24. DEPTNODNAMELOC
  25. -------------------------------------
  26. 10ACCOUNTINGNEWYORK
  27. 20RESEARCHDALLAS
  28. 30SALESCHICAGO
  29. 40OPERATIONSBOSTON
  30. 2、直接将sql语句嵌入到shell脚本(方式二,使用管道符号>代替spool来输出日志)
  31. oracle@SZDB:~>moreget_dept_3.sh
  32. #!/bin/bash
  33. #setenvironmentvariable
  34. if[-f~/.bashrc];then
  35. .~/.bashrc
  36. fi
  37. exportORACLE_SID=CNMMBO
  38. sqlplus-S/nolog1>/users/oracle/dept.log2>&1<<EOF
  39. connectscott/tiger
  40. setlinesize80pagesize80
  41. select*fromdept;
  42. exit;
  43. EOF
  44. cat/users/oracle/dept.log
  45. exit
  46. #另一种实现方式,将所有的sql语句输出来生成sql脚本后再调用
  47. oracle@SZDB:~>moreget_dept_4.sh
  48. #!/bin/bash
  49. #setenvironmentvariable
  50. if[-f~/.bashrc];then
  51. .~/.bashrc
  52. fi
  53. exportORACLE_SID=CNMMBO
  54. echo"connscott/tiger
  55. select*fromdept;
  56. exit;">/users/oracle/get_dept.sql
  57. sqlplus-silent/nolog@get_dept.sql1>/users/oracle/get_dept.log2>&1
  58. catget_dept.log
  59. exit
  60. 3、将rman脚本嵌入到shell脚本
  61. oracle@SZDB:~>morerman_bak_2.sh
  62. #!/bin/bash
  63. #setenvironmentvariable
  64. if[-f~/.bashrc];then
  65. .~/.bashrc
  66. fi
  67. exportORACLE_SID=CNMMBO
  68. $ORACLE_HOME/bin/rmanlog=/users/oracle/bak/rman.log<<EOF
  69. connecttarget/
  70. RUN{
  71. CONFIGURERETENTIONPOLICYTORECOVERYWINDOWOF7DAYS;
  72. CONFIGUREBACKUPOPTIMIZATIONON;
  73. CONFIGURECONTROLFILEAUTOBACKUPON;
  74. CONFIGURECONTROLFILEAUTOBACKUPFORMATFORDEVICETYPEDISKTO'/users/oracle/bak/%d_%F';
  75. ALLOCATECHANNELCH1TYPEDISKMAXPIECESIZE=4G;
  76. ALLOCATECHANNELCH2TYPEDISKMAXPIECESIZE=4G;
  77. SETLIMITCHANNELCH1READRATE=10240;
  78. SETLIMITCHANNELCH1KBYTES=4096000;
  79. SETLIMITCHANNELCH2READRATE=10240;
  80. SETLIMITCHANNELCH2KBYTES=4096000;
  81. CROSSCHECKARCHIVELOGALL;
  82. DELETENOPROMPTEXPIREDARCHIVELOGALL;
  83. BACKUP
  84. DATABASEFORMAT'/users/oracle/bak/%d_FULL__%U';
  85. SQL'ALTERSYSTEMARCHIVELOGCURRENT';
  86. BACKUPARCHIVELOGALLFORMAT'/users/oracle/bak/%d_LF_%U'DELETEINPUT;
  87. DELETENOPROMPTOBSOLETE;
  88. RELEASECHANNELCH1;
  89. RELEASECHANNELCH2;
  90. }
  91. EXIT;
  92. EOF
  93. exit
  94. #授予脚本执行权限
  95. oracle@SZDB:~>chmodu+xrman_bak_2.sh
  96. #执行shell脚本
  97. oracle@SZDB:~>./rman_bak_2.sh
  98. RMAN>RMAN>2>3>4>5>6>7>8>9>10>11>12>13>14>15>16>17>18>19>20>21>RMAN>oracle@SZDB:~>


三、更多参考

基于用管理的备份备份请参

Oracle 冷备份

Oracle 热备份

Oracle 备份恢复概念

Oracle 实例恢复

Oracle 基于用户管理恢复的处理(详细描述了介及其)

SYSTEM 表空间管理及备份恢复

SYSAUX表空间管理及恢复

Oracle 基于备份控制文件的恢复(unsing backup controlfile)

RMAN的备份复与管理请参

RMAN 概述及其体系结构

RMAN 配置、监控与管理

RMAN 备份详解

RMAN 还原与恢复

RMAN catalog 的创建和使用

基于catalog 创建RMAN存储脚本

基于catalog 的RMAN 备份与恢复

RMAN备份困惑(使用plus archivelog)

ORACLE体系结构请参

Oracle 表空间与数据文件

Oracle 密码文件

Oracle 参数文件

Oracle 联机重做日志文件(ONLINE LOG FILE)

Oracle 控制文件(CONTROLFILE)

Oracle 归档日志

Oracle 回滚(ROLLBACK)和撤销(UNDO)

Oracle 数据库实例启动关闭过程

Oracle 10g SGA 的自动化管理

Oracle 实例和Oracle数据库(Oracle体系结构)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值