大型商業應用中,資料異地容災備份至關重要。本文介紹一套經實測穩定的自動化方案:利用 Oracle exp 工具進行完整邏輯備份,配合 .netrc 實現 FTP 免互動傳輸,再透過 crontab 定時排程,達成「一主一備」Sun Solaris 環境下的異地自動備份。
將資料庫物件導出為二進制轉儲檔 (.dmp)。支援使用者模式、資料表模式、完整資料庫模式;備份類型分完全、累加、增量。本文採完整資料庫模式的完全備份。基本語法:
exp userid=username/password file=dump_file_path.dmp log=log_file_path.log
userid 必須為第一個參數,file 指定輸出路徑與檔名。
標準 FTP 需互動輸入 IP、帳號、密碼。但 FTP 啟動時會自動讀取使用者家目錄下的 .netrc 檔案(檔名必須為 .netrc,權限 600),執行其中定義的巨集命令。常用選項:-i 關閉多檔傳輸提示,-n 禁止自動登入(配合 .netrc 使用)。
cron 為常駐守護進程,讀取 /var/spool/cron/crontabs/ 下以使用者命名的檔案。每行 6 欄位:分 時 日 月 週 命令。* 代表所有值,- 表示範圍。使用者權限由 cron.allow / cron.deny 控制。
環境:資料庫擁有者 oracle,連線帳號 mistest/test,備份目錄 /export/home/oracle/backup。
#!/bin/sh
ORACLE_HOME=/export/home/oracle/815; export ORACLE_HOME
ORACLE_SID=ora815; export ORACLE_SID
# 清空舊備份
rm /export/home/oracle/backup/*
# 取得日期變數 (MMDD)
rq=`date +%m%d`
# 執行完整匯出
/export/home/oracle/815/bin/exp mistest/test file=/export/home/oracle/backup/exp${rq}.dmp log=/export/home/oracle/backup/exp${rq}.log
賦予執行權限:chmod +x testbackup。
備份主機目錄:/database/oradata/newbackup。本地 oracle 家目錄建立 .netrc:
machine 192.168.1.100
login oraclebk
password testbk2
macdef init
bin
lcd /export/home/oracle/backup
cd /database/oradata/backup
mput *
bye
說明:前三行登入備份主機,macdef init 定義自動執行巨集,bin 二進制模式,lcd/cd 切換本地/遠端目錄,mput * 上傳所有檔案。設定權限:chmod 600 .netrc。
以 oracle 使用者執行 crontab -e:
10 23 * * * /export/home/oracle/testbackup
30 23 * * * ftp -i 192.168.1.100
每日 23:10 執行備份,23:30 啟動 FTP 傳輸。編輯完成可用 crontab -l 驗證,並檢查 /var/spool/cron/crontabs/oracle 是否生成。
此方案以標準工具鏈實現異地自動備份,降低人工操作風險,確保本地故障時資料可靠可恢復。關鍵在於 .netrc 免互動 FTP 與 crontab 定時觸發的無縫串聯。