注册
数据库守护集群搭建及读写分离配置
专栏/技术分享/ 文章详情 /

数据库守护集群搭建及读写分离配置

赵国伟 2025/04/11 238 0 0
摘要

DW 集群原理以及搭建

一、DM 集群
DM 集群包括:数据守护集群、读写分离集群、MPP 主备集群
DM 单机:本地归档
DM 数据守护集群:本地归档、实时归档、异步归档
DM 读写分离集群:本地归档、即时归档
MPP 主备集群:本地归档、实时归档
二、DM 归档类型
本地归档:LOCAL ARCHIVE,最多可设置 8 个。 redo 日志写入日志文件后触发。
实时归档:REALTIME ARCHIVE,最多可设置 8 个。在 redo 日志写入到日志文
件前,通过 MAL 系统发送 redo 日志到远程备机并等待返回确认消息。
即时归档:TIMELY ARCHIVE,最多可设置 8 个。在 redo 日志写入到日志文件
后,通过 MAL 系统发送 redo 日志到远程备机并等待 APPLY 完成后返回消息。
异步归档:ASYNC ARCHIVE,最多可设置 8 个。由主备机定时同步日志到异备。
三、数据守护集群
3.1、数据守护集群概念
DM 数据守护(Data Watch)是一种集成化的高可靠性解决方案,满足用户对数据
安全性和高可用性的要求。主要解决由于硬件故障、自然灾害等原因导致的数据库
服务长时间中断问题,提供不间断数据库服务。
3.2、数据守护集群架构及原理
图片1.png

3.3、守护进程
主要功能:监控数据库状态、发送状态信息、监控其他守护进程消息、接收监视器
消息、主备库启动运行、备库故障处理、备库异常处理、主库故障处理、
故障修复处理
故障自动切换:主库发生故障时,确认监视器自动选择一个备库,切换为主库对外 提供服务,故障自动切换模式,要求必须配置且只能配置一个确认
监视器
故障手动切换:由用户根据实际情况,通过监视器命令将备库切换为主库。在用户
干预之前,备库可以继续提供只读服务,但修改非临时表数据的操
作将会失败。

3.4、监视器作用及类型
监视器作用:监视数据守护状态、状态信息确认(配置为故障自动切换的确认监视器的
情况下)、管理数据守护状态、发起故障自动接管命令
监视器类型:
监控模式(dmmonitor.ini:MON_DW_CONFIRM=0)
确认模式(dmmonitor.ini:MON_DW_CONFIRM=1)
区别:确认模式除了具备监控模式所有功能外,还具有状态确认和自动接管两个功能。
状态确认:主库守护进程监测到备库故障时,需要向监视器求证,确认备库是真的故障
了,再启动故障处理流程将归档失效,避免脑裂。状态确认只对故障自动切换数据守护
系统有效,主库守护进程在满足一定条件时,会切换到 Confirm 状态,然后根据不同的
场景决定是否切换为 Failover 状态并启动故障处理流程。
自动接管:故障自动切换模式下,确认监视器检测到主库故障后,根据收到的主备 LSN、
归档状态、MAL 链路状态等信息,确定一个接管备库,并将其切换为主库。

