Oracle数据库备份需结合物理备份(文件级)与逻辑备份(数据级),并遵循归档模式、增量/差异备份、自动化调度及备份验证的原则,确保数据安全性与恢复效率。
归档模式是热备份的前提,能保留所有重做日志,支持恢复到任意时间点。
操作步骤:
-- 查看归档模式
archive log list;
-- 关闭数据库
shutdown immediate;
-- 启动到mount状态
startup mount;
-- 开启归档模式
alter database archivelog;
-- 打开数据库
alter database open;
-- 验证归档状态
archive log list;
闪回恢复区是Oracle推荐的统一存储路径,用于存放备份文件、归档日志、闪回日志等,避免磁盘空间耗尽。
配置方法(通过sqlplus):
-- 设置闪回恢复区路径(需提前创建目录)
alter system set db_recovery_file_dest='/u01/flash_recovery_area' scope=both;
-- 设置闪回恢复区大小(根据数据量调整,如20G)
alter system set db_recovery_file_dest_size=20G scope=both;
-- 开启闪回功能(可选,用于快速恢复)
alter database flashback on;
自动备份控制文件能防止控制文件丢失,简化恢复流程。
操作命令(RMAN中执行):
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to '/u01/backup/controlfile_%F.bak';
RMAN(Recovery Manager)是Oracle官方工具,支持全备份、增量备份、差异备份,并整合了压缩、加密功能。
备份所有数据文件、控制文件、归档日志,是恢复的基础。
命令示例:
-- 连接RMAN
rman target /
-- 执行全备份(包含归档日志,备份后自动删除已备份的归档日志)
run {
allocate channel c1 device type disk;
backup database plus archivelog format '/u01/backup/full_%U.bkp';
release channel c1;
}
仅备份自上次备份以来更改的数据,分为Level 0(基础备份)和Level 1(增量备份)。
Level 0备份(每周一次):
run {
allocate channel c1 device type disk;
backup incremental level 0 database format '/u01/backup/incr0_%U.bkp';
release channel c1;
}
Level 1备份(每日一次):
run {
allocate channel c1 device type disk;
backup incremental level 1 database format '/u01/backup/incr1_%U.bkp';
release channel c1;
}
备份自上次全备份以来更改的数据,恢复时只需应用最后一次全备份和最后一次差异备份,速度快于增量备份。
命令示例:
run {
allocate channel c1 device type disk;
backup database differential format '/u01/backup/diff_%U.bkp';
release channel c1;
}
归档日志是恢复到指定时间点的关键,需定期备份并删除旧日志(通过RMAN保留策略自动清理)。
命令示例:
-- 备份所有归档日志并删除已备份的日志
run {
allocate channel c1 device type disk;
backup archivelog all delete input format '/u01/backup/arch_%U.bkp';
release channel c1;
}
适用于需要导出特定Schema或表的场景,支持跨数据库版本迁移。
-- 创建目录对象(需提前创建物理目录)
create directory backup_dir as '/u01/backup';
-- 授权目录权限
grant read, write on directory backup_dir to scott;
-- 导出指定Schema
expdp scott/tiger@orcl schemas=scott directory=backup_dir dumpfile=scott.dmp logfile=expdp_scott.log
-- 导入指定Schema
impdp scott/tiger@orcl schemas=scott directory=backup_dir dumpfile=scott.dmp logfile=impdp_scott.log
通过crontab设置定时任务,实现每日自动执行RMAN备份脚本。
示例(每周日全备份,周一至周六增量备份):
# 编辑当前用户的crontab
crontab -e
添加以下内容:
# 每周日02:00执行全备份脚本
0 2 * * 0 /home/oracle/scripts/rman_full_backup.sh >> /home/oracle/logs/rman_full.log 2>&1
# 周一至周六02:00执行增量备份脚本
0 2 * * 1-6 /home/oracle/scripts/rman_incr_backup.sh >> /home/oracle/logs/rman_incr.log 2>&1
脚本示例(rman_full_backup.sh):
#!/bin/bash
source /home/oracle/.bash_profile
rman target / <<EOF
run {
allocate channel c1 device type disk;
backup database plus archivelog format '/u01/backup/full_%U.bkp';
release channel c1;
}
exit;
EOF
ORACLE_HOME、PATH、ORACLE_SID正确配置(如export ORACLE_SID=orcl)。sqlplus / as sysdba
shutdown abort;
startup nomount;
-- 恢复控制文件(若控制文件丢失,需指定备份路径)
restore controlfile from '/u01/backup/controlfile_012345.bak';
-- 挂载数据库
alter database mount;
-- 恢复数据文件
recover database;
-- 打开数据库(若恢复到当前时间)
alter database open;
-- 恢复到指定SCN(需提前查询SCN号)
recover database until scn 123456789;
-- 或恢复到指定时间点(如2025-11-01 12:00:00)
recover database until time "to_date('2025-11-01 12:00:00', 'yyyy-mm-dd hh24:mi:ss')";
-- 打开数据库(需使用resetlogs选项,因恢复到非当前时间)
alter database open resetlogs;
若归档日志丢失,可使用until scn或until time恢复到最近的可用点,避免数据丢失。
impdp scott/tiger@orcl directory=backup_dir dumpfile=scott.dmp logfile=impdp_scott.log
TABLE_EXISTS_ACTION选项)impdp scott/tiger@orcl directory=backup_dir dumpfile=scott_incremental.dmp logfile=impdp_scott_incremental.log tables=employees TABLE_EXISTS_ACTION=append
通过RMAN配置保留策略,自动删除过期备份(如保留7天内的备份):
configure retention policy to recovery window of 7 days;
-- 手动清理过期备份
report obsolete;
delete obsolete;
定期检查备份文件的可用性,确保能成功恢复:
-- 测试备份集的可恢复性
rman target /
run {
allocate channel c1 device type disk;
restore database validate;
release channel c1;
}
定期查看RMAN日志(如/u01/backup/rman_full.log),及时发现备份失败问题(如磁盘空间不足、权限问题)。
通过以上策略,可在CentOS环境下实现Oracle数据库的高效备份与可靠恢复,满足业务连续性需求。