前言
达梦守护集群部署,类似Oracle DG,本文主要介绍如下12部分内容,仅用于测试,仅供参考,请勿用于生产!
1.达梦守护集群安装前准备;2.达梦守护集群安装;3.配置主备;4.注册服务;5.启动集群;6.参数优化;7.主从同步测试;8.配置服务名;9.主备手动切换测试;10.主备自动切换测试;11.配置定时备份;12.常用命令。
参考达梦官网链接如下:
https://eco.dameng.com/document/dm/zh-cn/ops/DW-installation-cluster.html
安装说明

安装架构
四台服务器,两台数据库服务器,1-2台监控器,占用资源较低。
以CJC系统测试达梦数据库安装为例:
注意:
1.如果服务器有多余稳定的心跳网卡,可以配置单独的心跳IP作为内部通信,如果没有心跳网卡,使用业务IP作为心跳IP。
版本 | 8.1.3.26 | 8.1.3.26 | 8.1.3.26 | 8.1.3.26 |
架构 | 主 | 备 | 监控器1 | 监控器2 |
业务IP | 192.168.1.101 | 192.168.1.102 | 192.168.1.103 | 192.168.1.104 |
心跳IP | 192.168.1.101 | 192.168.1.102 | 192.168.1.103 | 192.168.1.104 |
操作系统版本 | Kylin Linux Advanced Server V10 (Tercel) | Kylin Linux Advanced Server V10 (Tercel) | Kylin Linux Advanced Server V10 (Tercel) | Kylin Linux Advanced Server V10 (Tercel) |
CPU类型 | X86 | X86 | X86 | X86 |
数据库实例名 | CJC01 | CJC02 | 无 | 无 |
数据库名 | CJC | CJC | 无 | 无 |
数据库字符集 | UTF-8 | UTF-8 | 无 | 无 |
PAGE_SIZE | 32K | 32K | 无 | 无 |
EXTENT_SIZE | 16 | 16 | 无 | 无 |
LENGTH_IN_CHAR | 1 | 1 | 无 | 无 |
实例端口号 | 35231(默认端口号5236) | 35231(默认端口号5236) | 无 | 无 |
MAL端口 | 35331 | 35331 | 无 | 无 |
MAL守护进程端口 | 35431 | 35431 | 无 | 无 |
守护进程端口 | 35531 | 35531 | 无 | 无 |
守护组 | GRPCJC | GRPCJC | 无 | 无 |
OGUID | 101102 | 101102 | 无 | 无 |
业务用户名 | CJC | CJC | 无 | 无 |
业务用户名密码 | ********** | ********** | 无 | 无 |
SYSDBA用户密码 | ********** | ********** | 无 | 无 |
操作系统用户 | dmdba | dmdba | dmdba | dmdba |
软件路径 | /dm8/dbms | /dm8/dbms | /dm8/dbms | /dm8/dbms |
控制文件路径 | /dm8/ctl | /dm8/ctl | /dm8/ctl | /dm8/ctl |
数据文件路径 | /dm8/data | /dm8/data | /dm8/data | /dm8/data |
日志文件路径 | /dm8/redo | /dm8/redo | /dm8/redo | /dm8/redo |
归档文件路径 | /dm8/arch | /dm8/arch | /dm8/arch | /dm8/arch |
备份文件路径 | /dm8/bak | /dm8/bak | /dm8/bak | /dm8/bak |
安装介质路径 | /dm8/soft | /dm8/soft | /dm8/soft | /dm8/soft |
巡检路径 | /dm8/check | /dm8/check | /dm8/check | /dm8/check |
脚本路径 | /dm8/scripts | /dm8/scripts | /dm8/scripts | /dm8/scripts |
安装方式 | 命令行 | 命令行 | 命令行 | 命令行 |
安装前准备
1.准备安装介质
试用版下载地址
https://www.dameng.com/list_103.html

达梦官网平台 CPU平台 X86 下没有银河麒麟操作系统安装介质
需要向原厂申请:
ls -lrthtotal 1.5G-rw-r--r-- 1 root root 1.5G Sep 18 17:54 dm8_20230xxx_x86_kylin10_64_include_symbols.isoroot@EBGCJC-002:/soft#md5sum dm8_20230xxx_x86_kylin10_64_include_symbols.iso3d48530c44fc68eb6525011a3751e4c9 dm8_20230xxx_x86_kylin10_64_include_symbols.iso
2.系统查询
操作系统查询
操作系统版本 | 查询方式 |
iSoft3.0/Kylin6.0/CentOS6.0/Kylin4/NFS3.0 | cat etc/issue |
iSoft3.0/Kylin6.0/CentOS6.0/Kylin4 | lsb_release -a|grep "Description" |
iSoft4.0/Kylin7.0/CentOS7.0/Kylin4/Kylin10/NFS3.0/NFS4.0 | cat etc/os-release | grep "PRETTY_NAME" |
Kylin6.0/Kylin7.0/Kylin10 | cat etc/.productinfo |
Kylin7.0/Kylin10 | nkvers |
内核查询
操作系统版本 | 查询方式 |
iSoft3.0/iSoft4.0/Kylin6.0/Kylin7.0/CentOS6.0/CentOS7.0/Kylin4/Kylin10 | cat proc/version |
iSoft3.0/iSoft4.0/Kylin6.0/Kylin7.0/CentOS6.0/CentOS7.0/Kylin4/Kylin10 | uname -r |
iSoft3.0/iSoft4.0/Kylin6.0/Kylin7.0/CentOS6.0/CentOS7.0/Kylin4/Kylin10 | uname -a |
系统位数查询
操作系统版本 | 查询方式 |
iSoft3.0/iSoft4.0/Kylin6.0/Kylin7.0/CentOS6.0/CentOS7.0/Kylin4/Kylin10 | getconf LONG_BIT |
系统架构
操作系统版本 | 查询方式 |
iSoft3.0/iSoft4.0/Kylin6.0/Kylin7.0/CentOS6.0/CentOS7.0/Kylin4/Kylin10) | uname -m |
CPU 型号
型号 | 查询方式 |
Intel 鲲鹏/飞腾/龙芯 | lscpu |
Intel 飞腾/龙芯 | cat proc/cpuinfo|grep name|cut -f2 -d:|uniq -c |
CPU数
型号 | 查询方式 |
Intel | 物理 cat proc/cpuinfo|grep "physical id"|sort|uniq|wc -l 核数 cat proc/cpuinfo|grep "cores" |uniq |
鲲鹏 | 物理 lscpu | grep "CPU(s):" lscpu | grep "座:" 核数 lscpu | grep "Core(s) per socket:" |
Intel/飞腾/龙芯 | 物理 lscpu | grep "Socket(s):" 核数 lscpu | grep "每个座的核数:" |
内存
free -h
df -h
dmidecode -t 1
用户应根据DM及应用系统的需求来选择合适的硬件配置,如CPU的指标、内存及磁盘容量等。档次一般应尽可能高一些,尤其是作为数据库服务器的机器,基于Java的程序运行时最好有较大的内存。其它设备如UPS等在重要应用中也应考虑。下面给出安装DM所需的硬件基本配置:

4.软件环境需求

