Linux/Unix shell 指令碼中呼叫SQL,RMAN指令碼

us_yunleiwang發表於2013-12-05

   Linux/Unix shell指令碼中呼叫或執行SQL,RMAN 等為自動化作業以及多次反覆執行提供了極大的便利,因此透過Linux/Unix shell來完成Oracle
的相關工作,也是DBA必不可少的技能之一。本文針對Linux/Unix shell指令碼呼叫sql, rman 指令碼給出了相關示例。

一、由shell指令碼呼叫sql,rman指令碼

  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. --&gt執行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指令碼

  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後,整個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 <
  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 <
  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> 23456789101112131415161718192021> RMAN> oracle@S

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23490154/viewspace-1062404/,如需轉載,請註明出處,否則將追究法律責任。

相關文章