Linux Oracle如何进行容灾备份
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自动化)
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/IMPDP)
逻辑备份通过导出数据库对象(表、视图、存储过程等)实现,适合小规模数据迁移或特定对象恢复。
-
全库导出:使用
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
四、容灾同步方案(Oracle Data Guard)
Data Guard是Oracle官方的高可用性解决方案,支持物理 standby(实时同步)、逻辑 standby(逻辑同步)及自动故障切换。
-
主备库配置步骤:
- 主库配置:
- 修改
tnsnames.ora
,添加备库连接信息; - 创建Standby Redo Logs(可选但推荐,提升同步效率);
- 配置
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';
- 启用Data Guard Broker:
ALTER SYSTEM SET DG_BROKER_START=TRUE;
- 修改
- 备库配置:
- 还原主库全量备份(使用RMAN);
- 启动备库到NOMOUNT状态:
STARTUP NOMOUNT;
- 恢复控制文件:
RESTORE CONTROLFILE FROM '/rmanbak/controlfile/%F';
- 恢复数据库(不打开):
RECOVER DATABASE;
- 打开备库到MOUNT状态:
ALTER DATABASE MOUNT;
- Broker配置:
- 主库执行:
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):
- 计划内切换(Switchover):
DGMGRL> SWITCHOVER TO standby_db;
- 故障切换(Failover):
DGMGRL> FAILOVER TO standby_db;
- 计划内切换(Switchover):
五、备份验证与监控
-
备份有效性验证:定期执行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日志,及时发现备份失败或同步异常。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux Oracle如何进行容灾备份
本文地址: https://pptw.com/jishu/719900.html