四、守护集群搭建
4.1、集群环境规划
服务器名 DM-1 DM-2
数据库角色 primary standby
IP 10.12.10.102 10.12.10.105
实例名 GRP1_RT_01 GRP1_RT_02
实例端口 5236 5236
MAL端口 52361 52361
本地守护进程端口 52362 52362
监听守护进程端口 52363 52363
OGUID 12345 12345
守护组 GRP1 GRP1
安装目录 /opt/dm /opt/dm
实例目录 /opt/DAMENG /opt/DAMENG
归档目录 /opt/DAMENG/arch /opt/DAMENG/arch
监视器IP 10.12.10.104
4.2、配置文件说明

  1. 数据库配置文件 dm.ini (集群内尽可能一致)
  2. MAL 配置文件 dmmal.ini (集群内一致)
  3. Redo 日志归档配置文件 dmarch.ini
  4. 守护进程配置文件 dmwatcher.ini (集群内基本一致)
  5. 确认监视器配置文件 dmmonitor.ini
    4.3、主库配置(10.12.10.102)
    4.3.1、初始化实例、备份数据库
    –初始化实例
    [dmdba@dmp ~]$ dminit PATH=/dm8/data INSTANCE_NAME=GRP1_RT_01 SYSDBA_PWD=Dameng_123 SYSAUDITOR_PWD=Dameng_123
    –启动服务
    [dmdba@dmp ~]$ nohup dmserver /opt/DAMENG/dm.ini &
    –开启归档
    [dmdba@dmp ~]$ disql sysdba/Dameng_123@10.12.10.102:5236
    SQL> ALTER DATABASE MOUNT;
    SQL> ALTER DATABASE ARCHIVELOG;
    SQL> ALTER DATABASE ADD ARCHIVELOG ‘DEST=/opt/DAMENG/arch,TYPE=local,FILE_SIZE=256,SPACE_LIMIT=5120’;
    SQL> ALTER DATABASE OPEN;
    –备份数据
    SQL> BACKUP DATABASE BACKUPSET ‘/data/BACKUP_FILE’;
    –修改 dm.ini
    SQL> SP_SET_PARA_VALUE (2,‘PORT_NUM’,5236);
    SQL> SP_SET_PARA_VALUE (2,‘DW_INACTIVE_INTERVAL’,60);
    SQL> SP_SET_PARA_VALUE (2,‘ALTER_MODE_STATUS’,0);
    SQL> SP_SET_PARA_VALUE (2,‘ENABLE_OFFLINE_TS’,2);
    SQL> SP_SET_PARA_VALUE (2,‘MAL_INI’,1);
    SQL> SP_SET_PARA_VALUE (2,‘RLOG_SEND_APPLY_MON’,64);
    4.3.2、编辑 dmarch.ini
    [dmdba@dmp DAMENG]$ vi dmarch.ini
    ARCH_WAIT_APPLY = 0
    [ARCHIVE_LOCAL1]
    ARCH_TYPE = LOCAL
    ARCH_DEST = /opt/DAMENG/arch
    ARCH_FILE_SIZE = 256
    ARCH_SPACE_LIMIT = 5120
    ARCH_FLUSH_BUF_SIZE = 2
    ARCH_HANG_FLAG = 1
    [ARCHIVE_REALTIME]
    ARCH_TYPE = REALTIME
    ARCH_DEST = GRP1_RT_02
    4.3.3、创建 dmmal.ini
    [dmdba@dm1 DAMENG]# vim dmmal.ini
    MAL_CHECK_INTERVAL = 10 #MAL 链路检测时间间隔
    MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 链路断开的时间
    MAL_TEMP_PATH = /opt/DAMENG/malpath
    #临时文件目录
    MAL_BUF_SIZE = 128 #单个 MAL 缓存大小,单位 MB
    MAL_SYS_BUF_SIZE = 512 #MAL 总大小限制,单位 MB
    MAL_COMPRESS_LEVEL = 0 #MAL 消息压缩等级,0 表示不压缩
    [MAL_INST1]
    MAL_INST_NAME = GRP1_RT_01 #实例名,和 dm.ini 的 INSTANCE_NAME 一致
    MAL_HOST = 10.12.10.102 #MAL 系统监听 TCP 连接的 IP 地址
    MAL_PORT = 52361 #MAL 系统监听 TCP 连接的端口
    MAL_INST_HOST = 10.12.10.102 #实例的对外服务 IP 地址
    MAL_INST_PORT = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
    MAL_DW_PORT = 52362 #实例对应的守护进程监听 TCP 连接的端口
    MAL_INST_DW_PORT = 52363 #实例监听守护进程 TCP 连接的端口
    [MAL_INST2]
    MAL_INST_NAME = GRP1_RT_02
    MAL_HOST = 10.12.10.105
    MAL_PORT = 52361
    MAL_INST_HOST = 10.12.10.105
    MAL_INST_PORT = 5236
    MAL_DW_PORT = 52362
    MAL_INST_DW_PORT = 52363
    4.3.4、创建 dmwatcher.ini
    [dmdba@dm1 DAMENG]# vim dmwatcher.ini
    [GRP1]
    DW_TYPE = GLOBAL #全局守护类型
    DW_MODE = AUTO #故障手动切换模式(AUTO 自动)
    DW_ERROR_TIME = 20 #远程守护进程故障认定时间
    INST_ERROR_TIME = 20 #本地实例故障认定时间
    INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
    INST_OGUID = 12345 #守护系统唯一 OGUID 值
    INST_INI = /opt/DAMENG/dm.ini #dm.ini 文件路径
    INST_AUTO_RESTART = 1 #打开实例的自动启动功能
    INST_STARTUP_CMD = /opt/dm/bin/dmserver #命令行方式启动
    RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
    RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
    4.3.5、拷贝实例目录到备库
    [dmdba@dm1 opt]$ scp -r /opt/DAMENG/ 10.12.10.105:/opt/DAMENG/
    4.3.6、注册服务
    [root@dm1 root]$ ./dm_service_installer.sh -t dmserver -p GRP1_RT_01 -dm_ini /opt/DAMENG/dm.ini -m mount
    [root@dm1 root]$ ./dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /opt/DAMENG/dmwatcher.ini
    备注:删除自启
    [root@dm1 root]$ ./dm_service_uninstaller.sh -n DmServiceGRP1_RT_01
    [root@dm1 root]$ ./dm_service_uninstaller.sh -n DmWatcherServiceWatcher
    4.4、备库配置(10.12.10.105)
    4.4.1、编辑 dm.ini 替换实例名
    [dmdba@dm2 DAMENG]$ vi dm.ini
    #instance name
    INSTANCE_NAME = GRP1_RT_02
    4.4.2、编辑 dmarch.ini
    [dmdba@dmp DAMENG]$ vi dmarch.ini
    ARCH_WAIT_APPLY = 0
    [ARCHIVE_LOCAL1]
    ARCH_TYPE = LOCAL
    ARCH_DEST = /opt/DAMENG/arch
    ARCH_FILE_SIZE = 256
    ARCH_SPACE_LIMIT = 5120
    ARCH_FLUSH_BUF_SIZE = 2
    ARCH_HANG_FLAG = 1
    [ARCHIVE_REALTIME]
    ARCH_TYPE = REALTIME
    ARCH_DEST = GRP1_RT_01
    4.4.3、相同配置项
    dmmal.ini 和 dmwatcher.ini 配置相同,无需修改
    4.4.4、注册服务
    [root@dm1 root]$ ./dm_service_installer.sh -t dmserver -p GRP1_RT_02 -dm_ini /opt/DAMENG/dm.ini -m mount
    [root@dm1 root]$ ./dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /opt/DAMENG/dmwatcher.ini
    备注:删除自启
    [root@dm1 root]$ ./dm_service_uninstaller.sh -n DmServiceGRP1_RT_02
    [root@dm1 root]$ ./dm_service_uninstaller.sh -n DmWatcherServiceWatcher
    4.4.5、恢复数据
    [dmdba@dm1 opt]$ scp -r /data/BACKUP_FILE 10.12.10.105:/data/BACKUP_FILE
    [dmdba@dm1 opt]$ dmrman CTLSTMT=“RESTORE DATABASE ‘/opt/DAMENG/dm.ini’ FROM BACKUPSET ‘/data/BACKUP_FILE’”
    [dmdba@dm1 opt]$ dmrman CTLSTMT=“RECOVER DATABASE ‘/opt/DAMENG/dm.ini’ FROM BACKUPSET ‘/data/BACKUP_FILE’”
    [dmdba@dm1 opt]$ dmrman CTLSTMT=“RECOVER DATABASE ‘/opt/DAMENG/dm.ini’ UPDATE DB_MAGIC”

