Linux/Unix shell 指令碼中調用SQL,RMAN指令碼

來源:互聯網
上載者:User

標籤:

    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. [email protected]:~> 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. [email protected]:~> 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. [email protected]:~> chmod 775 get_dept.sh  
  27.   
  28. -->執行shell指令碼  
  29. [email protected]:~> ./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. [email protected]:~> 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. [email protected]:~> 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. [email protected]:~> chmod 775 rman_bak.sh  
  79.   
  80. #執行shell指令碼  
  81. [email protected]:~> ./rman_bak.sh  


二、嵌入sql語句及rman到shell指令碼

[python] view plain copy  print?
  1. 1、直接將sql語句嵌入到shell指令碼  
  2. [email protected]:~> 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. [email protected]:~> chmod u+x get_dept_2.sh  
  26.   
  27. #執行shell指令碼  
  28. [email protected]:~> ./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. [email protected]:~> 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. [email protected]:~> 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. [email protected]:~> 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. [email protected]:~> chmod u+x rman_bak_2.sh     
  115.   
  116. #執行shell指令碼   
  117. [email protected]:~> ./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> [email protected]:~>     
 轉:http://blog.csdn.net/leshami/article/details/7965916

Linux/Unix shell 指令碼中調用SQL,RMAN指令碼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.