首页 > 代码库 > Linux/Unix shell 脚本中调用SQL,RMAN脚本

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:~> more dept.sql  
  4. connect scott/tiger  
  5. spool /tmp/dept.lst  
  6. set linesize 100 pagesize 80  
  7. select * from dept;  
  8. spool off;  
  9. exit;  
  10.   
  11. #编辑shell脚本文件,在shell脚本内调用sql脚本  
  12. oracle@SZDB:~> more get_dept.sh  
  13. #!/bin/bash  
  14.   
  15. # set environment variable  
  16.   
  17. if [ -f ~/.bashrc ]; then  
  18.         . ~/.bashrc  
  19. fi  
  20.   
  21. export ORACLE_SID=CNMMBO  
  22. sqlplus -S /nolog @/users/oracle/dept.sql #注意此处执行sql脚本的方法 -S 表示以静默方式执行  
  23. exit  
  24.   
  25. #授予脚本执行权限  
  26. oracle@SZDB:~> chmod 775 get_dept.sh  
  27.   
  28. -->执行shell脚本  
  29. oracle@SZDB:~> ./get_dept.sh   
  30.   
  31.     DEPTNO DNAME          LOC  
  32. ---------- -------------- -------------  
  33.         10 ACCOUNTING     NEW YORK  
  34.         20 RESEARCH       DALLAS  
  35.         30 SALES          CHICAGO  
  36.         40 OPERATIONS     BOSTON  
  37.   
  38. 2、shell脚本调用rman脚本  
  39. #首先编辑RMAN脚本  
  40. oracle@SZDB:~> more rman.rcv  
  41. RUN {  
  42. CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;  
  43. CONFIGURE BACKUP OPTIMIZATION ON;  
  44. CONFIGURE CONTROLFILE AUTOBACKUP ON;  
  45. CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘/users/oracle/bak/%d_%F‘;  
  46. ALLOCATE CHANNEL CH1 TYPE DISK MAXPIECESIZE=4G;  
  47. ALLOCATE CHANNEL CH2 TYPE DISK MAXPIECESIZE=4G;  
  48. SET LIMIT CHANNEL CH1 READRATE=10240;  
  49. SET LIMIT CHANNEL CH1 KBYTES=4096000;  
  50. SET LIMIT CHANNEL CH2 READRATE=10240;  
  51. SET LIMIT CHANNEL CH2 KBYTES=4096000;  
  52. CROSSCHECK ARCHIVELOG ALL;  
  53. DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;  
  54. BACKUP   
  55. DATABASE FORMAT ‘/users/oracle/bak/%d_FULL__%U‘;  
  56. SQL ‘ALTER SYSTEM ARCHIVE LOG CURRENT‘;  
  57. BACKUP ARCHIVELOG ALL FORMAT ‘/users/oracle/bak/%d_LF_%U‘ DELETE  INPUT;  
  58. DELETE NOPROMPT OBSOLETE;  
  59. RELEASE CHANNEL CH1;  
  60. RELEASE CHANNEL CH2;  
  61. }  
  62.   
  63. #编辑shell脚本文件,在shell脚本内调用rman脚本  
  64. oracle@SZDB:~> more rman_bak.sh  
  65. #!/bin/bash  
  66.   
  67. # set environment variable  
  68.   
  69. if [ -f ~/.bashrc ]; then  
  70.         . ~/.bashrc  
  71. fi  
  72.   
  73. export ORACLE_SID=CNMMBO  
  74. $ORACLE_HOME/bin/rman target / cmdfile=/users/oracle/rman.rcv log=/users/oracle/bak/rman.log  
  75. exit  
  76.   
  77. #授予脚本执行权限  
  78. oracle@SZDB:~> chmod 775 rman_bak.sh  
  79.   
  80. #执行shell脚本  
  81. oracle@SZDB:~> ./rman_bak.sh  


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

