当备库所在硬件出现故障、或者数据库文件损坏导致数据损毁时,可以按照搭建数据守护的方式重建备库。
1 直接通过备份
下面以备库 B 数据损坏,重新配置数据为例,说明备库重建流程:
1. 重新初始化数据库
./dminit path=/dm7/data
2. 启动 DIsql 登录主库 A,执行联机备份
SQL> BACKUP DATABASE FULL BACKUPSET '/dm7/data/BACKUP_FILE_01';
3. 将备份文件拷贝至 B 所在的机器上,执行脱机还原与恢复
./dmrman CTLSTMT="RESTORE DATABASE '/dm7/data/DAMENG/dm.ini' FROM BACKUPSET '/dm7/data/BACKUP_FILE_01'"
./dmrman CTLSTMT="RECOVER DATABASE '/dm7/data/DAMENG/dm.ini' FROM BACKUPSET '/dm7/data/BACKUP_FILE_01'"
4.重新配置 B 的 dm.ini、dmmal.ini、dmarch.ini 和 dmwatcher.ini 配置文件,并拷贝主库的 dmwatcher.ctl 文件
5. 以 mount 方式启动 B
./dmserver /dm7/data/DAMENG/dm.ini mount
6. DIsql 登录 B,设置 OGUID
SQL>sp_set_oguid(82379);
7. 修改数据库模式为 Standby
由于备份文件中会保留备份库的模式信息,因此对 B 执行还原恢复成功后,B 当前的模式还是 Primary,需要先修改 dm.ini 中 ALTER_MODE_STATUS 值为 1,允许修改数据库模式,修改 Standby 模式成功后再改回为 0。
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); ----第 1 步
SQL>alter database standby; ----第 2 步
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0); ----第 3 步
8. 启动 B 的守护进程
./dmwatcher /dm7/data/DAMENG/dmwatcher.ini
执行以上步骤后,恢复 B 的准备过程已经完成。
接下来,数据守护系统会将 B 作为备库重加入数据守护系统,A 的守护进程会自动通知同步数据到 B,最终恢复主备库数据到一致状态。
2 通过备份加归档
如果数据规模比较大、联机备份耗时较长、应用压力比较大的情况下,主库联机备份、备库脱机还原过程中,主库可能又新产生了大量归档日志。使用上述步骤重建备库后,主库向备库同步历史数据的时间会比较久,主备库数据在比较长的一段时间内处于不一致状态。
用户还可以利用归档备份、还原和归档恢复功能,将备库数据恢复到更加接近主库的最新状态,有效减少备库加入主备系统后的历史数据同步时间。执行步骤如下:
1) 重新初始化数据库
./dminit path=/dm7/data
2) 启动 DIsql 登录主库 A,执行联机备份
SQL> BACKUP DATABASE FULL BACKUPSET '/dm7/data/BACKUP_FILE_02' WITHOUT LOG;
3) 将备份文件拷贝至 B 所在的机器上,执行脱机还原
./dmrman CTLSTMT="RESTORE DATABASE '/dm7/data/DAMENG/dm.ini' FROM BACKUPSET '/dm7/data/BACKUP_FILE_02'"
4) 启动 DIsql 登录主库 A,查看备份集的 BEGIN_LSN,并从 BEGIN_LSN 开始备份主库的归档日志。(这里假设查询到的备份集 BEGIN_LSN 是 38491)
SQL> SELECT BACKUP_NAME,BEGIN_LSN FROM V$BACKUPSET;
SQL> BACKUP ARCHIVE LOG FROM LSN 38491 BACKUPSET '/dm7/data/ARCH_BAK_02';
5) 将归档备份集拷贝至 B 所在的机器,还原归档后、利用这些归档日志进行数据库恢复
./dmrman CTLSTMT="RESTORE ARCHIVE LOG FROM BACKUPSET '/dm7/data/ARCH_BAK_02' TO ARCHIVEDIR '/dm7/data/arch'"
./dmrman CTLSTMT="RECOVER DATABASE '/dm7/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/dm7/data/arch'"
6)重新配置 B 的 dm.ini、dmmal.ini、dmarch.ini 和 dmwatcher.ini 配置文件,并拷贝主库的 dmwatcher.ctl 文件
7) 以 mount 方式启动 B
./dmserver /dm7/data/DAMENG/dm.ini mount
8) DIsql 登录 B,设置 OGUID
SQL>sp_set_oguid(82379);
9) 修改数据库模式为 Standby
由于备份文件中会保留备份库的模式信息,因此对 B 执行还原恢复成功后,B 当前的模式还是 Primary,需要先修改 dm.ini 中 ALTER_MODE_STATUS 值为 1,允许修改数据库模式,修改 Standby 模式成功后再改回为 0。
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); ----第 1 步
SQL>alter database standby; ----第 2 步
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0); ----第 3 步
10) 启动 B 的守护进程
./dmwatcher /dm7/data/DAMENG/dmwatcher.ini
3 小结
以上2个操作是官方提供的示例,这个过程就是一个数据守护备库的搭建过程,唯一缺少的部分就是服务注册。 操作步骤是一样的。
具体可以参考:
DM7 达梦 数据库 数据守护(Data Watch) (6) — 实时主备环境搭建
https://www.cndba.cn/dave/article/3675
DM7 达梦 数据库 数据守护(Data Watch) (7) — 读写分离集群搭建
https://www.cndba.cn/dave/article/3677
DM7 达梦 数据库 数据守护(Data Watch) (8) — MPP主备环境搭建
https://www.cndba.cn/dave/article/3678
DM7 达梦 数据库 数据守护(Data Watch) (9) — 异步备份环境搭建
https://www.cndba.cn/dave/article/3679
版权声明:本文为博主原创文章,未经博主允许不得转载。