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中設定了必要的環境變數;第二儘量所有的檔案都採用完全路徑方式,避免使用相對路徑。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-705463/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- crontab呼叫oracle的shell指令碼注意事項Oracle指令碼
- 【RMAN】RMAN備份恢復3 RMAN增量備份指令碼與crontab計劃任務指令碼
- 使用CRONTAB呼叫shell指令碼執行EXP指令碼
- 備份指令碼指令碼
- EXP的備份指令碼指令碼
- 【RMAN】RMAN備份恢復1 RMAN冷備指令碼與crontab計劃任務指令碼
- 【RMAN】RMAN備份恢復2 RMAN熱備指令碼與crontab計劃任務指令碼
- rman備份和增量備份指令碼指令碼
- ORACLE備份指令碼Oracle指令碼
- mysqldump 備份指令碼MySql指令碼
- rman 備份指令碼指令碼
- mysqldump備份指令碼MySql指令碼
- innobackupex備份指令碼指令碼
- SQLServer備份指令碼SQLServer指令碼
- SQL 備份指令碼SQL指令碼
- Mongodb 備份指令碼MongoDB指令碼
- rman備份指令碼指令碼
- oracle 備份指令碼Oracle指令碼
- mysql備份指令碼MySql指令碼
- 使用rman備份的指令碼指令碼
- 備份SCHEMA資訊的指令碼指令碼
- Rman備份的shell指令碼指令碼
- windows mysqldump備份指令碼WindowsMySql指令碼
- 自動備份指令碼指令碼
- mysql innobackupex備份指令碼MySql指令碼
- rman 全備份指令碼指令碼
- rman增量備份指令碼指令碼
- windows rman備份指令碼Windows指令碼
- Windows 快速備份指令碼Windows指令碼
- ORACLE日常備份指令碼Oracle指令碼
- RMAN常用備份指令碼指令碼
- Oracle 集中備份指令碼Oracle指令碼
- 生成熱備份指令碼指令碼
- 生成冷備份指令碼指令碼
- 備份指令碼--紀錄指令碼
- oracle RMAN備份指令碼Oracle指令碼
- oracle_備份指令碼Oracle指令碼
- Rman 定時備份crontab