邏輯備份通過Oracle Data Pump工具實現,將數據庫對象(表、視圖、存儲過程等)導出為邏輯格式(.dmp文件),適用于跨平臺遷移或選擇性恢復。
常用命令示例:
expdp system/password@ORACLE_SID directory=DPUMP_DIR dumpfile=full_backup.dmp logfile=expdp_full.log full=y
directory
:需提前創建的邏輯目錄對象,對應Linux物理路徑;full=y
:表示全庫備份)expdp system/password@ORACLE_SID directory=DPUMP_DIR dumpfile=inc_backup.dmp logfile=expdp_inc.log incremental=y
impdp system/password@ORACLE_SID directory=DPUMP_DIR dumpfile=full_backup.dmp logfile=impdp_restore.log full=y
注意事項:
create directory DPUMP_DIR as '/u01/app/oracle/dpump';
);RMAN(Recovery Manager)是Oracle推薦的物理備份工具,支持全量備份、增量備份(Level 0/1)、歸檔日志備份,并能實現壓縮、加密、增量合并等功能,是生產環境首選。
rman target /
BACKUP DATABASE PLUS ARCHIVELOG;
PLUS ARCHIVELOG
:備份數據庫后自動備份未歸檔的歸檔日志,確保備份一致性)BACKUP INCREMENTAL LEVEL 1 DATABASE;
全量備份腳本(full_backup.sh):
#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/19.10.0/db_home
export ORACLE_SID=orcl
export BACKUP_DIR=/data/ora_backup
LOG_FILE=$BACKUP_DIR/rman_full_$(date +%Y%m%d).log
su - oracle -c "$ORACLE_HOME/bin/rman target / <<EOF > $LOG_FILE 2>&1
RUN {
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS; -- 保留7天內的備份
ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
BACKUP DATABASE PLUS ARCHIVELOG FORMAT '$BACKUP_DIR/full_%d_%T_%U.bak';
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
BACKUP ARCHIVELOG ALL DELETE INPUT; -- 備份并刪除已備份的歸檔日志
DELETE NOPROMPT OBSOLETE; -- 刪除過期備份
RELEASE CHANNEL c1;
}
EOF"
if grep -q "Finished backup" $LOG_FILE; then
echo "Full backup succeeded: $LOG_FILE"
else
echo "Full backup failed. Check log: $LOG_FILE"
fi
增量備份腳本(inc_backup.sh):
#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/19.10.0/db_home
export ORACLE_SID=orcl
export BACKUP_DIR=/data/ora_backup
LOG_FILE=$BACKUP_DIR/rman_inc_$(date +%Y%m%d).log
su - oracle -c "$ORACLE_HOME/bin/rman target / <<EOF > $LOG_FILE 2>&1
RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
BACKUP INCREMENTAL LEVEL 1 DATABASE FORMAT '$BACKUP_DIR/inc_%d_%T_%U.bak';
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
BACKUP ARCHIVELOG ALL DELETE INPUT;
RELEASE CHANNEL c1;
}
EOF"
if grep -q "Finished backup" $LOG_FILE; then
echo "Incremental backup succeeded: $LOG_FILE"
else
echo "Incremental backup failed. Check log: $LOG_FILE"
fi
crontab -e
添加定時任務,例如每天凌晨2點執行全量備份、8點執行增量備份:0 2 * * * /bin/bash /home/oracle/scripts/full_backup.sh
0 8 * * * /bin/bash /home/oracle/scripts/inc_backup.sh
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
),自動刪除過期備份(DELETE NOPROMPT OBSOLETE;
)。冷備份是在數據庫關閉狀態下,直接復制數據文件、控制文件、重做日志文件的物理備份,適用于災難恢復。
操作步驟:
sqlplus / as sysdba
→ SHUTDOWN IMMEDIATE;
cp -r /u01/app/oracle/oradata/orcl /backup/orcl_cold_$(date +%Y%m%d)
STARTUP;
注意事項:
RESTORE DATABASE; RECOVER DATABASE;
)。chown -R oracle:oinstall /data/ora_backup
);df -h
檢查備份目錄所在磁盤空間,及時清理過期備份;rman_full_20250930.log
)定位錯誤(如通道分配失敗、文件無法訪問)。