逻辑备份通过Oracle Data Pump工具实现,将数据库对象(表、视图、存储过程等)导出为逻辑格式(.dmp文件),适用于跨平台迁移或选择性恢复。
常用命令示例:
expdp system/password@ORACLE_SID directory=DPUMP_DIR dumpfile=full_backup.dmp logfile=expdp_full.log full=ydirectory:需提前创建的逻辑目录对象,对应Linux物理路径;full=y:表示全库备份)expdp system/password@ORACLE_SID directory=DPUMP_DIR dumpfile=inc_backup.dmp logfile=expdp_inc.log incremental=yimpdp 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)定位错误(如通道分配失败、文件无法访问)。