近期有 Linux 系統管理員諮詢:公司部署 Oracle 10G 資料庫,使用 Data Pump 匯出備份檔案,需每日複製至指定目錄,並希望檔名包含星期數字(如 1backup.dmp 代表週一),以實現一週輪替覆蓋,避免硬碟空間無限增長。
雖然 Oracle 內建備份策略已足夠完善,但若確有此需求,仍可透過 Shell 變數達成。本文詳細說明實作方法與常見陷阱。
使用時間變數命名時,必須釐清「檔案建立時間」與「複製操作時間」的差異。假設備份檔於週一產生,週二才複製,檔名應以週一(建立時間)為準,因為這才真實反映資料庫備份時間點。
複製並重新命名的基本指令:
cp mydb.log "$(date +%w)"mydb.log
此指令將 mydb.log 複製至當前目錄,並在檔名前加上星期數字(0-6,0 代表週日)。
$(date +%w) 取得的是「執行指令當下的系統時間」,非檔案建立時間。若需以檔案建立時間命名,需改用 stat 或 find 取得檔案時間屬性。bash -n 或實測驗證。%(w) vs %w:在 cp 指令中兩者效果相同,但 echo $(date +%w) 等通用語法要求加上 + 號。為提高腳本可移植性,建議統一使用 $(date +%w) 格式。echo 測試變數輸出不確定變數格式時,可先用 echo 驗證:
echo $(date +%w)
此指令會輸出當前星期數字。注意:
$ 符號,否則系統視為字面字串。+ 號,否則會報錯「無效參數」。
掌握 echo 驗證技巧,可避免在正式備份腳本中出現語法錯誤,確保自動化流程穩定執行。