實驗-shell執行資料庫命令.TXT

to_be_Dba發表於2013-06-25
今天來複習一下在shell中如何登陸oracle,並執行指令碼或命令。
我編了以下這個小程式,起名為test.txt用於修改表結構,並執行幾條輸出命令:
#!/bin/sh
sqlplus -s "scott/tiger"<alter table bymt  add sales_nm varchar2(6);
alter table binfo add sales_nm varchar2(6);
Set timing on --該設定可以使結果中顯示語句執行耗時
Set time on   --此設定沒有意義,因為無論是此檔案的日誌還是使用spool,都不顯示sqlplus的提示符
Set serveroutput on
select * from v\$instance; --此處用於說明在使用$符號時,需要前面加斜槓進行轉義,否則shell會將其看做是呼叫的變數
spool /u01/mig/TL/test.log --在shell指令碼中,只要用sqlplus登入了,也是可以開啟spool,將程式塊結果放入檔案中的
declare
  i_vc_code varchar2(2);
  i_vc_schema varchar2(100);
begin
  i_vc_code:='NZ';
  i_vc_schema:='NZNZ';
  dbms_output.put_line('CODE is:'||i_vc_code);
  dbms_lock.sleep(5);
  dbms_output.put_line('SCHEMA NAME is :'||i_vc_chema);
end;
/
@/u01/mig/TL/tian.txt --在此環境下,還可以執行一些子指令碼
spool off
呼叫此檔案,就可以執行sqlplus環境下的命令的。
[oracle@TSTDB TL]$ ./test.txt &
[1] 11076                                
[oracle@TSTDB TL]$
此處需要提一句,如果執行某個單獨的檔案,在檔案執行語句後面加 &就可以令其快速返回游標(後臺執行);
但如果像上面的程式那樣,存在巢狀,可能還沒來得及在執行該語句後再次按下回車,子程式已經開始執行了,這時候就無法後臺執行了。
若使用命令 nohup ./test.txt &
會將結果日誌記錄到nohup.out檔案中,並能夠迅速返回游標。

我們使用shell,一般都是處於兩個目的:
1)自動化
2)在我們期望執行的時間執行
要達到第二個目的,可以在系統設定crontab任務。
[oracle@TSTDB TL]$ crontab -e   --新增,用VI命令將需要設定的任務寫入檔案,所有使用者的定時任務放在/var/spool/cron中
[oracle@TSTDB TL]$ crontab -l   --檢視
20 18 * * * /u01/mig/TL/bsd_exe.txt >>nohup.out
[oracle@TSTDB TL]$ crontab -r   --刪除

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26451536/viewspace-764802/,如需轉載,請註明出處,否則將追究法律責任。

相關文章