技术分享 | 达梦数据库守护集群搭建
本文为墨天轮数据库管理服务团队第169期技术分享,内容原创,作者为技术顾问胡振兴,如需转载请联系小墨(VX:modb666)并注明来源。如需查看更多文章可关注【墨天轮】公众号。 搭建的主备集群架构如下图: ARCH\_WAIT\_APPLY 参数,设置为 0:高性能模式;设置为 1:事务一致模式。 2.1.1 初始化实例并备份数据 初始化实例 开启归档 修改 dm.ini 关闭前台实例服务 Ctrl+C 2.1.2 修改 dmarch.ini [dmdba@dm1 ~]$ vi /dm8/dmdbms/data/DAMENG/dmarch.ini 2.1.3 创建 dmmal.ini [dmdba@dm1 ~]$ vi /dm8/dmdbms/data/DAMENG/dmmal.ini 2.1.4 创建 dmwatcher.ini [dmdba@dm1 ~]$ vi /dm8/dmdbms/data/DAMENG/dmwatcher.ini 2.1.5 拷贝备份文件 [dmdba@dm1 fullback]$ scp * dmdba@192.168.6.143:/dmdata/dm8/backup 2.1.6 注册服务 2.2.1 初始化实例 2.2.2 恢复数据 2.2.3 替换 dmarch.ini 2.2.4 配置 dm.ini、dmmal.ini 和 dmwatcher.ini 在 备库机器上配置备库的实例名为 DMGRID2,dm.ini 参数修改如下 配置 dmmal.ini 和 dmwatcher.ini 备库 机器里 dmmal.ini、dmwatcher.ini 与 主库 DMGRID2 的 dmmal.ini、dmwatcher.ini 相同,参照 A 机器 dmmal.ini、dmwatcher.ini 文件进行配置 2.3.1 创建 dmmonitor.ini vi /dm8/dmdbms/bin/dmmonitor.ini 主库备库都执行 /dm8/dmdbms/bin/dmserver /dm8/dmdbms/data/DAMENG/dm.ini mount 主库 备库 主库备库启动datawatcher 查看数据库状态 备库 测试数据同步 主节点登录 testdb用户 备节点查询表 [dmdba@dm2 log]$ disql sysdba/'"Oracle2025!"' 墨天轮从乐知乐享的数据库技术社区蓄势出发,全面升级,提供多类型数据库管理服务。墨天轮数据库管理服务旨在为用户构建信赖可托付的数据库环境,并为数据库厂商提供中立的生态支持。
一、安装前准备
1.1 集群规划
主库 备库 业务 IP 192.168.6.142 192.168.6.143 实例名 DMGRID1 DMGRID2 实例端口 5236 5236 MAL 端口 5336 5336 MAL 守护进程端口 5436 5436 守护进程端口 5536 5536 OGUID 45331 45331 守护组 GRP1 GRP1 安装目录 /dm8/dmdbms /dm8/dmdbms 实例目录 /dm8/dmdbms/data /dm8/dmdbms/data 归档上限 51200 51200 1.2 集群架构

1.3 切换模式说明

