暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

达梦数据库守护集群搭建

一、安装前准备

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 集群架构

搭建的主备集群架构如下图:

image.png

1.3 切换模式说明

故障手动切换

ARCH_WAIT_APP

LY=0

DW_MODE=

MANUAL

MON_DW_CON

FIRM=0

1、配置手动切换:集群各节点的 bin 目录中,存放非确认监视器配置文件。

故障自动切换

ARCH_WAIT_APP

LY= 0

DW_MODE=

AUTO

MON_DW_CON

FIRM=1

1、配置手动切换:集群各节点的 bin 目录中,存放非确认监视器配置文件。

2、配置自动切换:在确认监视器上(非集群节点),存放确认监视器配置文件,并注册后

台自启服务。

ARCH_WAIT_APPLY 参数,设置为 0:高性能模式;设置为 1:事务一致模式。

  • 故障手动切换情境下 ARCH_WAIT_APPLY 只能为 0。故障自动切换情境下 ARCH_WAIT_APPLY 可以为 0,也可以为 1。
  • ARCH_WAIT_APPLY 参数设置的判断依据为业务是否要查询备机最新数据。如果需要,则配置为 1(较大性能衰减);如果不需要,则配置为 0

二、集群搭建

2.1 配置 主库

2.1.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!


  • 启动服务
  • /dm8/dmdbms/bin/dmserver /dm8/dmdbms/data/DAMENG/dm.ini


image.png

  • 开启归档

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> BACKUP DATABASE BACKUPSET '/dm8/dmdbms/data/DAMENG/bak/BACKUP_FILE';


image.png

  • 修改 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);


  • 关闭前台实例服务 Ctrl+C

  • 2.1.2 修改 dmarch.ini

[dmdba@dm1 ~]$ 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 = DMGRID2 #实时归档目标实例名


2.1.3 创建 dmmal.ini

[dmdba@dm1 ~]$ vi /dm8/dmdbms/data/DAMENG/dmmal.ini

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


2.1.4 创建 dmwatcher.ini

[dmdba@dm1 ~]$ vi /dm8/dmdbms/data/DAMENG/dmwatcher.ini

[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 #指定备库重演日志的时间阈值,默认关闭


2.1.5 拷贝备份文件

##拷贝备份文件到 备库

[dmdba@dm1 fullback]$ scp * dmdba@192.168.6.143:/dmdata/dm8/backup

image.png

2.1.6 注册服务

[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


image.png

2.2 配置 备库

2.2.1 初始化实例

image.png

2.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"


image.png

2.2.3 替换 dmarch.ini

[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 #实时归档目标实例名


2.2.4 配置 dm.ini、dmmal.ini 和 dmwatcher.ini

在 备库机器上配置备库的实例名为 DMGRID2,dm.ini 参数修改如下

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 次的日志重演信息

配置 dmmal.ini 和 dmwatcher.ini

备库 机器里 dmmal.ini、dmwatcher.ini 与 主库 DMGRID2 的 dmmal.ini、dmwatcher.ini 相同,参照 A 机器 dmmal.ini、dmwatcher.ini 文件进行配置

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 DmWatcherServiceWatcher


2.3 配置确认监视器

2.3.1 创建 dmmonitor.ini

vi /dm8/dmdbms/bin/dmmonitor.ini

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/dmserver /dm8/dmdbms/data/DAMENG/dm.ini mount

主库

/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);


image.png

备库

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;


主库备库启动datawatcher

/dm8/dmdbms/bin/dmwatcher /dm8/dmdbms/data/DAMENG/dmwatcher.ini


查看数据库状态

SQL> select status$,mode$ from v$instance;


image.png

备库

image.png

主节点启动monitor

/dm8/dmdbms/bin/dmmonitor /dm8/dmdbms/bin/dmmonitor.ini


image.png

测试数据同步

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;


主节点登录 testdb用户

image.png

备节点查询表

[dmdba@dm2 log]$ disql sysdba/'"Oracle2025!"'

image.png

最后修改时间:2025-11-12 09:48:20
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论