环境检查与修改
1.磁盘规划及挂载
磁盘规划
磁盘规划是项目实施前的一项重要工作,不仅涉及系统上线的运行效果,也会影响后期的运维扩展操作。
当条件有限只能使用单块盘的情况下,建议通过创建不同的 LV,设置多个挂载点。
如果使用多块盘的则尽量一块盘一个挂载点,多块磁盘有利于磁盘空间的分配,可以进行数据分离处理,避免彼此资源占用。
如果数据量较大,且对于数据交互分析 sql 有比较大要求的场景,推荐将数据目录配置到固态磁盘(可根据 IO 等判断)。
对于处理数据量不大的业务项目,且不牵扯大数据分析的场景,可以使用全机械磁盘。
其中归档、备份和数据分开存储,备份也可以存放到 nas 上,实现异地备份。
以下列举了分开存储的优势:
1.磁盘写入数据时会产生较少的资源占用和冲突,有利于提高数据库的性能。2.可以很容易的监测各类的使用和剩余空间。5.减少磁盘误删或毁坏造成的损失。4.不会抢占数据库的磁盘使用空间。
常用的磁盘格式主要有 ext4 和 XFS,以下分别指出 XFS 的优点和缺点:
优点
(1)数据完全性。
采用 XFS 文件系统,当意想不到的宕机发生后,首先,由于文件系统开启了日志功能,所以磁盘上的文件不再会意外宕机而遭到破坏了。不论目前文件系统上存储的文件与数据有多少,文件系统都可以根据所记录的日志在很短的时间内迅速恢复磁盘文件内容。相比 ext4 更能保证数据完整。
(2)传输特性。
XFS 文件系统采用优化算法,日志记录对整体文件操作影响非常小。XFS 查询与分配存储空间非常快。XFS 文件系统能连续提供快速的反应时间。
(3)可扩展性。
XFS 是一个全 64-bit 的文件系统,可以支持上百万 T 字节的存储空间。对特大文件及小尺寸文件的支持都表现出众,支持特大数量的目录。最大可支持的文件大小为 263 = 9 x 1018 = 9 exabytes,最大文件系统尺寸为 18 exabytes。XFS 使用高的表结构( B+ 树),保证了文件系统可以快速搜索与快速空间分配。相比 ext4,XFS 能够持续提供高速操作,文件系统的性能不受目录中目录及文件数量的限制。
(4)传输带宽。
XFS 能以接近裸设备 I/O 的性能存储数据。在单个文件系统的测试中,其吞吐量最高可达 7GB 每秒,对单个文件的读写操作,其吞吐量可达 4GB 每秒。相比 ext4,XFS 传输速度更快。
缺点
XFS 的 lvm 不能直接在线缩减空间,所以一定注意,XFS 文件系统的 lvm 分区,尽量往小了分,一旦上线,已分配的空间就只扩不减。
创建LV
注意:
数据库服务器需要创建单独的lv,监控器服务器因为使用的是应用服务器,如果没有单独的磁盘,可以先不创建lv。
查看磁盘信息
lsblk
vgdisplay
fdisk /dev/sdbnp1+99Gw
pvcreate /dev/sdb1
vgcreate vg_data /dev/sdb1
lvcreate -L +99G -n lv_dmdata vg_data
mkfs -t xfs /dev/mapper/vg_data-lv_dmdata
mkdir /dm8
vi /etc/fstab/dev/mapper/vg_data-lv_dmdata /dm8 xfs defaults 0 0
mount -a
df -h
mkdir -p /dm8/{dbms,ctl,data,redo,bak,arch,soft,check,scripts,core}mkdir -p /dm8/bak/{dmp,arch,full,incr}
创建数据库用户的意义
(1)数据库运行依赖该用户。(2)普通用户不能修改系统关键配置文件,若要查看其他用户的文件则需要相应的权限。(3)防止使用 root 权限过大导致误操作及一些纠纷。
groupadd -g ***** dinstall
useradd -u ***** -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
passwd dmdba
4.配置用户环境变量
su - dmdbavi .bash_profileexport DM_HOME="/dm8/dbms"export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/dm8/dbms/bin"export PATH=$PATH:$DM_HOME/bin:$DM_HOME/toolalias cp='cp -i'alias mv='mv -i'alias rm='rm -i'
source /home/dmdba/.bash_profile
(1) LD_LIBRARY_PATH 主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。(2) PATH 环境变量定义了用于进行命令和程序查找的目录, PATH 中的目录使用冒号分隔。(3) DM_HOME 定义达梦数据库的软件目录。
chown dmdba.dinstall /dm8 -R
影响范围
操作系统时间不正确会导致产生以下问题:
1.试用授权产品,会导致试用授权过期,无法使用;2.集群自动切换场景,可能会导致集群检测节点服务异常,引发误切换;3.数据库运行日志、数据库服务日志、归档日志、备份集等时间记录错误,会导致相关分析和排查工作难度增大。
date
systemctl status ntpd
ntpq -p
防火墙影响范围
端口对应服务外部无法访问,无法安装集群产品。
修改命令
防火墙的关闭与开启。
##检查防火墙
[root@~]# systemctl status firewalld
[root@~]# systemctl stop firewalld
systemctl list-unit-files|grep firewalld
[root@~]# systemctl disable firewalld
SELinux 组件可用来加强系统安全性。在 Linux 中,SELinux 凌驾于 root 权限之上,设置了很多额外的配置项。如果了解这些配置项,可以进行相应设置,但如果不了解,那么 SELinux 可能不仅没有一些实际性的帮助,反而会带来很多不确定因素。
SELinux 有 3 种模式,分别是 Enforcing,Permissive 和 Disabled 状态。
Enforcing:强制模式。代表 SELinux 在运行中,且已经开始限制 domain/type 之间的验证关系;Permissive:宽容模式。代表 SELinux 在运行中,不会限制 domain/type 之间的验证关系,即使验证不正确,进程仍可以对文件进行操作。如果验证不正确会发出警告。Disabled:关闭模式。SELinux 并没有实际运行。
[root@localhost ~]# getenforce
[root@localhost ~]# setenforce 0
[root@localhost ~]# setenforce 1
cat /etc/selinux/config
需修改配置文件:
vi /etc/selinux/config
注意
修改 SELinux 永久关闭,必须重启服务器,才能生效。且永久关闭后,不能通过 setenforce 1 命令临时打开。
5.磁盘调度算法
注意:
默认操作系统基线是 deadline,不需要在修改,如果不是 deadline,可参考下面方式进行修改。
调度算法介绍
每当进程需要进行磁盘 I/O 操作时,它就向操作系统发出一个系统调用。
如果所需的磁盘驱动器和控制器空闲,则立即处理请求。
如果磁盘驱动器或控制器忙,则任何新的服务请求都会添加磁盘驱动器的待处理请求队列。
对于具有多个进程的一个多道程序系统,磁盘队列可能有多个待处理的请求。因此操作系统如何选择待处理请求的服务便是磁盘调度算法。
调度算法有:
1.CFQ (完全公平排队 I/O 调度程序);2.NOOP (电梯式调度程序);3.Deadline (截止时间调度程序);4.AS (预料 I/O 调度程序)。
如存储为 nvme 等高性能的设备时,此类设备 IO 调度算法只有 none,则无需设置。
检查及修改
通过 lsblk 命令找到数据盘对应的物理盘。
下图中数据盘对应的物理盘是 vdc,则应检查 vdc 磁盘的调度算法。
lsblk
##检查 sdb 磁盘的调度算法
cat /sys/block/sdb/queue/scheduler
上图选中的调度算法是[bfq],需要修改调度算法为 deadline。
临时修改
##临时更改 I/O 调度方法,重启后失效
[root@~]# echo deadline > /sys/block/sdb/queue/scheduler
##修改内核引导参数,加入 elevator= deadline
[root@~]# vi /boot/grub/menu.lst
[root@~]# kernel /boot/vmlinuz-2.6.32-504.el6 ro root=LABEL=/ elevator=deadline rhgb quiet
[root@~]# cat /sys/block/vdc/queue/scheduler
Swap 的关闭需要视情况而定,建议内存充裕时关闭,内存太小不关闭。
关闭的意义
在 Linux 下,SWAP 的作用类似 Windows 系统下的“虚拟内存”。当物理内存不足时,拿出部分硬盘空间当 SWAP 分区(虚拟成内存)使用,从而解决内存容量不足的情况。
数据库系统一般都对响应延迟比较敏感,如果使用 swap 代替内存,数据库服务性能必然不可接受。
对于响应延迟极其敏感的系统来讲,延迟太大和服务不可用没有任何区别,比服务不可用更严重的是,swap 场景下进程一直处于活动状态,这就意味着系统一直不可用。
具体命令
检查
free -h
##临时关闭 swap 分区,重启后失效
[root@~]# swapoff -a
##永久关闭 swap 分区
[root@~]# sed -ri 's/.*swap.*/#&/' /etc/fstab
[root@~]# reboot
[root@~]# free -m
关闭的意义
NUMA(Non-Uniform Memory Access)架构是为了解决多 CPU 下内存访问冲突,即不再将整个物理内存作为一个整体,而是根据不同的 CPU 区分不同的内存块,如 2 颗 CPU 每颗 CPU 使用 64G 内存。
当 NUMA 参数 zone_reclaim_mode 设置为 1 时,内核将要求多路 CPU 尽量从距离较近的系统内存节点(服务器的整体内存在 numa 架构下将被分成若干个节点)分配内存,而不是在整个服务器可访问内存的范围内进行内存分配。
因此,在较高内存占用压力下,内存申请会触发内存频繁回收整理的机制,严重影响系统整体性能(长期处于内核态 sys 很高),进而可能导致 SQL 卡顿问题的发生。
查询
[root@~]# dmesg | grep -i numa
##编辑 grub 文件,如下图所示加上:numa=off
[root@~]# vi /etc/default/grub

