本文示範如何在 Linux 上透過 Shell 腳本實現 Oracle 資料庫的全自動冷備份(關機備份),並自動產生帶時間戳的壓縮備份檔,同時保存關鍵資料庫參數供日後恢復參考。
database.script在 SQL*Plus 中執行,將關鍵中繼資料匯出至 database.parm,並動態產生檔案複製腳本 backup.sh。
spool database.parm
select * from v$parameter;
select * from props$;
select * from v$datafile;
select * from v$controlfile;
select * from v$logfile;
spool off
spool backup.sh
select 'cp '||name||' backup/' from v$datafile;
select 'cp '||name||' backup/' from v$controlfile;
select 'cp '||member||' backup/' from v$logfile;
spool off
shutdown immediate
exit
alterbackup.sh過濾 backup.sh 中的有效 cp 指令,賦予執行權限並執行,同時補充參數檔備份。
echo "開始複製資料檔、控制檔、日誌檔至 backup 目錄"
cat backup.sh | grep '^cp /' > c.sh
rm backup.sh
mv c.sh backup.sh
chmod +x backup.sh
. backup.sh
# 手動加入參數檔備份(路徑依實際安裝調整)
cp /u01/app/oracle/admin/orcl/pfile/initorcl.ora backup/initorcl.ora
startup.scriptspool StartStatus.readme
startup
spool off
exit
gzip.shthedate=`date +%Y.%m.%d.%H.%M`
outfile=$thedate
tar -cvf backup${outfile}.tar backup/*
gzip backup${outfile}.tar
rm -rf backup
begin.shecho "開始自動物理備份..."
mkdir backup
sqlplus / as sysdba @database.script
. alterbackup.sh
sqlplus / as sysdba @startup.script
. gzip.sh
echo "備份完成,請檢查 backup.tar.gz"
chmod +x *.sh. begin.sh 驗證流程無誤。0 2 * * * /home/oracle/scripts/begin.sh >> /home/oracle/logs/backup_`date +\%Y\%m\%d`.log 2>&1database.parm 保存了控制檔、資料檔、日誌檔路徑等關鍵資訊,異地備份時務必一同保存。ls -l 確認實體路徑後寫入 alterbackup.sh。