客戶環境使用 RMAN Catalog 資料庫,以 EXP 進行邏輯備份。部署每日 07:00 的 Crontab 排程,呼叫 Shell 腳本 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
mail 查看)/app/Oracle10g/rman_catalog_dmp/exp_by_date.sh[5]: exp: not found.
.profile/.bash_profile,系統找不到 exp 執行檔./exp.par、./rman_catalog.dmp 在 Crontab 執行目錄下不存在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_catalog_dmp/rman_catalog_$DATE.log
| 問題 | 解決方案 |
|---|---|
| 找不到 exp 指令 | 加入 export PATH=$ORACLE_HOME/bin:$PATH |
| 參數檔/輸出檔路徑錯誤 | 所有檔案路徑改為絕對路徑 |
| 日期動態命名 | 使用 DATE=`date +\"%Y%m%d\"` 產生唯一檔名 |
#!/bin/bash 或 #!/bin/ksh 指定解譯器0 7 * * * /path/script.sh >> /path/script.log 2>&1Crontab 執行環境極度精簡,Oracle 相關腳本必須自行載入完整環境變數並使用絕對路徑,才能確保排程穩定執行。此原則同樣適用於 RMAN、SQL*Plus、Data Pump 等所有 Oracle 命令列工具。