脑裂是同一个守护进程组中同时出现两个或者多个活动主库,并且这些主库都接收用户 请求,提供完整数据库服务。一旦发生脑裂,将无法保证数据一致性,对数据安全造成严重后果。
守护进程在检测到本地库分裂时,自动创建 dmwatcher.ctl 文件,保存在本地库的 SYSTEM_PATH 路径下,并且文件中记录的状态一定是 Split 分裂状态。
1.重新初始化数据库
./dminit path=/opt/dmdbms/data
如果不想重新初始化数据库,一定要删除dmwatcher.ctl 以及 bak_ctl 目录里面的文件;
2.启动 DIsql 登录主库 A,执行联机备份
SQL> BACKUP DATABASE FULL BACKUPSET ‘/opt/dmdbms/BACKUP’;
注意,如果主库 dm.ini 中的 USE_AP 设置为 1,则需要先启动 dmap 服务。
3.将备份文件拷贝至 B 所在的机器上,执行脱机还原与恢复
./dmrman CTLSTMT=“RESTORE DATABASE ‘/opt/dmdbms/data/DAMENG/dm.ini’ FROM BACKUPSET ‘/opt/dmdbms/BACKUP’”
./dmrman CTLSTMT=“RECOVER DATABASE ‘/opt/dmdbms/data/DAMENG/dm.ini’ FROM BACKUPSET ‘/opt/dmdbms/BACKUP’”
./dmrman CTLSTMT=“RECOVER DATABASE ‘/opt/dmdbms/data/DAMENG/dm.ini’ UPDATE DB_MAGIC”
4.配置 B 的 dm.ini、dmmal.ini、dmarch.ini 和 dmwatcher.ini 配置文件(如果之前的配置文件还在也可以继续使用)
5.以 Mount 方式启动 B
./dmserver /opt/dmdbms/data/DAMENG/dm.ini mount
6.DIsql 登录 B,设置 OGUID,修改备库模式
SQL>SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 1);
SQL>sp_set_oguid(453332);
SQL>alter database standby;
SQL>SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);
7.启动 B 的守护进程
./dmwatcher /opt/dmdbms/data/DAMENG/dmwatcher.ini
执行以上步骤后,恢复 B 的准备过程已经完成。接下来,数据守护系统会将 B 作为备库重加入数据守护系统,A 的守护进程会自动通知同步数据到 B,最终恢复主备库数据到一致状态。
8.如恢复原来B库的主库状态,可执行以下操作
执行普通监视器
cd /home/dmdba/dmdbms/bin
./dmmortor /data/dmdata/DAMENG/dmmortor_pt.ini
login #登录监视器,输入管理员用户名和密码
show #查看确认集群组名(登录不登录监视器均可查看监视器)
switchover GRP1.DM1 #登录监视器后,切换GRP1组的DM1节点为主库模式
文章
阅读量
获赞