问题背景

在主备部署架构下,主节点通常承担主要业务操作。为了不干扰生产,企业希望在备节点上进行备份及数据恢复操作。但这可能引发数据不一致及“脑裂”等问题。

风险说明

① 如果备机恢复后未降为备库,将自动变成主库,导致两个主节点共存。

② 恢复的数据只能回到备份时的状态,与主库现有数据存在差异。

操作重现与说明

① 正常主备状态:一主一备,数据同步中。

image.png
② 模拟主机插入数据,执行大批量数据写入(例如 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,产生异常。

image.png
④ 主备数据状态对比:通过比较 tmp5 表的 SCN、ASN、flush_point 等信息,可确认主机与备机数据存在错位,说明恢复引起数据不一致。

image.png
解决方案

为了避免脑裂与数据不一致,恢复完成后应立即将备机转回物理备库,并同步数据:

将备机降为备库:

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;
执行完毕后,主备恢复正常同步状态。
image.png

image.png


数据库砖家
1 声望0 粉丝