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 ...
随机推荐
- 编程实现Linux下的ls -l
头文件 #ifndef __FUNC_H__ #define __FUNC_H__ #include <stdio.h> #include <stdlib.h> #includ ...
- Oracle客户端安装及配置
Oracle客户端安装及配置 1.安装orcale客户端(Oracle_client_10 )选择inst...方式安装(不是管理员方式) 2.在安装路径下新建目录network\admin 然后新建 ...
- web.xml配置bug之提示The content of element type "web-app" must match "(icon?,display- name?,description?,distributable?,
错误:配置web.xml时,出现红色叉叉,提示 The content of element type "web-app" must match "(icon?,disp ...
- ubuntu 12.04安装vncserver
1.安装桌面 apt-get install ubuntu-desktop 2.安装vncserver apt-get install vnc4server 3.设置vncserver密码 vncpa ...
- R语言---热图的制作
>install.packages("gplots") > library("gplots")> p <- data.frame(rea ...
- HDU 4638 Group 树状数组 + 思路
实际上就是问这个区间编号连续的段的个数,假如一个编号连续的段有(a+b)个人,我把他们分在同一组能得到的分值为(a+b)^2,而把他们分成人数为a和b的两组的话,得到的分值就是a^2+b^2,显然(a ...
- Linux 下sleep()函数
调试程序发现起了一个子线程后,主线程上的sleep不生效了,看到这才明白... — Function: unsigned int sleep (unsigned int seconds) The sl ...
- shell脚本实现 视频格式转换 ffmpeg 实现视频转换
#!/bin/bash original=$1 echo $original # check whether file is exist # if $original de chang du wei ...
- C#图片切割、图片压缩、缩略图生成
C#图片切割.图片压缩.缩略图生成的实现代码 /// 图片切割函数 /// </summary> /// <param name="sourceFile"&g ...
- cdoj 1342 郭大侠与甲铁城 树状数组+离线
郭大侠与甲铁城 Time Limit: 1500/800MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit St ...