zoukankan      html  css  js  c++  java
  • Linux脚本中调用SQL,RMAN脚本

    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. -->执行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在此表示当输入过程中碰到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:~>  
  • 相关阅读:
    关于词向量工作原理的理解
    LDA-线性判别分析(四)其他几个相关问题
    LDA-线性判别分析(三)推广到 Multi-classes 情形
    LDA-线性判别分析(一)预备知识
    LDA-线性判别分析(二)Two-classes 情形的数学推导
    为什么国内的网盘公司都在 TB 的级别上竞争,成本会不会太高?
    为什么我们喜欢用 sigmoid 这类 S 型非线性变换?
    UFLDL 教程学习笔记(四)主成分分析
    关于协方差矩阵的理解
    UFLDL 教程学习笔记(三)自编码与稀疏性
  • 原文地址:https://www.cnblogs.com/chengjian-physique/p/7913226.html
Copyright © 2011-2022 走看看