Linux/Unix shell 指令碼中調用SQL,RMAN指令碼

來源:互聯網
上載者:User

        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.sqlconnect scott/tigerspool /tmp/dept.lstset linesize 100 pagesize 80select * from dept;spool off;exit;#編輯shell指令檔,在shell指令碼內調用sql指令碼oracle@SZDB:~> 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#授予指令碼執行許可權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     BOSTON2、shell指令碼調用rman指令碼#首先編輯RMAN指令碼oracle@SZDB:~> more rman.rcvRUN {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 variableif [ -f ~/.bashrc ]; then        . ~/.bashrcfiexport ORACLE_SID=CNMMBO$ORACLE_HOME/bin/rman target / cmdfile=/users/oracle/rman.rcv log=/users/oracle/bak/rman.logexit#授予指令碼執行許可權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 variableif [ -f ~/.bashrc ]; then        . ~/.bashrcfiexport ORACLE_SID=CNMMBOsqlplus -S /nolog  <<EOF     #EOF在此表示當輸入過程中碰到EOF後,整個sql指令碼輸入完畢connect scott/tigerspool /tmp/dept.lstset linesize 100 pagesize 80select * from dept;spool off;exit;                       #退出sqlplus 環境EOFexit                        #推出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     BOSTON2、直接將sql語句嵌入到shell指令碼(方式二,使用管道符號>代替spool來輸出日誌)oracle@SZDB:~> more get_dept_3.sh#!/bin/bash# set environment variableif [ -f ~/.bashrc ]; then        . ~/.bashrcfiexport ORACLE_SID=CNMMBOsqlplus -S /nolog 1>/users/oracle/dept.log 2>&1 <<EOFconnect scott/tigerset linesize 80 pagesize 80select * from dept;exit;EOFcat /users/oracle/dept.logexit#另一種實現方式,將所有的sql語句輸出來產生sql指令碼後再調用oracle@SZDB:~> 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 1>/users/oracle/get_dept.log 2>&1cat get_dept.logexit3、將rman指令碼嵌入到shell指令碼oracle@SZDB:~> 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 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;EOFexit        #授予指令碼執行許可權oracle@SZDB:~> chmod u+x rman_bak_2.sh   #執行shell指令碼 oracle@SZDB:~> ./rman_bak_2.shRMAN> 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體繫結構)       

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.