注册
DM7 单机改主备与确认监视器部署实战
专栏/技术分享/ 文章详情 /

DM7 单机改主备与确认监视器部署实战

wwhhdd 2026/10/23 65 0 0
摘要

DM7 单机改主备与确认监视器部署实战

保留原单机作为主库,用全量备份恢复出一台备库,再部署实时归档、守护进程和独立确认监视器。下面记录 DM7 7.6.1.146 的改造步骤,IP 使用示例地址。

1. 环境规划

节点 示例 IP 实例名 数据库端口 DW_PORT MAL_PORT MAL_DW_PORT
主库 192.0.2.10 GRP1_RT_01 5236 33141 61141 52141
备库 192.0.2.11 GRP1_RT_02 5236 33142 61142 52142
确认监视器 192.0.2.12 不建库 — — — —

软件目录为 /home/dmdba/dmdbms,数据目录为 /dmdata/DAMENG,归档目录为 /dmarch,备份目录为 /dmbak。守护组名统一为 DW_GRP,OGUID 统一为 453331。

三台机器使用配套版本的软件。本文业务与心跳共用一张网卡;使用独立心跳网时,MAL_HOST 填心跳地址,MAL_INST_HOST 填业务地址。

DW_PORT 用于本机实例与守护进程通信,MAL_PORT 用于主备实例通信,MAL_DW_PORT 是守护进程的监听端口。

2. 安装新节点并准备授权

2.1 安装备库和监视器软件

备库和监视器节点准备好 dmdba 用户、环境变量及操作系统参数后,root 挂载安装介质:

mkdir -p /mnt/dm7 mount -o loop /home/dmdba/dm7.iso /mnt/dm7

切换到 dmdba 执行安装,目录选择 /home/dmdba/dmdbms:

/mnt/dm7/DMInstall.bin -i

安装结束后,root 执行:

/home/dmdba/dmdbms/script/root/root_installer.sh

监视器节点只安装软件,备库稍后初始化。

主备节点,root 准备数据、归档和备份目录:

mkdir -p /dmdata /dmarch /dmbak chown dmdba:dinstall /dmdata /dmarch /dmbak

2.2 配置数据守护授权

主备库分别准备与版本、CPU 架构匹配且支持数据守护的 Key,上传至各自的 /home/dmdba/dm.key。两端 root 先备份旧 Key,无旧文件时跳过:

cp -pn /home/dmdba/dmdbms/bin/dm.key /dmbak/dm.key.before_dw

替换授权并设置权限:

cp /home/dmdba/dm.key /home/dmdba/dmdbms/bin/dm.key chown dmdba:dinstall /home/dmdba/dmdbms/bin/dm.key chmod 600 /home/dmdba/dmdbms/bin/dm.key

主库以 SYSDBA 加载授权:

SP_LOAD_LIC_INFO(); SELECT * FROM V$LICENSE;

检查有效期和 CLUSTER_TYPE,第 1 位为 1 表示支持数据守护。备库启动后同样检查,监视器节点不需要数据库 Key。集群授权说明

3. 通过联机备份建立备库

3.1 原单机备份并传输

联机备份要求主库已开启本地归档。建备期间暂停归档清理,保留从全备开始到备库追平所需的连续归档。

主库,dmdba 备份原配置:

cp -pn /dmdata/DAMENG/dm.ini /dmbak/dm.ini.before_dw cp -pn /dmdata/DAMENG/dmarch.ini /dmbak/dmarch.ini.before_dw

主库以 SYSDBA 检查归档状态(应为 Y),然后备份到新目录:

SELECT ARCH_MODE FROM V$DATABASE; BACKUP DATABASE FULL BACKUPSET '/dmbak/DW_SINGLE_FULL';

备份成功后,主库 dmdba 传输整个备份集目录:

scp -r /dmbak/DW_SINGLE_FULL dmdba@192.0.2.11:/dmbak/

3.2 备库初始化空实例

主库查看初始化参数:

cat /dmdata/DAMENG/dminit*.log

备库以 dmdba 初始化空实例,页大小、簇大小、字符集和大小写敏感设置与原库一致。以下为本次实验参数:

/home/dmdba/dmdbms/bin/dminit PATH=/dmdata PAGE_SIZE=32 EXTENT_SIZE=16 CASE_SENSITIVE=Y UNICODE_FLAG=0 LOG_SIZE=2048

