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 Oracle_SID=RMANDB
- export Oracle_BASE=/app/Oracle10g
- export Oracle_HOME=$Oracle_BASE/product/10.2.0
- export NLS_LANG=American_America.ZHS16CGB231280
- 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中設置了必要的環境變量;第二盡量所有的文件都采用完全路徑方式,避免使用相對路徑。
關於CRONTAB調用備份腳本時要注意環境變量的設置的相關知識就介紹到這裡了,希望本次的介紹能夠對您有所收獲!