4.5、监听器配置(192.168.10.104)
4.5.1、创建 dmmonitor.ini
[dmdba@monitor monitor]$ vim dmmonitor.ini
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /opt/monitor/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32#每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 12345 #组 GRP1 的唯一 OGUID 值
#以下配置为监视器到组 GRP1 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 10.12.10.102:52362
MON_DW_IP = 10.12.10.105:52362
4.5.2、注册服务
[root@monitor root]# ./dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /opt/monitor/dmmonitor.ini
备注:删除自启
[root@dmm root]# ./dm_service_uninstaller.sh -n DmMonitorServiceMonitor
4.6、启动服务
4.6.1、启动数据库并修改参数
 10.12.10.102
[dmdba@dm1 malpath]$ DmServiceGRP1_RT_01 start
Starting DmServiceGRP1_RT_01: [ OK ]
[dmdba@dm1 malpath]$ disql SYSDBA/Dameng_123
服务器[LOCALHOST:5236]:处于普通配置状态
登录使用时间 : 4.972(ms)
disql V8
SQL> SP_SET_OGUID(12345);
DMSQL 过程已成功完成
已用时间: 30.130(毫秒). 执行号:1.
SQL> ALTER DATABASE PRIMARY;
操作已执行
已用时间: 35.495(毫秒). 执行号:0.
SQL> exit
 10.12.10.105
[dmdba@dm2 ~]$ DmServiceGRP1_RT_02 start
Starting DmServiceGRP1_RT_02: [ OK ]
[dmdba@dm2 ~]$ disql SYSDBA/Dameng_123
服务器[LOCALHOST:5236]:处于普通配置状态
登录使用时间 : 4.773(ms)
disql V8
SQL> SP_SET_OGUID(12345);
DMSQL 过程已成功完成
已用时间: 6.601(毫秒). 执行号:1.
SQL> ALTER DATABASE STANDBY;
操作已执行
已用时间: 11.510(毫秒). 执行号:0.
SQL> exit;
4.6.2、启动守护进程
 10.12.10.102
[dmdba@dm1 malpath]$ DmWatcherServiceWatcher start
Starting DmWatcherServiceWatcher: [ OK ]
 10.12.10.105
[dmdba@dm2 ~]$ DmWatcherServiceWatcher start
Starting DmWatcherServiceWatcher: [ OK ]
4.6.3、启动监视器
 10.12.10.104
[dmdba@monitor monitor]$ DmMonitorServiceMonitor start
Starting DmMonitorServiceMonitor: [ OK ]
[dmdba@monitor monitor]$ dmmonitor dmmonitor_normal.ini
[monitor] 2025-04-09 22:11:20: DMMONITOR[4.0] V8
[monitor] 2025-04-09 22:11:21: DMMONITOR[4.0] IS READY.

[monitor] 2025-04-09 22:11:21:
#-----------------------------------------------------------------------------------------------#
GET MONITOR CONNECT INFO FROM DMWATCHER(GRP1_RT_01), THE FIRST LINE IS SELF INFO.

DW_CONN_TIME MON_CONFIRM MID MON_IP MON_VERSION
2025-04-09 22:11:21 FALSE 1785734642 ::ffff:10.12.10.104 DMMONITOR[4.0] V8

2025-04-09 22:09:41 TRUE 1203581158 ::ffff:10.12.10.104 DMMONITOR[4.0] V8

#-----------------------------------------------------------------------------------------------#

[monitor] 2025-04-09 22:11:21: 收到守护进程(GRP1_RT_01)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2025-04-09 22:11:21 OPEN OK GRP1_RT_01 OPEN PRIMARY VALID 2 47587 47587

[monitor] 2025-04-09 22:11:21: 收到守护进程(GRP1_RT_02)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2025-04-09 22:11:20 OPEN OK GRP1_RT_02 OPEN STANDBY VALID 2 47587 47587
4.7、手动执行切换主备库

启动监视器

[dmdba@monitor monitor]$ dmmonitor dmmonitor_normal.ini
[monitor] 2025-04-09 22:28:36: DMMONITOR[4.0] V8
[monitor] 2025-04-09 22:28:36: DMMONITOR[4.0] IS READY.

