自動備份腳本需要訪問Oracle的環境變量(如ORACLE_HOME
、ORACLE_SID
),需先為Oracle用戶(通常為oracle
)配置這些變量。
編輯Oracle用戶的~/.bash_profile
文件(或~/.bashrc
),添加以下內容(根據實際安裝路徑調整):
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 # Oracle安裝目錄
export ORACLE_SID=orcl # 數據庫實例名
export PATH=$ORACLE_HOME/bin:$PATH # 將Oracle bin目錄加入PATH
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 # 設置字符集(可選)
保存后執行source ~/.bash_profile
使變量生效。
選擇物理備份(RMAN)或邏輯備份(expdp),以下提供兩種方案的腳本示例:
RMAN是Oracle官方推薦的物理備份工具,支持全量、增量備份及歸檔日志備份,恢復可靠性高。
創建腳本/home/oracle/scripts/rman_backup.sh
,內容如下:
#!/bin/bash
# 設置備份目錄(需提前創建并授權)
BACKUP_DIR=/backup/oracle
mkdir -p $BACKUP_DIR
chown -R oracle:oinstall $BACKUP_DIR
chmod 700 $BACKUP_DIR
# 加載Oracle環境變量
source /home/oracle/.bash_profile
# 生成帶日期的備份文件名
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE="$BACKUP_DIR/rman_backup_$DATE.log"
DUMP_FILE="$BACKUP_DIR/full_backup_$DATE.dmp"
# 執行RMAN備份(全量+歸檔日志)
rman target / <<EOF >> $LOG_FILE 2>&1
run {
allocate channel ch1 type disk;
backup database plus archivelog format '$BACKUP_DIR/full_%U.dmp';
release channel ch1;
}
exit;
EOF
# 檢查備份是否成功
if [ $? -eq 0 ]; then
echo "RMAN備份成功,日志文件:$LOG_FILE" | mail -s "Oracle RMAN Backup Success" admin@example.com # 可選:發送郵件通知
else
echo "RMAN備份失敗,請檢查日志:$LOG_FILE" | mail -s "Oracle RMAN Backup Failed" admin@example.com # 可選:發送郵件通知
fi
說明:
backup database plus archivelog
:備份數據庫及歸檔日志(需數據庫處于歸檔模式,可通過SQL> archive log list
確認);mail
命令發送通知(需安裝mailutils
包)。expdp是Oracle的邏輯備份工具,適合導出特定schema或表,備份文件為二進制格式(.dmp)。
創建腳本/home/oracle/scripts/expdp_backup.sh
,內容如下:
#!/bin/bash
# 設置備份目錄(需提前在Oracle中創建DIRECTORY對象)
BACKUP_DIR=/backup/oracle/expdp
mkdir -p $BACKUP_DIR
chown -R oracle:oinstall $BACKUP_DIR
chmod 700 $BACKUP_DIR
# 加載Oracle環境變量
source /home/oracle/.bash_profile
# 生成帶日期的備份文件名
DATE=$(date +%Y%m%d)
DUMP_FILE="$BACKUP_DIR/expdp_$DATE.dmp"
LOG_FILE="$BACKUP_DIR/expdp_$DATE.log"
# 執行expdp備份(全庫導出)
expdp system/password@orcl schemas=SCOTT directory=DATA_PUMP_DIR dumpfile=$DUMP_FILE logfile=$LOG_FILE parallel=4
# 清理7天前的舊備份(避免占用過多空間)
find $BACKUP_DIR -name "expdp_*.dmp" -mtime +7 -exec rm -f {} \;
find $BACKUP_DIR -name "expdp_*.log" -mtime +7 -exec rm -f {} \;
說明:
directory=DATA_PUMP_DIR
:需提前在Oracle中創建(SQL> create directory DATA_PUMP_DIR as '/backup/oracle/expdp';
);parallel=4
:并行導出提高速度(根據服務器性能調整);find
命令:自動清理7天前的舊備份,節省存儲空間。備份腳本需具備可執行權限,執行以下命令:
chmod +x /home/oracle/scripts/rman_backup.sh
chmod +x /home/oracle/scripts/expdp_backup.sh
使用crontab
設置定時任務,讓腳本定期自動執行。
編輯Oracle用戶的cron表:
crontab -e
添加以下內容(以每天凌晨2點執行RMAN備份為例):
# 每天凌晨2點執行RMAN備份
0 2 * * * /home/oracle/scripts/rman_backup.sh
# 每周六凌晨3點執行expdp邏輯備份(可選)
0 3 * * 6 /home/oracle/scripts/expdp_backup.sh
說明:
0 2 * * *
:表示每天凌晨2點執行;* * * * *
分別代表分鐘、小時、日、月、星期(0-6,0為周日);/home/oracle/scripts/rman_backup.sh
,檢查備份目錄是否生成.dmp
文件及日志文件;grep CRON /var/log/syslog
查看cron任務執行記錄,確認定時任務是否正常運行;rman target / restore database
驗證RMAN備份)。SQL> alter system set log_archive_dest_1='location=/u01/archivelog';
設置歸檔路徑;find
命令),避免磁盤空間耗盡;chown -R oracle:oinstall /backup/oracle
);