问题背景
在主备部署架构下,主节点通常承担主要业务操作。为了不干扰生产,企业希望在备节点上进行备份及数据恢复操作。但这可能引发数据不一致及“脑裂”等问题。
风险说明
① 如果备机恢复后未降为备库,将自动变成主库,导致两个主节点共存。
② 恢复的数据只能回到备份时的状态,与主库现有数据存在差异。
操作重现与说明
① 正常主备状态:一主一备,数据同步中。
② 模拟主机插入数据,执行大批量数据写入(例如 2000 万条):
create table tmp5(...) ORGANIZATION LSC;
begin
for i in 1 .. 20000000 loop
insert into tmp5 values(...);
if mod(i,1000) = 0 then commit; end if;
end loop;
commit;
end;
③ 备机开始备份并执行恢复操作。恢复后发现备机晋升为 primary,产生异常。
④ 主备数据状态对比:通过比较 tmp5 表的 SCN、ASN、flush_point 等信息,可确认主机与备机数据存在错位,说明恢复引起数据不一致。
解决方案
为了避免脑裂与数据不一致,恢复完成后应立即将备机转回物理备库,并同步数据:
将备机降为备库:
yasboot node start -c yashandb -n 1-2 -m mount
SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
SQL> alter database open;
主库执行修复同步:
BUILD DATABASE REPAIR STANDBY standby1;
执行完毕后,主备恢复正常同步状态。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。