最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Oracle Data Guard如何配置Standby Redo Log
时间:2026-08-28 09:30:48 编辑:袖梨 来源:一聚教程网
必须手动创建Standby Redo Log,因Oracle不会自动创建;主库重做流需先写入SRL,MRP进程才能读取应用,否则RFS收日志后无处写,MRP卡在WAIT_FOR_LOG。
备库没配 Standby Redo Log,REDO APPLY 就跑不起来——哪怕日志传过去了,也会卡在 WAIT_FOR_LOG 状态。
为什么必须手动创建 Standby Redo Log?
Oracle 不会自动创建 SRL,它只复用已有的 Online Redo Log(但这是错的)。主库传来的重做流必须先写入 Standby Redo Log,MRP 进程才能从中读取并应用。没 SRL,RFS 进程收到日志后无处可写,v$managed_standby 里 RFS 状态可能正常,但 MRP0 一直卡在 WAIT_FOR_LOG。
- 数量建议:至少比主库 Online Redo Log 多一组(例如主库有 3 组,备库至少建 4 组)
- 大小必须与主库 Online Redo Log 完全一致(查
v$log.bytes确认) - 组号无需连续,但不能和 Online Redo Log 组号冲突(查
v$log.group#和v$logfile.group#) - 每个组至少含两个成员(推荐镜像),路径需符合备库实际存储结构(ASM 或文件系统)
创建 SRL 的正确命令和常见错误
必须在备库 MOUNT 状态下执行,且不能用 ALTER DATABASE OPEN 后再建——会报 ORA-01156。
- 标准语法:
ALTER DATABASE ADD STANDBY LOGFILE GROUP 101 ('+DATA/stby/redo101a.log', '+DATA/stby/redo101b.log') SIZE 200M; - 如果用文件系统,路径要真实存在且 Oracle 用户有写权限,例如:
'/u02/oradata/stby/srl01a.log' - 别直接复制主库路径——比如主库是
+DATA/orcl/...,备库必须改成+DATA/stby/...,否则后续LOG_FILE_NAME_CONVERT映射会失效 - 建完立刻查:
SELECT GROUP#, SEQUENCE#, STATUS, BYTES/1024/1024 FROM V$STANDBY_LOG;,STATUS 应为UNASSIGNED
配完 SRL 还启动不了 MRP?检查这三点
SRL 存在 ≠ MRP 能用。很多 DBA 建完就以为万事大吉,结果 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT; 执行后,v$managed_standby 里 MRP0 状态仍是 NOT APPLYING 或 WAIT_FOR_LOG。
- 确认备库是
MOUNTED状态(不是READ ONLY或OPEN):SELECT OPEN_MODE FROM V$DATABASE;必须返回MOUNTED - 确认
STANDBY_FILE_MANAGEMENT=AUTO(SHOW PARAMETER standby_file_management),否则新增数据文件时会中断应用 - 确认
LOG_FILE_NAME_CONVERT已正确配置且重启过备库——SRL 文件路径若仍指向主库 ASM 磁盘组名(如+DATA/orcl/...),MRP 启动时会因重命名失败而静默退出
ORA-00268:删 SRL 前务必停 MRP
想清理旧 SRL?先取消恢复,否则必报 ORA-00268: cannot delete archived log file - in use(实际是 SRL 被 MRP 锁住)。
- 正确顺序:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;→ 等v$managed_standby中MRP0消失 → 再ALTER DATABASE DROP STANDBY LOGFILE GROUP 101; - 如果已报 ORA-00268,别硬删,先查
SELECT PROCESS, STATUS FROM V$MANAGED_STANDBY WHERE PROCESS = 'MRP0';,确认是否真停了 - 重启备库后未重建 SRL 是常见疏漏——
SHUTDOWN IMMEDIATE+STARTUP MOUNT后,SRL 依然存在,但状态可能异常,建议重建前先DROP干净再ADD
最易被忽略的是:SRL 路径必须和 LOG_FILE_NAME_CONVERT 的目标端完全一致,哪怕只差一个斜杠或大小写,MRP 启动时都不会报错,而是默默跳过该组——你得去 v$standby_log 里逐行核对 MEMBER 列的实际路径。