[monitor] 2025-04-09 22:28:36:
#-----------------------------------------------------------------------------------------------#
GET MONITOR CONNECT INFO FROM DMWATCHER(GRP1_RT_01), THE FIRST LINE IS SELF INFO.

DW_CONN_TIME MON_CONFIRM MID MON_IP MON_VERSION
2025-04-09 22:28:36 FALSE 779928068 ::ffff:10.12.10.104 DMMONITOR[4.0] V8

2025-04-09 22:09:41 TRUE 1203581158 ::ffff:10.12.10.104 DMMONITOR[4.0] V8

#-----------------------------------------------------------------------------------------------#

[monitor] 2025-04-09 22:28:36: 收到守护进程(GRP1_RT_01)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2025-04-09 22:28:36 OPEN OK GRP1_RT_01 OPEN PRIMARY VALID 2 47923 47923

[monitor] 2025-04-09 22:28:36: 收到守护进程(GRP1_RT_02)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2025-04-09 22:28:36 OPEN OK GRP1_RT_02 OPEN STANDBY VALID 2 47923 47923

查看组内可切换为主库的备库列表

choose switchover GRP1
Can choose one of the following instances to do switchover:
1: GRP1_RT_02

#登录Monitor 监视器
login
用户名:sysdba
密码:
[monitor] 2025-04-09 22:29:35: 登录监视器成功!

切换 GRP1_RT_02 为主库

switchover GRP1.GRP1_RT_02
此操作需谨慎, 将会导致主库发生切换, 是否继续使用GRP1.GRP1_RT_02执行SWITCHOVER操作(YES/NO/Y/N)?
y
[monitor] 2025-04-09 22:29:49: 开始切换实例GRP1_RT_02
[monitor] 2025-04-09 22:29:49: 通知守护进程GRP1_RT_01切换SWITCHOVER状态
[monitor] 2025-04-09 22:29:49: 守护进程(GRP1_RT_01)状态切换 [OPEN–>SWITCHOVER]
[monitor] 2025-04-09 22:29:49: 切换守护进程GRP1_RT_01为SWITCHOVER状态成功
[monitor] 2025-04-09 22:29:49: 通知守护进程GRP1_RT_02切换SWITCHOVER状态
[monitor] 2025-04-09 22:29:49: 守护进程(GRP1_RT_02)状态切换 [OPEN–>SWITCHOVER]
[monitor] 2025-04-09 22:29:49: 切换守护进程GRP1_RT_02为SWITCHOVER状态成功
[monitor] 2025-04-09 22:29:49: 实例GRP1_RT_01开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句
[monitor] 2025-04-09 22:29:49: 实例GRP1_RT_01执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功
[monitor] 2025-04-09 22:29:49: 实例GRP1_RT_02开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句
[monitor] 2025-04-09 22:29:49: 实例GRP1_RT_02执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功
[monitor] 2025-04-09 22:29:49: 实例GRP1_RT_01开始执行ALTER DATABASE MOUNT语句
[monitor] 2025-04-09 22:29:49: 实例GRP1_RT_01执行ALTER DATABASE MOUNT语句成功
[monitor] 2025-04-09 22:29:49: 实例GRP1_RT_02开始执行SP_APPLY_KEEP_PKG()语句
[monitor] 2025-04-09 22:29:49: 实例GRP1_RT_02执行SP_APPLY_KEEP_PKG()语句成功
[monitor] 2025-04-09 22:29:49: 实例GRP1_RT_02开始执行ALTER DATABASE MOUNT语句
[monitor] 2025-04-09 22:29:49: 实例GRP1_RT_02执行ALTER DATABASE MOUNT语句成功
[monitor] 2025-04-09 22:29:49: 实例GRP1_RT_01开始执行ALTER DATABASE STANDBY语句
[monitor] 2025-04-09 22:29:49: 实例GRP1_RT_01执行ALTER DATABASE STANDBY语句成功
[monitor] 2025-04-09 22:29:49: 实例GRP1_RT_02开始执行ALTER DATABASE PRIMARY语句
[monitor] 2025-04-09 22:29:49: 实例GRP1_RT_02执行ALTER DATABASE PRIMARY语句成功
[monitor] 2025-04-09 22:29:49: 通知实例GRP1_RT_02修改所有归档状态无效
[monitor] 2025-04-09 22:29:49: 修改所有实例归档为无效状态成功
[monitor] 2025-04-09 22:29:49: 实例GRP1_RT_01开始执行ALTER DATABASE OPEN FORCE语句
[monitor] 2025-04-09 22:29:49: 实例GRP1_RT_01执行ALTER DATABASE OPEN FORCE语句成功
[monitor] 2025-04-09 22:29:49: 实例GRP1_RT_02开始执行ALTER DATABASE OPEN FORCE语句
[monitor] 2025-04-09 22:29:50: 实例GRP1_RT_02执行ALTER DATABASE OPEN FORCE语句成功
[monitor] 2025-04-09 22:29:50: 实例GRP1_RT_01开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句
[monitor] 2025-04-09 22:29:50: 实例GRP1_RT_01执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功
[monitor] 2025-04-09 22:29:50: 实例GRP1_RT_02开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句
[monitor] 2025-04-09 22:29:50: 实例GRP1_RT_02执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功
[monitor] 2025-04-09 22:29:50: 通知守护进程GRP1_RT_01切换OPEN状态
[monitor] 2025-04-09 22:29:50: 守护进程(GRP1_RT_01)状态切换 [SWITCHOVER–>OPEN]
[monitor] 2025-04-09 22:29:50: 切换守护进程GRP1_RT_01为OPEN状态成功
[monitor] 2025-04-09 22:29:50: 通知守护进程GRP1_RT_02切换OPEN状态
[monitor] 2025-04-09 22:29:50: 守护进程(GRP1_RT_02)状态切换 [SWITCHOVER–>OPEN]
[monitor] 2025-04-09 22:29:50: 切换守护进程GRP1_RT_02为OPEN状态成功
[monitor] 2025-04-09 22:29:50: 通知组(GRP1)的守护进程执行清理操作
[monitor] 2025-04-09 22:29:50: 清理守护进程(GRP1_RT_01)请求成功
2025-04-09 22:29:50
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP1 12345 FALSE AUTO FALSE

