DM数据守护(Data Watch)是一种集成化的高可靠性解决方案,同时满足用户对数据安全性和高可用性的要求。解决由于硬件故障、自然灾害等原因导致的数据库服务长时间中断问题,满足用户不间断提供数据库服务的要求。但是在某些故障问题发生后,集群被破坏,无法自我恢复,此时就需要手动进行集群的恢复操作,即备库重做。
主机ip | cpu | 内存 | 硬盘 | 网卡 | 操作系统 | 数据库版本 |
---|---|---|---|---|---|---|
192.168.88.142 | 1核 | 2G | 20G | 1000Mb/s | redhat6.5 | DM Database Server 64 V8 7.6 企业版 DB Version: 0x7000c 03134283890-20220525-161267-10045 |
192.168.88.144 | 1核 | 2G | 20G | 1000Mb/s | redhat6.5 | DM Database Server 64 V8 7.6 企业版 DB Version: 0x7000c 03134283890-20220525-161267-10045 |
主备信息:
实例名 | PORT_NUM | MAL_INST_DW_PORT | MAL_HOST | MAL_PORT | MAL_DW_PORT |
---|---|---|---|---|---|
DMSVR01 | 5236 | 33141 | 192.168.88.142 | 61141 | 52141 |
DMSVR02 | 5236 | 33141 | 192.168.88.144 | 61141 | 52141 |
集群目前状态正常,判断依据:
1)DMSVR01、DMSVR02实例的守护进程状态为open;
2)DMSVR01、DMSVR02实例的状态均为open,模式一主一备;
3)DMSVR01、DMSVR02实例归档状态均valid;
4)tip命令显示RW1组实例运行正常。
正式环境中可能会出现的一种问题:节假日期间,主库操作系统故障异常关闭且无法启动,备库接管切换主库后承载业务。但是备库归档日志保留时间太短,最终导致主备库差异过大,集群无法通过归档日志重做自动恢复;
1.关闭主库所在虚拟机,此时确认监视器信息如下,根据最后的信息,判断新主库接管成功。
./dmmonitor ../data/DM01/dmmonitor.ini_confirm
..
..
..
[monitor] 2023-03-27 09:51:19: 接收守护进程(DMSVR01)消息超时
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2023-03-27 09:51:08 ERROR OK DMSVR01 OPEN PRIMARY VALID 14 177698 177698
[monitor] 2023-03-27 09:51:19: 检测到PRIMARY实例故障,开始对组(RW1)执行自动接管
[monitor] 2023-03-27 09:51:19: 通知组(RW1)当前活动的守护进程设置MID
[monitor] 2023-03-27 09:51:20: 通知组(RW1)当前活动的守护进程设置MID成功
[monitor] 2023-03-27 09:51:20: 开始使用实例DMSVR02接管
[monitor] 2023-03-27 09:51:20: 通知守护进程DMSVR02切换TAKEOVER状态
[monitor] 2023-03-27 09:51:20: 守护进程(DMSVR02)状态切换 [OPEN-->TAKEOVER]
[monitor] 2023-03-27 09:51:21: 切换守护进程DMSVR02为TAKEOVER状态成功
[monitor] 2023-03-27 09:51:21: 实例DMSVR02开始执行SP_SET_GLOBAL_DW_STATUS(0, 7)语句
[monitor] 2023-03-27 09:51:21: 实例DMSVR02执行SP_SET_GLOBAL_DW_STATUS(0, 7)语句成功
[monitor] 2023-03-27 09:51:21: 实例DMSVR02开始执行SP_APPLY_KEEP_PKG()语句
[monitor] 2023-03-27 09:51:21: 实例DMSVR02执行SP_APPLY_KEEP_PKG()语句成功
[monitor] 2023-03-27 09:51:21: 实例DMSVR02开始执行ALTER DATABASE MOUNT语句
[monitor] 2023-03-27 09:51:21: 实例DMSVR02执行ALTER DATABASE MOUNT语句成功
[monitor] 2023-03-27 09:51:21: 实例DMSVR02开始执行ALTER DATABASE PRIMARY语句
[monitor] 2023-03-27 09:51:21: 实例DMSVR02执行ALTER DATABASE PRIMARY语句成功
[monitor] 2023-03-27 09:51:21: 通知实例DMSVR02修改所有归档状态无效
[monitor] 2023-03-27 09:51:21: 修改所有实例归档为无效状态成功
[monitor] 2023-03-27 09:51:21: 实例DMSVR02开始执行ALTER DATABASE OPEN FORCE语句
[monitor] 2023-03-27 09:51:21: 实例DMSVR02执行ALTER DATABASE OPEN FORCE语句成功
[monitor] 2023-03-27 09:51:21: 实例DMSVR02开始执行SP_SET_GLOBAL_DW_STATUS(7, 0)语句
[monitor] 2023-03-27 09:51:21: 实例DMSVR02执行SP_SET_GLOBAL_DW_STATUS(7, 0)语句成功
[monitor] 2023-03-27 09:51:21: 通知守护进程DMSVR02切换OPEN状态
[monitor] 2023-03-27 09:51:22: 守护进程(DMSVR02)状态切换 [TAKEOVER-->OPEN]
[monitor] 2023-03-27 09:51:23: 切换守护进程DMSVR02为OPEN状态成功
[monitor] 2023-03-27 09:51:23: 通知组(RW1)的守护进程执行清理操作
[monitor] 2023-03-27 09:51:23: 清理守护进程(DMSVR02)请求成功
[monitor] 2023-03-27 09:51:23: 使用实例DMSVR02接管成功
[monitor] 2023-03-27 09:51:23: 组(RW1)使用实例DMSVR02自动接管成功
2.新主库接管后,insert大量数据,并清理掉归档(模拟备库归档重做必须的归档日志被清理掉问题)
SQL> create table t_insert as select level,'hello hello hello hello' from dual connect by level <10000000;
SQL> checkpoint(100);
SQL> alter system switch logfile;
[dmdba@localhost dmarch]$ rm -f /dbarch/dmarch/*log
3.启动之前停止的虚拟机,观察到集群无法自动恢复,且两实例lsn差异较大(无论等待多久实例都无法自我恢复,check recover rw1.DMSVR01也从提示一定时间后再发起检查,归档状态始终无效)。
再次在主库插入数据,防止方才删除归档操作导致备份因归档不完整失败。
SQL> delete from t_insert;
SQL> create table t_insert2 as select level,'hello hello hello hello' from dual connect by level <10000000;
SQL> commit;
备份主库
[dmdba@localhost bin]$ ./disqlSQL> backup database full backupset '/dm8/full_test';
备库还原恢复
[dmdba@localhost bin]$ ./dmrman dmrman
V8
RMAN> restore database '/dm8/data/DM01/dm.ini' from backupset '/dm8/full_test';
RMAN> recover database '/dm8/data/DM01/dm.ini' from backupset '/dm8/full_test';
RMAN> recover database '/dm8/data/DM01/dm.ini' update db_magic;
RMAN> exit
time used: 0.280(ms)
启动守护进程
[dmdba@localhost bin]$ /etc/init.d/DmWatcherServiceDMWATCHER start
监视器信息
启动守护进程后,守护进程拉起数据库,此时守护进程状态startup,守护进程切换到recover状态重做归档日志完成后,归档日志追平后再次切换回open状态,此时集群恢复正常,但还需要show命令进一步检查集群状态。
集群目前状态正常,判断依据:
1)DMSVR01、DMSVR02实例的守护进程状态为open;
2)DMSVR01、DMSVR02实例的状态均为open,模式一主一备;
3)DMSVR01、DMSVR02实例归档状态均valid;
4)tip命令显示RW1组实例运行正常;
5)lsn号基本一致;
1、还原恢复集群备库,启动守护进程拉起数据库进程,集群可自动重做归档恢复;
2、注意备份数据库的dmmal.ini、dmarch.ini、dmwatch.ini、dmmonitor.ini、dm.ini,防止故障恢复时,耗费大量时间编辑配置文件;
3、定期进行数据库备份、并注意归档保留时间覆盖备份,可以在故障时直接使用已有备份恢复;
4、数据库初始化时注意保存初始化命令,部分场景需要重新初始化;
5、DM8的备库重建只支持备份还原,DM7还支持停库数据文件scp方式恢复;
文章
阅读量
获赞