Linux环境下Oracle数据库容灾备份实践指南
开启归档模式:归档模式是Oracle物理备份的前提,确保数据库能保存所有重做日志以实现时间点恢复。操作步骤:
sysdba身份登录数据库:sqlplus / as sysdba;ARCHIVE LOG LIST(若显示“NO ARCHIVELOG”则需开启);SHUTDOWN IMMEDIATE;STARTUP MOUNT;ALTER DATABASE ARCHIVELOG;ALTER DATABASE OPEN。配置备份存储目录:创建专用备份目录并授权Oracle用户(通常为oracle),避免权限问题。例如:
mkdir -p /rmanbak/{datafile,controlfile,log}
chown -R oracle:oinstall /rmanbak
chmod -R 755 /rmanbak
RMAN(Recovery Manager)是Oracle推荐的物理备份工具,支持全量、增量、归档日志备份及自动维护。
基础RMAN配置:通过CONFIGURE命令设置自动备份策略,提升备份效率:
CONFIGURE CONTROLFILE AUTOBACKUP ON; -- 自动备份控制文件
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/rmanbak/controlfile/%F'; -- 控制文件备份路径
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS; -- 保留7天内的备份(可替代REDUNDANCY)
编写自动备份脚本:实现定时全量备份与过期备份清理。以下为节点1的全量备份脚本(/rmanbak/bak.sh):
#!/bin/bash
source /home/oracle/.bash_profile -- 加载Oracle环境变量
backtime=$(date +%Y%m%d)
log_file="/rmanbak/log/node1_backupall_$backtime.log"
rman target / log=$log_file <<EOF
run {
allocate channel ch1 device type disk;
allocate channel ch2 device type disk;
backup database format '/rmanbak/datafile/rac1_%d_%T_%U'; -- 数据文件备份格式
backup archivelog all format '/rmanbak/datafile/rac1_arch_%t_%s_%c' delete input; -- 归档日志备份并删除已备份的日志
report obsolete; -- 报告过期备份
delete noprompt obsolete; -- 删除过期备份
crosscheck backup; -- 校验备份有效性
crosscheck archivelog all; -- 校验归档日志有效性
delete noprompt expired backup; -- 删除过期备份
release channel ch1;
release channel ch2;
}
EOF
设置定时任务:通过crontab -e为Oracle用户添加定时任务,例如节点1每晚01:00执行全量备份,节点2每晚02:00执行备用备份(当节点1失败时接管):
# 节点1定时任务
0 1 * * * /rmanbak/bak.sh >> /rmanbak/log/node1_rmanbak.log 2>&1
# 节点2定时任务
0 2 * * * /rmanbak/bak.sh >> /rmanbak/log/node2_rmanbak.log 2>&1
逻辑备份通过导出数据库对象(表、视图、存储过程等)实现,适合小规模数据迁移或特定对象恢复。
全库导出:使用expdp工具导出整个数据库,例如:
expdp system/password@orcl FULL=Y DIRECTORY=DATA_PUMP_DIR DUMPFILE=full_backup_$(date +%Y%m%d).dmp LOGFILE=full_backup.log
DIRECTORY:需提前创建并授权(CREATE DIRECTORY DATA_PUMP_DIR AS '/u01/dump'; GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO system;);DUMPFILE:导出文件名(可包含日期);LOGFILE:日志文件。异地传输与恢复:通过scp将导出文件传输到异地服务器,恢复时使用impdp:
scp /u01/dump/full_backup_$(date +%Y%m%d).dmp root@remote_server:/backup/oracle/
impdp system/password@remote_orcl FULL=Y DIRECTORY=DATA_PUMP_DIR DUMPFILE=full_backup_$(date +%Y%m%d).dmp LOGFILE=imp_full_backup.log
Data Guard是Oracle官方的高可用性解决方案,支持物理 standby(实时同步)、逻辑 standby(逻辑同步)及自动故障切换。
主备库配置步骤:
tnsnames.ora,添加备库连接信息;spfile参数:ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(primary_db,standby_db)'; ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=standby_db ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby_db';ALTER SYSTEM SET DG_BROKER_START=TRUE;STARTUP NOMOUNT;RESTORE CONTROLFILE FROM '/rmanbak/controlfile/%F';RECOVER DATABASE;ALTER DATABASE MOUNT;DGMGRL> CREATE CONFIGURATION dg_config AS PRIMARY DATABASE IS primary_db CONNECT IDENTIFIER IS primary_db;;DGMGRL> ADD DATABASE standby_db AS CONNECT IDENTIFIER IS standby_db MAINTAINED AS PHYSICAL;;DGMGRL> ENABLE CONFIGURATION;。容灾切换:当主库故障时,通过Broker执行故障切换(Switchover/Failover):
DGMGRL> SWITCHOVER TO standby_db;
DGMGRL> FAILOVER TO standby_db;
备份有效性验证:定期执行RMAN恢复测试,确设备份文件可用:
rman target / <<EOF
RESTORE DATABASE VALIDATE; -- 验证备份完整性
CROSSCHECK BACKUP; -- 校验备份是否存在
DELETE NOPROMPT EXPIRED BACKUP; -- 清理过期备份
EOF
监控备份过程:通过RMAN命令实时查看备份进度:
rman target /
LIST BACKUP SUMMARY; -- 查看备份摘要
SHOW BACKUP; -- 显示备份详情
日志监控:定期检查RMAN日志(如/rmanbak/log/node1_backupall_*.log)和Data Guard日志,及时发现备份失败或同步异常。