前端开发 如何关闭Data Guard保护模式 降级为Max Performance以恢复主库读写|Duuu笔记
必须先确认保护模式和数据库角色,仅MAXIMUM AVAILABILITY或MAXIMUM PROTECTION需降级;执行前须停同步、确保主库OPEN且备库无MRP进程;降级后若仍不可写,需排查STANDBY_FILE_MANAGEMENT、归档目标状态及FORCE LOGGING等隐含依赖。
确认当前保护模式和数据库角色
先连到主库查清楚现状,避免误操作。用
select database_role, protection_mode from v$database;
看是不是真在
maximum availability
或
maximum protection
下——只有这两种才需要降级才能放开主库写入。如果已经是
maximum performance
,那问题不在保护模式上,得去查其他锁或挂起状态。
关闭实时应用并停止DG同步
降级前必须让备库停止接收日志,否则
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE
会报
ORA-16664: unable to retrieve the result from a database
。在主库执行:
ALTER DATABASE STOP LOGICAL STANDBY APPLY;
(逻辑备库)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
(物理备库)
再确认
V$MANAGED_STANDBY
里没有活跃的 MRP 进程。
执行保护模式降级命令
命令本身简单,但顺序和前提缺一不可。确保:
• 主库处于 OPEN 状态(不能是 MOUNT)
• 备库已停止同步且未报错
•
LOG_ARCHIVE_DEST_n
中至少一个
VALID_FOR
包含
(ONLINE_LOGFILES, PRIMARY_ROLE)
然后运行:
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;
成功后立刻查
V$DATABASE.PROTECTION_MODE
,必须显示
MAXIMUM PERFORMANCE
才算生效。
降级后主库仍不可写?检查隐含依赖
常见假象:模式降了,但主库还是只读。原因往往不是 DG 配置,而是:
•
STANDBY_FILE_MANAGEMENT=auto
导致文件创建被阻塞(临时改
manual
)
• 备库归档目标
LOG_ARCHIVE_DEST_2
状态为
ERROR
,触发主库自动只读(查
V$ARCHIVE_DEST_STATUS.ERROR
)
• 数据库启用了
FORCE LOGGING
但归档路径磁盘满,日志切换卡住
这些都会让主库表面可写、实际 DML 报
ORA-01116: error in opening database file
或 hang 住。
真正麻烦的是备库还没完全停稳就降级,或者降级后忘了重开日志传输——这时候主库能写,但备库会彻底脱节,后续拉起可能要重建。操作窗口很窄,每步都得盯
V$DATAGUARD_STATS
和告警日志。
