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

  1. Linux脚本中调用SQL,RMAN脚本

    Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle的相关工作,也是DBA必不可 ...

  2. Shell脚本中调用另外一个脚本的方法

    (转载): 在Linux平台上开发,经常会在console(控制台)上执行另外一个脚本文件,经常用的方法有:./my.sh 或 source my.sh 或 . my.sh:这三种方法有什么不同呢?我 ...

  3. shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)

    fork ( /directory/script.sh) fork是最普通的, 就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本. 运行的时候开一个sub- ...

  4. 在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)——转载

    原文链接:http://blog.chinaunix.net/uid-22548820-id-3181798.html fork ( /directory/script.sh) :如果shell中包含 ...

  5. 在shell脚本中调用sql语句

    查询员工信息 -S:静默登录 [oracle@localhost shells]$ cat shell1.sh #!/bin/bash #查询员工信息 sqlplus -S /nolog <&l ...

  6. Linux/Unix shell sql 之间传递变量

    灵活结合Linux/Unix Shell 与SQL 之间的变量传输,极大程度的提高了DBA的工作效率,本文针对Linux/Unix shell sql 之间传递变量给出几个简单的示例以供参考. Lin ...

  7. Linux/Unix shell 监控Oracle实例(monitor instance)

    使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linu ...

  8. Linux/Unix shell 监控Oracle监听器(monitor listener)

    使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linu ...

  9. Linux/Unix shell 监控Oracle告警日志(monitor alter log file)

    使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linu ...

随机推荐

  1. Sold out

    When will the writer see the play? 'The play may begin at any moment,'I said. 'It may have begun alr ...

  2. iOS开发--xcode快捷键

    1. 文件CMD + N: 新文件CMD + SHIFT + N: 新项目CMD + O: 打开CMD + S: 保存CMD+OPt+S:保存所有文件CMD + SHIFT + S: 另存为CMD + ...

  3. Oracle 全文索引相关命令

    --用sys用户登录,解锁ctxsys用户alter user ctxsys account unlock; --授权给对应用户grant execute on ctx_ddl to yw; --用y ...

  4. Java:多线程

    创建线程的方式有两种: 第一种:使用线程类Thread或者继承它的子类创建线程对象 第二种:定义接口类实现接口Runnable创建线程对象 多线程的好处:可以整合资源,提高系统资源的利用率 多线程中提 ...

  5. weka数据挖掘拾遗(三)----再谈如果何生成arff

    前一阵子写过一个arff的随笔,但是写完后发现有些啰嗦.其实如果使用weka自带的api,生成arff文件将变成一件很简单的事儿. 首先,可以先把特征文件生成csv格式的.csv格式就是每列数据都用逗 ...

  6. linux c 生成uuid

    /********方法一**********/#include <stdio.h> #include <stdlib.h> #include <string.h> ...

  7. JAVA多线程下载网络文件

    JAVA多线程下载网络文件,开启多个线程,同时下载网络文件.   源码如下:(点击下载 MultiThreadDownload.java) import java.io.InputStream; im ...

  8. IntelliJ IDEA12.1.1 使用 相关记录

    最近在切换ide 从eclipse平台上转移到   IDEA 其它的都比较容易,让我烦恼的是使用idea 发布工程,使用tomcat 调试 热部署.期间碰到各种问题,纠结好久了:终于成功完成了,特意记 ...

  9. SQL SERVER 常用字符类型的区别

    长度为 n 个字节的固定长度且非 Unicode 的字符数据.n 必须是一个介于 1 和 8,000 之间的数值.存储大小为 n 个字节.char 在 SQL-92 中的同义词为 character. ...

  10. Android gingerbread eMMC booting

    Android gingerbread eMMC booting This page is currently under construction. The content of this page ...