初始化后保持停库,恢复完成后沿用原库账号和口令。

3.3 校验、还原与恢复

备库,dmdba 校验备份集:

/home/dmdba/dmdbms/bin/dmrman USE_AP=2 CTLSTMT="CHECK BACKUPSET '/dmbak/DW_SINGLE_FULL'"

校验通过后,将备份还原到备库空实例并执行恢复:

/home/dmdba/dmdbms/bin/dmrman USE_AP=2 CTLSTMT="RESTORE DATABASE '/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmbak/DW_SINGLE_FULL'" /home/dmdba/dmdbms/bin/dmrman USE_AP=2 CTLSTMT="RECOVER DATABASE '/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmbak/DW_SINGLE_FULL'"

4. 配置实时主备

4.1 修改 dm.ini

本文主备数据目录相同,主库以 dmdba 将原配置复制到备库;路径不同时应调整备库配置中的对应路径:

scp /dmdata/DAMENG/dm.ini dmdba@192.0.2.11:/dmdata/DAMENG/dm.ini

两端分别编辑:

vim /dmdata/DAMENG/dm.ini

主库修改以下参数:

INSTANCE_NAME = GRP1_RT_01 PORT_NUM = 5236 DW_PORT = 33141 DW_ERROR_TIME = 60 ALTER_MODE_STATUS = 0 ENABLE_OFFLINE_TS = 2 MAL_INI = 1 ARCH_INI = 1

备库修改为:

INSTANCE_NAME = GRP1_RT_02 PORT_NUM = 5236 DW_PORT = 33142 DW_ERROR_TIME = 60 ALTER_MODE_STATUS = 0 ENABLE_OFFLINE_TS = 2 MAL_INI = 1 ARCH_INI = 1

4.2 两端配置相同的 dmmal.ini

两端以 dmdba 编辑:

vim /dmdata/DAMENG/dmmal.ini
MAL_CHECK_INTERVAL = 5 MAL_CONN_FAIL_INTERVAL = 5 [MAL_INST1] MAL_INST_NAME = GRP1_RT_01 MAL_HOST = 192.0.2.10 MAL_PORT = 61141 MAL_INST_HOST = 192.0.2.10 MAL_INST_PORT = 5236 MAL_DW_PORT = 52141 [MAL_INST2] MAL_INST_NAME = GRP1_RT_02 MAL_HOST = 192.0.2.11 MAL_PORT = 61142 MAL_INST_HOST = 192.0.2.11 MAL_INST_PORT = 5236 MAL_DW_PORT = 52142

4.3 配置 dmarch.ini

两端以 dmdba 编辑:

vim /dmdata/DAMENG/dmarch.ini

主库配置:

ARCH_WAIT_APPLY = 0 [ARCHIVE_LOCAL] ARCH_TYPE = LOCAL ARCH_DEST = /dmarch ARCH_FILE_SIZE = 512 ARCH_SPACE_LIMIT = 10240 [ARCHIVE_REALTIME] ARCH_TYPE = REALTIME ARCH_DEST = GRP1_RT_02

备库配置:

ARCH_WAIT_APPLY = 0 [ARCHIVE_LOCAL] ARCH_TYPE = LOCAL ARCH_DEST = /dmarch ARCH_FILE_SIZE = 512 ARCH_SPACE_LIMIT = 10240 [ARCHIVE_REALTIME] ARCH_TYPE = REALTIME ARCH_DEST = GRP1_RT_01

实时归档的 ARCH_DEST 填对端实例名。ARCH_SPACE_LIMIT = 10240 是实验配置,实际按归档量和建备时间调整;原库已有归档项时,在原配置上修改。

4.4 配置 dmwatcher.ini

两端以 dmdba 编辑:

vim /dmdata/DAMENG/dmwatcher.ini

主库完整配置:

[DW_GRP] DW_TYPE = GLOBAL DW_MODE = AUTO DW_ERROR_TIME = 20 INST_ERROR_TIME = 20 INST_RECOVER_TIME = 60 INST_OGUID = 453331 INST_INI = /dmdata/DAMENG/dm.ini INST_AUTO_RESTART = 1 INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/DmServiceGRP1_RT_01 start RLOG_SEND_THRESHOLD = 0 RLOG_APPLY_THRESHOLD = 0

