天天看點

CRONTAB調用備份腳本時要注意環境變量的設定

EXP備份是DBA正常操作之一,尤其是10g以前的版本沒有EXPDP,所有的邏輯備份都是通過EXP來實作。而将EXP寫成SHELL腳本,使之可以調用也并沒有什麼特别之處。不過如果并非oracle使用者執行,而是需要CRONTAB自動允許,那麼備份的腳本就有一些要求了。

客戶環境使用RMAN CATALOG方式備份,而RMAN的CATALOG資料庫采用EXP進行邏輯備份。部署了一個每天7點運作的CRONTAB,調用執行EXP的SHELL。巡檢時發現這個腳本從未真正運作過。

/app/oracle10g> crontab -l

0 7 * * * /app/oracle10g/rman_catalog_dmp/exp_by_date.sh

/app/oracle10g/rman_catalog_dmp> more exp_by_date.sh

export ORACLE_SID=RMANDB

export ORACLE_BASE=/app/oracle10g

export ORACLE_HOME=$ORACLE_BASE/product/10.2.0

export NLS_LANG=American_America.ZHS16CGB231280

exp parfile=exp.par file=./rman_catalog.dmp log=./rman_catalog.log

由于是CRONTAB進行調用,是以不會使用oracle使用者的環境變量,這就需要在shell腳本中添加必要的環境變量的設定,這才能是的EXP指令可以正确的運作。腳本中雖然已經設定了一些環境變量,但是還是不夠的。

對于CRONTAB運作SHELL時出現的錯誤,可以通過使用者的mail來擷取錯誤資訊:

/app/oracle10g/rman_catalog_dmp> mail

From root@acap3 Thu Aug 18 07:00:01 EAT 2011

Received: (from root@localhost)

by acap3 (8.9.3 (PHNE_35950)/8.9.3) id HAA27754

for oracle; Thu, 18 Aug 2011 07:00:01 +0800 (EAT)

Date: Thu, 18 Aug 2011 07:00:01 +0800 (EAT)

From: root@acap3

Message-Id: <201108172300.HAA27754@acap3>

Subject: cron

/app/oracle10g/rman_catalog_dmp/exp_by_date.sh[5]: exp: not found.

*************************************************

Cron: The previous message is the standard output

and standard error of one of your crontab commands:

/app/oracle10g/rman_catalog_dmp/exp_by_date.sh

顯然導緻錯誤的原因是執行EXP指令時,在預設目錄下沒有找到EXP可執行指令,顯然腳本中漏設了PATH環境變量。

增加PATH=$ORACLE_HOME/bin環境變量後,再次測試發現,參數檔案找不到,仿照導出檔案和日志檔案的方式,将參數檔案設定為./exp.par,問題依舊。看來在CRONTAB中調用SHELL,應該設定絕對路徑,而不能設定相對路徑。

最終腳本修改為:

/app/oracle10g/rman_catalog_dmp> more /app/oracle10g/rman_catalog_dmp/exp_by_date.sh

export PATH=$ORACLE_HOME/bin:$PATH

DATE=`date +"%Y%m%d"`

exp parfile=/app/oracle10g/rman_catalog_dmp/exp.par file=/app/oracle10g/rman_catalog_dmp/rman_catalog_$DATE.dmp log=/app/oracle10g/rman_cat

alog_dmp/rman_catalog_$DATE.log

you have mail in /var/mail/oracle

利用CRONTAB來實作SHELL的自動調用,需要注意兩個問題,第一是否在SHELL中設定了必要的環境變量;第二盡量所有的檔案都采用完全路徑方式,避免使用相對路徑。

PS:我建了幾個oracle QQ群,歡迎資料庫愛好者加入。 Oracle專家QQ1群:60632593     Oracle專家QQ2群:60618621      Oracle專家QQ3群:23145225