二、集群搭建
2.1 配置 主库
[dmdba@dm1 ~]$ /dm8/dmdbms/bin/dminit PATH=/dm8/dmdbms/data/ INSTANCE_NAME=DMGRID1 PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=y DB_NAME=DAMENG INSTANCE_NAME=DMGRID1 PORT_NUM=5236 LOG_SIZE=2048 SYSDBA_PWD=Oracle2025! SYSAUDITOR_PWD=Oracle2025!
SQL> ALTER DATABASE MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/dm8/dmdbms/data/DAMENG/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200';
SQL> ALTER DATABASE OPEN;
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);ARCH_WAIT_APPLY = 0 #0:高性能 1:事务一致
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm8/dmdbms/data/DAMENG/arch/ #本地归档存放路径
ARCH_FILE_SIZE = 1024 #单个归档大小,单位 MB
ARCH_SPACE_LIMIT = 51200 #归档上限,单位 MB
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DMGRID2 #实时归档目标实例名MAL_CHECK_INTERVAL = 10 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 链路断开的时间
MAL_TEMP_PATH = /dm8/dmdbms/data/malpath/ #临时文件目录
MAL_BUF_SIZE = 512 #单个 MAL 缓存大小,单位 MB
MAL_SYS_BUF_SIZE = 2048 #MAL 总大小限制,单位 MB
MAL_COMPRESS_LEVEL = 0 #MAL 消息压缩等级,0 表示不压缩
[MAL_INST1]
MAL_INST_NAME = DMGRID1 #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST = 192.168.6.142 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.6.142 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = DMGRID2
MAL_HOST = 192.168.6.143
MAL_PORT = 5336
MAL_INST_HOST = 192.168.6.143
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #MANUAL:故障手切 AUTO:故障自切
DW_ERROR_TIME = 20 #远程守护进程故障认定时间
INST_ERROR_TIME = 20 #本地实例故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_OGUID = 45331 #守护系统唯一 OGUID 值
INST_INI = /dm8/dmdbms/data/DAMENG/dm.ini #dm.ini 文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm8/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭拷贝备份文件到备库

[root@~]# /dm8/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DMGRID1 -dm_ini /dm8/dmdbms/data/DAMENG/dm.ini -m mount
[root@~]# /dm8/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dm8/dmdbms/data/DAMENG/dmwatcher.ini
2.2 配置 备库

/dm8/dmdbms/bin/dmrman CTLSTMT="RESTORE DATABASE '/dm8/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/dmdbms/data/DAMENG/bak/BACKUP_FILE'"
/dm8/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/dm8/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/dmdbms/data/DAMENG/bak/BACKUP_FILE'"
/dm8/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/dm8/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC"[dmdba@dm2 DAMENG]$ vi /dm8/dmdbms/data/DAMENG/dmarch.ini
ARCH_WAIT_APPLY = 0 #0:高性能 1:事务一致
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm8/dmdbms/data/DAMENG/arch/ #本地归档存放路径
ARCH_FILE_SIZE = 1024 #单个归档大小,单位 MB
ARCH_SPACE_LIMIT = 51200 #归档上限,单位 MB
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DMGRID1 #实时归档目标实例名INSTANCE_NAME = DMGRID2
PORT_NUM = 5236 #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志重演信息2.2.5 注册服务
/dm8/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DMGRID2 -dm_ini /dm8/dmdbms/data/DAMENG/dm.ini -m mount
/dm8/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dm8/dmdbms/data/DAMENG/dmwatcher.ini若要删除自启,可利用如下方式:
[root@~]# /dm8/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceDMGRID2
[root@~]# /dm8/dmdbms/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher2.3 配置确认监视器
MON_DW_CONFIRM = 1 #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH = ../log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 512 #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT = 2048 #日志上限,单位 MB
[GRP1]
MON_INST_OGUID = 45331 #组 GRP1 的唯一 OGUID 值
MON_DW_IP = 192.168.6.142:5436 #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP = 192.168.6.143:5436三、测试主从同步
/dm8/dmdbms/bin/disqlsysdba/'"Oracle2025!**"'
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SP_SET_OGUID(45331);
ALTER DATABASE PRIMARY;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SP_SET_OGUID(45331);
ALTER DATABASE STANDBY;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
select status$from v$instance;/dm8/dmdbms/bin/dmwatcher /dm8/dmdbms/data/DAMENG/dmwatcher.iniSQL> select status$,mode$ from v$instance;

主节点启动monitor
/dm8/dmdbms/bin/dmmonitor /dm8/dmdbms/bin/dmmonitor.ini
create tablespace test datafile '/dm8/dmdbms/data/DAMENG/test.DBF' size 128 autoextend on maxsize 10240;
create user testdb identified by "Oracle2025!" default tablespace test default index tablespace test;
grant dba to testdb;


墨天轮数据库服务官网:https://www.modb.pro/service