[python] view plain copy
 
 print?
  1. 1、直接将sql语句嵌入到shell脚本  
  2. oracle@SZDB:~> more get_dept_2.sh  
  3. #!/bin/bash  
  4. # Author : Robinson Cheng   
  5. # Blog : http://blog.csdn.net/robinson_0612  
  6.   
  7. # set environment variable  
  8.   
  9. if [ -f ~/.bashrc ]; then  
  10.         . ~/.bashrc  
  11. fi  
  12.   
  13. export ORACLE_SID=CNMMBO  
  14. sqlplus -S /nolog  <<EOF     #EOF在此表示当输入过程中碰到EOF后,整个sql脚本输入完毕  
  15. connect scott/tiger  
  16. spool /tmp/dept.lst  
  17. set linesize 100 pagesize 80  
  18. select * from dept;  
  19. spool off;  
  20. exit;                       #退出sqlplus 环境  
  21. EOF  
  22. exit                        #推出shell脚本      
  23.   
  24. #授予脚本执行权限  
  25. oracle@SZDB:~> chmod u+x get_dept_2.sh  
  26.   
  27. #执行shell脚本  
  28. oracle@SZDB:~> ./get_dept_2.sh  
  29.   
  30.     DEPTNO DNAME          LOC  
  31. ---------- -------------- -------------  
  32.         10 ACCOUNTING     NEW YORK  
  33.         20 RESEARCH       DALLAS  
  34.         30 SALES          CHICAGO  
  35.         40 OPERATIONS     BOSTON  
  36.   
  37. 2、直接将sql语句嵌入到shell脚本(方式二,使用管道符号>代替spool来输出日志)  
  38. oracle@SZDB:~> more get_dept_3.sh  
  39. #!/bin/bash  
  40.   
  41. # set environment variable  
  42.   
  43. if [ -f ~/.bashrc ]; then  
  44.         . ~/.bashrc  
  45. fi  
  46.   
  47. export ORACLE_SID=CNMMBO  
  48. sqlplus -S /nolog 1>/users/oracle/dept.log 2>&1 <<EOF  
  49. connect scott/tiger  
  50. set linesize 80 pagesize 80  
  51. select * from dept;  
  52. exit;  
  53. EOF  
  54. cat /users/oracle/dept.log  
  55. exit  
  56.   
  57. #另一种实现方式,将所有的sql语句输出来生成sql脚本后再调用  
  58. oracle@SZDB:~> more get_dept_4.sh  
  59. #!/bin/bash  
  60.   
  61. # set environment variable  
  62.   
  63. if [ -f ~/.bashrc ]; then  
  64.         . ~/.bashrc  
  65. fi  
  66.   
  67. export ORACLE_SID=CNMMBO  
  68. echo "conn scott/tiger   
  69. select * from dept;  
  70. exit;" >/users/oracle/get_dept.sql  
  71. sqlplus -silent /nolog  @get_dept.sql 1>/users/oracle/get_dept.log 2>&1  
  72. cat get_dept.log  
  73. exit  
  74.   
  75. 3、将rman脚本嵌入到shell脚本  
  76. oracle@SZDB:~> more rman_bak_2.sh  
  77. #!/bin/bash  
  78.   
  79. # set environment variable  
  80.   
  81. if [ -f ~/.bashrc ]; then  
  82.         . ~/.bashrc  
  83. fi  
  84.   
  85. export ORACLE_SID=CNMMBO  
  86. $ORACLE_HOME/bin/rman log=/users/oracle/bak/rman.log <<EOF  
  87. connect target /  
  88. RUN {  
  89. CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;  
  90. CONFIGURE BACKUP OPTIMIZATION ON;  
  91. CONFIGURE CONTROLFILE AUTOBACKUP ON;  
  92. CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘/users/oracle/bak/%d_%F‘;  
  93. ALLOCATE CHANNEL CH1 TYPE DISK MAXPIECESIZE=4G;  
  94. ALLOCATE CHANNEL CH2 TYPE DISK MAXPIECESIZE=4G;  
  95. SET LIMIT CHANNEL CH1 READRATE=10240;  
  96. SET LIMIT CHANNEL CH1 KBYTES=4096000;  
  97. SET LIMIT CHANNEL CH2 READRATE=10240;  
  98. SET LIMIT CHANNEL CH2 KBYTES=4096000;  
  99. CROSSCHECK ARCHIVELOG ALL;  
  100. DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;  
  101. BACKUP   
  102. DATABASE FORMAT ‘/users/oracle/bak/%d_FULL__%U‘;  
  103. SQL ‘ALTER SYSTEM ARCHIVE LOG CURRENT‘;  
  104. BACKUP ARCHIVELOG ALL FORMAT ‘/users/oracle/bak/%d_LF_%U‘ DELETE  INPUT;  
  105. DELETE NOPROMPT OBSOLETE;  
  106. RELEASE CHANNEL CH1;  
  107. RELEASE CHANNEL CH2;  
  108. }  
  109. EXIT;  
  110. EOF  
  111. exit          
  112.   
  113. #授予脚本执行权限  
  114. oracle@SZDB:~> chmod u+x rman_bak_2.sh     
  115.   
  116. #执行shell脚本   
  117. oracle@SZDB:~> ./rman_bak_2.sh  
  118. 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:~>     
 
转:http://blog.csdn.net/leshami/article/details/7965916

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