Linux/Unix shell 脚本中调用SQL,RMAN脚本

简介:         Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle的相关工作,也是DBA必不可少的技能之一。

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


三、更多参考

基于用管理的备份备份请参

    Oracle 冷备份

    Oracle 热备份

    Oracle 备份恢复概念

    Oracle 实例恢复

    Oracle 基于用户管理恢复的处理(详细描述了介及其)

    SYSTEM 表空间管理及备份恢复

    SYSAUX表空间管理及恢复

   Oracle 基于备份控制文件的恢复(unsing backup controlfile)

 

RMAN的备份复与管理请参

    RMAN 概述及其体系结构

    RMAN 配置、监控与管理

    RMAN 备份详解

    RMAN 还原与恢复

    RMAN catalog 的创建和使用

    基于catalog 创建RMAN存储脚本

    基于catalog 的RMAN 备份与恢复

    RMAN 备份困惑(使用plus archivelog)

 

ORACLE体系结构请参

    Oracle 表空间与数据文件

    Oracle 密码文件

    Oracle 参数文件

    Oracle 联机重做日志文件(ONLINE LOG FILE)

    Oracle 控制文件(CONTROLFILE)

    Oracle 归档日志

    Oracle 回滚(ROLLBACK)和撤销(UNDO)

    Oracle 数据库实例启动关闭过程

    Oracle 10g SGA 的自动化管理

    Oracle 实例和Oracle数据库(Oracle体系结构)       

目录
相关文章
|
19天前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
72 1
|
22天前
|
Linux Shell Python
Linux执行Python脚本
Linux执行Python脚本
26 1
|
2月前
|
存储 安全 Linux
|
28天前
|
存储 Shell Linux
【Shell 命令集合 网络通讯 】Linux 显示Unix-to-Unix Copy (UUCP) 系统的状态信息 uustat命令 使用指南
【Shell 命令集合 网络通讯 】Linux 显示Unix-to-Unix Copy (UUCP) 系统的状态信息 uustat命令 使用指南
26 0
|
18天前
|
Ubuntu Unix Linux
【Linux/Ubuntu】Linux/Ubuntu运行python脚本
【Linux/Ubuntu】Linux/Ubuntu运行python脚本
|
18天前
|
Shell Linux
Linux的shell入门教程shell脚本入门教程
Linux的shell入门教程shell脚本入门教程
15 0
|
19天前
|
Linux Shell
Linux脚本获取输入参数判断文件还是文件路径
Linux脚本获取输入参数判断文件还是文件路径
12 4
|
23天前
|
Linux Shell 调度
linux脚本任务调度
Linux的`crontab`用于计划任务,按照预设时间执行脚本或命令。步骤包括:1) 创建并赋予执行权限的脚本,如`backup.sh`;2) 使用`crontab -e`编辑任务列表;3) 添加cron表达式(如`0 1 * * * /path/to/backup.sh`,表示每天凌晨1点执行脚本);4) 保存并启动/检查cron服务。cron表达式包含分钟、小时、日期、月份和周几字段。根据需求调整表达式以满足不同任务需求。
12 3
|
23天前
|
运维 监控 Linux
linux脚本自动化运维任务
Linux自动化运维通过脚本提升效率,涵盖服务管理(启停服务、异常恢复)、系统监控(资源警报)、日志管理(清理分析)、备份恢复、补丁更新、自动化部署(如Ansible)、网络管理、定时任务(cron)和故障排查。结合shell、Python及工具,形成高效运维体系。
20 3
|
1月前
|
Oracle Ubuntu Unix
Unix与Linux区别
Unix: Unix是一个操作系统家族的名称,最早由贝尔实验室(Bell Labs)的肖像电机公司(AT&T)开发。最早的Unix版本是在1969年创建的。 Linux: Linux是由芬兰计算机科学家Linus Torvalds在1991年创建的。它是作为一个免费、开放源代码的Unix克隆而开始的。
19 1