手動備份繁瑕且易疏漏,本文提供一套完整的 Shell 腳本方案,實現 Oracle 資料庫在 UNIX 系統上的全自動備份流程:每晚 23:00 執行 Export 導出,凌晨 02:00 寫入磁帶,凌晨 04:00 透過 FTP 傳輸至異地備份主機。
ORACLE_HOME=$ORACLE_HOME; export ORACLE_HOME ORACLE_SID=ora73; export ORACLE_SID ORACLE_TERM=sun; export ORACLE_TERM LD_LIBRARY_PATH=$ORACLE_HOME/lib; export LD_LIBRARY_PATH ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data; export ORA_NLS33 PATH=.:/usr/ccs/bin:/usr/ucb:$ORACLE_HOME/bin:$PATH; export PATH DISPLAY=host1:0; export DISPLAY NLS_LANG=american_america.zhs16cgb231280; export NLS_LANG
#!/bin/sh
. $ORACLE_HOME/ora_env # 載入環境變數
rq=`date +%m%d` # 取得 MMDD 格式日期
rm -rf /backup/* # 清空備份目錄
exp test/test file=/backup/xx${rq}.dmp log=/backup/xx${rq}.log
說明:以用戶模式導出 test 用戶,檔名含日期區分,日誌同目錄。
#!/bin/sh tar rvf /dev/rmt/0n /backup/
參數解析:r追加不覆蓋、v顯示進度、f指定裝置、n不倒帶。/dev/rmt/0為第一台磁帶機。
machine host2 login oracle password oracle macdef init bin lcd /backup cd /pub mput * bye
權限設定:chmod 600 .netrc,僅擁有者可讀寫,確保密碼安全。
/pub 目錄接收檔案。以 Oracle 用戶編輯 crontab -e,寫入:
0 23 * * * /oracle/ora_backup # 每日 23:00 導出 0 2 * * * /oracle/tar_backup # 每日 02:00 寫磁帶 0 4 * * * ftp -i host2 # 每日 04:00 異地傳輸
確保 job_queue_processes 參數非零,否則排程不會自動執行。
/backup 目錄舊檔案。sys.dba_jobs 的 failures 欄位,失敗 16 次或間隔超過設定值會標記為中斷,需手工排查後用 dbms_job.run(job_no) 重跑。部署完成後,系統將每日自動完成導出、磁帶歸檔、異地傳輸三重保障,DBA 僅需定期換帶與清理,大幅降低運維負擔並提升資料安全等級。