备库完整配置:

[DW_GRP] DW_TYPE = GLOBAL DW_MODE = AUTO DW_ERROR_TIME = 20 INST_ERROR_TIME = 20 INST_RECOVER_TIME = 60 INST_OGUID = 453331 INST_INI = /dmdata/DAMENG/dm.ini INST_AUTO_RESTART = 1 INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/DmServiceGRP1_RT_02 start RLOG_SEND_THRESHOLD = 0 RLOG_APPLY_THRESHOLD = 0

INST_STARTUP_CMD 分别对应下一节注册的主、备数据库服务。

4.5 生成 DM7 守护控制文件

主库以 dmdba 生成控制文件,并复制到两端实例目录:

/home/dmdba/dmdbms/bin/dmctlcvt TYPE=3 SRC=/dmdata/DAMENG/dmwatcher.ini DEST=/dmdata/DAMENG/ cp /dmdata/DAMENG/DW_GRP/dmwatcher.ctl /dmdata/DAMENG/dmwatcher.ctl scp /dmdata/DAMENG/dmwatcher.ctl dmdba@192.0.2.11:/dmdata/DAMENG/

5. 在停业务窗口内转换角色

5.1 停止原单机并重新注册服务

停止应用和写入任务,处理完业务事务。主库以 SYSDBA 查看剩余连接:

SELECT * FROM V$SESSIONS;

主库 root 停止原单机服务,本例原服务名为 DmServiceDMSERVER:

/home/dmdba/dmdbms/bin/DmServiceDMSERVER stop ps -ef | grep '[d]mserver /dmdata/DAMENG/dm.ini'

确认实例退出后注销旧服务:

/home/dmdba/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceDMSERVER

主库 root 注册 MOUNT 服务:

/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p GRP1_RT_01 -i /dmdata/DAMENG/dm.ini -m mount

备库 root 注册 MOUNT 服务:

/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p GRP1_RT_02 -i /dmdata/DAMENG/dm.ini -m mount

DM7 注册服务使用 -i 指定配置文件。参数说明

5.2 以 MOUNT 启动并设置主备

主库以 dmdba 启动:

/home/dmdba/dmdbms/bin/DmServiceGRP1_RT_01 start

备库以 dmdba 启动:

/home/dmdba/dmdbms/bin/DmServiceGRP1_RT_02 start

两端以 SYSDBA 连接本机,检查实例状态及授权:

SELECT INSTANCE_NAME, STATUS$, MODE$, OGUID FROM V$INSTANCE; SELECT * FROM V$LICENSE;

确认两端均为 MOUNT 后,主库执行:

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); SP_SET_OGUID(453331); ALTER DATABASE PRIMARY; SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

备库使用原库的 SYSDBA 口令登录,执行:

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); SP_SET_OGUID(453331); ALTER DATABASE STANDBY; SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

再次查询 V$INSTANCE,确认主库为 PRIMARY / MOUNT、备库为 STANDBY / MOUNT,OGUID 均为 453331。随后由守护系统协调 OPEN。

5.3 注册并启动守护进程

主备两端 root 分别注册:

/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p DW -i /dmdata/DAMENG/dmwatcher.ini

两端以 dmdba 启动并检查:

/home/dmdba/dmdbms/bin/DmWatcherServiceDW start /home/dmdba/dmdbms/bin/DmWatcherServiceDW status

本版守护服务由 svc_ctl_linux 启动,进程列表中会显示 svc_ctl_linux dmwatcher ...。

6. 部署确认监视器与普通监视器

确认监视器后台运行,负责故障确认和自动接管;普通监视器用于日常查看。两者使用独立配置文件。监视器说明

6.1 在第三台机器配置确认监视器

监视器节点以 dmdba 编辑:

vim /home/dmdba/dmdbms/bin/dmmonitor.ini
MON_DW_CONFIRM = 1 MON_LOG_PATH = /home/dmdba/dmdbms/log MON_LOG_INTERVAL = 60 MON_LOG_FILE_SIZE = 64 MON_LOG_SPACE_LIMIT = 2048 MON_TAKEOVER_SHUTDOWN = 0 [DW_GRP] MON_INST_OGUID = 453331 MON_DW_IP = 192.0.2.10:52141 MON_DW_IP = 192.0.2.11:52142

