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. centos 7 安装以及ip配置

    1.安装: root 200M: swap 内存的2倍,如果内存超过4g,最大设为8g就够了: / 剩余: 2.ip配置 (1)动态配置:dhclient ip add (2)静态配置:vi /etc ...

  2. AB test学习笔记

    AB Test 介绍: https://vwo.com/ab-testing/ AB Test 的意义: 数据分析告诉我们要不要去做一件事情,ab 实验反馈告诉我们我们做得好不好,哪里有问题,以及衡量 ...

  3. 四 python并发编程之协程

    一 引子 本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态 cpu正在运行一个任务,会在两种情况下切走去 ...

  4. python学习笔记(四):生成器、内置函数、json

    一.生成器 生成器是什么?其实和list差不多,只不过list生成的时候数据已经在内存里面了,而生成器中生成的数据是当被调用时才生成呢,这样就节省了内存空间. 1. 列表生成式,在第二篇博客里面我写了 ...

  5. 静态属性property的本质和应用

    一.本质 静态属性property本质就是实现了get,set,delete三种方法 class Foo: @property def AAA(self): print('get的时候运行我啊') @ ...

  6. linux下安装VMware出错:Gtk-Message: Failed to load module "canberra-gtk-module"解决方法

    最近又有兴趣在linux下搭建个虚拟机,于是去找了个VMWorkstation,安装的过程中报了两个错误 Gtk-Message: Failed to load module "pk-gtk ...

  7. Java程序占用实际内存大小

    很多人错误的认为运行Java程序时使用-Xmx和-Xms参数指定的就是程序将会占用的内存,但是这实际上只是Java堆对象将会占用的内存.堆只是影响Java程序占用内存数量的一个因素.要更好的理解你的J ...

  8. 【IPv6】ISATAP隧道技术详解

    一.基本概念       ISATAP(Intra-SiteAutomatic Tunnel Addressing Protocol)    ISATAP是一种非常容易部署和使用的IPv6过渡机制.在 ...

  9. 【Best Time to Buy and Sell Stock II】cpp

    题目: Say you have an array for which the ith element is the price of a given stock on day i. Design a ...

  10. leetcode 【 Copy List with Random Pointer 】 python 实现

    题目: A linked list is given such that each node contains an additional random pointer which could poi ...