首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Crontab 執行 Oracle 備份腳本失效?環境變數與絕對路徑設定完整指南

     編輯:Oracle 資料庫基礎

問題場景

客戶環境使用 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.

根因

  1. 缺少 PATH 環境變數: Crontab 不載入使用者的 .profile/.bash_profile,系統找不到 exp 執行檔
  2. 相對路徑失效: ./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\"` 產生唯一檔名

Crontab 部署最佳實務

  1. 腳本內完整宣告所有必要環境變數(ORACLE_SID, ORACLE_HOME, PATH, NLS_LANG, LD_LIBRARY_PATH 等)
  2. 所有檔案路徑(參數檔、匯出檔、日誌檔)一律使用絕對路徑
  3. 腳本開頭加入 #!/bin/bash 或 #!/bin/ksh 指定解譯器
  4. 測試階段先手動執行腳本驗證,再加入 Crontab
  5. 錯誤訊息導向日誌檔:0 7 * * * /path/script.sh >> /path/script.log 2>&1

總結

Crontab 執行環境極度精簡,Oracle 相關腳本必須自行載入完整環境變數並使用絕對路徑,才能確保排程穩定執行。此原則同樣適用於 RMAN、SQL*Plus、Data Pump 等所有 Oracle 命令列工具。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved