水煮oracle41----shell指令碼中對oracle的sql*plus和rman工具的指令碼呼叫和嵌入
Linux/Unix shell指令碼中呼叫或執行SQL,RMAN 等為自動化作業以及多次反覆執行提供了極大的便利,因此透過Linux/Unix shell來完成Oracle
的相關工作,也是DBA必不可少的技能之一。本文針對Linux/Unix shell指令碼呼叫sql, rman 指令碼給出了相關示例。
的相關工作,也是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後,整個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 <
- 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 <
- 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:~>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-1349454/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 分享Oracle Rman的備份指令碼Oracle指令碼
- FastScripts for Mac(指令碼呼叫工具)ASTMac指令碼
- 運維工作中的指令碼化和工具化運維指令碼
- 如何呼叫python中的shell指令碼?Python指令碼
- rman 備份指令碼指令碼
- oracle資料庫使用rman備份指令碼Oracle資料庫指令碼
- oracle_ray.sh 常用的oracle sql功能指令碼OracleSQL指令碼
- 主題 2 Shell工具和指令碼指令碼
- 使用Python和Java呼叫Shell指令碼時的死鎖陷阱PythonJava指令碼
- DSC:數倉SQL指令碼遷移的神奇工具SQL指令碼
- SQL 的後計算指令碼SQL指令碼
- 史上最全近百條Oracle DBA日常維護SQL指令碼指令OracleSQL指令碼
- Oracle 建立表空間和使用者指令碼Oracle指令碼
- oracle建庫指令碼Oracle指令碼
- ORACLE備份指令碼Oracle指令碼
- shell指令碼中的運算子和條件判斷指令碼
- 在Linux中,如何檢測和防止SQL隱碼攻擊和跨站指令碼(XSS)攻擊?LinuxSQL指令碼
- java 自動升級sql指令碼 flyway 工具JavaSQL指令碼
- Linux上執行記憶體中的指令碼和程式Linux記憶體指令碼
- mybatis執行sql指令碼MyBatisSQL指令碼
- SQL SERVER巡檢指令碼SQLServer指令碼
- awk命令和指令碼的編寫啟蒙指令碼
- shell的引數和指令碼流程改進指令碼
- Redis篇:事務和lua指令碼的使用Redis指令碼
- 介面測試(apipost、jmeter和python指令碼)——測試工具APIJMeterPython指令碼
- ORACLE NBU調取oracle rman指令碼備份歸檔不自動刪除歸檔Oracle指令碼
- linux shell指令碼中 =~ 的作用Linux指令碼
- Redis中Lua指令碼的使用和設定超時坍淑Redis指令碼
- [20231025]完善tpt的trans.sql指令碼.txtSQL指令碼
- [20220823]完善tpt的ashtop.sql指令碼.txtSQL指令碼
- Python 指令碼中呼叫 Java 程式時 Classpath 錯誤Python指令碼Java
- catalog.sql指令碼介紹SQL指令碼
- sql_trace相關指令碼SQL指令碼
- Java 嵌入指令碼快速解析多層 jsonJava指令碼JSON
- Linux命令和shell指令碼學習Linux指令碼
- shell和bash指令碼命令學習指令碼
- 呼叫中心資料入庫指令碼指令碼
- weblogic指令碼工具WLST(1)Web指令碼
- 如何使用SHC對Shell指令碼進行封裝和原始碼隱藏指令碼封裝原始碼