<<DATABASE GLOBAL INFO:>>
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT DETACHED
10.12.10.105 52362 2025-04-09 22:29:49 GLOBAL VALID OPEN GRP1_RT_02 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID FALSE

EP INFO:
INST_IP INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
10.12.10.105 5236 OK GRP1_RT_02 OPEN PRIMARY 0 0 REALTIME VALID 3252 48024 3252 48024 NONE

<<DATABASE GLOBAL INFO:>>
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT DETACHED
10.12.10.102 52362 2025-04-09 22:29:50 GLOBAL VALID OPEN GRP1_RT_01 OK 1 1 OPEN STANDBY DSC_OPEN REALTIME INVALID FALSE

EP INFO:
INST_IP INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
10.12.10.102 5236 OK GRP1_RT_01 OPEN STANDBY 0 0 REALTIME INVALID 3250 47923 3250 47923 NONE

DATABASE(GRP1_RT_01) APPLY INFO FROM (GRP1_RT_02), REDOS_PARALLEL_NUM (1), WAIT_APPLY[FALSE]:
DSC_SEQNO[0], (RSEQ, SSEQ, KSEQ)[3250, 3250, 3250], (RLSN, SLSN, KLSN)[47923, 47923, 47923], N_TSK[0], TSK_MEM_USE[0]
REDO_LSN_ARR: (47923)

#================================================================================#

[monitor] 2025-04-09 22:29:50: 清理守护进程(GRP1_RT_02)请求成功
[monitor] 2025-04-09 22:29:50: 实例GRP1_RT_02切换成功

[monitor] 2025-04-09 22:29:53: 守护进程(GRP1_RT_02)状态切换 [OPEN–>RECOVERY]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2025-04-09 22:29:52 RECOVERY OK GRP1_RT_02 OPEN PRIMARY VALID 3 48024 48024

[monitor] 2025-04-09 22:29:55: 守护进程(GRP1_RT_02)状态切换 [RECOVERY–>OPEN]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2025-04-09 22:29:55 OPEN OK GRP1_RT_02 OPEN PRIMARY VALID 3 48024 48024

切换完成后查看主备库信息

show global info
2025-04-09 22:30:09
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP1 12345 FALSE AUTO FALSE

<<DATABASE GLOBAL INFO:>>
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT DETACHED
10.12.10.105 52362 2025-04-09 22:30:08 GLOBAL VALID OPEN GRP1_RT_02 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID FALSE

DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT DETACHED
10.12.10.102 52362 2025-04-09 22:30:08 GLOBAL VALID OPEN GRP1_RT_01 OK 1 1 OPEN STANDBY DSC_OPEN REALTIME VALID FALSE
#================================================================================#

4.8、故障自动切换主备库
4.8.1、登录监视器确认主备库信息
[dmdba@monitor monitor]$ dmmonitor dmmonitor_normal.ini
[monitor] 2025-04-09 22:58:00: DMMONITOR[4.0] V8
[monitor] 2025-04-09 22:58:00: DMMONITOR[4.0] IS READY.

[monitor] 2025-04-09 22:58:01:
#-----------------------------------------------------------------------------------------------#
GET MONITOR CONNECT INFO FROM DMWATCHER(GRP1_RT_01), THE FIRST LINE IS SELF INFO.

DW_CONN_TIME MON_CONFIRM MID MON_IP MON_VERSION
2025-04-09 22:58:00 FALSE 1710402080 ::ffff:10.12.10.104 DMMONITOR[4.0] V8

2025-04-09 22:09:41 TRUE 1203581158 ::ffff:10.12.10.104 DMMONITOR[4.0] V8

#-----------------------------------------------------------------------------------------------#

[monitor] 2025-04-09 22:58:01: 收到守护进程(GRP1_RT_01)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2025-04-09 22:58:01 OPEN OK GRP1_RT_01 OPEN STANDBY NULL 3 48024 48024

[monitor] 2025-04-09 22:58:01: 收到守护进程(GRP1_RT_02)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2025-04-09 22:58:01 OPEN OK GRP1_RT_02 OPEN PRIMARY VALID 3 48024 48024

