Linux/Unix shell 脚本中调用SQL,RMAN脚本
Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle
的相关工作,也是DBA必不可少的技能之一。本文针对Linux/Unix shell脚本调用sql, rman 脚本给出了相关示例。
一、由shell脚本调用sql,rman脚本
- 1、shell脚本调用sql脚本
- #首先编辑sql文件
- oracle@SZDB:~> more dept.sql
- connect scott/tiger
- spool /tmp/dept.lst
- set linesize 100 pagesize 80
- select * from dept;
- spool off;
- exit;
- #编辑shell脚本文件,在shell脚本内调用sql脚本
- oracle@SZDB:~> more get_dept.sh
- #!/bin/bash
- # set environment variable
- if [ -f ~/.bashrc ]; then
- . ~/.bashrc
- fi
- export ORACLE_SID=CNMMBO
- sqlplus -S /nolog @/users/oracle/dept.sql #注意此处执行sql脚本的方法 -S 表示以静默方式执行
- exit
- #授予脚本执行权限
- oracle@SZDB:~> chmod 775 get_dept.sh
- -->执行shell脚本
- oracle@SZDB:~> ./get_dept.sh
- DEPTNO DNAME LOC
- ---------- -------------- -------------
- 10 ACCOUNTING NEW YORK
- 20 RESEARCH DALLAS
- 30 SALES CHICAGO
- 40 OPERATIONS BOSTON
- 2、shell脚本调用rman脚本
- #首先编辑RMAN脚本
- oracle@SZDB:~> more rman.rcv
- RUN {
- CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
- CONFIGURE BACKUP OPTIMIZATION ON;
- CONFIGURE CONTROLFILE AUTOBACKUP ON;
- CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/users/oracle/bak/%d_%F';
- ALLOCATE CHANNEL CH1 TYPE DISK MAXPIECESIZE=4G;
- ALLOCATE CHANNEL CH2 TYPE DISK MAXPIECESIZE=4G;
- SET LIMIT CHANNEL CH1 READRATE=10240;
- SET LIMIT CHANNEL CH1 KBYTES=4096000;
- SET LIMIT CHANNEL CH2 READRATE=10240;
- SET LIMIT CHANNEL CH2 KBYTES=4096000;
- CROSSCHECK ARCHIVELOG ALL;
- DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
- BACKUP
- DATABASE FORMAT '/users/oracle/bak/%d_FULL__%U';
- SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
- BACKUP ARCHIVELOG ALL FORMAT '/users/oracle/bak/%d_LF_%U' DELETE INPUT;
- DELETE NOPROMPT OBSOLETE;
- RELEASE CHANNEL CH1;
- RELEASE CHANNEL CH2;
- }
- #编辑shell脚本文件,在shell脚本内调用rman脚本
- oracle@SZDB:~> more rman_bak.sh
- #!/bin/bash
- # set environment variable
- if [ -f ~/.bashrc ]; then
- . ~/.bashrc
- fi
- export ORACLE_SID=CNMMBO
- $ORACLE_HOME/bin/rman target / cmdfile=/users/oracle/rman.rcv log=/users/oracle/bak/rman.log
- exit
- #授予脚本执行权限
- oracle@SZDB:~> chmod 775 rman_bak.sh
- #执行shell脚本
- oracle@SZDB:~> ./rman_bak.sh
二、嵌入sql语句及rman到shell脚本
- 1、直接将sql语句嵌入到shell脚本
- oracle@SZDB:~> more get_dept_2.sh
- #!/bin/bash
- # Author : Robinson Cheng
- # Blog : http://blog.csdn.net/robinson_0612
- # set environment variable
- if [ -f ~/.bashrc ]; then
- . ~/.bashrc
- fi
- export ORACLE_SID=CNMMBO
- sqlplus -S /nolog <<EOF #EOF在此表示当输入过程中碰到EOF后,整个sql脚本输入完毕
- connect scott/tiger
- spool /tmp/dept.lst
- set linesize 100 pagesize 80
- select * from dept;
- spool off;
- exit; #退出sqlplus 环境
- EOF
- exit #推出shell脚本
- #授予脚本执行权限
- oracle@SZDB:~> chmod u+x get_dept_2.sh
- #执行shell脚本
- oracle@SZDB:~> ./get_dept_2.sh
- DEPTNO DNAME LOC
- ---------- -------------- -------------
- 10 ACCOUNTING NEW YORK
- 20 RESEARCH DALLAS
- 30 SALES CHICAGO
- 40 OPERATIONS BOSTON
- 2、直接将sql语句嵌入到shell脚本(方式二,使用管道符号>代替spool来输出日志)
- oracle@SZDB:~> more get_dept_3.sh
- #!/bin/bash
- # set environment variable
- if [ -f ~/.bashrc ]; then
- . ~/.bashrc
- fi
- export ORACLE_SID=CNMMBO
- sqlplus -S /nolog 1>/users/oracle/dept.log 2>&1 <<EOF
- connect scott/tiger
- set linesize 80 pagesize 80
- select * from dept;
- exit;
- EOF
- cat /users/oracle/dept.log
- exit
- #另一种实现方式,将所有的sql语句输出来生成sql脚本后再调用
- oracle@SZDB:~> more get_dept_4.sh
- #!/bin/bash
- # set environment variable
- if [ -f ~/.bashrc ]; then
- . ~/.bashrc
- fi
- export ORACLE_SID=CNMMBO
- echo "conn scott/tiger
- select * from dept;
- exit;" >/users/oracle/get_dept.sql
- sqlplus -silent /nolog @get_dept.sql 1>/users/oracle/get_dept.log 2>&1
- cat get_dept.log
- exit
- 3、将rman脚本嵌入到shell脚本
- oracle@SZDB:~> more rman_bak_2.sh
- #!/bin/bash
- # set environment variable
- if [ -f ~/.bashrc ]; then
- . ~/.bashrc
- fi
- export ORACLE_SID=CNMMBO
- $ORACLE_HOME/bin/rman log=/users/oracle/bak/rman.log <<EOF
- connect target /
- RUN {
- CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
- CONFIGURE BACKUP OPTIMIZATION ON;
- CONFIGURE CONTROLFILE AUTOBACKUP ON;
- CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/users/oracle/bak/%d_%F';
- ALLOCATE CHANNEL CH1 TYPE DISK MAXPIECESIZE=4G;
- ALLOCATE CHANNEL CH2 TYPE DISK MAXPIECESIZE=4G;
- SET LIMIT CHANNEL CH1 READRATE=10240;
- SET LIMIT CHANNEL CH1 KBYTES=4096000;
- SET LIMIT CHANNEL CH2 READRATE=10240;
- SET LIMIT CHANNEL CH2 KBYTES=4096000;
- CROSSCHECK ARCHIVELOG ALL;
- DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
- BACKUP
- DATABASE FORMAT '/users/oracle/bak/%d_FULL__%U';
- SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
- BACKUP ARCHIVELOG ALL FORMAT '/users/oracle/bak/%d_LF_%U' DELETE INPUT;
- DELETE NOPROMPT OBSOLETE;
- RELEASE CHANNEL CH1;
- RELEASE CHANNEL CH2;
- }
- EXIT;
- EOF
- exit
- #授予脚本执行权限
- oracle@SZDB:~> chmod u+x rman_bak_2.sh
- #执行shell脚本
- oracle@SZDB:~> ./rman_bak_2.sh
- 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/Unix shell 脚本中调用SQL,RMAN脚本的更多相关文章
- Linux脚本中调用SQL,RMAN脚本
Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle的相关工作,也是DBA必不可 ...
- Shell脚本中调用另外一个脚本的方法
(转载): 在Linux平台上开发,经常会在console(控制台)上执行另外一个脚本文件,经常用的方法有:./my.sh 或 source my.sh 或 . my.sh:这三种方法有什么不同呢?我 ...
- shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)
fork ( /directory/script.sh) fork是最普通的, 就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本. 运行的时候开一个sub- ...
- 在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)——转载
原文链接:http://blog.chinaunix.net/uid-22548820-id-3181798.html fork ( /directory/script.sh) :如果shell中包含 ...
- 在shell脚本中调用sql语句
查询员工信息 -S:静默登录 [oracle@localhost shells]$ cat shell1.sh #!/bin/bash #查询员工信息 sqlplus -S /nolog <&l ...
- Linux/Unix shell sql 之间传递变量
灵活结合Linux/Unix Shell 与SQL 之间的变量传输,极大程度的提高了DBA的工作效率,本文针对Linux/Unix shell sql 之间传递变量给出几个简单的示例以供参考. Lin ...
- Linux/Unix shell 监控Oracle实例(monitor instance)
使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linu ...
- Linux/Unix shell 监控Oracle监听器(monitor listener)
使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linu ...
- Linux/Unix shell 监控Oracle告警日志(monitor alter log file)
使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linu ...
随机推荐
- 2013 ACM/ICPC Asia Regional Online —— Warmup
1003 Rotation Lock Puzzle 找出每一圈中的最大值即可 代码如下: #include<iostream> #include<stdio.h> #inclu ...
- cocos2d-x3.0环境搭建(基于win7以及mac)
流程概览: Windows平台 一.安装 Python与配置Python环境变量 二.安装Cocos2d-x,并创建项目 Mac平台 安装Cocos2d-x,并创建项目 具体操作: 一.安装Pytho ...
- Project Euler 102:Triangle containment 包含原点的三角形
Triangle containment Three distinct points are plotted at random on a Cartesian plane, for which -10 ...
- 546A. Soldier and Bananas
等差数列: 以k为首相,k为公差,w个数量的和与n的大小关系 输出max(sum-0,0) Java程序 import java.util.Scanner; public class A546 ...
- UML系列03之UML时序图
时序图介绍 时序图(Sequence Diagram),亦称为序列图或循序图,是一种UML行为图.时序图是用来描述系统内部是如何交互运作的,它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协 ...
- Android TabHost中Activity之间传递数据
例子1: TabHost tabhost = (TabHost) findViewById(android.R.id.tabhost); tabhost.setup(this.getLocalActi ...
- Android 闹钟设置
在Android中可以通过AlarmManager 来实现闹钟,AlarmManager类是专门用来设定在某个指定的时间去完成指定的事件.AlarmManager 提供了访问系统警报的服务,只要在程序 ...
- 第一次做的struts2与spring整合
参考:http://www.cnblogs.com/S-E-P/archive/2012/01/18/2325253.html 这篇文章说的关键就是“除了导入Struts2和Spring的核心库之外, ...
- 应用scikit-learn做文本分类
文本挖掘的paper没找到统一的benchmark,只好自己跑程序,走过路过的前辈如果知道20newsgroups或者其它好用的公共数据集的分类(最好要所有类分类结果,全部或取部分特征无所谓)麻烦留言 ...
- hdu 4565 So Easy!(矩阵+快速幂)
题目大意:就是给出a,b,n,m:让你求s(n); 解题思路:因为n很可能很大,所以一步一步的乘肯定会超时,我建议看代码之前,先看一下快速幂和矩阵快速幂,这样看起来就比较容易,这里我直接贴别人的推导, ...