##重新生成 /etc/grub2.cfg 配置文件:
[root@~]# grub2-mkconfig -o /etc/grub2.cfg
[root@~]# reboot
[root@~]# dmesg | grep -i numa

##再次确认
[root@~]# cat /proc/cmdline

8.禁用透明大页
禁用的意义
Transparent HugePages (透明大页)对系统的性能产生影响的原因:
在 khugepaged 进行扫描进程占用内存,并将 4k Page 交换为 Huge Pages 的这个过程中,对于操作的内存的各种分配活动都需要各种内存锁,直接影响程序的内存访问性能。并且,这个过程对于应用是透明的,在应用层面不可控制,对于专门为 4k page 优化的程序来说,可能会造成随机的性能下降现象。
具体命令
鲲鹏 arm+ 银河麒麟操作系统 V10SP1
(1) 查看透明大页内存
##使用下图中命令查看当前操作系统透明大页内存配置。
[root@]# grep -i huge /proc/meminfo[root@]# cat /sys/kernel/mm/transparent_hugepage/enabled
grep -i huge /proc/meminfo
而当前的透明大页内存配置是开启的(always)。
(2) 关闭透明大页内存。
##通过修改 grub 配置,在 “GRUB_CMDLINE_LINUX=” 配置参数结尾加入 “transparent_hugepage=never”,可以永久关闭透明大页内存。
[root@~]# vim /etc/default/grub

(3)重新生成 grub 配置。
##如果操作系统安装时,使用 Legacy 模式引导安装,则使用以下命令重新生成 grub。
[root@~] # grub2-mkconfig -o /boot/grub2/grub.cfg
[root@~]# grub2-mkconfig -o /boot/efi/EFI/kylin/grub.cfg

(4) 生成 grub 后,重启操作系统查看配置。

可以看到系统中目前透明大页内存为 0,并且禁用透明大页内存(never)。查看 /sys/kernel/mm/transparent_hugepage/defrag 配置文件缺省配置为 “madvise”。

如需永久修改配置为 “never”,需在 /etc/rc.local 中添加如下内容。
if test -f /sys/kernel/mm/transparent_hugepage/defrag; thenecho never > /sys/kernel/mm/transparent_hugepage/defragfi
echo never > /sys/kernel/mm/transparent_hugepage/defrag

9.调整 sysctl.conf 参数
参数文件介绍
/etc/sysctl.conf 是一个允许改变正在运行中的 Linux 系统接口,它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项,修改内核参数永久生效。
/proc/sys 下内核文件与配置文件 sysctl.conf 中变量存在着对应关系。
调整项介绍
配置参数 overcommit_memory 表示系统的内存分配策略可以选值为 0,1,2。
0:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。1:表示内核允许分配所有的物理内存,不管当前的内存状态如何。2:表示内核允许分配超过所有物理内存和交换空间总和的内存。
临时生效和永久生效:
##查看(默认就是0)
[root@dm~]# cat /proc/sys/vm/overcommit_memory
##临时生效
##使用 root 执行命令:
[root@dm~]# echo 0 > /proc/sys/vm/overcommit_memory
[root@dm~]# cat /proc/sys/vm/overcommit_memory
##用root用户编辑配置文件编辑/etc/sysctl.conf
[root@cjc~]# vim /etc/sysctl.conf
设置swappiness参数:
查看
cat /etc/sysctl.conf|grep -i swap
vi /etc/sysctl.confvm.swappiness = 0
cat /etc/sysctl.conf|grep ore_patternecho "kernel.core_pattern = /dm8/core/core-%e-%p-%s" >> /etc/sysctl.conf
10.调整 limits.conf 参数
参数文件介绍
在 Linux、Solaris、AIX 和 HP-UNIX 等系统中,操作系统默认会对程序使用资源进行限制。
如果不取消对应的限制,则数据库的性能将会受到影响。
调整项介绍
1.core file size
2.data seg size
3.file size
4.open files
5.virtual memory
6.max user processes
临时修改
##查询当前系统资源限制
ulimit -a
##临时修改 open files 为65535
[dmdba@]# ulimit -n 65535
[dmdba@]# ulimit -u 10240
[dmdba@~]# ulimit -a
##编辑 limits.conf 文件
cp /etc/security/limits.conf /etc/security/limits.conf_20240524bakvi /etc/security/limits.conf
dmdba soft nproc 10240dmdba hard nproc 10240dmdba soft nofile 65536dmdba hard nofile 65536dmdba hard data unlimiteddmdba soft data unlimiteddmdba hard fsize unlimiteddmdba soft fsize unlimiteddmdba soft core unlimiteddmdba hard core unlimited
ulimit -a
##重启操作系统
[root@]# reboot
[dmdba@]# ulimit -a
参数文件介绍
system.conf 为系统和服务管理的配置文件,当运行系统实例时,systemd 将读取这个配置文件 system.conf,相反读取 user.conf。
达梦数据库服务注册为系统服务的进程,如通过 systemctl 或者 service 方式设定随机自启动的数据库服务,其能打开的最大文件描述符、proc 数量等不受 limits.conf 控制,需要修改 /etc/systemd/system.conf 文件。
调整项介绍
(1) DefaultLimitNOFILE:用户默认最大打开文件数。(2) DefaultLimitNPROC:用户默认最大进程数。
##编辑配置文件 /etc/systemd/system.conf
vi /etc/systemd/system.conf##添加配置:DefaultLimitNOFILE=65536DefaultLimitNPROC=10240
保存退出后需要重启服务器才能生效。
本次没有重启服务器
12.调整 nproc.conf 参数
参数文件介绍
nproc 是操作系统级别对每个用户创建的进程数的限制。文件路径为 /etc/security/limits.d/nproc。
不同操作系统文件名略有不同,
其中
麒麟 10 中是 nproc.conf;centos6 中是 90-nproccentos,centos7 中是 20-nproc.conf。
/etc/security/limits.conf
调整项介绍
soft 表示软限制,hard 表示硬限制,nproc 进程数,nofile 文件数。
root@cjc:/root#cd /etc/security/limits.droot@cjc:/etc/security/1imits.d#1snproc.confroot@cjc:/etc/security/1imits.d#cat nproc.confdmdba soft nproc 65536dmdba hard nproc 65536
##编辑配置文件 /etc/security/limits.d/nproc.conf
[root@dm~]# vi /etc/security/limits.d/nproc.conf##添加配置:dmdba soft nproc 65536dmdba hard nproc 65536##确定是否生效:[dmdba@~]# ulimit -u65536
13.CPU 超线程检查
超线程简介
超线程技术是把多线程处理器内部的两个逻辑内核模拟成两个物理芯片,让单个处理器就能使用线程级的并行计算,进而兼容多线程操作系统和软件。超线程技术充分利用空闲 CPU 资源,在相同时间内完成更多工作。
超线程
需根据数据库本身是否需要开启或关闭来决定如何操作,一般在 BIOS 中进行开启/关闭操作。
检查命令
通过解析 /proc/cpuinfo 文件内容来判定是否开启超线程,如服务器开启了超线程则下述公式计算结果等于 2,否则等于 1。
系统的 cpu 线程数/(物理 CPU 个数*每个物理 CPU 的逻辑核数)
##系统的 cpu 线程数:
cat /proc/cpuinfo | grep "processor" | wc -l
cat /proc/cpuinfo | grep "physical id" | sort|uniq | wc -l
cat /proc/cpuinfo |grep "core id"|sort -u|wc -l
注意:
默认参数是no,不需要修改,如果不是,参考下面示例进行修改。
参数介绍
RemoveIPC 参数会控制当前用户在完全注销时,是否删除属于用户自己的 Systemd V 和 POSIX IPC 对象,接受布尔参数。
如果启用该参数,则在用户的最后一个会话终止后,用户可能不会使用 IPC 资源。
这包括 System V 信号量、共享内存和消息队列,以及 POSIX 共享内存和消息队列。
请注意,根用户和其他系统用户的 IPC 对象不受此设置的影响。RemoveIPC 默认值要根据操作系统版本情况而定。
本节只介绍检查麒麟 v10 SP1 版本的 RemoveIPC 参数。
/etc/systemd/logind.conf 配置文件是 Systemd 的一部分,Systemd 是自由软件,用户可以重新分发或修改它,该文件在编译时会携带默认值,用户可通过编译 logind.conf 来满足自己的需求。
参数检查
检查 RemoveIPC 参数设置,要求为 no 。
systemctl show systemd-logind | grep -i removeipc
如果不是 no,用以下方法调整:
修改 /etc/systemd/logind.conf 配置文件中的 RemoveIPC 参数,将#注释去掉,并修改 yes 为 no,
重启服务
systemctl daemon-relCJCdsystemctl restart systemd-logind
简介
limits.conf 文件实际是 Linux PAM(插入式认证模块,Pluggable Authentication Modules 中 pam_limits.so 的配置文件),突破系统的默认限制,对系统访问资源有一定保护作用,当用户访问服务器时,服务程序将请求发送到 PAM 模块,PAM 模块根据服务名称在 /etc/pam.d 目录下选择一个对应的服务文件,然后根据服务文件的内容选择具体的 PAM 模块进行处理。
limits.conf 和 sysctl.conf 区别在于 limits.conf 是针对用户,而 sysctl.conf 是针对整个系统参数配置。
修改命令
[root@~]# vi /etc/pam.d/loginsession required /lib64/security/pam_limits.sosession required pam_limits.so[root@~]# vi /etc/pam.d/loginsession required /lib64/security/pam_limits.sosession required pam_limits.so
检测的意义
对于单机数据库,主要检测业务网络。
业务网络主要作用是应用服务器到数据库服务器连接数据库时,请求数据库进行相应的操作。如果业务网络带宽较低、丢包或延迟较大,会降低应用请求数据库效率。
对于集群,为确保集群的稳定性,原则要求建立并检测单独的心跳局域网络,不低于 1000M 带宽。
心跳网络对 mal 系统的影响较大,如果网络丢包或者延迟较大,则会严重影响 mal 系统的处理能力,从而导致整个集群出现响应服务请求慢的情况。
具体命令
##拷贝一个文件到远程服务器的 /opt 目录下
[root@~]# scp -r xxx dmdba@ip:/opt/
[root@~]# scp -r -P端口 xxx dmdba@ip:/opt/
ethtool eth1
sar -n DEV 1 100
#IFACE 本地网卡接口的名称#rxpck/s 每秒钟接受的数据包#txpck/s 每秒钟发送的数据库#rxKB/S 每秒钟接受的数据包大小,单位为 KB#txKB/S 每秒钟发送的数据包大小,单位为 KB#rxcmp/s 每秒钟接受的压缩数据包#txcmp/s 每秒钟发送的压缩包#rxmcst/s 每秒钟接收的多播数据包
https://eco.dameng.com/document/dm/zh-cn/ops/before-installation.html
测试的意义
传统关系型数据库的最大瓶颈之一就在于磁盘的读写速率上,因此检测磁盘的 IO 速率是十分必要的。
磁盘的运作是磁盘读写前寻找磁道的过程。
磁盘自带的读写缓存大小,对于磁盘读写速度至关重要。
读写速度快的磁盘,通常都带有较大的读写缓存。
测试服务器读写性能,以此来判断是否存在性能瓶颈。
具体命令
##真实模拟 20K 次磁盘写入(IO)
dd bs=32k count=20k if=/dev/zero of=test oflag=dsync
nmon测试工具、OSW测试工具使用方式见链接:
https://eco.dameng.com/document/dm/zh-cn/ops/before-installation.html
安装(命令行)
主、备、监控器 四个节点分别执行
查看安装介质
cd /dm8/softls -lrth
root 用户下挂载
ll -rth /mntmount -o loop dm8_20230713_x86_kylin10_64_include_symbols.iso /mnt
ll -rth /mnt
root用户下安装
cd /mnt./DMInstall.bin -i
步骤1:选择安装语言
请根据系统配置选择相应语言,输入选项,回车进行下一步。如下图所示:

如果当前操作系统中已存在DM,将在终端弹出提示,输入选项:继续,将进行下一步的命令行安装,否则退出命令行安装。如下图所示:

注意:
若操作系统中已安装DM,重新安装前,应完全卸载已存在的DM。并且在重新安装前,务必备份好数据。
步骤2:验证Key文件
用户可以选择是否输入Key文件路径。不输入则进入下一步安装,输入Key文件路径,安装程序将显示Key文件的详细信息,如果是合法的Key文件且在有效期内,用户可以继续安装。
本次安装包无key文件,选择n跳过

步骤3:输入时区
用户可以选择DM的时区信息。如下图所示:21

......
步骤4:选择安装类型
命令行安装与图形化安装的选择的安装类型是一样。如下图所示:4

选择1 2 3 4 5全部安装

用户选择安装类型需要手动输入,默认是典型安装。如果用户选择自定义安装,将打印全部安装组件信息。用户通过命令行窗口输入要安装的组件序号,选择多个安装组件时需要使用空格进行间隔。输入完需要安装的组件序号后回车,将打印安装选择组件所需要的存储空间大小。
步骤5:选择安装路径
用户可以输入DM的安装路径,不输入则使用默认路径,默认值为$HOME/dmdbms(如果安装用户为root,则默认安装目录为/opt/dmdbms,但不建议使用root系统用户来安装DM)
安装程序将打印当前安装路径的可用空间,如果空间不足,用户需重新选择安装路径。如果当前安装路径可用空间足够,用户需进行确认。不确认,则重新选择安装路径,确认,则进入下一步骤。
步骤6:安装小结
安装程序将打印用户之前输入的部分安装信息。
用户对安装信息进行确认。不确认,则退出安装程序,确认,进行DM的安装。
步骤7:安装
修改权限
chown dmdba.dinstall /dm8 -R
安装完成后,终端提示“请以root系统用户执行命令”。如果使用非root系统用户进行安装,所以部分安装步骤没有相应的系统权限,需要用户手动执行相关命令。用户可根据提示完成相关操作。
执行脚本
根据安装提示,执行相关脚本(如无提示,不需要执行)
[root@CJC-app-001 ~]# /dm8/dbms/script/root/root_installer.sh

