前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【YashanDB 知识库】如何在备机节点上做备份和恢复

【YashanDB 知识库】如何在备机节点上做备份和恢复

作者头像
用户10349277
修改2025-02-27 14:37:43
修改2025-02-27 14:37:43
5800
代码可运行
举报
文章被收录于专栏:YashanDB知识库YashanDB知识库
运行总次数:0
代码可运行

问题现象

一主一备情况下,主机需要支持常规业务,为了不影响业务,在备机做备份恢复的场景。

问题的风险及影响

1、备机恢复后,会变成 primary 节点,出现脑裂。

2、备机恢复的数据,只是备份那一时间点的数据,需要同步到主机现在时间点的数据。

复现步骤

1、一主一备,正常场景如下

2、模拟主机执行业务,备机开始备份场景

主机插入 20000000 万条数据

代码语言:javascript
代码运行次数:0
复制
SQL> create table tmp5(id number,rate number, jg_cod varchar(64), jg_cod2 varchar(64) , jg_cod3 varchar(64)) ORGANIZATION LSC;
​
Succeed.
​
SQL>
begin
 for i in 1 .. 20000000 loop
  insert into tmp5 values( i,DBMS_RANDOM.value(1000,10000), '100'||cast(DBMS_RANDOM.value(10,100) as int) , '200'||cast(DBMS_RANDOM.value(10,100) as int) , '300'||cast(DBMS_RANDOM.value(10,100) as int) );
  if mod(i,1000) = 0 then
    commit;
  end if;
 end loop;
 commit;
end;
  10 /

复制代码

备机开始备份:

3、模拟备机根据备份集恢复数据

4、恢复后,变为两个 primary 节点,如下

备机查看 tmp5 表、scn、asn、flush_point:

主机的 tmp5 表、scn、asn、flush_point,对比发现 scn 小于备机的 scn,asn 和 flush_point 大于备机的 asn 和 flush_point,如下图:

解决方法及规避方式

解决备机根据备份集恢复后,数据不一致的问题。

思路是备机的 primary 降备,然后同步数据即可。操作如下:

备机 primary 降备:

<table cellspacing="0"><tbody><tr><td><p><span>-- 启动备变主库的节点(例如 1-2)到 mount 状态</span></p><p><span>yasboot node start -c yashandb -n 1-2 -m mount</span></p><p><span>-- 备机的主库降备</span></p><p><span>ALTER DATABASE CONVERT TO PHYSICAL STANDBY;</span></p><p><span>alter database open;</span></p></td></tr></tbody></table>

同步数据,主机修复 need repair 状态:

<table cellspacing="0"><tbody><tr><td><p><span>BUILD DATABASE REPAIR STANDBY standby1;</span></p></td></tr></tbody></table>

修复后查看备机结果:

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档