show global info
2025-04-09 22:58:08
##
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP1 12345 FALSE AUTO FALSE
<<DATABASE GLOBAL INFO:>>
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT DETACHED
10.12.10.105 52362 2025-04-09 22:58:08 GLOBAL VALID OPEN GRP1_RT_02 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID FALSE
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT DETACHED
10.12.10.102 52362 2025-04-09 22:58:08 GLOBAL VALID OPEN GRP1_RT_01 OK 1 1 OPEN STANDBY DSC_OPEN REALTIME VALID FALSE
#
#

4.8.2、模拟主库故障
 10.12.10.105
[dmdba@dm2 ~]$ DmWatcherServiceWatcher stop && DmServiceGRP1_RT_02 stop
Stopping DmWatcherServiceWatcher: [ OK ]
Stopping DmServiceGRP1_RT_02: [ OK ]
– 查看监视器
SHOW GLOBAL INFO
2025-04-09 23:03:39
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP1 12345 FALSE AUTO FALSE

<<DATABASE GLOBAL INFO:>>
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT DETACHED
10.12.10.102 52362 2025-04-09 23:03:38 GLOBAL VALID OPEN GRP1_RT_01 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID FALSE

ERROR DATABASE:
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT DETACHED
10.12.10.105 52362 2025-04-09 23:01:51 GLOBAL VALID ERROR GRP1_RT_02 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID FALSE

#================================================================================#

4.8.3、故障恢复
[dmdba@dm2 ~]$ DmWatcherServiceWatcher start && DmServiceGRP1_RT_02 start
Starting DmWatcherServiceWatcher: [ OK ]
Starting DmServiceGRP1_RT_02: [ OK ]
– 查看监视器
show global info
2025-04-09 23:07:01
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP1 12345 FALSE AUTO FALSE

<<DATABASE GLOBAL INFO:>>
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT DETACHED
10.12.10.102 52362 2025-04-09 23:07:00 GLOBAL VALID OPEN GRP1_RT_01 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID FALSE

DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT DETACHED
10.12.10.105 52362 2025-04-09 23:07:00 GLOBAL VALID OPEN GRP1_RT_02 OK 1 1 OPEN STANDBY DSC_OPEN REALTIME VALID FALSE

#================================================================================#
五、读写分离实验
5.1、修改归档方式重启服务
5.1.1、修改主备库归档类型(TIMELY)主备库分别修改

[dmdba@dmp DAMENG]$ vi dmarch.ini
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /opt/DAMENG/arch
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 5120
ARCH_FLUSH_BUF_SIZE = 2
ARCH_HANG_FLAG = 1
[ARCHIVE_REALTIME]
ARCH_TYPE = TIMELY
ARCH_DEST = GRP1_RT_02

5.1.2、启动服务
 10.12.10.102
[dmdba@monitor monitor]$ DmServiceGRP1_RT_01 stop && DmWatcherServiceWatcher stop
[dmdba@monitor monitor]$ DmServiceGRP1_RT_01 start && DmWatcherServiceWatcher start
 10.12.10.105
[dmdba@monitor monitor]$ DmServiceGRP1_RT_02 stop && DmWatcherServiceWatcher stop
[dmdba@monitor monitor]$ DmServiceGRP1_RT_02 start && DmWatcherServiceWatcher start
 10.12.10.104
[dmdba@monitor monitor]$ DmMonitorServiceMonitor stop
[dmdba@monitor monitor]$ DmMonitorServiceMonitor start
5.1.3、查看监视器
show global info
2025-04-09 23:48:06
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP1 12345 FALSE AUTO FALSE

<<DATABASE GLOBAL INFO:>>
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT DETACHED
10.12.10.102 52362 2025-04-09 23:48:06 GLOBAL VALID OPEN GRP1_RT_01 OK 1 1 OPEN PRIMARY DSC_OPEN TIMELY VALID FALSE

DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT DETACHED
10.12.10.105 52362 2025-04-09 23:48:05 GLOBAL VALID OPEN GRP1_RT_02 OK 1 1 OPEN STANDBY DSC_OPEN TIMELY VALID FALSE
5.2、dm_svc.conf 配置
[dmdba@dm1 DAMENG]$ vim /etc/dm_svc.conf
TIME_ZONE=(480)
LANGUAGE=(CN)
DW1=(10.12.10.102:5236,10.12.10.105:5236)
[DW1]
LOGIN_MODE=(1)
SWITCH_TIME=(300)
SWITCH_INTERVAL=(200)
RW_SEPARATE=(1)
RW_PERCENT=(50)
参数解析:
LOGIN_MODE:指定优先登录的服务器模式。0:优先连接 PRIMARY 模式的 库,NORMAL 模
式次之,最后选择 STANTBY 模式;1:只连接 主库;2:只连接备库;3:优先连接 STANDBY
模式的库, PRIMARY 模式次之,最后选择 NORMAL 模式;4:优先连接 NORMAL 模式的
库, PRIMARY 模式次之,最后选择 STANDBY 模式 。
SWITCH_TIMES:以服务名连接数据库时,若未找到符合条件的库成功建立连接,将尝试
遍历服务名中库列表的次数。默认值为 1,可以设置至少 3 次用来避免由于网卡的波
动照成数据库连接测频繁切换
WITCH_INTERVAL:在服务器之间切换的时间间隔,单位为毫秒。与参数 SWITCH_TIMES、
EP_SELECTOR 配合使用,EP_SELECTOR 设置为 0,等待 SWITCH_INTERVAL 后会切换尝
试连接下一个服务器,EP_SELECTOR 设置为 1,等待 SWITCH_INTERVAL 后会继续尝试连
接该服务器,直到 SWITCH_TIMES 次再切换下一个服务器.
RW_SEPARATE:是否启用读写分离。0:不启用;1:启用;2:启用,备库由客户端进行
选择,且只会选择服务名中配置的节点
RW_PERCENT:读写分离分发比例,有效值范围 0~100,及主库占所有事物数的比例。可以
根据主备库的实际压力来设定。
5.3、配置应用连接
Linux 环境:dm_svc.conf 放在应用服务器/etc 目录下。
Windows32 环境:dm_svc.conf 放在应用服务器 System32 目录下。
Windows64 环境:dm_svc.conf 放在应用服务器 System32 和 SysWOW64 目录下。
5.3.1、创建 dm_svc.conf
[root@~]# vi /etc/dm_svc.conf
TIME_ZONE=(+8:00)
LANGUAGE=(cn)
DW1=(10.12.10.102:5236,10.12.10.105:5236)
[DW1]
LOGIN_MODE=(1)
SWITCH_TIME=(300)
SWITCH_INTERVAL=(200)
RW_SEPARATE=(1)
RW_PERCENT=(50)
5.3.2、应用连接
<DRIVER>dm.jdbc.driver.DmDriver</DRIVER>
<URL>jdbc:dm://DW1</URL>
5.4、动态增加读写分离集群节点
5.4.1、规划
服务器名 DM-3
数据库角色 Standby
IP 10.12.10.106
实例名 GRP1_RT_03
实例端口 5236
MAL端口 52361
本地守护进程端口 52362
监听守护进程端口 52363
OGUID 12345
守护组 GRP1
安装目录 /opt/dm
实例目录 /opt/DAMENG
归档目录 /opt/DAMENG/arch

5.4.2、数据准备
5.4.2.1.拷贝实例目录到备库
[dmdba@dm1 opt]$ scp -r /opt/DAMENG/ 10.12.10.106:/opt/DAMENG/
5.4.2.2.备份主库并拷贝备份文件到备库恢复备库
10.12.10.102
[dmdba@dmp ~]$ disql sysdba/Dameng_123@10.12.10.102:5236
SQL> BACKUP DATABASE BACKUPSET ‘/data/BACKUP_FILE’;
[dmdba@dm1 opt]$ scp -r /data/BACKUP_FILE1 10.12.10.106:/data/BACKUP_FILE1
10.12.10.106
[dmdba@dm1 opt]$ dmrman CTLSTMT=“RESTORE DATABASE ‘/opt/DAMENG/dm.ini’ FROM BACKUPSET ‘/data/BACKUP_FILE1’”
[dmdba@dm1 opt]$ dmrman CTLSTMT=“RECOVER DATABASE ‘/opt/DAMENG/dm.ini’ FROM BACKUPSET ‘/data/BACKUP_FILE1’”
[dmdba@dm1 opt]$ dmrman CTLSTMT=“RECOVER DATABASE ‘/opt/DAMENG/dm.ini’ UPDATE DB_MAGIC”

5.4.2.3.编辑dm.ini 替换实例名
[dmdba@dm3 DAMENG]$ vi dm.ini
#instance name
INSTANCE_NAME = GRP1_RT_03
5.4.2.4.编辑dmarch.ini
[dmdba@dm3 DAMENG]$ vim dmarch.ini
[dmdba@dm3 DAMENG]$ cat dmarch.ini
#DaMeng Database Archive Configuration file
#this is comments

ARCH_WAIT_APPLY = 0

[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /opt/DAMENG/arch
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 5120
ARCH_FLUSH_BUF_SIZE = 2
ARCH_HANG_FLAG = 1
[ARCHIVE_REALTIME1]
ARCH_TYPE = TIMELY
ARCH_DEST = GRP1_RT_01
[ARCHIVE_REALTIME2]
ARCH_TYPE = TIMELY
ARCH_DEST = GRP1_RT_02
5.4.2.5.配置 dmmal.ini
[dmdba@dm3 DAMENG]# vim dmmal.ini
MAL_CHECK_INTERVAL = 10 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 链路断开的时间
MAL_TEMP_PATH = /opt/DAMENG/malpath
#临时文件目录
MAL_BUF_SIZE = 128 #单个 MAL 缓存大小,单位 MB
MAL_SYS_BUF_SIZE = 512 #MAL 总大小限制,单位 MB
MAL_COMPRESS_LEVEL = 0 #MAL 消息压缩等级,0 表示不压缩
[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01 #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST = 10.12.10.102 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 52361 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 10.12.10.102 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT = 52362 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 52363 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 10.12.10.105
MAL_PORT = 52361
MAL_INST_HOST = 10.12.10.105
MAL_INST_PORT = 5236
MAL_DW_PORT = 52362
MAL_INST_DW_PORT = 52363
[MAL_INST3]
MAL_INST_NAME = GRP1_RT_03
MAL_HOST = 10.12.10.106
MAL_PORT = 52361
MAL_INST_HOST = 10.12.10.106
MAL_INST_PORT = 5236
MAL_DW_PORT = 52362
MAL_INST_DW_PORT = 52363
5.4.2.6.dmwatch.ini 和其他节点保持一致
5.4.2.7. 注册服务
[root@dm3 root]$ ./dm_service_installer.sh -t dmserver -p GRP1_RT_03 -dm_ini /opt/DAMENG/dm.ini -m mount
[root@dm3 root]$ ./dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /opt/DAMENG/dmwatcher.ini
备注:删除自启
[root@dm3 root]$ ./dm_service_uninstaller.sh -n DmServiceGRP1_RT_03
[root@dm3 root]$ ./dm_service_uninstaller.sh -n DmWatcherServiceWatcher
5.4.2.8.修改数据库模式
[dmdba@dm3 ~]$ DmServiceGRP1_RT_03 start
Starting DmServiceGRP1_RT_03: [ OK ]
[dmdba@dm3 ~]$ disql SYSDBA/Dameng_123
服务器[LOCALHOST:5236]:处于普通配置状态
登录使用时间 : 4.773(ms)
disql V8
SQL>SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 1);
SQL>SP_SET_OGUID(12345);
DMSQL 过程已成功完成
已用时间: 6.601(毫秒). 执行号:1.
SQL> ALTER DATABASE STANDBY;
操作已执行
已用时间: 11.510(毫秒). 执行号:0.
SQL>SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);
exit;

