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. UVA 10780 Again Prime? No Time. 分解质因子

    The problem statement is very easy. Given a number n you have to determine the largest power of m,no ...

  2. UVA 557 Burger 排列组合递推

    When Mr. and Mrs. Clinton's twin sons Ben and Bill had their tenth birthday, the party was held at t ...

  3. Maven的配置文件pom.xml

    Maven的配置文件pom.xml 简介: 什么是POM? POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的文件,使用XML表示,名称叫做pom.xml. ...

  4. 8天学通MongoDB——第二天 细说增删查改

    原文地址:http://www.cnblogs.com/huangxincheng/archive/2012/02/19/2357846.html 看过上一篇,相信大家都会知道如何开启mongodb了 ...

  5. lintcode: 最长无重复字符的子串

    题目 最长无重复字符的子串给定一个字符串,请找出其中无重复字符的最长子字符串. 例如,在"abcabcbb"中,其无重复字符的最长子字符串是"abc",其长度为 ...

  6. Android核心分析之十九电话系统之GSMCallTacker

    GSMCallTracker在本质上是一个Handler.<IGNORE_JS_OP> 1.jpg (1.52 KB, 下载次数: 1) 下载附件  保存到相册 2012-3-22 11: ...

  7. onCreateOptionsMenu 和 onPrepareOptionsMenu 的区别

    onCreateOptionsMenu 第一次创建时调用 onPrepareOptionsMenu 运行时每次点击菜单按钮时都会调用这个函数,可以动态改变菜单项 public boolean onPr ...

  8. 管理IPv4网络连接

    1. 使用 nmcli 检查所有连接 [root@desktop1 ~]# nmcli connection NAME UUID TYPE DEVICE eno33554960 5be7dba9-6b ...

  9. Hibernate的配置文件解析

    配置mybatis.xml或hibernate.cfg.xml报错: <property name="connection.url">jdbc:mysql://loca ...

  10. 二维码(2)二维码登录原理及Android客户端示例

    1,原理 服务器: 数据库: 建立一个2维码登录的数据表,产生一个登录页时,插入一条记录X,X含将要登录的用户名字段(初始为空),2维码中的数据字段(唯一) 登录页面: 在产生的2维码中包含关键数据Y ...