DM 集群搭建DSC学习记录
文章目录
- [DM 集群搭建DSC学习记录](#DM 集群搭建DSC学习记录)
-
- DSC集群概述
- [一、基于 DMASM 的 DMDSC](#一、基于 DMASM 的 DMDSC)
-
- [1.1 集群规划](#1.1 集群规划)
- [1.2 创建用户](#1.2 创建用户)
- [1.3 共享存储实现](#1.3 共享存储实现)
- [1.4 搭建DSC](#1.4 搭建DSC)
-
- [1.4.1 创建 dmdcr_cfg.ini](#1.4.1 创建 dmdcr_cfg.ini)
- [1.4.2 初始化磁盘组](#1.4.2 初始化磁盘组)
- [1.4.3 配置 dmasvrmal.ini](#1.4.3 配置 dmasvrmal.ini)
- [1.4.4 配置 dmdcr.ini 文件](#1.4.4 配置 dmdcr.ini 文件)
- [1.4.5 启动 DMCSS、DMASM 服务](#1.4.5 启动 DMCSS、DMASM 服务)
- [1.4.6 创建DMASM磁盘组](#1.4.6 创建DMASM磁盘组)
- [1.4.7 创建 dminit.ini](#1.4.7 创建 dminit.ini)
- [1.4.8 配置 dmarch.ini 文件](#1.4.8 配置 dmarch.ini 文件)
- [1.4.9 启动 DMSERVER 服务](#1.4.9 启动 DMSERVER 服务)
- [1.4.10 注册 CSS、ASM、DMSERVER 后台服务](#1.4.10 注册 CSS、ASM、DMSERVER 后台服务)
- [1.4.11 配置监视器](#1.4.11 配置监视器)
- 二、数据库其他配置
-
- [2.1 设置 core 路径](#2.1 设置 core 路径)
- [2.2 开启 SQL 日志](#2.2 开启 SQL 日志)
- [2.3 调整redo](#2.3 调整redo)
- [2.4 创建 dm_svc.conf](#2.4 创建 dm_svc.conf)
- [2.5 常用的试图](#2.5 常用的试图)
大家想学习达梦数据库或者解决报错问题,可以去达梦数据库社区(https://eco.dameng.com)
DSC集群概述

DMDSC 集群是一个多实例、单数据库的系统。多个数据库实例可以同时访问、修改同一个数据库的数据。用户可以登录集群中的任意一个数据库实例,获得完整的数据库服务。数据文件、控制文件在集群系统中只有一份,不论有几个节点,这些节点都平等地使用这些文件,这些文件保存在共享存储上。每个节点有自己独立的联机日志和归档日志,其中联机日志保存在共享存储上,归档日志可以保存在本地存储上也可以保存在共享存储上。
DMDSC 集群主要由数据库和数据库实例、共享存储、DMASM 或 DMASM 镜像、本地存储、 通信网络、集群控制软件 DMCSS、集群监视器 DMCSSM 组成。
一、基于 DMASM 的 DMDSC
1.1 集群规划
一个典型的基于 DMASM 的 DMDSC 一般具备两个 DMDSC 节点。使用块设备的真实物理磁盘做共享存储,并使用 DMASM 来管理块设备 。

存储方面:
①两台服务器都连接到同一个存储上(共享存储只需要映射到服务器端 fdisk -l 可以查看到就行,不需要格式化)。
②节点 1 所在服务器单独挂存储,需要格式化好,用来备份数据等,文件系统建议使用 ext4。
DMDSC 集群为了实现多实例同时访问和修改数据,需要数据文件、控制文件和日志文件都放到共享存储上。
注意: Redo 日志盘的空间大小建议最小不少于 4G,否则会引起后面数据库启动失败等问题。
| 名称 | 拟定配置 | 分区大小 | 备注 |
|---|---|---|---|
| VOTE 磁盘 | /dev/dm/asm-dmvote | 5 GB | 记录集群成员信息,集群通过 Voting Disk 进行心跳检测,确定集群中节点的状态 |
| DCR 盘 | /dev/dm/asm-dmdcr | 5 GB | 用于存储、维护集群配置的详细信息,整个集群环境共享 DCR 配置信息 |
| Redo 日志盘 | /dev/dm/asm-dmlog | 50 GB | 用于存储数据库集群 Redo log |
| 数据盘 | /dev/dm/asm-dmdata* | 500 GB * X | 用于存放数据 |
| 归档盘 | /dev/dm/asm-dmarch | 500 GB * 2 | 用于存储数据库集群各实例的归档日志 |
一般测试环境示例中 1 块DCR磁盘、1 块 VOTE 磁盘、1 个 DMDATA 磁盘组(含 1 块磁盘)和 1 个 DMLOG 磁盘组(含 1 块磁盘),共 4 块共享磁盘即可。
本示例以两节点为例搭建 DMDSC 环境。规划将 IP 为 11 的机器作为控制节点。
| 节点机器 | 实例名称 | IP | PORT_NUM |
|---|---|---|---|
| 11 | CSS0 | 192.168.6.11 | 9836 |
| ASM0 | 5836 | ||
| DSC01 | 6636 | ||
| 12 | CSS1 | 192.168.6.12 | 9837 |
| ASM1 | 5837 | ||
| DSC02 | 6637 |
在 4 块共享磁盘中:2 块较小的磁盘(1G)用于创建 DCR、VOTE 磁盘;2 块较大的磁盘(2T)用于创建 ASM 磁盘组(数据磁盘组 DMDATA 和联机日志磁盘组 DMLOG)。
| 项目 | A 机器 | B 机器 |
|---|---|---|
| 软件目录 | /opt/dsc/setup | /opt/dsc/setup |
| 安装目录 | /opt/dsc/dmdbms | /opt/dsc/dmdbms |
| 配置文件目录 | /opt/dsc/config | /opt/dsc/config |
| 备份目录 | /opt/dsc/bak | /opt/dsc/bak |
1.2 创建用户
两个节点node1,node2都需要创建
sql
# 创建用户组和用户
groupadd dinstall
useradd -g dinstall dmdba
echo "Dameng123" |passwd --stdin dmdba
# 修改资源限制
vi/etc/security/limits.conf
dmdba soft nice 0
dmdba hard nice 0
dmdba soft as unlimited
dmdba hard as unlimited
dmdba soft fsize unlimited
dmdba hard fsize unlimited
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft core unlimited
dmdba hard core unlimited
dmdba soft data unlimited
dmdba hard data unlimited
1.3 共享存储实现
参考文章:Linux环境下实现SCSI磁盘共享的详细教程 - OSCHINA - 开源 × AI · 开发者生态社区
Linux下搭建iSCSI实现共享存储。
iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的、可以在IP协议的上层运行的SCSI指令集, iSCSI 的主要功能是在TCP/IP 网络上的主机系统(启动器 initiator)和存储设备(目标器 target)之间进行大量数据的封装和可靠传输过程。
iSCSI架构主要由两个部分组成:iSCSI目标(Target)和iSCSI发起者(Initiator)。
- iSCSI目标(Target):通常是存储设备的提供者,它将本地的存储设备(如磁盘、磁盘阵列等)以iSCSI的方式共享出来。
- iSCSI发起者(Initiator):是访问存储设备的客户端,它通过网络连接到iSCSI目标,并将远程存储设备挂载到本地系统上使用。
iSCSI共享存储拓扑图:

iSCSI可分享的设备类型有很多,包括镜像文件(*.img)、分区(partition)、物理硬盘、raid设备、逻辑卷等,下面我只用物理磁盘分区来进行相关测试
安装targetcli软件包,它是一个用于配置iSCSI目标的命令行工具。
sql
yum install targetcli -y
yum install -y open-iscsi
虚拟机添加一个60GB的磁盘

bash
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 190M 0 part /boot
└─sda2 8:2 0 39.8G 0 part
├─klas-root 253:0 0 38.9G 0 lvm /
└─klas-swap 253:1 0 956M 0 lvm [SWAP]
sdb 8:16 0 60G 0 disk
sr0 11:0 1 4.4G 0 rom
配置iSCSI目标端(Target)
这些命令创建了一个名为
mydisk的后端存储,一个名为mytarget的iSCSI目标,并为客户端myclient设置了访问控制。同时,将mydisk后端存储映射到目标上。
bash
systemctl start target
systemctl enable target
targetcli
# 关闭自动保存(永久生效,写到 prefs.bin)
/> set global auto_save_on_exit=false
get global auto_save_on_exit
# 进入块存储后端目录,准备把本地磁盘纳入iSCSI存储池
/> cd backstores/block
# 创建块存储别名mydisk,关联物理磁盘/dev/sdb,作为共享存储底层设备
/> create name=mydisk dev=/dev/sdb
# 切换回targetcli根目录
/> cd /
# 进入iSCSI目标配置根目录
/> cd iscsi
# 创建iSCSI服务端目标端Target,定义共享服务唯一标识IQN名称
/> create iqn.2026-05.example.com:mytarget
# 进入目标端的ACL访问控制目录,配置客户端接入权限
/> cd iqn.2026-05.example.com:mytarget/tpg1/acls
# 准入客户端IQN,仅该客户端标识可登录连接此iSCSI共享
/> create iqn.2026-05.example.com:myclient
# 进入LUN映射目录,关联后端磁盘与iSCSI目标
/> cd /iscsi/iqn.2026-05.example.com:mytarget/tpg1/luns
# 将后端mydisk存储映射为LUN0,分配给客户端作为远程磁盘使用
/> create storage_object=/backstores/block/mydisk lun=0
# 切回根目录准备保存配置
/> cd /
/> ls
o- / ....................................................................................................... [...]
o- backstores ............................................................................................ [...]
| o- block ................................................................................ [Storage Objects: 1]
| | o- mydisk ........................................................ [/dev/sdb (60.0GiB) write-thru activated]
| | o- alua ................................................................................. [ALUA Groups: 1]
| | o- default_tg_pt_gp ..................................................... [ALUA state: Active/optimized]
| o- fileio ............................................................................... [Storage Objects: 0]
| o- pscsi ................................................................................ [Storage Objects: 0]
| o- ramdisk .............................................................................. [Storage Objects: 0]
o- iscsi .......................................................................................... [Targets: 1]
| o- iqn.2026-05.example.com:mytarget ................................................................ [TPGs: 1]
| o- tpg1 ............................................................................. [no-gen-acls, no-auth]
| o- acls ........................................................................................ [ACLs: 1]
| | o- iqn.2026-05.example.com:myclient ................................................... [Mapped LUNs: 1]
| | o- mapped_lun0 .............................................................. [lun0 block/mydisk (rw)]
| o- luns ........................................................................................ [LUNs: 1]
| | o- lun0 ................................................... [block/mydisk (/dev/sdb) (default_tg_pt_gp)]
| o- portals .................................................................................. [Portals: 1]
| o- 0.0.0.0:3260 ................................................................................... [OK]
o- loopback ....................................................................................... [Targets: 0]
o- vhost .......................................................................................... [Targets: 0]
o- xen-pvscsi ..................................................................................... [Targets: 0]
/>
# 永久保存所有iSCSI配置,系统重启后配置不失效
/> saveconfig
Configuration saved to /etc/target/saveconfig.json
配置完成后,重启iSCSI服务以应用更改。
bash
sudo systemctl restart target
systemctl restart iscsid
配置客户端
客户端是需要访问共享SCSI磁盘的系统。以下是配置客户端的步骤:
bash
# 对于iSCSI客户端,需要安装iscsiadm工具
yum install -y open-iscsi
systemctl start iscsid
# 使用iscsiadm发现目标并登录
sudo iscsiadm -m discovery -t st -p <target-IP>
[root@racnode1 ~]# sudo iscsiadm -m discovery -t st -p 192.168.157.140
192.168.157.140:3260,1 iqn.2026-05.example.com:mytarget
[root@racnode1 ~]# cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2019-12.cn.kylinos:124d39a1b86
# 去服务端添加
targetcli
cd /iscsi/iqn.2026-05.example.com:mytarget/tpg1/acls
create iqn.2019-12.cn.kylinos:124d39a1b86
cd /
saveconfig
targetcli
cd /iscsi/iqn.2026-05.example.com:mytarget/tpg1/acls
create iqn.2019-12.cn.kylinos:437273e4224
cd /
saveconfig
[root@racnode1 ~]# sudo iscsiadm -m node -T iqn.2026-05.example.com:mytarget -p 192.168.157.140 -l
Logging in to [iface: default, target: iqn.2026-05.example.com:mytarget, portal: 192.168.157.140,3260]
Login to [iface: default, target: iqn.2026-05.example.com:mytarget, portal: 192.168.157.140,3260] successful.
sudo iscsiadm -m node -T <target-IQN> -p <target-IP> -l
sudo iscsiadm -m node -T iqn.2026-05.example.com:myclient -p 192.168.157.140 -l
# 检查是否连接到目标服务器
[root@racnode1 ~]# iscsiadm -m session
tcp: [4] 192.168.157.140:3260,1 iqn.2026-05.example.com:mytarget (non-flash)
# node1上可以看到设备
[root@racnode1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 190M 0 part /boot
└─sda2 8:2 0 39.8G 0 part
├─klas-root 253:0 0 37G 0 lvm /
└─klas-swap 253:1 0 2.8G 0 lvm [SWAP]
sdb 8:16 0 60G 0 disk
sr0 11:0 1 4.4G 0 rom
# 当本节点机器重启后,会自动登录且挂载这个磁盘
[root@racnode1 ~]# iscsiadm -m node -o show | grep node.startup
node.startup = automatic
# 节点2,必须先执行发现这个步骤,再执行登录
sudo iscsiadm -m discovery -t st -p 192.168.157.140
[root@racnode2 ~]# iscsiadm -m node -T iqn.2026-05.example.com:mytarget -p 192.168.157.140 -l
Logging in to [iface: default, target: iqn.2026-05.example.com:mytarget, portal: 192.168.157.140,3260]
Login to [iface: default, target: iqn.2026-05.example.com:mytarget, portal: 192.168.157.140,3260] successful.
[root@racnode2 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 190M 0 part /boot
└─sda2 8:2 0 39.8G 0 part
├─klas-root 253:0 0 37G 0 lvm /
└─klas-swap 253:1 0 2.8G 0 lvm [SWAP]
sdb 8:16 0 60G 0 disk
sr0 11:0 1 4.4G 0 rom
划存储
小于 2TB 的存储使用 fdisk 命令来划分
| 用途 | 空间规划 (总共 60GB) |
|---|---|
| sdb1 用于 dcr 信息 | 100M |
| sdb2 用于存放 vote 信息 | 100M |
| sdb3 用于存放 redo log | 20480M |
| sdb4 用于存放 data | 剩下的全部空间 |
注意:log 盘的空间大小最小不少于 4G,否则会引起后面数据启动失败等问题。
root@\~# fdisk /dev/sdb
- 依次输入 n p 1 回车 +100M,完成第一块磁盘划分
- 依次输入 n p 2 回车 +100M,完成第二块磁盘划分
- 依次输入 n p 3 回车 +20480M,完成第三块磁盘划分
- 依次输入 n p 回车 回车 回车,完成第四块磁盘划分
- 输入 w 命令,将裸设备划分的设置进行保存
bash
[root@racnode1 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.35.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
设备不包含可识别的分区表。
创建了一个磁盘标识符为 0x2b682d08 的新 DOS 磁盘标签。
命令(输入 m 获取帮助):n
分区类型
p 主分区 (0 primary, 0 extended, 4 free)
e 扩展分区 (逻辑分区容器)
选择 (默认 p):p
分区号 (1-4, 默认 1): 1
第一个扇区 (8192-125829119, 默认 8192):
最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (8192-125829119, 默认 125829119): +100M
创建了一个新分区 1,类型为"Linux",大小为 100 MiB。
命令(输入 m 获取帮助):n
分区类型
p 主分区 (1 primary, 0 extended, 3 free)
e 扩展分区 (逻辑分区容器)
选择 (默认 p):p
分区号 (2-4, 默认 2):
第一个扇区 (212992-125829119, 默认 212992):
最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (212992-125829119, 默认 125829119): +100M
创建了一个新分区 2,类型为"Linux",大小为 100 MiB。
命令(输入 m 获取帮助):n
分区类型
p 主分区 (2 primary, 0 extended, 2 free)
e 扩展分区 (逻辑分区容器)
选择 (默认 p):p
分区号 (3,4, 默认 3):
第一个扇区 (417792-125829119, 默认 417792):
最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (417792-125829119, 默认 125829119): +10G
创建了一个新分区 3,类型为"Linux",大小为 10 GiB。
命令(输入 m 获取帮助):n
分区类型
p 主分区 (3 primary, 0 extended, 1 free)
e 扩展分区 (逻辑分区容器)
选择 (默认 e):p
已选择分区 4
第一个扇区 (21389312-125829119, 默认 21389312):
最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (21389312-125829119, 默认 125829119):
创建了一个新分区 4,类型为"Linux",大小为 49.8 GiB。
命令(输入 m 获取帮助):w
分区表已调整。
将调用 ioctl() 来重新读分区表。
正在同步磁盘。
# 节点1
[root@racnode1 ~]# partprobe /dev/sdb
[root@racnode1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 190M 0 part /boot
└─sda2 8:2 0 39.8G 0 part
├─klas-root 253:0 0 37G 0 lvm /
└─klas-swap 253:1 0 2.8G 0 lvm [SWAP]
sdb 8:16 0 60G 0 disk
├─sdb1 8:17 0 100M 0 part
├─sdb2 8:18 0 100M 0 part
├─sdb3 8:19 0 10G 0 part
└─sdb4 8:20 0 49.8G 0 part
sr0 11:0 1 4.4G 0 rom
# 节点2
[root@racnode2 ~]# partprobe /dev/sdb
[root@racnode2 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 190M 0 part /boot
└─sda2 8:2 0 39.8G 0 part
├─klas-root 253:0 0 37G 0 lvm /
└─klas-swap 253:1 0 2.8G 0 lvm [SWAP]
sdb 8:16 0 60G 0 disk
├─sdb1 8:17 0 100M 0 part
├─sdb2 8:18 0 100M 0 part
├─sdb3 8:19 0 10G 0 part
└─sdb4 8:20 0 49.8G 0 part
sr0 11:0 1 4.4G 0 rom
大于 2TB 的需要使用 parted 命令来
root@\~# parted /dev/sdb
- 输入 mklabel gpt 回车,将 MBR 磁盘磁盘转换为 gpt 格式
- 输入 mkpart primary 0 100 回车,完成第一块磁盘划分
- 输入 mkpart primary 100 200 回车,完成第二块磁盘划分
- 输入 mkpart primary 200 20680 回车,完成第三块磁盘划分
- 输入 mkpart primary 20680 5498G 回车,完成第四块磁盘划分
- 输入 quit 回车,完成磁盘划分
方法1:直接挂载存储
把 /dev/sdb1~sdb4 这四个分区绑定成裸设备(raw),并给达梦数据库(dmdba)赋权,让 DM 可以直接使用裸设备存放 OCR、Vote、Redo、Data。
裸设备(raw)不经过文件系统,直接读写磁盘数据库(Oracle/DM)用裸设备性能更高、更少 IO 损耗
作用:
把 sdb1 映射成 /dev/raw/raw1
把 sdb2 映射成 /dev/raw/raw2
把 sdb3 映射成 /dev/raw/raw3
把 sdb4 映射成 /dev/raw/raw4
bash
# A 机器、B 机器依次修改:
[root@~]# vi /etc/udev/rules.d/70-persistent-ipoib.rules
ACTION=="add", KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", KERNEL=="sdb2", RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", KERNEL=="sdb3", RUN+="/bin/raw /dev/raw/raw3 %N"
ACTION=="add", KERNEL=="sdb4", RUN+="/bin/raw /dev/raw/raw4 %N"
ACTION=="add", KERNEL=="raw[1-4]", OWNER="dmdba", GROUP="dinstall", MODE="660"
[root@racnode1 ~]# ll /dev/raw/raw*
crw-rw---- 1 dmdba dinstall 162, 1 5月 11 09:52 /dev/raw/raw1
crw-rw---- 1 dmdba dinstall 162, 2 5月 11 09:52 /dev/raw/raw2
crw-rw---- 1 dmdba dinstall 162, 3 5月 11 09:52 /dev/raw/raw3
crw-rw---- 1 dmdba dinstall 162, 4 5月 11 09:52 /dev/raw/raw4
crw-rw---- 1 root disk 162, 0 5月 11 09:52 /dev/raw/rawctl
[root@~]# partprobe /dev/sdb
udevadm trigger --type=devices --action=change
udevadm control --reload-rules
blockdev --getsize64 /dev/raw/raw*
for dev in /dev/raw/raw{1..4}; do
size=$(blockdev --getsize64 $dev)
size_gb=$(numfmt --to=iec --suffix=B $size)
echo "$dev : $size_gb"
done
/dev/raw/raw1 : 100MB
/dev/raw/raw2 : 100MB
/dev/raw/raw3 : 10GB
/dev/raw/raw4 : 50GB
注意:可通过
blockdev --getsize64 /dev/raw/raw*命令查看设备大小。
方法2:多路径挂载裸设备
有可能客户现场给提供的是多路径存储
使用命令 ll /dev/mappr 和 ll /dev/dm*查看对应设备的信息。

bash
[root@~]# vi /etc/udev/rules.d/70-persistent-ipoib.rules
ACTION=="add",ENV{MAJOR}=="253",ENV{MINOR}=="3",RUN+="/bin/raw
/dev/raw/raw1 %M %m" ACTION=="add",ENV{MAJOR}=="253",ENV{MINOR}=="4",RUN+="/bin/raw
/dev/raw/raw2 %M %m" ACTION=="add",ENV{MAJOR}=="253",ENV{MINOR}=="5",RUN+="/bin/raw
/dev/raw/raw3 %M %m" ACTION=="add",ENV{MAJOR}=="253",ENV{MINOR}=="6",RUN+="/bin/raw
/dev/raw/raw4 %M %m" ACTION=="add",KERNEL=="raw[1-4]",OWNER="dmdba",GROUP="dinstall",MODE="660"
[root@~]# partprobe /dev/mapper/mpathg
[root@~]# reboot
注意:可通过 blockdev --getsize64 /dev/raw/raw*命令查看设备大小。
1.4 搭建DSC
1.4.1 创建 dmdcr_cfg.ini
db0 和 db1 机器均将数据库安装在 /opt/dsc/dmdbms/目录下,所有节点配置相同
bash
vi /opt/dsc/config/dmdcr_cfg.ini
[dmdba@~]# vi /opt/dsc/config/dmdcr_cfg.ini
DCR_N_GRP = 3 ##集群环境有多少个 GROUP,范围:1~16
DCR_VTD_PATH = /dev/raw/raw2 ##规划为 vote 的磁盘
DCR_OGUID = 210715 ## 消息标识,一个组里面只有一个。
[GRP] #新建一个 GROUP
DCR_GRP_TYPE = CSS ##组类型(CSS/ASM/DB)
DCR_GRP_NAME = GRP_CSS ##组名
DCR_GRP_N_EP = 2 ##组内节点个数
DCR_GRP_DSKCHK_CNT = 65 ##磁盘心跳容错时间,单位:秒
[GRP_CSS]
DCR_EP_NAME = CSS0 ##CSS 节点名
DCR_EP_HOST = 192.168.6.11 ##心跳地址
DCR_EP_PORT = 11286 ##CSS 端口
[GRP_CSS]
DCR_EP_NAME = CSS1
DCR_EP_HOST = 192.168.6.12
DCR_EP_PORT = 11286
[GRP]
DCR_GRP_TYPE = ASM
DCR_GRP_NAME = GRP_ASM
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 61
[GRP_ASM]
DCR_EP_NAME = ASM0 ##ASM 节点名,和 dmasvrmal 的 MAL_INST_NAME 一致
DCR_EP_SHM_KEY = 42424 ##共享内存标识
DCR_EP_SHM_SIZE = 1024 ##共享内存大小
DCR_EP_HOST = 192.168.6.11 ##心跳地址
DCR_EP_PORT = 11276 ##ASM 端口
DCR_EP_ASM_LOAD_PATH = /dev/raw
[GRP_ASM]
DCR_EP_NAME = ASM1
DCR_EP_SHM_KEY = 42425
DCR_EP_SHM_SIZE = 1024
DCR_EP_HOST = 192.168.6.12
DCR_EP_PORT = 11276
DCR_EP_ASM_LOAD_PATH = /dev/raw
[GRP]
DCR_GRP_TYPE = DB
DCR_GRP_NAME = GRP_DSC
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 57
[GRP_DSC]
DCR_EP_NAME = DSC0 ##实例名,和 dm.ini 的 INSTANCE_NAME 一致
DCR_EP_SEQNO = 0 ##组内序号,不能重复
DCR_EP_PORT = 5236 ##实例端口,和 dm.ini 的 PORT_NUM 一致
[GRP_DSC]
DCR_EP_NAME = DSC1
DCR_EP_SEQNO = 1
DCR_EP_PORT = 5236
1.4.2 初始化磁盘组
在node1节点上操作
bash
[dmdba@racnode1 ~]$ /opt/dsc/dmdbms/bin/dmasmcmd
dmasmcmd V8
ASM>create dcrdisk '/dev/raw/raw1' 'dcr'
ASM>create votedisk '/dev/raw/raw2' 'vote'
ASM>create asmdisk '/dev/raw/raw3' 'LOG0'
ASM>create asmdisk '/dev/raw/raw4' 'DATA0'
ASM>init dcrdisk '/dev/raw/raw1' from '/opt/dsc/config/dmdcr_cfg.ini' identified by 'DCRpsd_123'
ASM>init votedisk '/dev/raw/raw2' from '/opt/dsc/config/dmdcr_cfg.ini'
1.4.3 配置 dmasvrmal.ini
所有节点配置相同
bash
[dmdba@~]# vi /opt/dsc/config/dmasvrmal.ini
[MAL_INST0]
MAL_INST_NAME = ASM0
MAL_HOST = 192.168.6.11 #心跳地址
MAL_PORT = 11266 #MAL 监听端口
[MAL_INST1]
MAL_INST_NAME = ASM1
MAL_HOST = 192.168.6.12
MAL_PORT = 11266
1.4.4 配置 dmdcr.ini 文件
- db0 机器配置 dmdcr.ini,dmdcr_seqno 为 0。
bash
[dmdba@~]# vi /opt/dsc/config/dmdcr.ini
DMDCR_PATH = /dev/raw/raw1
DMDCR_MAL_PATH = /opt/dsc/config/dmasvrmal.ini
DMDCR_SEQNO = 0
DMDCR_AUTO_OPEN_CHECK = 111
DMDCR_ASM_TRACE_LEVEL = 2
##DMDCR_ASM_RESTART_INTERVAL = 60 #CSS 认定 ASM 故障重启的时间
# ASM重启
##DMDCR_ASM_STARTUP_CMD = /opt/dsc/dmdbms/bin/dmasmsvr dcr_ini=/opt/dsc/config/dmdcr.ini
##DMDCR_DB_RESTART_INTERVAL = 60 ##CSS 认定 DSC 故障重启的时间,设置为 0 不自动拉起
# 数据库重启
##DMDCR_DB_STARTUP_CMD = /opt/dsc/dmdbms/bin/dmserver path=/opt/dsc/config/dsc0_config/dm.ini dcr_ini=/opt/dsc/config/dmdcr.ini
##DMDCR _LINK _CHECK _IP=192.168.157.140
- db1 机器配置 dmdcr.ini,dmdcr_seqno 为 1。
bash
[dmdba@~]# vi /opt/dsc/config/dmdcr.ini
DMDCR_PATH = /dev/raw/raw1
DMDCR_MAL_PATH = /opt/dsc/config/dmasvrmal.ini
DMDCR_SEQNO = 1
DMDCR_AUTO_OPEN_CHECK = 111
DMDCR_ASM_TRACE_LEVEL = 2
##DMDCR_ASM_RESTART_INTERVAL = 60 #CSS 认定 ASM 故障重启的时间
# ASM重启
##DMDCR_ASM_STARTUP_CMD = /opt/dsc/dmdbms/bin/dmasmsvr dcr_ini=/opt/dsc/config/dmdcr.ini
##DMDCR_DB_RESTART_INTERVAL = 60 ##CSS 认定 DSC 故障重启的时间,设置为 0 不自动拉起
# 数据库重启
##DMDCR_DB_STARTUP_CMD = /opt/dsc/dmdbms/bin/dmserver path=/opt/dsc/config/dsc1_config/dm.ini dcr_ini=/opt/dsc/config/dmdcr.ini
##DMDCR _LINK _CHECK _IP=192.168.157.140
当前为手动拉起 db0 机器和 db1 机器的 ASM 和 DMSERVER 服务。待集群配置完成后,再修改为自动拉起(删除 dmdcr.ini 中的"##"号即可)。
1.4.5 启动 DMCSS、DMASM 服务
在 2 个节点分别启动 dmcss 命令:
两个节点启动dmcss,dmdba用户到数据库安装目录bin下执行
shell
[dmdba@racnode1 ~]$ /opt/dsc/dmdbms/bin/dmcss DCR_INI=/opt/dsc/config/dmdcr.ini &
在 2 个节点分别启动dmasmsvr命令:
shell
[dmdba@racnode1 ~]$ /opt/dsc/dmdbms/bin/dmasmsvr DCR_INI=/opt/dsc/config/dmdcr.ini &
说明:如果 DMCSS 配置有自动拉起 dmasmsvr 的功能,可以等待 DMCSS 自动拉起 dmasmsvr 程序,不需要手动启动。
1.4.6 创建DMASM磁盘组
bash
[dmdba@racnode1 ~]$
/opt/dsc/dmdbms/bin/dmasmtool DCR_INI=/opt/dsc/config/dmdcr.ini
ASM> create diskgroup 'DMLOG' asmdisk '/dev/raw/raw3'
ASM> create diskgroup 'DMDATA' asmdisk '/dev/raw/raw4'
ASM>ls
+
disk groups total [4]......
NO.1 name: DMLOG
NO.2 name: DMDATA
NO.3 name: VOTE
NO.4 name: DCR
Used time: 0.667(ms).
1.4.7 创建 dminit.ini
bash
##创建 dminit.ini 文件
[dmdba@racnode1 ~]$ vi /opt/dsc/config/dminit.ini
DB_NAME = dsc
##SYSDBA_PWD 和 SYSAUDITOR_PWD 为配置数据库 SYSDBA 用户和 SYSAUDITOR 用户的登录密码,需要用户自定义配置,且需保证一定的密码强度。详细参数解释可参考达梦数据库安装目录下 doc 目录中《DM8_dminit 使用手册》
SYSDBA_PWD = 'Linux123!@#'
SYSAUDITOR_PWD = 'Linux123!@#'
SYSTEM_PATH = +DMDATA/data
SYSTEM = +DMDATA/data/dsc/SYSTEM.dbf
SYSTEM_SIZE = 1024
ROLL = +DMDATA/data/dsc/ROLL.dbf
ROLL_SIZE = 10000
MAIN = +DMDATA/data/dsc/MAIN.dbf
MAIN_SIZE = 1024
CTL_PATH = +DMDATA/data/dsc/dm.ctl
CTL_SIZE = 8
LOG_SIZE = 2048
DCR_PATH = /dev/raw/raw1
DCR_SEQNO = 0
AUTO_OVERWRITE = 1
PAGE_SIZE = 32
EXTENT_SIZE = 16
BLANK_PAD_MODE = 1
[DSC0]
CONFIG_PATH = /opt/dsc/config/dsc0_config
PORT_NUM = 5236
MAL_HOST = 192.168.6.11
MAL_PORT = 11246
LOG_PATH = +DMLOG/log/dsc/DSC0_LOG01.log
LOG_PATH = +DMLOG/log/dsc/DSC0_LOG02.log
[DSC1]
CONFIG_PATH = /opt/dsc/config/dsc1_config
PORT_NUM = 5236
MAL_HOST = 192.168.6.12
MAL_PORT = 11246
LOG_PATH = +DMLOG/log/dsc/DSC1_LOG01.log
LOG_PATH = +DMLOG/log/dsc/DSC1_LOG02.log
##在 db0 节点执行初始化 db 命令
[dmdba@racnode1 ~]$ /opt/dsc/dmdbms/bin/dminit control=/opt/dsc/config/dminit.ini
##拷贝文件到 db1 节点
[dmdba@racnode1 ~]$ scp -r /opt/dsc/config/dsc1_config dmdba@192.168.6.12:/opt/dsc/config/
1.4.8 配置 dmarch.ini 文件
没有挂归档磁盘,先不配置归档了
- db0 节点
shell
##修改 dm.ini
[dmdba@~]# vi /opt/dsc/config/dsc0_config/dm.ini
ARCH_INI = 1
##创建 dmarch.ini
[dmdba@~]# vi /opt/dsc/config/dsc0_config/dmarch.ini
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /opt/dsc/arch_0
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC1
ARCH_INCOMING_PATH = /opt/dsc/arch_0_remote
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
- db1 节点
shell
##修改 dm.ini
[dmdba@racnode2 ~]$ vi /opt/dsc/config/dsc1_config/dm.ini
ARCH_INI = 1
##创建 dmarch.ini
[dmdba@racnode2 ~]$ vi /opt/dsc/config/dsc1_config/dmarch.ini
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /opt/dsc/arch_1
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC0
ARCH_INCOMING_PATH = /opt/dsc/arch_1_remote
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
1.4.9 启动 DMSERVER 服务
bash
# A 机器
[dmdba@racnode1 log]$ /opt/dsc/dmdbms/bin/dmserver /opt/dsc/config/dsc0_config/dm.ini dcr_ini=/opt/dsc/config/dmdcr.ini &
# B机器
[dmdba@racnode1 log]$ /opt/dsc/dmdbms/bin/dmserver /opt/dsc/config/dsc1_config/dm.ini dcr_ini=/opt/dsc/config/dmdcr.ini &
1.4.10 注册 CSS、ASM、DMSERVER 后台服务
bash
##db0 机器
[dmdba@racnode1 log]$ /dm/dmdbms/script/root/dm_service_installer.sh -t dmcss -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -p CSS
[dmdba@racnode1 log]$ /dm/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -y DmCSSServiceCSS.service -p ASM
[dmdba@racnode1 log]$ /dm/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /dm/dmdbms/dsc_config/DSC0/dm.ini -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -y DmASMSvrServiceASM.service -p DSC
##db1 机器
[dmdba@racnode2 ~]$ /dm/dmdbms/script/root/dm_service_installer.sh -t dmcss -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -p CSS
[dmdba@racnode2 ~]$/dm/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -y DmCSSServiceCSS.service -p ASM
[dmdba@racnode2 ~]$/dm/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /dm/dmdbms/dsc_config/DSC1/dm.ini -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -y DmASMSvrServiceASM.service -p DSC
db0 机器、db1 机器删除自启可参考以下命令。
bash
[root@~]# /dm/dmdbms/script/root/dm_service_uninstaller.sh -n DmCSSServiceCSS
[root@~]# /dm/dmdbms/script/root/dm_service_uninstaller.sh -n DmASMSvrServiceASM
[root@~]# /dm/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceDSC
1.4.11 配置监视器
bash
## A 机器、B 机器配置相同
[dmdba@racnode1 ~]$ vi /opt/dsc/dmdbms/bin/dmcssm.ini
#和 DMDCR _CFG.INI 中的 DCR _OGUID 保持一致
CSSM_OGUID = 210715
#配置所有 CSS 的连接信息
CSSM_CSS_IP = 192.168.6.11:11286
CSSM_CSS_IP = 192.168.6.12:11286
CSSM_LOG_PATH = ../log
CSSM_LOG_FILE_SIZE = 512
CSSM_LOG_SPACE_LIMIT = 2048
启动监视器
bash
--前台启动:
[dmdba@racnode1 ~]$ /opt/dsc/dmdbms/bin/dmcssm INI_PATH=/opt/dsc/dmdbms/bin/dmcssm.ini &
--后台启动:
[dmdba@racnode1 ~]$/opt/dsc/dmdbms/bin/DmCSSMonitorServiceMonitor start
# 查看状态
/opt/dsc/dmdbms/bin/dmcssm INI_PATH=/opt/dsc/dmdbms/bin/dmcssm.ini
txt
show
monitor current time:2026-05-11 14:25:53, n_group:3
=================== group[name = GRP_CSS, seq = 0, type = CSS, Control Node = 1] ========================================
DSC_MODE = FULL
[CSS0] auto check = TRUE, global info:
[ASM0] auto restart = FALSE
[DSC0] auto restart = FALSE
[CSS1] auto check = TRUE, global info:
[ASM1] auto restart = FALSE
[DSC1] auto restart = FALSE
ep: css_time inst_name seqno port mode inst_status vtd_status is_ok active guid pid ts
2026-05-11 14:25:53 CSS0 0 11286 Normal Node OPEN WORKING OK TRUE 701449 3815 703396
2026-05-11 14:25:53 CSS1 1 11286 Control Node OPEN WORKING OK TRUE 1183397 4973 1185351
=================== group[name = GRP_ASM, seq = 1, type = ASM, Control Node = 0] ========================================
n_ok_ep = 2
ok_ep_arr(index, seqno):
(0, 0)
(1, 1)
sta = OPEN, sub_sta = STARTUP
break ep = NULL
recover ep = NULL
crash process over flag is TRUE
ep: css_time inst_name seqno port mode inst_status vtd_status is_ok active guid pid ts
2026-05-11 14:25:53 ASM0 0 11276 Control Node OPEN WORKING OK TRUE 754421 4469 756259
2026-05-11 14:25:53 ASM1 1 11276 Normal Node OPEN WORKING OK TRUE 1237511 5288 1239353
=================== group[name = GRP_DSC, seq = 2, type = DB, Control Node = 0] ========================================
n_ok_ep = 2
ok_ep_arr(index, seqno):
(0, 0)
(1, 1)
sta = OPEN, sub_sta = STARTUP
break ep = NULL
recover ep = NULL
crash process over flag is TRUE
ep: css_time inst_name seqno port mode inst_status vtd_status is_ok active guid pid ts
2026-05-11 14:25:53 DSC0 0 5236 Control Node OPEN WORKING OK TRUE 707376 12635 707937
2026-05-11 14:25:53 DSC1 1 5236 Normal Node OPEN WORKING OK TRUE 959789 6143 960338
==================================================================================================================

二、数据库其他配置
2.1 设置 core 路径
bash
##使用 root 用户进行配置
su - root
echo "kernel.core_pattern=/dm/core/core-%e-%p-%t" >> /etc/sysctl.conf
sysctl -p
##使用 dmdba 用户进行测试
su - dmdba
##通过 kill -s 11 $$ 命令来验证 core 路径是否配置成功,$$表示进程号,可以选择 kill 掉 disql 的进程来测试。
kill -s 11 $$
##检查是否有 core 生成
ll -rtl /dm/core
2.2 开启 SQL 日志
集群每个节点都建议开启 SQL 日志。如果内存充足(≥32G),参数 BUF_TOTAL_SIZ、BUF_SIZE 和 BUF_KEEP_CNT 建议做如下调整。
bash
##使用 dmdba 用户在 dm.ini 同级目录下配置 sqllog.ini 文件
vi sqllog.ini
BUF_TOTAL_SIZE = 1024000 #SQLs Log Buffer Total Size(K)(1024~1024000)
BUF_SIZE = 10240 #SQLs Log Buffer Size(K)(50~409600)
BUF_KEEP_CNT = 20 #SQLs Log buffer keeped count(1~100)
[SLOG_ALL]
FILE_PATH = /dm/dmsqllog #根据实际配置
PART_STOR = 0
SWITCH_MODE = 2
SWITCH_LIMIT = 512 #根据实际配置
ASYNC_FLUSH = 1
FILE_NUM = 1024 #根据实际配置
ITEMS = 0
SQL_TRACE_MASK = 2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17:22:24:25:26:27:28:29
MIN_EXEC_TIME = 100
USER_MODE = 2
USERS =
##登录数据库执行以下命令动态修改 SVR_LOG=1 开启 SQL 日志
call SP_SET_PARA_VALUE(1,'SVR_LOG',1);
2.3 调整redo
sql
--检查 redo 设置大小
select rlog_size/1024/1024 from v$rlogfile;
--修改 redo 可参考如下命令:
alter database resize logfile 'DMDB01.log' to 2048;
alter database resize logfile 'DMDB02.log' to 2048;
2.4 创建 dm_svc.conf
以 2 节点 DSC 集群为例,配置 dm_svc.conf 文件如下
bash
[root@~]# vi /etc/dm_svc.conf ##以下仅供参考,具体按实际需求配置
TIME_ZONE=(+8:00) # 客户端时区,东八区
LANGUAGE=(cn) # 客户端语言,中文
DSC1=(192.168.6.11:5236,192.168.6.12:5236) # DSC1集群节点列表
[DSC1]
LOGIN_ENCRYPT=(0) # 登录密码不加密
SWITCH_TIME=(20) # 故障最大切换次数
SWITCH_INTERVAL=(2000) # 切换间隔(毫秒)
[dmdba@racnode1 ~]$ disql SYSDBA/'"Linux123!@#"'@DSC1
服务器[192.168.6.11:5236]:处于普通打开状态
登录使用时间 : 4.416(ms)
disql V8
SQL>
2.5 常用的试图
查看DSC节点实例信息
bash
# 查看DSC节点实例信息
SQL> select * from V$DSC_EP_INFO;
行号 EP_NAME EP_SEQNO EP_GUID EP_TIMESTAMP EP_MODE EP_STATUS
---------- ------- ----------- -------------------- -------------------- ------------ ---------
1 DSC0 0 707376 711088 Control Node OK
2 DSC1 1 959789 963489 Normal Node OK
显示全局活动的事务锁信息,登录任意节点查询得到的结果一致。
bash
SQL> select * from V$DSC_LOCK;
行号 EP_SEQNO ADDR TRX_ID LTYPE LMODE
---------- ----------- -------------------- -------------------- ------ -----
BLOCKED TABLE_ID ROW_IDX IGN_FLAG
----------- -------------------- -------------------- -----------
1 0 139897433353408 24684 OBJECT IS
0 150994944 0 1
2 0 139814513969032 24684 OBJECT IS
0 150994945 0 1
显示 DMDSC 中所有节点活动事务相关的信息
bash
SQL> select * from V$DSCIDS;
行号 EPSEQ MIN_ACTIVE_ID NEXT_ID N_ACTIVE
---------- ----------- -------------------- -------------------- -----------
MAX_CMT_LSN MIN_CMT_TID MIN_LAST_CMT_LSN
-------------------- -------------------- --------------------
NOTIFY_VERSION
--------------------
1 0 24684 25720 1
47565 24683 47567
688
行号 EPSEQ MIN_ACTIVE_ID NEXT_ID N_ACTIVE
---------- ----------- -------------------- -------------------- -----------
MAX_CMT_LSN MIN_CMT_TID MIN_LAST_CMT_LSN
-------------------- -------------------- --------------------
NOTIFY_VERSION
--------------------
2 1 12020 12021 0
47550 0 47541
1
已用时间: 2.425(毫秒). 执行号:65504.
查看ASM磁盘组大小
bash
select GROUP_NAME,N_DISK,FREE_MB,TOTAL_MB from V$ASMGROUP;
SQL> select GROUP_NAME,N_DISK,FREE_MB,TOTAL_MB from V$ASMGROUP;
行号 GROUP_NAME N_DISK FREE_MB TOTAL_MB
---------- ---------- ----------- ----------- -----------
1 DMLOG 1 2004 10207
2 DMDATA 1 38620 50963
3 VOTE 1 76 100
4 DCR 1 76 100
已用时间: 13.223(毫秒). 执行号:65505.
查看ASM磁盘组大小
bash
select GROUP_NAME,N_DISK,FREE_MB,TOTAL_MB from V$ASMGROUP;
SQL> select GROUP_NAME,N_DISK,FREE_MB,TOTAL_MB from V$ASMGROUP;
行号 GROUP_NAME N_DISK FREE_MB TOTAL_MB
---------- ---------- ----------- ----------- -----------
1 DMLOG 1 2004 10207
2 DMDATA 1 38620 50963
3 VOTE 1 76 100
4 DCR 1 76 100
已用时间: 13.223(毫秒). 执行号:65505.