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:~>

Linux脚本中调用SQL,RMAN脚本的更多相关文章

  1. Linux/Unix shell 脚本中调用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. 如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样)

    如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样) python标准库中的subprocess可以解决这个问题. from subprocess ...

  7. django系列5.4--ORM中执行原生SQL语句, Python脚本中调用django环境

    ORM执行原生sql语句 在模型查询API不够用的情况下,我们还可以使用原始的SQL语句进行查询. Django 提供两种方法使用原始SQL进行查询:一种是使用raw()方法,进行原始SQL查询并返回 ...

  8. Python--day69--pythonDjango终端打印SQL语句、在Python脚本中调用Django环境

    Django终端打印SQL语句 在Django项目的settings.py文件中,在最后复制粘贴如下代码: LOGGING = { 'version': 1, 'disable_existing_lo ...

  9. Shell脚本中执行sql语句操作mysql

    对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...

随机推荐

  1. [vijos1066]弱弱的战壕

    描述 永恒和mx正在玩一个即时战略游戏,名字嘛~~~~~~恕本人记性不好,忘了-_-b. mx在他的基地附近建立了n个战壕,每个战壕都是一个独立的作战单位,射程可以达到无限(“mx不赢定了?!?”永恒 ...

  2. 基于 Generator 和 Iterator 的惰性列表

    初识 Lazy List 如果有了解过 Haskell 的朋友,对下面的这些表达一定不陌生 repeat 1 -- => [1, 1, 1, 1, 1,...] cycle "abc& ...

  3. JZOJ 100029. 【NOIP2017提高A组模拟7.8】陪审团

    100029. [NOIP2017提高A组模拟7.8]陪审团 Time Limits: 1000 ms  Memory Limits: 131072 KB  Detailed Limits   Got ...

  4. JZOJ 5185. 【NOIP2017提高组模拟6.30】tty's sequence

    5185. [NOIP2017提高组模拟6.30]tty's sequence (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB ...

  5. 初学Python不知道做什么项目好?来看看练手项目如何?

    对于初学者来说,在学习编程的初期,由于基础知识点的学习是比较无聊的,所以大家可能会有所反感,为了减弱大家的反感,我给大家带来一个简单的小项目——实现屏保计时器,这个项目就算是刚学Python的小伙伴, ...

  6. 删除项目开发中的.pyc文件

    在实际开发中python会自动生成很多pyc文件,但是这些pyc文件是不需要我们追踪的,删除了对项目也没有影响,下面是删除pyc文件的方法. Linux或Mac系统 find /tmp -name & ...

  7. 动态规划:完全背包问题-HDU1114-Piggy-Bank

    解题心得: 1.这是一个完全背包问题的变形,题目要求是求在规定的重量下求价值最小,所以需要将d[0]=0关键的初始化 2.当不可能出现最小的价值时,d的状态并没有被改变,说明并没有放进去一个硬币. 题 ...

  8. 项目中的小点_java项目某jsp页面报404

    1.将项目文件夹直接放在tomcat服务器的webapps路径下 2.从一个tomcat服务器webapps下拷贝一个项目到另一个tomcat服务器webapps路径下 3.重启tomcat后,访问新 ...

  9. tomcat缓存

    问题描述: 一个用到struts2框架的web项目,由于在struts.xml中少配置了一个action,导致项目运行时报异常.将原本好的代码复旧,重启tomcat服务,第一次加载程序没问题,再刷新时 ...

  10. nginx 同一 iP 多域名配置方法(多文件)

    一.Nginx 配置文件(nginx version: nginx/1.12.2) 路径:/usr/local/nginx/conf/nginx.conf 操作:在 http 模块增加(子配置文件的路 ...