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

来源:互联网 发布:mac系统照片图库打不开 编辑:程序博客网 时间:2024/05/22 13:47
Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle
的相关工作,也是DBA必不可少的技能之一。本文针对Linux/Unix shell脚本调用sql, rman 脚本给出了相关示例。

 

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

[python] view plaincopyprint?
  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 plaincopyprint?
  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> 23456789101112131415161718192021> 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体系结构)       

0 0