MON_DW_IP 对应两端的 MAL_HOST:MAL_DW_PORT。

监视器节点 root 注册并启动服务:

/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p DW -i /home/dmdba/dmdbms/bin/dmmonitor.ini systemctl start DmMonitorServiceDW.service systemctl enable DmMonitorServiceDW.service

以 dmdba 查看状态:

/home/dmdba/dmdbms/bin/DmMonitorServiceDW status

6.2 使用独立配置启动普通监视器

在同一监视器节点,以 dmdba 编辑:

vim /home/dmdba/dmdbms/bin/dmmonitor_manual.ini
MON_DW_CONFIRM = 0 MON_LOG_PATH = /home/dmdba/dmdbms/log MON_LOG_INTERVAL = 60 MON_LOG_FILE_SIZE = 64 MON_LOG_SPACE_LIMIT = 2048 MON_TAKEOVER_SHUTDOWN = 0 [DW_GRP] MON_INST_OGUID = 453331 MON_DW_IP = 192.0.2.10:52141 MON_DW_IP = 192.0.2.11:52142

本版实验曾出现两个监视器同秒启动、MID 重复导致显示不全的问题。确认监视器启动 3~5 秒后,再以 dmdba 启动普通监视器:

/home/dmdba/dmdbms/bin/dmmonitor /home/dmdba/dmdbms/bin/dmmonitor_manual.ini

7. 核对主备状态与数据同步

7.1 查看集群状态

普通监视器收到两端信息后执行:

show
tip

重点检查:

检查项 预期结果
实例角色 GRP1_RT_01 为 PRIMARY,GRP1_RT_02 为 STANDBY,只有一个主库
实例及守护状态 两端 ISTATUS、WSTATUS 为 OPEN,INST_OK 为 OK
控制文件状态 两端 WCTLSTAT 为 VALID
归档状态 REALTIME,主库到备库相应归档 RSTAT 为 VALID
日志推进 备库接收、重演持续推进,业务暂停时逐步追平
整体状态 tip 没有提示节点缺失、分裂或其他异常

服务启动命令行中保留 mount,仅表示启动时采用 MOUNT,不代表实例当前仍处于 MOUNT;当前状态以查询和监视器结果为准。

7.2 检查确认监视器连接

在普通监视器中执行:

show monitor DW_GRP.GRP1_RT_01
show monitor DW_GRP.GRP1_RT_02

两份结果均应有 192.0.2.12、MON_CONFIRM = TRUE 的连接记录。普通监视器自身的记录为 FALSE。

7.3 验证主库写入、备库查询

使用未占用的测试表名验证同步,清理时只删除本节创建的表。

主库以 SYSDBA 执行:

CREATE TABLE SYSDBA.DW_SYNC_VERIFY (ID INT PRIMARY KEY, CONTENT VARCHAR(50)); INSERT INTO SYSDBA.DW_SYNC_VERIFY VALUES (1, 'DW_SYNC_OK'); COMMIT;

备库以 SYSDBA 查询:

SELECT * FROM SYSDBA.DW_SYNC_VERIFY;

确认查询到已提交记录后,回到主库清理本节创建的测试表:

DROP TABLE SYSDBA.DW_SYNC_VERIFY;

主备状态正常、同步追平后,验证应用双地址连接、主库登录、查询和事务提交,再恢复业务及定时任务。

7.4 变更后重新备份

主备追平、业务验证通过后,在当前主库执行新的全量备份:

BACKUP DATABASE FULL BACKUPSET '/dmbak/DW_AFTER_CHANGE_FULL';

在当前主库以 dmdba 校验:

/home/dmdba/dmdbms/bin/dmrman USE_AP=2 CTLSTMT="CHECK BACKUPSET '/dmbak/DW_AFTER_CHANGE_FULL'"

变更前备份、原配置及所需归档保留至验收完成。

8. 回退说明

尚未恢复业务、原主库仍是唯一业务写入源时,可在停止监视器、两端守护和数据库后,恢复原主库配置,以 MOUNT 启动并改回 NORMAL,再恢复原单机服务启动方式,备库保持停止。

若备库已经接管并产生业务数据,需先确认最新数据所在节点,再制定回退方案。

参考资料

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服