保留原单机作为主库,用全量备份恢复出一台备库,再部署实时归档、守护进程和独立确认监视器。下面记录 DM7 7.6.1.146 的改造步骤,IP 使用示例地址。
| 节点 | 示例 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 是守护进程的监听端口。
备库和监视器节点准备好 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
主备库分别准备与版本、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。集群授权说明
联机备份要求主库已开启本地归档。建备期间暂停归档清理,保留从全备开始到备库追平所需的连续归档。
主库,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/
主库查看初始化参数:
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
初始化后保持停库,恢复完成后沿用原库账号和口令。
备库,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'"
本文主备数据目录相同,主库以 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
两端以 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
两端以 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 是实验配置,实际按归档量和建备时间调整;原库已有归档项时,在原配置上修改。
两端以 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 分别对应下一节注册的主、备数据库服务。
主库以 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/
停止应用和写入任务,处理完业务事务。主库以 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 指定配置文件。参数说明
主库以 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。
主备两端 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 ...。
确认监视器后台运行,负责故障确认和自动接管;普通监视器用于日常查看。两者使用独立配置文件。监视器说明
监视器节点以 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
在同一监视器节点,以 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
普通监视器收到两端信息后执行:
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;当前状态以查询和监视器结果为准。
在普通监视器中执行:
show monitor DW_GRP.GRP1_RT_01
show monitor DW_GRP.GRP1_RT_02
两份结果均应有 192.0.2.12、MON_CONFIRM = TRUE 的连接记录。普通监视器自身的记录为 FALSE。
使用未占用的测试表名验证同步,清理时只删除本节创建的表。
主库以 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;
主备状态正常、同步追平后,验证应用双地址连接、主库登录、查询和事务提交,再恢复业务及定时任务。
主备追平、业务验证通过后,在当前主库执行新的全量备份:
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'"
变更前备份、原配置及所需归档保留至验收完成。
尚未恢复业务、原主库仍是唯一业务写入源时,可在停止监视器、两端守护和数据库后,恢复原主库配置,以 MOUNT 启动并改回 NORMAL,再恢复原单机服务启动方式,备库保持停止。
若备库已经接管并产生业务数据,需先确认最新数据所在节点,再制定回退方案。
文章
阅读量
获赞
