Linux指令碼中呼叫SQL,RMAN指令碼

2022-06-18 19:54:12 字數 4360 閱讀 2842

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 *fromdept;  

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   

#編輯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 :  

# 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 *fromdept;  

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 *fromdept;  

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 *fromdept;  

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 run   

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

shell指令碼中呼叫其他指令碼

目前來說有三種方法 1.指令碼絕對路徑 這個方式是最普通的,底層呼叫的是fork實現,執行的時候開乙個子shell執行呼叫的指令碼,子shell執行的時候,父shell還在 子shell執行完畢後返回父shell,子shell從父shell繼承環境變數,但是子shell中的環境變數不會帶回父shel...

使用system()函式呼叫Linux指令碼

system 函式在函式庫中,通過他可以呼叫linux中的指令碼。具體使用可以用 man system來看。這個函式就乙個引數,就是你要執行的命令的字串。比如,呼叫的指令碼位於 home usr joker test.sh,那麼就可以這樣在c c 中呼叫system home usr joker t...

使用system()函式呼叫Linux指令碼

system 函式在函式庫中,通過他可以呼叫linux中的指令碼。具體使用可以用 man system來看。這個函式就乙個引數,就是你要執行的命令的字串。比如,呼叫的指令碼位於 home usr joker test.sh,那麼就可以這樣在c c 中呼叫system home usr joker t...