分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle
的相关工作,也是DBA必不可少的技能之一。本文针对Linux/Unix shell脚本调用sql, rman 脚本给出了相关示例。
一、由shell脚本调用sql,rman脚本
、shell脚本调用sql脚本#首先编辑sql文件[email protected]:~> more dept.sqlconnect scott/tigerspool /tmp/dept.lstset linesize pagesize select * from dept;spool off;exit;#编辑shell脚本文件,在shell脚本内调用sql脚本[email protected]:~> more get_dept.sh#!/bin/bash# set environment variableif [ -f ~/.bashrc ]; then . ~/.bashrcfiexport ORACLE_SID=CNMMBOsqlplus -S /nolog @/users/oracle/dept.sql #注意此处执行sql脚本的方法 -S 表示以静默方式执行exit#授予脚本执行权限[email protected]:~> chmod get_dept.sh-->执行shell脚本[email protected]:~> ./get_dept.sh DEPTNO DNAME LOC---------- -------------- ------------- ACCOUNTING NEW YORK RESEARCH DALLAS SALES CHICAGO OPERATIONS BOSTON、shell脚本调用rman脚本#首先编辑RMAN脚本[email protected]:~> more rman.rcvRUN {CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 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=G;ALLOCATE CHANNEL CH2 TYPE DISK MAXPIECESIZE=G;SET LIMIT CHANNEL CH1 READRATE=;SET LIMIT CHANNEL CH1 KBYTES=;SET LIMIT CHANNEL CH2 READRATE=;SET LIMIT CHANNEL CH2 KBYTES=;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脚本[email protected]:~> more rman_bak.sh#!/bin/bash# set environment variableif [ -f ~/.bashrc ]; then . ~/.bashrcfiexport ORACLE_SID=CNMMBO$ORACLE_HOME/bin/rman target / cmdfile=/users/oracle/rman.rcv log=/users/oracle/bak/rman.logexit#授予脚本执行权限[email protected]:~> chmod rman_bak.sh#执行shell脚本[email protected]:~> ./rman_bak.sh
二、嵌入sql语句及rman到shell脚本
、直接将sql语句嵌入到shell脚本[email protected]:~> more get_dept_2.sh#!/bin/bash# Author : Robinson Cheng # Blog : http://blog.csdn.net/robinson_0612# set environment variableif [ -f ~/.bashrc ]; then . ~/.bashrcfiexport ORACLE_SID=CNMMBOsqlplus -S /nolog <<EOF #EOF在此表示当输入过程中碰到EOF后,整个sql脚本输入完毕connect scott/tigerspool /tmp/dept.lstset linesize pagesize select * from dept;spool off;exit; #退出sqlplus 环境EOFexit #推出shell脚本 #授予脚本执行权限[email protected]:~> chmod u+x get_dept_2.sh#执行shell脚本[email protected]:~> ./get_dept_2.sh DEPTNO DNAME LOC---------- -------------- ------------- ACCOUNTING NEW YORK RESEARCH DALLAS SALES CHICAGO OPERATIONS BOSTON、直接将sql语句嵌入到shell脚本(方式二,使用管道符号>代替spool来输出日志)[email protected]:~> more get_dept_3.sh#!/bin/bash# set environment variableif [ -f ~/.bashrc ]; then . ~/.bashrcfiexport ORACLE_SID=CNMMBOsqlplus -S /nolog >/users/oracle/dept.log >& <<EOFconnect scott/tigerset linesize pagesize select * from dept;exit;EOFcat /users/oracle/dept.logexit#另一种实现方式,将所有的sql语句输出来生成sql脚本后再调用[email protected]:~> more get_dept_4.sh#!/bin/bash# set environment variableif [ -f ~/.bashrc ]; then . ~/.bashrcfiexport ORACLE_SID=CNMMBOecho "conn scott/tiger select * from dept;exit;" >/users/oracle/get_dept.sqlsqlplus -silent /nolog @get_dept.sql >/users/oracle/get_dept.log >&cat get_dept.logexit、将rman脚本嵌入到shell脚本[email protected]:~> more rman_bak_2.sh#!/bin/bash# set environment variableif [ -f ~/.bashrc ]; then . ~/.bashrcfiexport ORACLE_SID=CNMMBO$ORACLE_HOME/bin/rman log=/users/oracle/bak/rman.log <<EOFconnect target /RUN {CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 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=G;ALLOCATE CHANNEL CH2 TYPE DISK MAXPIECESIZE=G;SET LIMIT CHANNEL CH1 READRATE=;SET LIMIT CHANNEL CH1 KBYTES=;SET LIMIT CHANNEL CH2 READRATE=;SET LIMIT CHANNEL CH2 KBYTES=;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;EOFexit #授予脚本执行权限[email protected]:~> chmod u+x rman_bak_2.sh #执行shell脚本 [email protected]:~> ./rman_bak_2.shRMAN> RMAN> > > > > > > > > > > > > > > > > > > > > RMAN> [email protected]:~>
三、更多参考
有关基于用户管理的备份和备份恢复的概念请参考
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体系结构)
给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