5.4.2.9.动态添加 MAL 配置
本小节的步骤需要分别连接原系统中每个数据库单独执行:
动态增加 MAL 中 GRP1_RT_03 的相关配置信息:
[dmdba@dm1 ~]$ disql SYSDBA/Dameng_123
SQL>SF_MAL_CONFIG(1,0);
SQL>SF_MAL_INST_ADD(‘MAL_INST3’,‘GRP1_RT_03’,‘10.12.10.106’,52361,‘10.12.10.106’,5236,52362,0,52363);
SQL>SF_MAL_CONFIG_APPLY();
SQL>SF_MAL_CONFIG(0,0);
5.4.2.10.动态添加归档配置
动态添加归档配置步骤如下:
关闭原系统中所有数据库的守护进程和监视器
动态添加归档要求数据库处于 MOUNT 状态,守护进程处于活动状态下不允许用
户手动修改模式状态,因此需要先关闭守护进程,同时也是为了防止手动切换
MOUNT 状态后又被守护进程通知自动 OPEN,另外监视器配置也需要修改,因
此在这里一并关闭。
关闭顺序为:

  1. 关闭监视器
  2. 关闭备库守护进程
  3. 关闭主库守护进程
  1. 手动修改原系统中所有数据库为 MOUNT 状态
    必须先修改主库,再修改备库,否则可能会引发主备数据同步失败导致主库挂起。
    SQL> SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 1);
    SQL> ALTER DATABASE MOUNT;
    SQL> SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);
  2. 动态添加归档节点
    分别连接原系统中的所有数据库执行
    SQL> ALTER DATABASE ADD ARCHIVELOG ‘DEST=GRP1_RT_03, TYPE=TIMELY’;
  3. 手动修改原系统中所有数据库为 OPEN 状态
    必须先修改备库,再修改主库,否则可能会引发主备数据同步失败导致主库挂起。
    //修改数据库为 OPEN 状态
    SQL> ALTER DATABASE OPEN FORCE;
    SQL> SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);
    SQL> SP_SET_PARA_VALUE(1, ‘DW_INACTIVE_INTERVAL’, 60);
    5.4.2.11.修改监视器 dmmonitor.ini
    在 dmmonitor.ini 中添加新增的备库 GRP1_RT_03:
    [dmdba@monitor monitor]$ vi dmmonitor.ini
    MON_DW_IP = 10.12.10.106:52362
    5.4.2.12.启动所有守护进程以及监视器
    分别启动主库和备库(包括GRP1_RT_03)的所有守护进程,最后启动监视器。
    5.4.2.13.查看监视器信息
    show global info
    2025-04-10 02:14:01
    #================================================================================#
    GROUP OGUID MON_CONFIRM MODE MPP_FLAG
    GRP1 12345 FALSE AUTO FALSE

<<DATABASE GLOBAL INFO:>>
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT DETACHED
10.12.10.102 52362 2025-04-10 02:14:02 GLOBAL VALID OPEN GRP1_RT_01 OK 1 1 OPEN PRIMARY DSC_OPEN TIMELY VALID FALSE

DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT DETACHED
10.12.10.105 52362 2025-04-10 02:14:02 GLOBAL VALID OPEN GRP1_RT_02 OK 1 1 OPEN STANDBY DSC_OPEN TIMELY VALID FALSE

DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT DETACHED
10.12.10.106 52362 2025-04-10 02:14:01 GLOBAL VALID OPEN GRP1_RT_03 OK 1 1 OPEN STANDBY DSC_OPEN TIMELY VALID FALSE
#================================================================================#

六、注意事项
临时表修改不产生redo ,备库可以对临时表进行修改
Dmwatch 必须和被守护的实例部署在同一台机器
DMMonitor 守护dmwatcher 命令执行、自动故障切换需独立部署
建议在配置数据守护过程中,修改 dm.ini 参 数ALTER_MODE_STATUS 为0,限制用户直接通过SQL语句修改数据库状态、模式以及 OGUID,避免 dmwatcher 做出错误的决策。
同守护组内数据库、守护进程、监视器的OGUID需要一致且配置相同的组名

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服