3.数据库初始化
注意:主、备数据库进行初始化,监控器节点不需要初始化
初始化数据库
安装结束后,还需要初始化数据库并注册相关服务才能正式运行达梦数据库,具体可参考《DM8_dminit使用手册》和《DM8_Linux服务脚本使用手册》。
需要注意的是,达梦提供的各个服务基本都依赖于网络和存储才能正常启动,因此当启动达梦服务时若网络和存储没有就绪可能会失败,此时可等网络和存储就绪后再次手动启动达梦相关服务,或修改达梦相关服务脚本中的优先级和依赖关系。
DM8 dminit使用手册
https://eco.dameng.com/docs/zh-cn/pm/dminit-function-introduction.html
dminit 是 DM 数据库初始化工具。在安装 DM 的过程中,用户可以选择是否创建初始数据库。如果当时没有创建,那么在安装完成之后,可以利用创建数据库工具 dminit 来创建。
系统管理员可以利用 dminit 工具提供的各种参数,设置数据库存放路径、段页大小、是否对大小写敏感、以及是否使用 UNICODE 等,创建出满足用户需要的数据库。该工具位于安装目录的 /bin 目录下。
初始化命令:
查看帮助信息
不支持过滤?
dminit help|grep CHARSET
[dmdba@CJC-app-001 dmdbms]$ dminit help...CHARSET/UNICODE_FLAG CHARSET(0), optional value:0[GB18030],1[UTF-8],2[EUC-KR]
开始初始化
注意:
部分参数只有初始化时可以指定,一旦初始化完成,不再支持参数的修改,例如CHARSET等参数,初始化前和业务确认好需求。
主库:
##dminit path=/dm8/data CTL_PATH=/dm8/ctl/dm01.ctl LOG_PATH=/dm8/redo/dm_redo01.log LOG_PATH=/dm8/redo/dm_redo02.log LOG_SIZE=1024 CASE_SENSITIVE=N CHARSET=1 DB_NAME=CJC INSTANCE_NAME=CJC01 SYSDBA_PWD=****** SYSAUDITOR_PWD=****** BUFFER=1024 PORT_NUM=35231 AUTO_OVERWRITE=0 EXTENT_SIZE=32 PAGE_SIZE=16 LENGTH_IN_CHAR=1
##dminit path=/dm8/data CTL_PATH=/dm8/ctl/dm01.ctl LOG_PATH=/dm8/redo/dm_redo01.log LOG_PATH=/dm8/redo/dm_redo02.log LOG_SIZE=1024 CASE_SENSITIVE=N CHARSET=1 DB_NAME=CJC INSTANCE_NAME=CJC02 SYSDBA_PWD=****** SYSAUDITOR_PWD=****** BUFFER=1024 PORT_NUM=35231 AUTO_OVERWRITE=0 EXTENT_SIZE=32 PAGE_SIZE=16 LENGTH_IN_CHAR=1
Path: 初始数据库存放路径CTL_PATH:控制文件路径LOG_PATH:日志文件路径CASE_SENSENSITIVE:大小写敏感,可选择值,Y/N 1/0CHARSET:字符集:0(GB18030)、1(UTF-8)、2(EUC-KR)DB_NAME:数据库名INSTANCE_NAME:实例名SYSDBA_PWD:设置SYSDBA密码SYSAUDITOR_PWD:设置SYSAUDITOR 密码BUFFER:系统缓存大小PORT_NUM:数据库服务器监听端口号
4.启动数据库
此步骤就是前台启动数据库,看看是否安装实例成功,前台开启验证。
dmserver /dm8/data/CJC/dm.ini
exit;
配置dm.ini文件
主库、备库 相同配置
cd /dm8/data/CJCcp dm.ini dm.ini_20230920bakvi dm.ini
DW_INACTIVE_INTERVAL=60ALTER_MODE_STATUS = 0ENABLE_OFFLINE_TS = 2MAL_INI = 1ARCH_INI = 1RLOG_SEND_APPLY_MON = 64MAX_SESSIONS = 5000
注意:ARCH_SPACE_LIMIT根据实际空间大小确定
cd /dm8/data/CJC
vi dmarch.iniARCH_WAIT_APPLY =0[ARCHIVE_LOCAL1]ARCH_TYPE = LOCALARCH_DEST = /dm8/archARCH_FILE_SIZE = 1024ARCH_SPACE_LIMIT = 10240[ARCHIVE_REALTIME1]ARCH_TYPE = REALTIMEARCH_DEST = CJC02
ARCH_WAIT_APPLY =0[ARCHIVE_LOCAL1]ARCH_TYPE = LOCALARCH_DEST = /dm8/archARCH_FILE_SIZE = 1024ARCH_SPACE_LIMIT = 10240[ARCHIVE_REALTIME1]ARCH_TYPE = REALTIMEARCH_DEST = CJC01
主库、备库 相同配置
cd /dm8/data/CJCvi dmmal.iniMAL_CHECK_INTERVAL = 30MAL_CONN_FAIL_INTERVAL = 10MAL_BUF_SIZE = 5000MAL_VPOOL_SIZE = 6000[MAL_INST1]MAL_INST_NAME = CJC01MAL_HOST = 192.168.1.101MAL_PORT = 35331MAL_INST_HOST = 192.168.1.101MAL_INST_PORT = 35231MAL_DW_PORT = 35431MAL_INST_DW_PORT = 35531[MAL_INST2]MAL_INST_NAME = CJC02MAL_HOST = 192.168.1.102MAL_PORT = 35331MAL_INST_HOST = 192.168.1.102MAL_INST_PORT = 35231MAL_DW_PORT = 35431MAL_INST_DW_PORT = 35531
主库、备库 相同配置
cd /dm8/data/CJCvi dmwatcher.ini[GRPCJC]DW_TYPE = GLOBALDW_MODE = AUTODW_ERROR_TIME = 10INST_RECOVER_TIME = 60INST_ERROR_TIME = 10INST_OGUID = 101102INST_INI = /dm8/data/CJC/dm.iniINST_AUTO_RESTART = 1INST_STARTUP_CMD = /dm8/dbms/bin/dmserverRLOG_SEND_THRESHOLD = 0RLOG_APPLY_THRESHOLD = 0
主库、备库 相同配置
后台启动配置文件
确认监控器,主备只能启动一个,通常情况下,在第三台服务器启动,如没有第三台独立的服务器,在备库启动。
cd /dm8/data/CJCvi dmmonitor.iniMON_DW_CONFIRM = 1MON_LOG_PATH = /dm8/mal/logMON_LOG_INTERVAL = 60MON_LOG_FILE_SIZE = 512MON_LOG_SPACE_LIMIT = 2048[GRPCJC]MON_INST_OGUID = 101102MON_DW_IP = 192.168.1.101:35431MON_DW_IP = 192.168.1.102:35431
主库、备库 相同配置
前台启动配置文件
非确认监控器
可以启动多个,手动切换等场景启动,可在任一台服务器上启动
MON_DW_CONFIRM = 0MON_LOG_PATH = /dm8/mal/log_frontMON_LOG_INTERVAL = 60MON_LOG_FILE_SIZE = 512MON_LOG_SPACE_LIMIT = 2048[GRPCJC]MON_INST_OGUID = 101102MON_DW_IP = 192.168.1.101:35431MON_DW_IP = 192.168.1.102:35431
说明:
配置数据守护 V4.0 之前,必须先通过备份还原方式同步各数据库的数据,确保各数据的数据保持完全一致。主库可以是新初始化的数据库,也可以是正在生产、使用中的数据库。
不能使用分别初始化库或者直接拷贝数据文件的方法,原因如下:
1.每个库都有一个永久魔数(permenant_magic),一经生成,永远不会改变,主库传送日志时会判断这个值是否一样,确保是来自同一个数据守护环境中的库,否则传送不了日志。
2.由于 dminit 初始化数据库时,会生成随机密钥用于加密,每次生成的密钥都不相同,备库无法解析采用主库密钥加密的数据。
3.每个库都有一个数据库魔数(DB_MAGIC),每经过一次还原、恢复操作,DB_MAGIC 就会产生变化,需要通过这种方式来区分同一个数据守护环境中各个不同的库。
主库脱机备份
启动DMAP服务
root@CJC-001:/dm8/scripts#cat start_dmap.sh#!/bin/bash[ $(whoami) != root ] && echo "user not is root , please use an ##root## user" && exit 2/dm8/dbms/bin/service_template/DmAPService startroot@CJC-001:/dm8/scripts#sh start_dmap.sh
如果实例在运行,需要先关闭
#systemctl stop DmServiceCJC.service
dmrman CTLSTMT="BACKUP DATABASE '/dm8/data/CJC/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dm8/bak/tmp/BACKUP_FILE_01'"
dmdba@EBGCJC-001:/home/dmdba$ls -lrth /dm8/bak/tmp/BACKUP_FILE_01/total 23M-rw-r--r-- 1 dmdba dinstall 23M Sep 20 09:58 BACKUP_FILE_01.bak-rw-r--r-- 1 dmdba dinstall 106K Sep 20 09:58 BACKUP_FILE_01.meta
scp -P 333 -r /dm8/bak/tmp/BACKUP_FILE_01 192.168.1.102:/dm8/bak/tmp/
启动DMAP服务
root@ECJC-001:/dm8/scripts#cat start_dmap.sh#!/bin/bash[ $(whoami) != root ] && echo "user not is root , please use an ##root## user" && exit 2/dm8/dbms/bin/service_template/DmAPService startroot@EBGCJC-001:/dm8/scripts#sh start_dmap.sh
dmrman CTLSTMT="restore database '/dm8/data/CJC/dm.ini' from backupset '/dm8/bak/tmp/BACKUP_FILE_01'"dmrman CTLSTMT="recover database '/dm8/data/CJC/dm.ini' from backupset '/dm8/bak/tmp/BACKUP_FILE_01'"dmrman CTLSTMT="recover database '/dm8/data/CJC/dm.ini' update DB_MAGIC "
启动主库
注意
一定要以mount方式启动数据库实例,否则系统启动时会重构回滚表空间,生成Redo日志;
并且,启动后应用可能连接到数据库实例进行操作,破坏主备库的数据一致性。
数据守护配置结束后,守护进程会自动open数据库。
以mount方式启动,前台启动
dmserver /dm8/data/CJC/dm.ini mount
登录主库
disql SYSDBA/xxxxxx:35231SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);sp_set_oguid(101102);alter database primary;SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
注意
一定要以mount方式启动数据库实例,否则系统启动时会重构回滚表空间,生成Redo日志;
并且,启动后应用可能连接到数据库实例进行操作,破坏主备库的数据一致性。
数据守护配置结束后,守护进程会自动open数据库。
以 mount方式启动,前台启动
dmserver /dm8/data/CJC/dm.ini mount
disql SYSDBA/xxxxxx:35231
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);sp_set_oguid(101102);alter database standby;SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
注册服务,需要以root用户执行
实例服务
主、备库 注册服务
cd /dm8/dbms/script/root
./dm_service_installer.sh -t dmserver -dm_ini /dm8/data/CJC/dm.ini -p CJC -m mount
systemctl disable DmServiceCJC.service
主、备库 注册服务
cd /dm8/dbms/script/root./dm_service_installer.sh -t dmwatcher -p WATCHER -watcher_ini /dm8/data/CJC/dmwatcher.ini
systemctl list-unit-files |grep -i dmwsystemctl disable DmWatcherServiceWATCHER.service
主、备库 注册服务
cd /dm8/dbms/script/root./dm_service_installer.sh -t dmmonitor -p MONITOR -monitor_ini /dm8/data/CJC/dmmonitor.ini
systemctl disable DmMonitorServiceMONITOR.service
如果注册有误,可以通过下面命令取消注册。
cd /dm8/dbms/script/root#./dm_service_uninstaller.sh -n 服务名称
先关闭数据库实例
备库
shutdown immediate;
shutdown immediate;
ps -ef|grep -i dms|grep -v grep
启动顺序:实例、守护、监控器
主库:
systemctl start DmWatcherServiceWATCHER.service
ps -ef|grep -i dms|grep -v grepps -ef|grep -i dmw|grep -v grep
systemctl start DmWatcherServiceWATCHER.service
ps -ef|grep -i dms|grep -v grepps -ef|grep -i dmw|grep -v grep
后台启动监控器
systemctl start DmMonitorServiceMONITOR.service
ps -ef|grep -i dmm|grep -v grep
执行节点:主、备
备份参数文件
cp /dm8/data/CJC/dm.ini /dm8/bak/conf/dm.ini_20231030
disql SYSDBA/******:35231start /dm8/scripts/Adj_******.sql

手动检查dm.ini参数buffer,max_sessions等是否合理,如有问题,手动调整。
修改如下:
MEMORY_POOL:由500改成1000MEMORY_TARGET:默认1000,不用修改BUFFER:服务器总内存小于等于16GB,设置为1/3,服务器大于100GB,设置为20GBMAX_SESSIONS:5000MAX_OS_MEMORY:60
set pagesize 200select para_name,para_value,file_value from V$DM_INI where PARA_NAME in ('WORKER_THREADS','TASK_THREADS','IO_THR_GROUPS','MAX_OS_MEMORY','MEMORY_POOL','MEMORY_N_POOLS','MEMORY_TARGET','BUFFER','BUFFER_POOLS','RECYCLE','RECYCLE_POOLS','FAST_POOL_PAGES','FAST_ROLL_PAGES','MEMORY_MAGIC_CHECK','ENABLE_FREQROOTS','HJ_BUF_GLOBAL_SIZE','HJ_BUF_SIZE','HAGR_BUF_GLOBAL_SIZE','HAGR_BUF_SIZE','SORT_FLAG','SORT_BLK_SIZE','SORT_BUF_SIZE','SORT_BUF_GLOBAL_SIZE','RLOG_POOL_SIZE','CACHE_POOL_SIZE','DICT_BUF_SIZE','VM_POOL_TARGET','SESS_POOL_TARGET','USE_PLN_POOL','ENABLE_MONITOR','SVR_LOG','TEMP_SIZE','TEMP_SPACE_LIMIT','MAX_SESSIONS','MAX_SESSION_STATEMENT','PK_WITH_CLUSTER','ENABLE_ENCRYPT','OLAP_FLAG','VIEW_PULLUP_FLAG','OPTIMIZER_MODE','ADAPTIVE_NPLN_FLAG','PARALLEL_PURGE_FLAG','PARALLEL_POLICY','UNDO_EXTENT_NUM','ENABLE_INJECT_HINT','DIRECT_IO','COMPATIBLE_MODE','ALTER_MODE_STATUS','ENABLE_OFFLINE_TS');
简介
达梦数据库针对从操作系统申请的内存资源进行内存池管理,所有的数据库线程从自己的内存池中进行处理,但是若 glibc 版本大于 2.10,操作系统会给数据库线程再分配一个内存池,这个内存池数据库是无法管理和释放的。
所以导致数据库进程的 VIRT(虚拟内存)占用过高,通过添加操作系统参数 MALLOC_ARENA_MAX 禁止操作系统额外为数据库线程分配内存,数据库相关线程只从数据库已申请的内存池中进行资源分配,从而有效控制内存资源使用大小。
默认就是4,理论上不需要修改
查询 glibc 版本
rpm -qa|grep glibc
cd /dm8/dbms/bincat /dm8/dbms/bin/DmServiceCJC|grep MALLOC_ARENA_MAX[dmdba@]#vi DmServiceCJCexport MALLOC_ARENA_MAX=4
sed -i "s/### END INIT INFO/### END INIT INFO\n\nexport MALLOC_ARENA_MAX=1/" /dm8/dbms/bin/DmServiceCJC
测试前,先确认数据库实例、守护、监控器已经启动
主库:新增测试数据
disql CJC:35231create table t0920(id int);insert into t0920 values(1);commit;
disql CJC:35231SQL> select * from t0920;LINEID id---------- -----------1 1used time: 0.303(ms). Execute id is 101.
SQL> insert into t0920 values(2);insert into t0920 values(2);[-710]:Try to modify user database at standby mode.used time: 0.610(ms). Execute id is 0.
主、备库配置服务名
vi /etc/dm_svc.conf##全局配置区TIME_ZONE=(480)LANGUAGE=(cn)DMHACJC=(192.168.1.101:35231,192.168.1.102:35231)##服务配置[DMHACJC]SWITCH_TIMES=(3)SWITCH_INTERVAL=(100)LOGIN_MODE=(1)
disql SYSDBA@DMHACJCjdbc:dm://DMHACJC
主、备手动切换
切换
备库前台启动非确认监控器
###dmmonitor /dm8/data/CJC/dmmonitor_front.ini
dmdba@EBGCJC-002:/home/dmdba$disql SYSDBA@DMHA
密码:服务器[192.168.1.101:35231]:处于主库打开状态登录使用时间 : 5.397(ms)disql V8SQL> select name,instance_name,status$,mode$ from v$instance;行号 name instance_name status$ mode$---------- ---- ------------- ------- -------1 CJC01 CJC01 OPEN PRIMARY
show global info
###登录监控器
login用户名:SYSDBA密码:[monitor] 2023-09-20 14:33:37: 登录监视器成功!
###当前主库是CJC01,备库是CJC02,执行下面命令,将主库切换到CJC02
switchover GRPCJC.CJC02
###切换后,查看主备状态,主库已切换到CJC02实例
show global info
查询实例已经自动变成CJC02了。
SQL> select name,instance_name,status$,mode$ from v$instance;服务器[192.168.1.102:35231]:处于主库打开状态已连接行号 name instance_name status$ mode$---------- ---- ------------- ------- -------1 CJC02 CJC02 OPEN PRIMARY已用时间: 3.059(毫秒). 执行号:700.
新主库插入数据测试
SQL> insert into CJC.t0920 values(2);
影响行数 1已用时间: 1.380(毫秒). 执行号:802.SQL> commit;操作已执行已用时间: 3.062(毫秒). 执行号:803.SQL> select * from CJC.t0920;行号 id---------- -----------1 1002 2已用时间: 0.292(毫秒). 执行号:804
dmdba@EBGCJC-001:/home/dmdba$!198disql SYSDBA/xxxxxx:35231服务器[LOCALHOST:35231]:处于备库打开状态登录使用时间 : 3.023(ms)disql V8SQL> select * from CJC.t0920;行号 id---------- -----------1 1002 2已用时间: 1.895(毫秒). 执行号:800.SQL> insert into CJC.t0920 values(3);insert into CJC.t0920 values(3);[-710]:试图在STANDBY模式下,修改用户库.已用时间: 0.551(毫秒). 执行号:0.
###开始切换
登录前台监控器
login用户名:SYSDBA密码:switchover GRPCJC.CJC01
主、备自动切换
主动切换前,需要检查确认监控器已经正常启动
备库
systemctl status DmMonitorServiceMONITOR.service
tail -100f /dm8/mal/log/dmmonitor_20230920110403.log
停止主库守护服务
systemctl stop DmWatcherServiceWATCHER.service
ps -ef|grep -i dms|grep -v grepps -ef|grep -i dmw|grep -v grep
通过监控日志可以看到备库实例自动接管
[monitor] 2023-09-20 15:31:48: [!!! 实例CJC01[PRIMARY, OPEN, ISTAT_SAME:TRUE]故障,实例CJC02[STANDBY, OPEN, ISTAT_SAME:TRUE]符合自动接管条件 !!!][monitor] 2023-09-20 15:31:48: 检测到PRIMARY实例故障,开始对组(GRPCJC)执行自动接管
查看集群状态
检查自动切换后信息
dmdba@EBGCJC-002:/home/dmdba$disql SYSDBA@DMHA密码:服务器[192.168.1.102:35231]:处于主库打开状态登录使用时间 : 5.804(ms)disql V8SQL> select name,instance_name,status$,mode$ from v$instance;行号 name instance_name status$ mode$---------- ---- ------------- ------- -------1 CJC02 CJC02 OPEN PRIMARY已用时间: 3.658(毫秒). 执行号:600.
SQL> INSERT INTO CJC.T0920 VALUES(300);SQL> COMMIT;
systemctl start DmWatcherServiceWATCHER.service
检查数据自动同步完成
SQL> SELECT * FROM CJC.TEST0920;
可以通过关闭新主库进行回切
也可以参考前面 手动切换 步骤,通过前台监控器进行回切
备库启动非确认监控器
dmmonitor /dm8/data/CJC/dmmonitor_front.ini
switchover GRPCJC.CJC01
开启归档
SQL 命令方式开启归档
归档大小限制、路径等根据实际情况调整。
登录数据库执行如下 SQL 语句:
查询归档
select PARA_NAME,PARA_VALUE,DEFAULT_VALUE from v$dm_ini where para_name LIKE '%ARCH_INI%';

查询归档状态
Select * from v$arch_status;
cd /dm8/data/CJCcat dm.ini|grep -i ARCH_INI
注意:归档之前已经配置,不需要再次执行
1.按照归档大小删除
ARCH_SPACE_LIMIT:Redo日志归档空间限制,当同一节点的本地归档文件或远程归档文件达到限制值时,系统自动删除最早生成的归档日志文件。0表示无空间限制,取值范围(1024M~2147483647M),对本地归档和远程归档有效,缺省为0。可手动修改dmarch.ini中ARCH_SPACE_LIMIT参数,也可执行sql:
alter database modify archivelog 'DEST=/dm8/arch, TYPE=LOCAL, FILE_SIZE=200, SPACE_LIMIT=10240';
ARCH_RESERVE_TIME:归档日志保留时间,单位分钟,取值范围(0~4294967294)。只对远程归档和本地归档有效,服务器每隔5分钟检查是否存在超过保留时间的归档并删除。默认为0,表示不删除归档。手动修改dmarch.ini中ARCH_RESERVE_TIME参数,更改为1440即归档保留24小时。
检查DmAPService服务状态
/dm8/dbms/bin/service_template/DmAPService status
/dm8/dbms/bin/service_template/DmAPService start
物理备份配置在主库上:
备份时间根据实际情况配置。
配置全备份,备份到目录/dm8/bak/full,备份开始时间每天22:00。
需要先进行初始化操作:
SP_INIT_JOB_SYS(1);SQL> call SP_CREATE_JOB('DM_BAK_FULL_CJC',1,0,'',0,0,'',0,'DM_BAK_FULL_CJC');SQL> call SP_JOB_CONFIG_START('DM_BAK_FULL_CJC');SQL> call SP_ADD_JOB_STEP('DM_BAK_FULL_CJC', 'DM_BAK_FULL_CJC', 6, '00000000/dm8/bak/full', 0, 0, 0, 0, NULL, 0);SQL> call SP_ADD_JOB_SCHEDULE('DM_BAK_FULL_CJC', 'DM_BAK_FULL_CJC', 1, 1, 1, 0, 0, '23:00:00', NULL, '2023-11-02 21:30:30', NULL, '');SQL> call SP_JOB_CONFIG_COMMIT('DM_BAK_FULL_CJC');
SQL> call SP_CREATE_JOB('DM_BAK_FULL_CJC_DELETE',1,0,'',0,0,'',0,'DM_BAK_FULL_CJC_DELETE');SQL> call SP_JOB_CONFIG_START('DM_BAK_FULL_CJC_DELETE');SQL> call SP_ADD_JOB_STEP('DM_BAK_FULL_CJC_DELETE', 'DM_BAK_FULL_CJC_DELETE', 0, 'SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/dm8/bak/full'');CALL SP_DB_BAKSET_REMOVE_BATCH(''DISK'',SYSDATE-3);', 1, 2, 0, 0, NULL, 0);SQL> call SP_ADD_JOB_SCHEDULE('DM_BAK_FULL_CJC_DELETE', 'DM_BAK_FULL_CJC_DELETE', 1, 1, 1, 0, 0, '23:30:00', NULL, '2023-11-02 17:30:00', NULL, '');SQL> call SP_JOB_CONFIG_COMMIT('DM_BAK_FULL_CJC_DELETE');
set pagesize 1000SELECT EXEC_ID,NAME,START_TIME,END_TIME,ERRCODE,JOBID FROM SYSJOB.SYSJOBHISTORIES2 ORDER BY START_TIME;
SELECT EXEC_ID,ERRCODE,ERRINFO FROM SYSJOB.SYSJOBHISTORIES2 WHERE ERRCODE !=0;
SELECT JOB,SCHEMA_USER,LAST_DATE,LAST_SEC,NEXT_DATE,FAILURES,INSTANCE,"INTERVAL" FROM DBA_JOBS;
SELECT JOB,WHAT FROM DBA_JOBS;
逻辑备份配置在备库上:
备份shell脚本
vi /dm8/scripts/dexp_CJC_bak.sh#/bin/bashexport LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/dm8/dbms/bin"export DM_HOME="/dm8/dbms"export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool#timeCUR_DATE=`date +'%Y%m%d%H%M%S'`#weekdayWEEKDAY_INDEX=`date +'%w'`echo "###begin exp_full_bak ...###"dexp SYSDBA/************:35231 file=dexp_CJC_${CUR_DATE}.dmp directory=/dm8/bak/dmp log=dexp_CJC_${CUR_DATE}.log OWNER=CJCecho "###delete dmp history file ...###"find /dm8/bak/dmp -mtime 2 -type f -name "dexp_CJC_*.dmp" -exec rm -rf {} \;find /dm8/bak/dmp -mtime 2 -type f -name "dexp_CJC_*.log" -exec rm -rf {} \;echo "###end bak ...###"
chmod +x /dm8/scripts/dexp_CJC_bak.sh
crontab -e30 21 * * * su - dmdba -c "/dm8/scripts/dexp_CJC_bak.sh" 2>/dev/null
如果报错:[-7170]:Bakres failed to connect DMAP. 需要手动启动DmAP服务。
启动服务:
find /dm -name DmAP*
需要启动DmAP服务
cd /dm/dmdbms/bin/service_template/./DmAPService status./DmAPService start./DmAPService status
SQL> BACKUP DATABASE FULL BACKUPSET '/dm/dmbak/CJC_full_bak_20220426';BACKUP DATABASE FULL BACKUPSET '/dm/dmbak/CJC_full_bak_20220426';[-718]:Archive log collected not consecusive.used time: 781.071(ms). Execute id is 0.
SQL> alter system switch logfile;
https://eco.dameng.com/document/dm/zh-cn/ops/before-installation.html
1.启停数据库
守护服务管理主备实例启动和关闭,不需要通过下面命令启停实例
##systemctl start DmServiceCJC.service##systemctl stop DmServiceCJC.service
关闭集群
关闭顺序:监控器、守护、实例
关闭监控器服务
备库:关闭监控器
systemctl stop DmMonitorServiceMONITOR.service
备库:关闭守护,实例会被自动关闭
systemctl stop DmWatcherServiceWATCHER.service
systemctl stop DmWatcherServiceWATCHER.service
disql SYSDBA/************@IP:35231disql SYSDBA/************:35231disql SYSDBA:35231disql SYSDBA@DMHA
动态性能视图:v$dynamic_tables
数据字典:sysobjects
例如,查询roles相关表。
Select name from sysobjects where name like '%ROLE%';
SQL> select EXPIRED_DATE from v$license;LINEID EXPIRED_DATE---------- ------------1 2024-07-13
5.参数管理
V$DM_INI,V$PARAMETER等
参数调整
https://eco.dameng.com/document/dm/zh-cn/ops/performance-optimization.html
参数 | 含义 | 优化建议 |
MEMORY_POOL | 共享内存池大小,以 M 为单位。 | 高并发时应调大,避免频繁向 OS 申请内存。 在物理内存较大的情况下,比如大于64G,可以将MEMORY_POOL设置为2048,即2G。 同时也建议设置 MEMORY_TARGET参数,该参数默认为0,不受限制。 |
MEMORY_N_POOLS | 共享内存池个数,减少内存临界区冲突。 | 设置较大会导致启动时报错申请内存失败。 |
BUFFER | 系统缓冲区大小,以 M 为单位。 | 如果数据量小于内存,则设置为数据量大小;否则设置为总内存的 2/3 比较合适。 |
BUFFER_POOLS | BUFFER 系统分区数,有效值范围(1~512),当 MAX_BUFFER>BUFFER 时,动态扩展的缓冲区不参与分区。 | 并发较大的系统需要配置该参数,减少数据缓冲区并发冲突,建议 BUFFER=MAX_BUFFER。 |
RECYCLE | RECYCLE 缓冲区大小,以 M 为单位。 | 高并发或大量使用 with、临时表、排序等时,可以将值调大。 |
DICT_BUF_SIZE | 字典缓冲区大小,以 M 为单位。 | 如果数据库中对象数量较多,或者存在大量分区表,可适当调大。 建议改成50M以上。 |
WORKER_THREADS | 工作线程的数目。有效值范围(1~64) | 建议设置为 cpu 核数或其两倍 |
SORT_BUF_SIZE | 原排序机制下,排序缓存区最大值,以 M 为单位。 | 建索引时可以适当调大,通常不超过 20M。 在内存小于64G时建议设置为10M,大于64G时建议设置为512M。 |
PWD_POLICY | 设置系统默认口令策略: 0:无限制。但总长度不得超过 48 个字节; 1:禁止与用户名相同; 2:口令长度需大于等于 PWD_MIN_LEN 设置的值; 4:至少包含一个大写字母(A-Z); 8:至少包含一个数字(0-9); 16:至少包含一个标点符号 | 默认值:2 即密码长度不小于 9。 |
MAX_SESSIONS | 系统允许同时连接的最大数,同时还受到 LICENSE 的限制,取二者中较小的值,有效值范围(1~65000)。建议用户按照实际内存和业务需求来配置。 | 默认值:10000 根据实际并发等因素修改 |
TEMP_SPACE_LIMIT | 临时表空间大小上限,单位为 MB,如果有大量排序、临时表操作时可能会占用。关系到磁盘空间占用,建议根据磁盘情况设置上限。 | |
CALC_AS_DECIMAL | 达梦数据库对于整数的除法运算和oracle的是不同的,DM中默认会舍弃小数,直接取整数,也不会四舍五入再取整。但是DM提供参数CALC_AS_DECIMAL来控制。 | 默认值0,建议改成1 注意:根据业务需求修改 |
登录数据库
disql SYSDBA/************@IP:35231disql SYSDBA/************:35231
select name,type,value,default_value,isdefault from v$parameterwhere name in('MEMORY_POOL','BUFFER','PWD_POLICY','SORT_BUF_SIZE','MAX_SESSIONS','TEMP_SPACE_LIMIT','CALC_AS_DECIMAL','RLOG_BUF_SIZE','DICT_BUF_SIZE','CACHE_POOL_SIZE','GLOBAL_STR_CASE_SENSITIVE','GLOBAL_CHARSET') order by type,name;
SELECT SF_GET_CASE_SENSITIVE_FLAG();SELECT CASE_SENSITIVE();
1.手动(READ ONLY)参数:
在数据库创建成功后无法修改。
2.静态(IN FILE)参数:
只能通过修改 DM.INI 文件进行修改,修改后重启服务器才能生效,为系统级参数,生效后会影响所有的会话。
3.动态(SYS 和 SESSION)参数:
可在 DM.INI 文件和内存同时修改,修改后即时生效。
其中:
SYS 为系统级参数,修改后会影响所有的会话;
SESSION 为会话级参数,服务器运行过程中被修改时,之前创建的会话不受影响,只有新创建的会话使用新的参数值。
备份参数文件
修改参数前,先备份参数文件
ps -ef|grep dm.ini|grep -v grepcd /dm8/data/CJCcp dm.ini dm.ini_bak_`date +%Y%m%d%H%M%S`
上传脚本(达梦官网-运维指南-单机安装部署-实例参数优化调整)AutoParaAdj.sql
参考参数优化部分
修改参数方式二:手动调整
修改SYS/SESSION类型参数
###SORT_BUF_SIZE由20改成512###ALTER SYSTEM SET 'SORT_BUF_SIZE'=512 BOTH;###TEMP_SPACE_LIMIT由0改成20480ALTER SYSTEM SET 'TEMP_SPACE_LIMIT'=20480 BOTH;
修改dm.ini参数文件
cd /dm8/data/db_namecat dm.ini|grep -w -E 'MEMORY_POOL|BUFFER|MAX_SESSIONS'vi dm.iniMEMORY_POOL由500改成2048BUFFER由1000改成20480MAX_SESSIONS由10000改成3000CALC_AS_DECIMAL由0改成1RLOG_BUF_SIZE由1024改成2048DICT_BUF_SIZE由50改成1024CACHE_POOL_SIZE由100改成2048
systemctl status DmServiceCJC.servicesystemctl stop DmServiceCJC.servicesystemctl start DmServiceCJC.service
6.用户权限
查询权限相关表:
select grantee,granted_role from dba_role_privs where grantee in ('CJC') order by 1;Select grantee,privilege from dba_sys_privs where grantee in ('CJC') order by 1;Select grantee,privilege from dba_tab_privs where grantee in ('CJC') order by 1;
select role from dba_roles;
SQL> select grantee,granted_role from dba_role_privs where grantee='CJC';SQL> Select grantee,privilege from dba_sys_privs where grantee='CJC';
查看角色包含的权限
SQL> set pagesize 100SQL> select * from dba_sys_privs where GRANTEE='RESOURCE' order by 3;
cd /dm8/dbms/logtail -10f dm_CJC_xxx.log......
REDO LOG FILE信息
SELECTA.FILE_ID ,A.PATH ,A.CLIENT_PATH,A.RLOG_SIZE ,B.FREE_SPACE ,B.TOTAL_SPACE,B.CUR_FILEfrom(select * from V$RLOGFILE where true) A,(select * from V$RLOG where true) B;
通过以下语句可查看表空间基本信息:表空间大小,剩余空间大小,表空间使用率等。
SELECT a.tablespace_name "TABNAME",total / (1024 * 1024) "TOTAL(M)",free / (1024 * 1024) "FREE(M)",(total - free) / (1024 * 1024 ) "USED(M)",round((total - free) / total, 4) * 100 "USED %"FROM (SELECT tablespace_name, SUM(bytes) freeFROM dba_free_spaceGROUP BY tablespace_name) a,(SELECT tablespace_name, SUM(bytes) totalFROM dba_data_filesGROUP BY tablespace_name) bWHERE a.tablespace_name = b.tablespace_name;
select file_name,status,bytes/1024/1024 mb,autoextensible,maxbytes from dba_data_files;
欢迎关注我的公众号《IT小Chen》




