一.两节点 DSC 集群安装部署
参考链接:https://blog.csdn.net/Cj12315/article/details/124898796
DMDSC:DM共享存储数据库集群,英文全称DM Data Shared Cluster。
DM共享存储数据库集群,允许多个数据库实例同时访问、操作同一数据库,具有高可用、高性能、负载均衡等特性。DMDSC支持故障自动切换和故障自动重加入,某一个数据库实例故障后,不会导致数据库服务无法提供。
DMDSC的主要特点包括:
◼ 高可用性
只要集群中有一个活动节点,就能正常提供数据库服务。
◼ 高吞吐量
多个节点同时提供数据库服务,有效提升集群的整体事务处理能力。
◼ 负载均衡
用户的连接请求被平均分配到集群中的各个节点,确保各个节点的负载大致平衡。
在DM8中,新增加了监视器的功能,使用起来非常方便,功能也很人性化。但是需要注意的是,DSC中的监视器与DM实时主备或读写分离集群中的监视器不同,没有确认监视器与非确认监视器的说法,同一个DMDSC集群中,允许最多同时启动10个监视器,建议监视器放在独立的第三方机器上,避免由于节点间网络不稳定等原因导致监视器误判节点故障。
1.1 安装前准备
1.1.1 硬件环境
| 类别 | 实验配置 | 推荐配置 |
|---|---|---|
| 服务器 | 两台数据库服务器,虚拟机 | 两台数据库服务器,建议使用物理机 |
| 内存 | 4GB | 64 GB 以上 |
| CPU | 1核 | 128 逻辑核以上 |
| 网卡 | 2块网卡 | 每台机器至少 3 块网卡。2 块必须为万兆网卡,分别连到不同的万兆交换机上, |
| 并在服务器端做冗余,bond 给服务器 1 个 IP 地址。1 块为千/万兆网卡,对外提供服务 | ||
| 交换机 | 无 | (1)集群间的心跳网络要传输数据,最好使用两个交换机,来实现冗余和负载均衡。 |
交换机速度建议为万兆;
(2)需要把服务器多个心跳网卡绑定为一个逻辑网卡来使用 ( 比如 bond 方式 ) |
| 本地磁盘 | 40GB | 建议 100 GB 以上 |
| HBA 卡 | 无 | 每台数据库服务器必须有两块 HBA 卡连接光纤交换机,做冗余和负载均衡 |
| 磁盘阵列 | 共享磁盘 | (1)1 台共享存储,两台服务器都连接到同一个存储上 ( 共享存储只需要映射到
服务器端 fdisk -l 可以查看到就行,不需要格式化 ) ;
(2)主节点服务器可以单独挂第 2 台存储,用于备份数据等(需格式化好),文件系统建议使用 ext4 |
1.1.2 软件环境
以下列举了在开始部署数据库之前,建议提前准备好的前置软件和操作系统配置,涉及 core 文件的生成路径和用来验证环境状态的相关命令工具等。
| 名称 | 版本 | 命令 |
|---|---|---|
| 操作系统 | CentOS 7 | cat /etc/*release |
| nkvers | ||
| 系统时钟服务 | ntp | chronyc sources -v |
| 字符集 | 字符集: zh_CN | echo $LANG |
| 系统包 C 开发类 | gcc:gcc-4.4.7-3.el6.x86_64 | rpm –q gcc |
| 系统 C 运行库 | Linux(glibc 2.12 以上,内核 2.6) | ldd --version |
| 系统 C 开发类 | gdb:gdb-7.2-60.el6.x86_64 | gdb -v |
| 系统包 JAVA 开发类 | JDK:java version "1.7.0_09-icedtea | java -version |
| 系统命令处理器 | GNU bash, version 4.1.2(1)-release(x86_64-redhat-linux-gnu) | bash --version |
| 系统安全外壳协议 | SSH | ssh -V |
| 远程终端协议 | telnet | telnet |
| 输入/输出统计 | iostat | iostat |
| ODBC 组件 | unixODBC | odbc_config --version |
| 跟踪进程栈 | pstack | pstack -V |
| 性能分析工具 perf | perf | perf top |
| 资源统计工具 nmon | nmon | nmon |
| 磁盘监视工具 iotop | Iotop | iotop --version |
1.1.3 集群架构

1.1.4 本地磁盘规划
| 名称 | 机器 A(db0) | 机器 B(db1) | 备注 |
|---|---|---|---|
| 数据库安装目录 | /dmdb8/dmdbms | /dmdb8/dmdbms | 数据库安装路径,存放数据库运行日志等信息 |
| 数据库备份目录 | /dmdb8/dmbak | /dmdb8/dmbak | 用于存放数据库备份文件 |
| 数据库 SQL 日志目录 | /dmdb8/dmsqllog | /dmdb8/dmsqllog | 用于存放数据库 dmsql 日志 |
| 集群配置文件目录 | /dmdb8/dmdbms/dsc_config | /dmdb8/dmdbms/dsc_config | 用于存放数据库集群配置文件 |
| 系统 core 目录 | /dmdb8/core | /dmdb8/core | 用户存放系统的 core 文件 |
1.1.5 共享存储规划
DMDSC 集群为了实现多实例同时访问和修改数据,需要数据文件、控制文件和日志文件都放到共享存储上。DM 支持两种共享存储,裸设备和 DMASM,裸设备是未经过格式化的特殊字符设备,推荐使用 DMASM 共享存储。
补充:归档日志可以保存在本地存储上也可以保存在共享存储上
其中,VOTE 是表决磁盘,一个集群一个表决磁盘。DCR 是 DM 集群注册表的简称,用于存储、维护集群配置的详细信息,一个集群一个注册表。生产环境中,共享存储一般由操作系统管理员进行划分。共享存储规划可参照下表:
| 名称 | 拟定配置 | 分区大小 | 备注 |
|---|---|---|---|
| VOTE 磁盘 | /dev/dmdb8/asm-dmvote | 1 GB | VOTE 是表决磁盘,记录集群成员信息,集群通过 Voting Disk 进行心跳检测,确定集群中节点的状态,一个集群一个表决磁盘 |
| DCR 盘 | /dev/dmdb8/asm-dmdcr | 1 GB | 集群注册表,用于存储、维护集群配置的详细信息,整个集群环境共享 DCR 配置信息,一个集群一个注册表 |
| Redo 日志盘 | /dev/dmdb8/asm-dmlog | 10 GB | 用于存储数据库集群 Redo log |
| 数据盘 | /dev/dmdb8/asm-dmdata* | 10GB | 用户存放数据 |
| 归档盘 | /dev/dmdb8/asm-dmarch | 10GB | 用于存储数据库集群各实例的归档日志 |
注意
以上磁盘大小可按照实际业务需要进行调整。Redo 日志盘的空间大小建议最小不少于 4G,否则会引起后面数据库启动失败等问题。
1.1.6 端口规划
| 数据库服务器名称 | db0 | db1 | ||
|---|---|---|---|---|
| 业务服务名 | toprac | |||
| 业务 IP | 192.168.40.180 | 192.168.40.200 | ||
| 内部数据交换网络 IP | 192.168.183.100 | 192.168.183.130 | ||
| dmdcr_cfg | CSS | DCR_EP_NAME | CSS0 | CSS1 |
| DCR_EP_HOST | 192.168.183.100 | 192.168.183.130 | ||
| DCR_EP_PORT | 11286 | 11286 | ||
| ASM | DCR_EP_NAME | ASM0 | ASM1 | |
| DCR_EP_HOST | 192.168.183.100 | 192.168.183.130 | ||
| DCR_EP_PORT | 11276 | 11276 | ||
| DB | DCR_EP_NAME | DSC0 | DSC1 | |
| DCR_EP_PORT | 5236 | 5236 | ||
| DCR_CHECK_PORT | 11256 | 11256 | ||
| dmasvrmal | MAL_INST_NAME | ASM0 | ASM1 | |
| MAL_HOST | 192.168.183.100 | 192.168.183.130 | ||
| MAL_PORT | 11266 | 11266 | ||
| dminit | 实例名 | DSC0 | DSC1 | |
| PORT_NUM | 5236 | 5236 | ||
| MAL_HOST | 192.168.183.100 | 192.168.183.130 | ||
| MAL_PORT | 11246 | 11246 | ||
| OGUID | 210715 |
DB里面DCR_EP_PORT是和dminit里面一样是实例端口。
端口可以自己设置,两个节点上面的端口可以一样也可以不一样。
1.1.7.配置yum源和安装依赖包
--配置yum源
mount *.iso /mnt/
cat << EOF >> /etc/fstab
/dev/sr0 /mnt iso9660 loop 0 0
EOF
mkdir -p /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
cat >> /etc/yum.repos.d/os.repo <<"EOF"
[OS1]
name=OS
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF
--安装依赖包
yum install -y libXtst
yum install -y libgtk
1.1.8 规划用户、目录、安装数据库
db0 和 db1 机器均将数据库安装在 /dmdb8/dmdbms 目录下。
上传安装包dm8_20230418_x86_rh6_64.iso至/opt目录下。
--cp dm8_20230418_x86_rh6_64.iso 到 DSC 的每个节点上
scp /opt/dm8_20230418_x86_rh6_64.iso root@192.168.40.200:/opt
--预安装脚本安装数据库软件
cat preinstalldm.sh
#!/bin/bash
#将安装介质上传到当前目录下
file=dm8_20230418_x86_rh6_64.iso
dir=$(pwd)
port=5236
basedir=/dmdb8
#1.系统参数调整
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#firewall-cmd --zone=public --add-port=5236/tcp --permanent
#firewall-cmd --zone=public --add-port=22/tcp --permanent
#systemctl restart firewalld
#禁用selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
setenforce 0
#永久关闭swap
sed -ri 's/.*swap.*/#&/' /etc/fstab
#修改磁盘调度算法
##SSD 固态硬盘:NOOP 调度
##SAS 机械盘:DEADLINE 调度
##查看调度:cat /sys/block/sda/queue/scheduler
##临时修改:echo "deadline" > /sys/block/sda/queue/scheduler
##永久修改: grubby --update-kernel=ALL --args="elevator=deadline"
grubby --update-kernel=ALL --args="elevator=deadline"
#关闭 numa和禁用透明大页
sed -i "s/quiet/quiet numa=off transparent_hugepage=never/g" /etc/default/grub
grub2-mkconfig -o /etc/grub2.cfg
#调整 sysctl.conf 参数
cat >> /etc/security/limits.conf << "EOF"
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba hard data unlimited
dmdba soft data unlimited
dmdba hard fsize unlimited
dmdba soft fsize unlimited
dmdba soft core unlimited
dmdba hard core unlimited
EOF
cat >> /etc/systemd/system.conf << "EOF"
DefaultLimitNOFILE=65536
DefaultLimitNPROC=65536
EOF
cat >> /etc/security/limits.d/nproc.conf << "EOF"
##添加配置:
dmdba soft nproc 65536
dmdba hard nproc 65536
EOF
#调整 login
cat >> /etc/pam.d/login << "EOF"
session required /lib64/security/pam_limits.so
session required pam_limits.so
EOF
#2.创建数据库用户
groupadd -g 12349 dinstall
useradd -u 12349 -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
echo "top@123"|passwd --stdin dmdba
#3.创建目录
mkdir -p /dmdb8/{dmdbms,dmbak,dmtmp}
mkdir -p /dmdb8/dmbak/{all,add}
#4.数据库软件安装
mount $dir/$file /mnt
cp /mnt/DMInstall.bin /home/dmdba
chown -R dmdba:dinstall /home/dmdba
su - dmdba -c '/home/dmdba/DMInstall.bin -i'
#5.创建存放集群配置文件目录
mkdir -p /dmdb8/dmdbms/dsc_config
chown dmdba:dinstall -R /dmdb8
chmod -R 755 /dmdb8
1.1.9 块设备 UUID 绑定
本节主要介绍两种块设备 UUID 绑定方式:多路径方式绑定和无多路径方式绑定。裸设备绑定方式请参考数据库安装路径 doc 目录下《共享存储集群》使用手册。
方法一:多路径方式绑定
- 通过以下命令可获取多路径。即搭建需要采用的 lun,其多路径名称依次为:/dev/mapper/mpatha 至/dev/mapper/mpathe,共 5 个 lun。
[root@RS1824 ~]# fdisk -l |grep mpath
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
Disk /dev/mapper/mpatha: 2048 MB, 2147483648 bytes, 4194304 sectors
Disk /dev/mapper/mpathb: 2048 MB, 2147483648 bytes, 4194304 sectors
Disk /dev/mapper/mpathc: 20 GB, 25249710080 bytes, 49315840 sectors
Disk /dev/mapper/mpathd: 536.9 GB, 536870912000 bytes, 1048576000 sectors
Disk /dev/mapper/mpathe: 536.9 GB, 536870912000 bytes, 1048576000 sectors
- 通过多路径 UUID 绑定。通过 mpath.sh 生成配置文件 88-dm-asmdevices.rules。
[root@RS1824 ~]# cat mpath.sh
curr=$(cd "$(dirname "$0")";pwd)
rm -f $curr/88-dm-asmdevices.rules
for i in mpatha mpathb mpathc mpathd mpathe;
do
str1="$i:`udevadm info --query=all --name=/dev/mapper/$i | grep DM_UUID`"
str2=${str1#*=}
echo "KERNEL==\"dm-*\",ENV{DM_UUID}==\"${str2}\",SYMLINK+=\"asm-${i}\",OWNER=\"dmdba\",GROUP=\"dinstall\",MODE=\"0660\"" ''
done
##执行上述脚本
[root@RS1824 ~]# ./mpath.sh
##脚本执行成功后,会生成绑定配置文件,可以根据需求进行修改别名 SYMLINK,例如:
[root@RS1824 ~]# cat 88-dm-asmdevices.rules
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-3600b342697bdcefdae7fd52cfd1b00db",SYMLINK+="dm/asm-dmdcr",OWNER="dmdba",GROUP="dinstall",MODE="0660"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-3600b342449774d0d2c16d990fd6300db",SYMLINK+="dm/asm-dmvote",OWNER="dmdba",GROUP="dinstall",MODE="0660"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-3600b342a2b1bd08d28e0d58c5db300db",SYMLINK+="dm/asm-dmlog",OWNER="dmdba",GROUP="dinstall",MODE="0660"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-3600b34208f0b5c5d515dd41dfde300db",SYMLINK+="dm/asm-dmdata",OWNER="dmdba",GROUP="dinstall",MODE="0660"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-3600b342dfa7bea6dc4c4dec06da300db",SYMLINK+="dm/asm-dmarch",OWNER="dmdba",GROUP="dinstall",MODE="0660"
- 部署配置文件。复制 88-dm-asmdevices.rules 配置文件到 DSC 集群的所有节点的相关目录下。
cp 88-dm-asmdevices.rules /etc/udev/rules.d/88-dm-asmdevices.rules
- 检查生效。
(1)重启服务器,建议使用该方法。
(2)如果无法重启,执行下述命令。
cd /usr/lib/systemd/system/systemd-udev-trigger.service.d/
##先修改以下文件的参数
vi systemd-udev-trigger-no-reload.conf
RefuseManualStop=false
##使其生效
systemctl daemon-reload
##再执行命令
udevadm control --reload-rules
systemctl restart systemd-udev-trigger.service
##执行完后改回参数
RefuseManualStop=true
##再次执行
systemctl daemon-reload
(3)授权。
chown dmdba:dinstall /dev/mapper/mpath* -R
chown dmdba:dinstall /dev/dmdb8/asm-* -R
(4)检查生效。
blockdev --getsize64 /dev/dmdb8/asm-dmdcr
blockdev --getsize64 /dev/dmdb8/asm-dmvote
blockdev --getsize64 /dev/dmdb8/asm-dmlog
blockdev --getsize64 /dev/dmdb8/asm-dmdata
blockdev --getsize64 /dev/dmdb8/asm-dmarch
##结果如下
[root@RS1824 ~]# blockdev --getsize64 /dev/dmdb8/asm-dmdcr
2147483648
[root@RS1824 ~]# blockdev --getsize64 /dev/dmdb8/asm-dmvote
2147483648
[root@RS1824 ~]# blockdev --getsize64 /dev/dmdb8/asm-dmlog
25249710080
[root@RS1824 ~]# blockdev --getsize64 /dev/dmdb8/asm-dmdata
536870912000
[root@RS1824 ~]# blockdev --getsize64 /dev/dmdb8/asm-dmarch
536870912000
方法二:无多路径方式绑定
如没有配置多路径,采用 UUID 绑定多个 LUN 存储,可以通过 fdisk -l 命令查看 LUN 设备,这里以共享存储盘为 sda,sdb,sdc,sdd,sde 为例。
- 绑定设备的 UUID。创建 uuid.sh 文件,使用脚本生成配置文件。生成的配置文件在脚本所在目录下。
cat >> uuid.sh << "EOF"
curr=$(cd "$(dirname "$0")";pwd)
rm -f $curr/88-dm-asmdevices.rules
for i in a b c d e;
do
echo "KERNEL==\"sd?\",SUBSYSTEM==\"block\", PROGRAM==\"/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name\",RESULT==\"`/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sd$i`\", SYMLINK+=\"dm/asm-disk$i\",OWNER=\"dmdba\", GROUP=\"dinstall\",MODE=\"0660\"" >> $curr/88-dm-asmdevices.rules
done
EOF
##执行 uuid.sh 脚本
chmod +x uuid.sh
./uuid.sh
##脚本执行成功后,会生成绑定配置文件 88-dm-asmdevices.rules,可以根据自己的需求进行修改别名 SYMLINK,本文档修改如下:
vim 88-dm-asmdevices.rules
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c2929c3dab7d6dcf02e57ada868c", SYMLINK+="dm/asm-dmdcr",OWNER="dmdba", GROUP="dinstall",MODE="0660"
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="3600b342449774d0d2c16d990fd6300db", SYMLINK+="dm/asm-dmvote",OWNER="dmdba", GROUP="dinstall",MODE="0660"
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="3600b342a2b1bd08d28e0d58c5db300db", SYMLINK+="dm/asm-dmlog",OWNER="dmdba", GROUP="dinstall",MODE="0660"
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="3600b34208f0b5c5d515dd41dfde300db", SYMLINK+="dm/asm-dmdata",OWNER="dmdba", GROUP="dinstall",MODE="0660"
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="3600b342dfa7bea6dc4c4dec06da300db", SYMLINK+="dm/asm-dmarch",OWNER="dmdba", GROUP="dinstall",MODE="0660"
- 配置部署文件。生成配置文件后,把 88-dm-asmdevices.rules 配置文件 cp 到 DSC 的每个节点上。
cp 88-dm-asmdevices.rules /etc/udev/rules.d/88-dm-asmdevices.rules
--cp 到 DSC 的每个节点上
scp /etc/udev/rules.d/88-dm-asmdevices.rules root@192.168.40.200:/etc/udev/rules.d/
- 检查生效。
(1)重启服务器,建议使用该方法。
(2)如果无法重启,执行下述命令。
udevadm control --reload-rules
systemctl restart systemd-udev-trigger.service
(3)授权。
chown -R dmdba:dinstall /dev/dm/asm-*
(4)检查生效。
blockdev --getsize64 /dev/dm/asm-dmdcr
blockdev --getsize64 /dev/dm/asm-dmvote
blockdev --getsize64 /dev/dm/asm-dmredo
blockdev --getsize64 /dev/dm/asm-dmdata
blockdev --getsize64 /dev/dm/asm-dmarch
##结果如下
[root@localhost dm]# blockdev --getsize64 /dev/dm/asm-dmdcr
1073741824
[root@localhost dm]# blockdev --getsize64 /dev/dm/asm-dmdcr
1073741824
[root@localhost dm]# blockdev --getsize64 /dev/dm/asm-dmvote
1073741824
[root@localhost dm]# blockdev --getsize64 /dev/dm/asm-dmredo
10737418240
[root@localhost dm]# blockdev --getsize64 /dev/dm/asm-dmdata
10737418240
[root@localhost dm]# blockdev --getsize64 /dev/dm/asm-dmarch
10737418240
1.1.10 实例初始化属性
对于不同系统,数据库初始化参数可能因数据、开发等因素存在差异性。最主要的几个实例初始化属性需要提前确认,见下表。
| 参数名 | 参数 | 参数值 | 设置值 |
|---|---|---|---|
| 数据页大小 | PAGE_SIZE | 通常 DM8 建议 32K | 32k |
| 大小写敏感 | CASE_SENSITIVE | 如果应用基于 Oracle 开发,通常采用默认值 1 | |
| 根据用户、系统开发具体情况而定 | 0 | ||
| 数据库字符集 | CHARSET/UNICOD E_FLAG | 根据用户、系统开发具体情况而定 | utf8 |
| Varchar 类型单位 | LENGTH_IN_CHAR | 通常采用默认值0 | 0 |
| 空格填充模式 | BLANK_PAD_MODE | 如果应用基于 Oracle 开发,通常取值为 1,具体情况需根据用户、系统开发实际情况而定 | 0 |
参数解释:
LOG_SIZE:日志文件大小
CASE_SENSITIVE:建议从 MYSQL 和 SQLSERVER 迁移过来的系统,使用大小写不敏感,ORACLE 迁移过来的系统,使用大小写敏感,默认为区分。取值:Y、y、1 表示敏感;N、n、0 表示不敏感。默认值为 Y 。
CHARSET/UNICODE_FLAG:0 代表 GB18030,1 代表 UTF-8,2 代表韩文字符集 EUC-KR。默认为 0
DB_NAME:初始化数据库名称,默认为 DAMENG
INSTANCE_NAME:初始化数据库实例名称,默认为 DMSERVER
PORT_NUM:数据库端口号,默认5236
LENGTH_IN_CHAR:VARCHAR 类型对象的长度是否以字符为单位。取值为 1 或者 Y 表示是,取值为 0 或 N 表示否。默认值为 0
BLANK_PAD_MODE:设置字符串比较时, 结尾空格填充模式是否兼容 ORACLE。 取值: 1 兼容; 0 不兼容。默认为 0
password must between 9 and 48
特此说明:达梦的字段一般都是大写的,但是程序中写的sql都是小写。大小写是否敏感需要和开发确认,本案例中都是不敏感
如果是oracle迁移到达梦CASE_SENSITIVE、BLANK_PAD_MODE根据需要更改
1.1.11 安装前环境检查
共享存储集群部署前应进行完整的环境检查,详细内容可参考环境检查与修改。在 DSC 集群中应特别注意以下内容:
- 检查共享存储设备绑定情况。如果使用了多路径软件,可对比 2 台服务器的多路径信息,重点确认 2 台服务器绑定的设备 uuid 是否一致,并检查绑定是否生效。
##检查设备 uuid 是否一致
multipath -ll
##检查绑定是否生效
blockdev --getsize64 /dev/dm/asm-dmvote
blockdev --getsize64 /dev/dm/asm-dmdcr
blockdev --getsize64 /dev/dm/asm-dmredo
blockdev --getsize64 /dev/dm/asm-dmarch
blockdev --getsize64 /dev/dm/asm-dmdata
- 需进行共享磁盘测速。在部署 DSC 之前,将划分的磁盘挂载到本地,然后采用 dd / fio 方式进行磁盘 IO 测试。生产环境中,建议共享磁盘读写速度不低于 150M/s。Fio 测试方法如下:
##测试方法和脚本,以下三个命令分别测试随机写,随机读,随机读写:
f=/data2/1.g
fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=8k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=$f -name=Rand_Write_Testing --output fio.log
fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=8k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=$f -name=Rand_Read_Testing >> fio.log
fio -direct=1 -iodepth=128 -rw=randrw -rwmixread=70 -ioengine=libaio -bs=8k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=$f -name=Mix_Read_Testing >> fio.log
1.1.12.编译安装rlwrap
yum install gcc-c++ readline* libtermcap-devel*
tar -xvf rlwrap-0.46.1.tar.gz
cd rlwrap-0.46.1
./configure
make
make install
--cp rlwrap-0.46.1.tar.gz 到 DSC 的每个节点上
scp /opt/rlwrap-0.46.1.tar.gz root@192.168.40.200:/opt
1.2 集群搭建
1.2.1 配置 dmdcr_cfg.ini
db0 和 db1 机器配置相同。
--配置格式化磁盘的配置文件dmdcr_cfg.ini
[dmdba@~]# vi /dmdb8/dmdbms/dsc_config/dmdcr_cfg.ini
DCR_N_GRP = 3 ##集群环境有多少个 GROUP,范围:1~16
DCR_VTD_PATH = /dev/dm/asm-dmvote ##规划为 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.183.100 ##心跳地址
DCR_EP_PORT = 11286 ##CSS 端口
[GRP_CSS]
DCR_EP_NAME = CSS1
DCR_EP_HOST = 192.168.183.130 ##心跳地址
DCR_EP_PORT = 11286 ##CSS 端口
[GRP] #新建一个 GROUP
DCR_GRP_TYPE = ASM ##组类型(CSS/ASM/DB)
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.183.100 ##心跳地址
DCR_EP_PORT = 11276 ##ASM 端口
DCR_EP_ASM_LOAD_PATH = /dev/dm
[GRP_ASM]
DCR_EP_NAME = ASM1 ##ASM 节点名,和 dmasvrmal 的 MAL_INST_NAME 一致
DCR_EP_SHM_KEY = 42425 ##共享内存标识
DCR_EP_SHM_SIZE = 1024 ##共享内存大小
DCR_EP_HOST = 192.168.183.130 ##心跳地址
DCR_EP_PORT = 11276 ##ASM 端口
DCR_EP_ASM_LOAD_PATH = /dev/dm
[GRP] #新建一个 GROUP
DCR_GRP_TYPE = DB ##组类型(CSS/ASM/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 一致
DCR_CHECK_PORT = 11256 ##DCR 检查端口
[GRP_DSC]
DCR_EP_NAME = DSC1 ##实例名,和 dm.ini 的 INSTANCE_NAME 一致
DCR_EP_SEQNO = 1 ##组内序号,不能重复
DCR_EP_PORT = 5236 ##实例端口,和 dm.ini 的 PORT_NUM 一致
DCR_CHECK_PORT = 11256 ##DCR 检查端口
--cp dmdcr_cfg.ini 到 DSC 的每个节点上
scp /dmdb8/dmdbms/dsc_config/dmdcr_cfg.ini root@192.168.40.200:/dmdb8/dmdbms/dsc_config/
1.2.2 初始化磁盘组
在 db0 机器上进行如下操作。
[dmdba@~]#/dmdb8/dmdbms/bin/dmasmcmd
#asm script file
#格式化 DMASM 磁盘
ASM>create dcrdisk '/dev/dm/asm-dmdcr' 'dcr'
ASM>create votedisk '/dev/dm/asm-dmvote' 'vote'
#初始化 DMASM 磁盘
ASM>init dcrdisk '/dev/dm/asm-dmdcr' from '/dmdb8/dmdbms/dsc_config/dmdcr_cfg.ini' identified by 'top@123'
ASM>init votedisk '/dev/dm/asm-dmvote' from '/dmdb8/dmdbms/dsc_config/dmdcr_cfg.ini'
ASM>create asmdisk '/dev/dm/asm-dmdata' 'DATA0'
ASM>create asmdisk '/dev/dm/asm-dmredo' 'REDO0'
ASM>create asmdisk '/dev/dm/asm-dmarch' 'ARCH0'
#查看
ASM>listdisks /dev/dm
说明:语句最后不能加 ; 不然报错,名字前会自动加DMASM前缀
或者
将命令写入 asmcmd.txt 文件,执行 dmasmcmd script_file=asmcmd.txt
cat asmcmd.txt
#asm script file(首行必须有否则认为是无效脚本文件)
init dcrdisk '/dev/dm/asm-dmdcr' from '/dmdb8/dmdbms/dsc_config/dmdcr_cfg.ini' identified by 'top@123'
init votedisk '/dev/dm/asm-dmvote' from '/dmdb8/dmdbms/dsc_config/dmdcr_cfg.ini'
create asmdisk '/dev/dm/asm-dmdata' 'DATA0'
create asmdisk '/dev/dm/asm-dmredo' 'REDO0'
create asmdisk '/dev/dm/asm-dmarch' 'ARCH0'
#补充说明
dcr/vote比较特殊,需要init dcrdisk/votedisk操作,写入配置文件内容,显示为Used
后面3个盘只是被简单的create asmdisk打标签格式化为ASM磁盘,并未真正使用起来,显示为Unused
补充:磁盘组操作
--格式化 DMASM 磁盘,可格式化的类型有3种:dcrdisk、votedisk、asmdisk
create dcrdisk '/dev/raw/raw1' 'dcr' 100M
--初始化 DCR Disk, 同时指定密码
init dcrdisk '/dev/raw/raw1' from '/dm8/config/dmdcr_cfg.ini' identified by 'abcd'
--初始化 Voting Disk
init votedisk '/dev/raw/raw2' from '/dm8/config/dmdcr_cfg.ini'
--导出 DCR Disk 配置信息【新增或剔除节点时导出配置信息备份】
export dcrdisk '/dev/raw/raw1' to '/dm8/dmdcr_cfg.ini'
--导入 DCR Disk 配置信息【新增或剔除节点时导入新配置信息】
import dcrdisk '/dm8/dmdcr_cfg.ini' to '/dev/raw/raw1'
6--列出指定路径下磁盘属性
ASM>listdisks /dev/raw
1.2.3 配置MAL 配置文件 dmasvrmal.ini
db0机器和db1机器上该文件内容一样,可进行拷贝
--db0机器
[dmdba@~]# mkdir -p /dmdb8/dmdbms/dsc_config/DSC0
[dmdba@~]# cat > /dmdb8/dmdbms/dsc_config/DSC0/dmasvrmal.ini << "EOF"
[MAL_INST0]
MAL_INST_NAME = ASM0
MAL_HOST = 192.168.183.100 #心跳地址
MAL_PORT = 11266 #MAL 监听端口
[MAL_INST1]
MAL_INST_NAME = ASM1
MAL_HOST = 192.168.183.130 #心跳地址
MAL_PORT = 11266 #MAL 监听端口
EOF
--db1机器
[dmdba@~]# mkdir -p /dmdb8/dmdbms/dsc_config/DSC1
[dmdba@~]# cat > /dmdb8/dmdbms/dsc_config/DSC1/dmasvrmal.ini << "EOF"
[MAL_INST0]
MAL_INST_NAME = ASM0
MAL_HOST = 192.168.183.100 #心跳地址
MAL_PORT = 11266 #MAL 监听端口
[MAL_INST1]
MAL_INST_NAME = ASM1
MAL_HOST = 192.168.183.130 #心跳地址
MAL_PORT = 11266 #MAL 监听端口
EOF
1.2.4 配置 dmdcr.ini 文件
生产环境不建议配置自动拉起,因为手动关闭数据库后会被css自动拉起,管理不方便。
- db0 机器配置 dmdcr.ini,dmdcr_seqo 为 0。
[dmdba@~]# cat > /dmdb8/dmdbms/dsc_config/DSC0/dmdcr.ini << "EOF"
DMDCR_PATH = /dev/dm/asm-dmdcr
DMDCR_MAL_PATH = /dmdb8/dmdbms/dsc_config/DSC0/dmasvrmal.ini
DMDCR_SEQNO = 0 #记录当前节点序号(用来获取ASM登录信息)
DMDCR_AUTO_OPEN_CHECK = 111 #指定时间内如果节点实例未启动,DMCSS会自动将节点踢出集群环境,单位S
DMDCR_ASM_TRACE_LEVEL = 2 #指定日志级别2:INFO级别
##DMDCR_ASM_RESTART_INTERVAL = 30 #CSS 认定 ASM 故障重启的时间 0:不会执行自动拉起操作
##DMDCR_ASM_STARTUP_CMD = /dmdb8/dmdbms/bin/DmASMSvrServiceASM start
##DMDCR_DB_RESTART_INTERVAL = 60 ##CSS 认定 DSC 故障重启的时间,设置为 0 不自动拉起
##DMDCR_DB_STARTUP_CMD = /dmdb8/dmdbms/bin/DmServiceDSC
EOF
或配置
##DMDCR_ASM_STARTUP_CMD = /dmdb8/dmdbms/bin/dmasmsvr DCR_INI=/dmdb8/dmdbms/dsc_config/DSC0/dmdcr.ini
##DMDCR_DB_STARTUP_CMD = /dmdb8/dmdbms/bin/dmserver /dmdb8/dmdbms/dsc_config/DSC0/dm.ini dcr_ini=/dmdb8/dmdbms/dsc_config/DSC0/dmdcr.ini #默认启动到open尾部可添加mount
- db1 机器配置 dmdcr.ini,dmdcr_seqo 为 1。
[dmdba@~]# cat > /dmdb8/dmdbms/dsc_config/DSC1/dmdcr.ini << "EOF"
DMDCR_PATH = /dev/dm/asm-dmdcr
DMDCR_MAL_PATH = /dmdb8/dmdbms/dsc_config/DSC1/dmasvrmal.ini
DMDCR_SEQNO = 1 #记录当前节点序号(用来获取ASM登录信息)
DMDCR_AUTO_OPEN_CHECK = 111 指定时间内如果节点实例未启动,DMCSS会自动将节点踢出集群环境,单位S
DMDCR_ASM_TRACE_LEVEL = 2 #指定日志级别2:INFO级别
##DMDCR_ASM_RESTART_INTERVAL = 30 #CSS 认定 ASM 故障重启的时间 0:不会执行自动拉起操作
##DMDCR_ASM_STARTUP_CMD = /dmdb8/dmdbms/bin/DmASMSvrServiceASM start
##DMDCR_DB_RESTART_INTERVAL = 60 ##CSS 认定 DSC 故障重启的时间,设置为 0 不自动拉起
##DMDCR_DB_STARTUP_CMD = /dmdb8/dmdbms/bin/DmServiceDSC
EOF
或配置
##DMDCR_ASM_STARTUP_CMD = /dmdb8/dmdbms/bin/dmasmsvr DCR_INI=/dmdb8/dmdbms/dsc_config/DSC1/dmdcr.ini
##DMDCR_DB_STARTUP_CMD = /dmdb8/dmdbms/bin/dmserver /dmdb8/dmdbms/dsc_config/DSC1/dm.ini dcr_ini=/dmdb8/dmdbms/dsc_config/DSC1/dmdcr.ini #默认启动到open尾部可添加mount
注意
当前为手动拉起 db0 机器和 db1 机器的 ASM 和 DMSERVER 服务。待集群配置完成后,再修改为自动拉起(删除 dmdcr.ini 中的“##”号即可)。
1.2.5 启动 DMCSS、DMASM 服务
在 2 个节点分别启动 dmcss 命令:
[dmdba@]# /dmdb8/dmdbms/bin/dmcss DCR_INI=/dmdb8/dmdbms/dsc_config/DSC0/dmdcr.ini
[dmdba@]# /dmdb8/dmdbms/bin/dmcss DCR_INI=/dmdb8/dmdbms/dsc_config/DSC1/dmdcr.ini
在 2 个节点分别启动 dmasmsvr 命令:
[dmdba@]# /dmdb8/dmdbms/bin/dmasmsvr DCR_INI=/dmdb8/dmdbms/dsc_config/DSC0/dmdcr.ini
[dmdba@]# /dmdb8/dmdbms/bin/dmasmsvr DCR_INI=/dmdb8/dmdbms/dsc_config/DSC1/dmdcr.ini
说明:如果 DMCSS 配置有自动拉起 dmasmsvr 的功能,可以等待 DMCSS 自动拉起 dmasmsvr 程序,不需要手动启动。
1.2.6 创建 DMASM 磁盘组
##在 db0 节点启动 dmasmtool 工具
[dmdba@]# /dmdb8/dmdbms/bin/dmasmtool DCR_INI=/dmdb8/dmdbms/dsc_config/DSC0/dmdcr.ini
##输入下列语句创建 DMASM 磁盘组
##创建日志磁盘组
ASM> create diskgroup 'DMREDO' asmdisk '/dev/dm/asm-dmredo'
##创建数据磁盘组
ASM> create diskgroup 'DMDATA' asmdisk '/dev/dm/asm-dmdata'
##创建归档磁盘组
ASM> create diskgroup 'DMARCH' asmdisk '/dev/dm/asm-dmarch'
1.2.7 初始化 DB 环境
db0 和 db1 机器配置相同。生产环境注意更改含SIZE值大小
##创建 dminit.ini 文件
[dmdba@~]# cat > /dmdb8/dmdbms/dsc_config/dminit.ini << "EOF"
DB_NAME = DSC #初始化数据库名称
SYSDBA_PWD = SYSDBA #SYSDBA密码
SYSTEM_PATH = +DMDATA/data #初始化数据库存放的路径
SYSTEM = +DMDATA/data/SYSTEM.dbf #SYSTEM表空间路径
SYSTEM_SIZE = 128 #SYSTEM表空间大小
ROLL = +DMDATA/data/ROLL.dbf #ROLL表空间路径
ROLL_SIZE = 128 #ROLL表空间大小
MAIN = +DMDATA/data/MAIN.dbf #MAIN表空间路径
MAIN_SIZE = 128 #MAIN表空间大小
CTL_PATH = +DMDATA/data/dm.ctl #DM.CTL控制文件路径
CTL_SIZE = 8 #DM.CTL控制文件大小
LOG_SIZE = 256 #日志文件大小
DCR_PATH = /dev/dm/asm-dmdcr #DCR磁盘路径
DCR_SEQNO = 0 #连接DMASM节点节点号
AUTO_OVERWRITE = 1 #文件存在时的处理方式
PAGE_SIZE = 32
EXTENT_SIZE = 16
BLANK_PAD_MODE = 1
CASE_SENSITIVE = 0
CHARSET = 1
LENGTH_IN_CHAR = 0
[DSC0] #具体节点都是以[XXX]开始,节点实例名就是XXX
CONFIG_PATH = /dmdb8/dmdbms/dsc_config/DSC0 #配置文件存放路径
PORT_NUM = 5236 #节点服务器监听通讯端口号,服务器配置此参数,取值范围1024~65534,发起连接端的端口在1024~65535之间随机分配
MAL_HOST = 192.168.183.100 #节点MAL系统使用IP 心跳ip
MAL_PORT = 11246 #MAL监听端口,用于数据守护、DSC、MPP等环境中各节点实例之间MAL链路配置,监听端端口配置此参数,取值范围1024~65534,发起连接端的端口在1024~65535之间随机分配
LOG_PATH = +DMREDO/DSC0_LOG01.log #日志文件路径
LOG_PATH = +DMREDO/DSC0_LOG02.log #日志文件路径
[DSC1] #具体节点都是以[XXX]开始,节点实例名就是XXX
CONFIG_PATH = /dmdb8/dmdbms/dsc_config/DSC1 #配置文件存放路径
PORT_NUM = 5236 #节点服务器监听通讯端口号,服务器配置此参数,取值范围1024~65534,发起连接端的端口在1024~65535之间随机分配
MAL_HOST = 192.168.183.130 #节点MAL系统使用IP 心跳ip
MAL_PORT = 11246 #MAL监听端口,用于数据守护、DSC、MPP等环境中各节点实例之间MAL链路配置,监听端端口配置此参数,取值范围1024~65534,发起连接端的端口在1024~65535之间随机分配
LOG_PATH = +DMREDO/DSC1_LOG01.log #日志文件路径
LOG_PATH = +DMREDO/DSC1_LOG02.log #日志文件路径
EOF
##在 db0 节点执行初始化 db 命令
[dmdba@~]# /dmdb8/dmdbms/bin/dminit control=/dmdb8/dmdbms/dsc_config/dminit.ini
##拷贝dminit.ini到db01节点
[dmdba@~]# scp /dmdb8/dmdbms/dsc_config/DSC1/* dmdba@192.168.40.200:/dmdb8/dmdbms/dsc_config/DSC1/
参数解释:
LOG_SIZE:日志文件大小
CASE_SENSITIVE:建议从 MYSQL 和 SQLSERVER 迁移过来的系统,使用大小写不敏感,ORACLE 迁移过来的系统,使用大小写敏感,默认为区分。取值:Y、y、1 表示敏感;N、n、0 表示不敏感。默认值为 Y 。
CHARSET/UNICODE_FLAG:0 代表 GB18030,1 代表 UTF-8,2 代表韩文字符集 EUC-KR。默认为 0
DB_NAME:初始化数据库名称,默认为 DAMENG
INSTANCE_NAME:初始化数据库实例名称,默认为 DMSERVER
PORT_NUM:数据库端口号,默认5236
LENGTH_IN_CHAR:VARCHAR 类型对象的长度是否以字符为单位。取值为 1 或者 Y 表示是,取值为 0 或 N 表示否。默认值为 0
BLANK_PAD_MODE 设置空格填充模式(0),可选值:0/1
问题处理
初始化DB实例报错
问题描述
启动dmcss和dmasmsvr服务启动后,初始化DB实例提示如下报错:
[dmdba@localhost DSC0]$ /dmdb8/dmdbms/bin/dminit control=/dmdb8/dmdbms/dsc_config/DSC0/dminit.ini
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2024-04-17
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
log file path: +DMREDO/DSC0_LOG01.log
log file path: +DMREDO/DSC0_LOG02.log
log file path: +DMREDO/DSC1_LOG01.log
log file path: +DMREDO/DSC1_LOG02.log
write to dir [+DMDATA/data/DSC].
fsm_file_add group_id 1, file_id 0, size_in_pages 320000, path +DMDATA/data/ROLL.dbf failed, code -7004
Please check whether exist file or directory with the same name or view the log for more infomation, code:[-7014]
fail to init db.
问题分析
--查看初始化实例配置文件dminit.ini
[dmdba@~]# cat /dmdb8/dmdbms/dsc_config/DSC0/dminit.ini
DB_NAME = DSC #初始化数据库名称
SYSDBA_PWD = SYSDBA #SYSDBA用户密码
SYSTEM_PATH = +DMDATA/data #初始化数据库存放的路径
SYSTEM = +DMDATA/data/SYSTEM.dbf #SYSTEM表空间路径
SYSTEM_SIZE = 1024 #SYSTEM表空间大小
ROLL = +DMDATA/data/ROLL.dbf #ROLL表空间路径
ROLL_SIZE = 10000 #ROLL表空间大小
MAIN = +DMDATA/data/MAIN.dbf #MAIN表空间路径
MAIN_SIZE = 1024 #MAIN表空间大小
CTL_PATH = +DMDATA/data/dm.ctl #DM.CTL控制文件路径
CTL_SIZE = 8 #DM.CTL控制文件大小
LOG_SIZE = 1024 #日志文件大小
DCR_PATH = /dev/dm/asm-dmdcr #DCR磁盘路径
DCR_SEQNO = 0 #连接DMASM节点节点号
AUTO_OVERWRITE = 1 #文件存在时的处理方式
PAGE_SIZE = 32
EXTENT_SIZE = 16
BLANK_PAD_MODE = 1
[DSC0] #具体节点都是以[XXX]开始,节点实例名就是XXX
CONFIG_PATH = /dmdb8/dmdbms/dsc_config/DSC0 #配置文件存放路径
PORT_NUM = 5236 #节点服务器监听通讯端口号,服务器配置此参数,取值范围1024~65534,发起连接端的端口在1024~65535之间随机分配
MAL_HOST = 192.168.183.100 #节点MAL系统使用IP 心跳ip
MAL_PORT = 11246 #MAL监听端口,用于数据守护、DSC、MPP等环境中各节点实例之间MAL链路配置,监听端端口配置此参数,取值范围1024~65534,发起连接端的端口在1024~65535之间随机分配
LOG_PATH = +DMREDO/DSC0_LOG01.log #日志文件路径
LOG_PATH = +DMREDO/DSC0_LOG02.log #日志文件路径
[DSC1] #具体节点都是以[XXX]开始,节点实例名就是XXX
CONFIG_PATH = /dmdb8/dmdbms/dsc_config/DSC1 #配置文件存放路径
PORT_NUM = 5236 #节点服务器监听通讯端口号,服务器配置此参数,取值范围1024~65534,发起连接端的端口在1024~65535之间随机分配
MAL_HOST = 192.168.183.130 #节点MAL系统使用IP 心跳ip
MAL_PORT = 11246 #MAL监听端口,用于数据守护、DSC、MPP等环境中各节点实例之间MAL链路配置,监听端端口配置此参数,取值范围1024~65534,发起连接端的端口在1024~65535之间随机分配
LOG_PATH = +DMREDO/DSC1_LOG01.log #日志文件路径
LOG_PATH = +DMREDO/DSC1_LOG02.log #日志文件路径
--删除初始化生成的参数文件和数据文件
db0节点删除共享磁盘中的目录
[dmdba@localhost DSC0]$ /dmdb8/dmdbms/bin/dmasmtool dcr_ini=/dmdb8/dmdbms/dsc_config/DSC0/dmdcr.ini
ASM>ls -l
ASM>ls -l
+
disk groups total [5]......
NO.1 name: DMREDO
id: 0
au_size: 1.00 MB
extent_size: 4
total_size: 10.00 GB
free_size: 8.99 GB
create_time: 2023-11-17 15:20:33
modify_time: 2023-11-17 15:20:33
NO.2 name: DMDATA
id: 1
au_size: 1.00 MB
extent_size: 4
total_size: 10.00 GB
free_size: 9.60 GB
create_time: 2023-11-17 15:20:56
modify_time: 2023-11-17 15:20:56
NO.3 name: DMARCH
id: 2
au_size: 1.00 MB
extent_size: 4
total_size: 10.00 GB
free_size: 9.99 GB
create_time: 2023-11-17 15:21:06
modify_time: 2023-11-17 15:21:06
NO.4 name: VOTE
id: 125
au_size: 1.00 MB
extent_size: 4
total_size: 1.00 GB
free_size: 1000.00 MB
create_time: 2023-11-17 15:10:06
modify_time: 2023-11-17 15:10:41
NO.5 name: DCR
id: 126
au_size: 1.00 MB
extent_size: 4
total_size: 1.00 GB
free_size: 1000.00 MB
create_time: 2023-11-17 15:09:50
modify_time: 2023-11-17 15:11:41
Used time: 2.222(ms).
ASM>cd DMDATA
+DMDATA
Used time: 2.216(ms).
ASM>rm -rf *
Used time: 10.445(ms).
ASM>cd ../
Used time: 1.914(ms).
ASM>ls -l
db0节点删除初始化生成的参数文件
rm -f /dmdb8/dmdbms/dsc_config/DSC0/dmdcr.ini
rm -f /dmdb8/dmdbms/dsc_config/DSC0/sqllog.ini
db1节点删除初始化生成的参数文件
rm -f /dmdb8/dmdbms/dsc_config/DSC1/dmdcr.ini
rm -f /dmdb8/dmdbms/dsc_config/DSC1/sqllog.ini
--db0节点清理磁盘头
su - root
dd if=/dev/zero of=/dev/sbe bs=1k count=1
dd if=/dev/zero of=/dev/sbf bs=1k count=1
dd if=/dev/zero of=/dev/sbd bs=1k count=1
--db0节点重新初始化ASM磁盘
[dmdba@~]#/dmdb8/dmdbms/bin/dmasmcmd
#asm script file
#初始化 DMASM 磁盘
ASM>create asmdisk '/dev/dm/asm-dmdata' 'DATA0'
ASM>create asmdisk '/dev/dm/asm-dmredo' 'REDO0'
ASM>create asmdisk '/dev/dm/asm-dmarch' 'ARCH0'
--在 db0 节点再次执行初始化 db 命令
[dmdba@~]# /dmdb8/dmdbms/bin/dminit control=/dmdb8/dmdbms/dsc_config/DSC0/dminit.ini
依旧是上面的报错。
一直掉在下面的报错坑中,在坑里呆了有小半天的时间。
Please check whether exist file or directory with the same name or view the log for more infomation, code:[-7014]
从下午3点左右一直到6点半左右,达梦厂家交流群、达梦官方在线社区平台都进行了咨询,还手动进入+DMDATA磁盘手动创建了data目录。最后求助无缘,想着扒拉下官方文档吧,逐行看一行也没敢跳过,最终发现
--过滤出参数文件中关于size大小的参数
[dmdba@localhost DSC0]$ cat /dmdb8/dmdbms/dsc_config/DSC0/dminit.ini |grep SIZE
SYSTEM_SIZE = 1024
ROLL_SIZE = 10000
MAIN_SIZE = 1024
CTL_SIZE = 8
LOG_SIZE = 2048
PAGE_SIZE = 32
EXTENT_SIZE = 16
--查看ASM磁盘大小
[dmdba@localhost DSC0]$ /dmdb8/dmdbms/bin/dmasmcmd
DMASMCMD V8
ASM>listdisks /dev/dm
[/dev/dm/asm-dmvote]: Used ASM disk, name:[DMASMvote], size:[1024M], group_id:[125], disk_id:[0]
[/dev/dm/asm-dmdcr]: Used ASM disk, name:[DMASMdcr], size:[1024M], group_id:[126], disk_id:[0]
[/dev/dm/asm-dmdata]: Unused ASM disk, name:[DMASMDATA0], size:[10239M]
[/dev/dm/asm-dmarch]: Unused ASM disk, name:[DMASMARCH0], size:[10239M]
[/dev/dm/asm-dmredo]: Unused ASM disk, name:[DMASMREDO0], size:[10239M]
Used time: 4.025(ms).
/dmdb8/dmdbms/dsc_config/DSC0/dminit.ini 数据文件的总大小超过了磁盘最大空间,因此初始化失败。
解决办法
将文件类的参数统一改成128重新初始化
--查看更改后的参数
[dmdba@localhost DSC0]$ cat /dmdb8/dmdbms/dsc_config/DSC0/dminit.ini |grep SIZE
SYSTEM_SIZE = 128
ROLL_SIZE = 128
MAIN_SIZE = 128
CTL_SIZE = 8
LOG_SIZE = 128
PAGE_SIZE = 32
EXTENT_SIZE = 16
--再次初始化
[dmdba@localhost DSC0]$ /dmdb8/dmdbms/bin/dminit control=/dmdb8/dmdbms/dsc_config/DSC0/dminit.ini
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2024-04-17
value of the log file size error.
the log file size is between 256 and 8192.
Read ini file(/dmdb8/dmdbms/dsc_config/DSC0/dminit.ini) error in line 12, code(-1)
fail to init db.
LOG_SIZE取值范围256 and 8192单位M
将LOG_SIZE更改为256重新初始化成功
[dmdba@localhost DSC0]$ /dmdb8/dmdbms/bin/dminit control=/dmdb8/dmdbms/dsc_config/DSC0/dminit.ini
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2024-04-17
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
log file path: +DMREDO/DSC0_LOG01.log
log file path: +DMREDO/DSC0_LOG02.log
log file path: +DMREDO/DSC1_LOG01.log
log file path: +DMREDO/DSC1_LOG02.log
FILE "/dmdb8/dmdbms/dsc_config/DSC0/dm.ini" has already existed
FILE "/dmdb8/dmdbms/dsc_config/DSC0/sqllog.ini" has already existed
FILE "/dmdb8/dmdbms/dsc_config/DSC1/dm.ini" has already existed
FILE "/dmdb8/dmdbms/dsc_config/DSC1/sqllog.ini" has already existed
write to dir [+DMDATA/data/DSC].
create dm database success. 2023-11-17 18:49:14
最后反思一下,自己粗心给自己挖的坑,栽坑里久了才觉悟到提示的报错只做参考,多看官方文档。
1.2.8 配置 dmarch.ini 文件
- db0 节点
##修改 dm.ini
[dmdba@~]# vi /dmdb8/dmdbms/dsc_config/DSC0/dm.ini
ARCH_INI = 1
##创建 dmarch.ini
[dmdba@~]# vi /dmdb8/dmdbms/dsc_config/DSC0/dmarch.ini
ARCH_WAIT_APPLY = 0 #备库收到Redo日志后,0:收到马上响应(高性能模式)1:重演完成后响应(事务一致模式)
ARCH_LOCAL_SHARE = 1 #DMDSC 集群本地归档是否共享给远程节点作为远程归档。已废弃,始终共享
ARCH_LOCAL_SHARE_CHECK=0 #是否进行 LOCAL 归档和 REMOTE 归档路径的一致性校验。已废弃,始终校验
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #Redo 日志归档类型
ARCH_DEST = +DMARCH/ARCH/DSC0/arch #归档目标
ARCH_FILE_SIZE = 1024 #单个 Redo 日志归档文件大小,单位 MB,缺省为1024MB
ARCH_SPACE_LIMIT = 10240 #Redo 日志归档空间限制,当节点上的本地归档文件达到限制值时,系统自动删除最早生成的归档日志文件。,仅对本地归档有效,缺省为 0,表示无空间限制
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE #Redo 日志归档类型
ARCH_DEST = DSC1 #归档目标
ARCH_INCOMING_PATH = +DMARCH/ARCH/DSC1/arch #指定远程归档目标 ARCH_DEST 的本地归档日志文件存放路径。需要配置在 ARCH_TYPE 之后
ARCH_FILE_SIZE = 1024 #单个 Redo 日志归档文件大小,单位 MB,缺省为1024MB
ARCH_SPACE_LIMIT = 10240 #Redo 日志归档空间限制,当节点上的本地归档文件达到限制值时,系统自动删除最早生成的归档日志文件。,仅对本地归档有效,缺省为 0,表示无空间限制
- db1 节点
##修改 dm.ini
[dmdba@~]# vi /dmdb8/dmdbms/dsc_config/DSC1/dm.ini
ARCH_INI = 1
##创建 dmarch.ini
[dmdba@~]# vi /dmdb8/dmdbms/dsc_config/DSC1/dmarch.ini
ARCH_WAIT_APPLY = 0 #备库收到Redo日志后,0:收到马上响应(高性能模式)1:重演完成后响应(事务一致模式)
ARCH_LOCAL_SHARE = 1 #DMDSC 集群本地归档是否共享给远程节点作为远程归档。已废弃,始终共享
ARCH_LOCAL_SHARE_CHECK=0 #是否进行 LOCAL 归档和 REMOTE 归档路径的一致性校验。已废弃,始终校验
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #Redo 日志归档类型
ARCH_DEST = +DMARCH/ARCH/DSC1/arch #归档目标
ARCH_FILE_SIZE = 1024 #单个 Redo 日志归档文件大小,单位 MB,缺省为1024MB
ARCH_SPACE_LIMIT = 10240 #Redo 日志归档空间限制,当节点上的本地归档文件达到限制值时,系统自动删除最早生成的归档日志文件,仅对本地归档有效,缺省为 0,表示无空间限制
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE #Redo 日志归档类型
ARCH_DEST = DSC0 #归档目标
ARCH_INCOMING_PATH = +DMARCH/ARCH/DSC0/arch #指定远程归档目标 ARCH_DEST 的本地归档日志文件存放路径。需要配置在 ARCH_TYPE 之后
ARCH_FILE_SIZE = 1024 #单个 Redo 日志归档文件大小,单位 MB,缺省为1024MB
ARCH_SPACE_LIMIT = 10240 #Redo 日志归档空间限制,当节点上的本地归档文件达到限制值时,系统自动删除最早生成的归档日志文件。,仅对本地归档有效,缺省为 0,表示无空间限制
1.2.9 启动数据库集群
如果 DMCSS 配置有自动拉起 dmserver 的功能,可以等待 DMCSS 自动拉起实例,不需要手动启动。如果需要手动启动,可参考以下步骤:
##db0 机器
[dmdba@]# /dmdb8/dmdbms/bin/dmserver /dmdb8/dmdbms/dsc_config/DSC0/dm.ini dcr_ini=/dmdb8/dmdbms/dsc_config/DSC0/dmdcr.ini
##db1 机器
[dmdba@~]# /dmdb8/dmdbms/bin/dmserver /dmdb8/dmdbms/dsc_config/DSC1/dm.ini dcr_ini=/dmdb8/dmdbms/dsc_config/DSC1/dmdcr.ini
说明:若启动到mount 可在尾部加mount参数
1.2.10 注册 CSS、ASM、DMSERVER 后台服务
##db0 机器
[root@~]# /dmdb8/dmdbms/script/root/dm_service_installer.sh -t dmcss -dcr_ini /dmdb8/dmdbms/dsc_config/dmdcr.ini -p CSS
[root@~]# /dmdb8/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini /dmdb8/dmdbms/dsc_config/dmdcr.ini -y DmCSSServiceCSS.service -p ASM
[root@~]# /dmdb8/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /dmdb8/dmdbms/dsc_config/DSC0/dm.ini -dcr_ini /dmdb8/dmdbms/dsc_config/DSC0/dmdcr.ini -y DmASMSvrServiceASM.service -p DSC
[root@~]# systemctl enable DmCSSServiceCSS
##db1 机器
[root@~]# /dmdb8/dmdbms/script/root/dm_service_installer.sh -t dmcss -dcr_ini /dmdb8/dmdbms/dsc_config/dmdcr.ini -p CSS
[root@~]# /dmdb8/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini /dmdb8/dmdbms/dsc_config/dmdcr.ini -y DmCSSServiceCSS.service -p ASM
[root@~]# /dmdb8/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /dmdb8/dmdbms/dsc_config/DSC1/dm.ini -dcr_ini /dmdb8/dmdbms/dsc_config/DSC1/dmdcr.ini -y DmASMSvrServiceASM.service -p DSC
[root@~]# systemctl enable DmCSSServiceCSS
参数说明:
-t service_type
-y dependent_service 依赖服务
-p service_name_postfix
-m open|mount
补充:/dmdb8/dmdbms/bin/DmServiceDSC 文件中默认启库启动到open状态。如果想启动到mount可将
open替换为mount
--查看注册后的服务状态
[root@localhost ~]# systemctl list-unit-files D*
UNIT FILE STATE
DmAPService.service enabled
DmASMSvrServiceASM.service enabled
DmCSSMonitorServiceMonitor.service enabled
DmCSSServiceCSS.service enabled
DmMonitorServiceMonitor.service enabled
DmServiceDSC.service enabled
DmWatcherServiceWatcher.service enabled
备注:db0 机器、db1 机器删除自启可参考以下命令。
[root@~]# /dmdb8/dmdbms/script/root/dm_service_uninstaller.sh -n DmCSSServiceCSS
[root@~]# /dmdb8/dmdbms/script/root/dm_service_uninstaller.sh -n DmASMSvrServiceASM
[root@~]# /dmdb8/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceDSC
1.2.11 配置监视器
监视器介绍
- 监控集群状态
DMCSS每秒会发送集群中所有节点的状态信息、当前连接到DMCSS的监视器信息以及DCR的配置信息到活动的监视器上,监视器提供对应的show命令用于查看各类信息。 - 打开/关闭指定组的自动拉起
DMCSSM提供SET AUTO RESTART ON/SET AUTO RESTART OFF命令,通知DMCSS打开或关闭对指定组的自动拉起功能,此功能和DMCSS的监控打开或关闭没有关系。 - 强制OPEN指定组
DMCSSM提供OPEN FORCE命令,在启动ASM或DB组时,如果组中某个节点发生硬件故障等原因导致一直无法启动,可执行此命令通知DMCSS将ASM组或DB组强制OPEN,不再等待故障节点启动成功。 - 启动/退出集群
DMCSSM提供EP STARTUP/EP STOP命令,可以通知DMCSS启动/退出指定的ASM或DB组。 - 集群故障处理
DMCSSM提供EP BREAK/EP RECOVER命令,在主CSS的监控功能被关闭的情况下,可以通过执行这些命令手动进行故障处理和故障恢复。另外在某些特殊场景下还可通过EP HALT命令强制退出指定节点
监视器配置
创建 dmcssm.ini
## A 机器、B 机器配置相同
[dmdba@~]# cat > /dmdb8/dmdbms/bin/dmcssm.ini << "EOF"
CSSM_OGUID = 210715 #用于和 DMCSS 通信校验使用,和 DMDCR_CFG.INI 中的 DCR_OGUID 值保持一致
CSSM_CSS_IP = 192.168.183.100:11286 #集群中所有 DMCSS 所在机器的心跳 IP 地址,以及 DMCSS 的监听端口,配置格式为“IP:PORT”的形式,其中 IP 和 PORT 分别对应 DMDCR_CFG.INI 中 DMCSS 节点的 DCR_EP_HOST 和 DCR_EP_PORT。
CSSM_CSS_IP = 192.168.183.130:11286 ##集群中所有 DMCSS 所在机器的心跳 IP 地址,以及 DMCSS 的监听端口,配置格式为“IP:PORT”的形式,其中 IP 和 PORT 分别对应 DMDCR_CFG.INI 中 DMCSS 节点的 DCR_EP_HOST 和 DCR_EP_PORT。
CSSM_LOG_PATH = ../log #日志文件路径,日志文件命名方式为 “dmcssm_年月日时分秒.log”
CSSM_LOG_FILE_SIZE = 512 # 单个日志文件大小,取值范围 16~2048,单位为 MB,缺省为 64MB,达到最大值后,会自动生成并切换到新的日志文件中
CSSM_LOG_SPACE_LIMIT = 2048 #日志总空间大小,取值 0 或者 256~4096,单位为 MB。缺省为 0,表示没有空间限制。如果达到设定的总空间限制,会自动删除创建时间最早的日志文件
EOF
注册服务(选做)
[root@~]# /dmdb8/dmdbms/script/root/dm_service_installer.sh -t dmcssm -cssm_ini /dmdb8/dmdbms/bin/dmcssm.ini -p Monitor
##备注:删除自启
[root@~]# /dmdb8/dmdbms/script/root/dm_service_uninstaller.sh -n DmCSSMonitorServiceMonitor
监视器使用
进入监视器。
安装目录的bin目录下./dmcssm 加上dmcssm.ini路径若ini也在bin目录,可直接执行./dmcssm dmcssm.ini
[root@localhost bin]# ./dmcssm ini_path=/dmdb8/dmdbms/bin/dmcssm.ini
[monitor] 2023-11-20 08:58:46: CSS MONITOR V8
[monitor] 2023-11-20 08:58:46: CSS MONITOR SYSTEM IS READY.
[monitor] 2023-11-20 08:58:46: Wait CSS Control Node choosed...
[monitor] 2023-11-20 08:58:47: Wait CSS Control Node choosed succeed.
| 命令 | 含义 |
|---|---|
| show | 查看所有组的信息 |
| show config | 查看 dmdcr_cfg.ini 的配置信息 |
| show monitor | 查看当前连接到主 CSS 的所有监视器信息 |
| set group_name auto restart on/off | 打开/关闭指定组的自动拉起功能 |
| ep stop/start GRP_ASM | 打开/关闭指定ASM组 |
| ep stop/start GRP_DSC | 打开/关闭指定数据库组 |
注意:
集群的监视器程序:dmcssm
读写分离、数据守护的监视器:dmmonitor
1.2.12 启停监视器服务
--前台启动:
[dmdba@~]# /dmdb8/dmdbms/bin/dmcssm ini_path=/dmdb8/dmdbms/bin/dmcssm.ini
--后台启动:
[dmdba@~]# /dmdb8/dmdbms/bin/DmCSSMonitorServiceMonitor start
--后台停止:
[dmdba@~]# /dmdb8/dmdbms/bin/DmCSSMonitorServiceMonitor stop
通过以上命令,进入监视器执行 show 命令,可查看 DSC 集群运行状态。如下图所示。更多详细内容参考数据库安装目录 doc 路径下《共享存储集群》使用手册。
[root@localhost bin]# ./dmcssm ini_path=/dmdb8/dmdbms/bin/dmcssm.ini
[monitor] 2023-11-20 09:01:15: CSS MONITOR V8
[monitor] 2023-11-20 09:01:15: CSS MONITOR SYSTEM IS READY.
[monitor] 2023-11-20 09:01:15: Wait CSS Control Node choosed...
[monitor] 2023-11-20 09:01:16: Wait CSS Control Node choosed succeed.
show
monitor current time:2023-11-20 09:01:20, n_group:3
=================== group[name = GRP_CSS, seq = 0, type = CSS, Control Node = 0] ========================================
[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 ts
2023-11-20 09:01:20 CSS0 0 11286 Control Node OPEN WORKING OK TRUE 2599 4242
2023-11-20 09:01:20 CSS1 1 11286 Normal Node OPEN WORKING OK TRUE 2917 4438
=================== 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 ts
2023-11-20 09:01:20 ASM0 0 11276 Control Node OPEN WORKING OK TRUE 9049 10674
2023-11-20 09:01:20 ASM1 1 11276 Normal Node OPEN WORKING OK TRUE 9278 10774
=================== 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 ts
2023-11-20 09:01:20 DSC0 0 5236 Control Node OPEN WORKING OK TRUE 329388 330203
2023-11-20 09:01:20 DSC1 1 5236 Normal Node OPEN WORKING OK TRUE 24879 26344
==================================================================================================================
1.2.13. 启停集群
##启动场景1--未配置CSS自动拉起ASM和dbserver:A/B 机器 CSS
A/B 机器:[dmdba@~]# /dmdb8/dmdbms/bin/DmCSSServiceCSS start
A/B 机器:[dmdba@~]# /dmdb8/dmdbms/bin/DmASMSvrServiceASM start
A/B 机器:[dmdba@~]# /dmdb8/dmdbms/bin/DmServiceDSC start
##启动场景2--配置的有CSS自动拉起ASM和dbserver:A/B 机器 CSS
A/B 机器:[dmdba@~]#/dmdb8/dmdbms/bin/DmCSSServiceCSS start
##说明:CSS 启动后 30 秒自动拉起 ASM,60 秒自动拉起 DMSERVER。
##启动场景3--监视器(其中asm/dsc为dmasmsvr/dmserver集群的组名)css注册会后开启自启
/dmdb8/dmdbms/bin/dmcssm ini_path=/dmdb8/dmdbms/bin/dmcssm.ini #进入监视器控制台
show #查看组名
ep startup asm #启动DMASMSVR集群
ep startup dsc #启动dmserver集群。
##停止场景1: A/B 机器 DMSERVER→A/B 机器 ASM→A/B 机器 CSS
A/B 机器:[dmdba@~]# /dmdb8/dmdbms/bin/DmServiceDSC stop
A/B 机器:[dmdba@~]# /dmdb8/dmdbms/bin/DmASMSvrServiceASM stop
A/B 机器:[dmdba@~]# /dmdb8/dmdbms/bin/DmCSSServiceCSS stop
##停止场景2--监视器(其中asm/dsc为dmasmsvr/dmserver集群的组名)
DMCSSM,在DMCSSM控制台执行命令"
/dmdb8/dmdbms/bin/dmcssm ini_path=/dmdb8/dmdbms/bin/dmcssm.ini #进入监视器控制台
show #查看组名
ep stop asm #启动DMASMSVR集群
ep stop dsc #启动dmserver集群。
A/B 机器:[dmdba@~]# /dmdb8/dmdbms/bin/DmCSSServiceCSS stop
补充1.单独停止数据库服务
有多种方式停止数据库服务
1.可以登录DMCSSM后,可以使用命令:
SET AUTO RESTART OFF 关闭指定组的自动拉起功能(只修改 dmcss 内存值)
然后使用DmServiceDSC stop去停止服务
--进入监视器
[dmdba@localhost bin]# /dmdb8/dmdbms/bin/dmcssm ini_path=/dmdb8/dmdbms/bin/dmcssm.ini
--关闭指定组的自动拉起功能(只修改 dmcss 内存值)
show
SET DSC AUTO RESTART OFF
退出监视器
exit
--停止数据库服务
A/B 机器:[dmdba@~]# /dmdb8/dmdbms/bin/DmServiceDSC stop
2.登录DMCSSM后,直接执行"ep stop dsc"停止服务(建议)
如果配置的有css自动拉起asm和dbserver,重启后依然会自动拉起asm和dbserver。监控中执行"ep stop dsc"停止服务不会被css拉起需手动启
--进入监视器
[root@localhost bin]# /dmdb8/dmdbms/bin/dmcssm ini_path=/dmdb8/dmdbms/bin/dmcssm.ini
--查看css/asm/dbserver组名
show
--停止数据库服务
ep stop GRP_DSC
3.如果是dmserver前台启动的服务,则在dmserver前台启动的窗口执行 exit 命令退出。会通知所有其他节点一起退出
4.Linux 环境执行 kill -10 命令,DMASMSVR/DMSERVER 都能正常退出;Linux 环境执行 kill -2 命令,DMSERVER 实例节点自己退出,不影响其他节点正常运行。
5.DMDSC 环境 DIsql 登录实例执行"stop instance",实例会正常退出,不影响其他活动节点正常运行。因此每个节点都要执行该命令
注意:关闭 DMDSC 集群环境时,应先关闭 DMSERVER,再依次关闭 DMASMSVR 和 DMCSS。
2.补充:DMDSC启动、关闭流程
启动
DMDSC是基于共享存储的数据库集群系统,包含多个数据库实例,因此,与单节点的达梦数据库不同,DMDSC集群需要在节点间进行同步、协调,才能正常地启动、关闭。启动DMDSC集群之前,必须先启动集群同步服务DMCSS,如果使用了DMASM文件系统,则DMASMSVR服务也必须先启动。
启动流程简单总结一下就是先启动DMCSS,然后启动DMASMSVR(如果有的话),最后启动DMSERVER
如果DMCSS配置了DMASMSVR/dmserver自动拉起命令,此时可以先仅启动DMCSS,然后启动监视器DMCSSM,在DMCSSM控制台执行命令"ep startup asm"启动DMASMSVR集群,执行"ep startup dsc"启动dmserver集群(其中asm/dsc为dmasmsvr/dmserver集群的组名)。
停止
如果DMCSS配置了DMASMSVR/dmserver自动拉起命令,那么手动停止DMSERVER和DMASMSVR时会被拉起来,因此可能导致停止服务执行成功,但是集群并未停止的情况。此时就显示出监视器的好处。
此时可以在监视器中执行“ep stop 集群组名”命令的方式停止ASMSVR服务或者dmserver服务,在使用监视器停止服务时,监视器会关闭相关的自动拉起命令,因此,可以确保集群的正确停止,在停止DMASMSVR/dmserver服务后,再手动停止DMCSS服务即可。需要注意的是,如果不停止DMCSS服务,再次启动集群的话,自动拉起是不会生效的,当然,也可以通过在监视器中执行“set group_name auto restart on/off ”打开/关闭指定组的自动拉起功能,此命令只修改dmcss内存值。
说明:
1.DSC 正常停库必须 2 节点同时停止,CSS 启动后 30 秒自动拉起 ASM,60 秒自动拉起 DMSERVER,所以停止 DMSERVER 和 ASM 后,要尽快停止 CSS,避免被自动拉起。或者在停库前,取消 dmdcr.ini 配置文件中 DMDCR_ASM_RESTART_INTERVAL、DMDCR_ASM_STARTUP_CMD 前面的 # 号。
2.服务全部停止后,要检查后台进程是否全部停止。
1.2.13 参数优化
1.2.13.1.查看原来参数
set pagesize 999
SELECT 'MAX_SESSIONS' AS 参数名, SF_GET_PARA_VALUE(1,'MAX_SESSIONS') AS 参数值 UNION ALL
SELECT 'MAX_SESSION_STATEMENT',SF_GET_PARA_VALUE(1,'MAX_SESSION_STATEMENT') UNION ALL
SELECT 'MAX_OS_MEMORY',SF_GET_PARA_VALUE(1,'MAX_OS_MEMORY') UNION ALL
SELECT 'BUFFER',SF_GET_PARA_VALUE(1,'BUFFER') UNION ALL
SELECT 'BUFFER_POOLS',SF_GET_PARA_VALUE(1,'BUFFER_POOLS') UNION ALL
SELECT 'RECYCLE',SF_GET_PARA_VALUE(1,'RECYCLE') UNION ALL
SELECT 'RECYCLE_POOLS',SF_GET_PARA_VALUE(1,'RECYCLE_POOLS') UNION ALL
SELECT 'HJ_BUF_GLOBAL_SIZE',SF_GET_PARA_VALUE(1,'HJ_BUF_GLOBAL_SIZE') UNION ALL
SELECT 'HJ_BUF_SIZE',SF_GET_PARA_VALUE(1,'HJ_BUF_SIZE') UNION ALL
SELECT 'HAGR_BUF_GLOBAL_SIZE',SF_GET_PARA_VALUE(1,'HAGR_BUF_GLOBAL_SIZE') UNION ALL
SELECT 'HAGR_BUF_SIZE',SF_GET_PARA_VALUE(1,'HAGR_BUF_SIZE') UNION ALL
SELECT 'HAGR_BLK_SIZE',SF_GET_PARA_VALUE(1,'HAGR_BLK_SIZE') UNION ALL
SELECT 'DICT_BUF_SIZE',SF_GET_PARA_VALUE(1,'DICT_BUF_SIZE') UNION ALL
SELECT 'KEEP',SF_GET_PARA_VALUE(1,'KEEP') UNION ALL
SELECT 'TEMP_SIZE',SF_GET_PARA_VALUE(1,'TEMP_SIZE') UNION ALL
SELECT 'SESS_POOL_SIZE',SF_GET_PARA_VALUE(1,'SESS_POOL_SIZE') UNION ALL
SELECT 'CACHE_POOL_SIZE',SF_GET_PARA_VALUE(1,'CACHE_POOL_SIZE') UNION ALL
SELECT 'WORKER_THREADS',SF_GET_PARA_VALUE(1,'WORKER_THREADS') UNION ALL
SELECT 'TASK_THREADS',SF_GET_PARA_VALUE(1,'TASK_THREADS') UNION ALL
SELECT 'USE_PLN_POOL',SF_GET_PARA_VALUE(1,'USE_PLN_POOL') UNION ALL
SELECT 'OLAP_FLAG',SF_GET_PARA_VALUE(1,'OLAP_FLAG') UNION ALL
SELECT 'MEMORY_MAGIC_CHECK',SF_GET_PARA_VALUE(1,'MEMORY_MAGIC_CHECK') UNION ALL
SELECT 'PWD_POLICY',SF_GET_PARA_VALUE(1,'PWD_POLICY') UNION ALL
SELECT 'VM_STACK_SIZE',SF_GET_PARA_VALUE(1,'VM_STACK_SIZE') UNION ALL
SELECT 'VM_POOL_SIZE',SF_GET_PARA_VALUE(1,'VM_POOL_SIZE') UNION ALL
SELECT 'VM_POOL_TARGET',SF_GET_PARA_VALUE(1,'VM_POOL_TARGET') UNION ALL
SELECT 'COMM_TRACE',SF_GET_PARA_VALUE(1,'COMM_TRACE');
1.2.13.2.实例参数优化调整
v_mem_mb int:= 16000; #数据库服务器物理内存大小 单位M
v_cpus int:= 8; #数据库服务器cpu核数
set serveroutput on
start /home/dmdba/AutoParaAdj.sql
执行输出结果
重启数据库服务./DmServicefuwa restart
附:AutoParaAdj.sql 脚本内容
/*
**************************************************************************
* *
* Auto parameter adjustment 3.7 for dm8*
* [September 27, 2023 ]
* Take effect after restart dmserver
* *
**************************************************************************
*/
declare
exec_mode int:= 1; --0表示直接执行脚本修改参数,1表示不直接修改参数,打印设置参数的语句,设置为1后,必须调整v_mem_mb和v_cpus
is_dsc int := 0; --是否是dsc集群,如果是dsc集群请设置为1,将自动调整dsc相关参数
mem_per int:= 100; --默认所有的内存归达梦数据库使用,如实际不能100%可用,可以调整此参数; MAX_OS_MEMORY强制100不与此参数挂钩
v_mem_mb int:= 16000; --exec_mode为1时请自行根据机器实际内存调整此参数
v_cpus int:= 8; --exec_mode为1时请自行根据机器实际CPU核数调整此参数
sort_mode int:=0; --并发量较高的OLTP类型系统此参数设置为0,并发量不高的一般业务系统和OLAP类的系统此参数设置为1
pk_cluster_mode int:=1; --是否使用聚集主键:性能要求高且大字段较少的业务场景强烈建议设置为1,大字段多的场景设置为0
tname varchar(100);
MEMORY_POOL int;
MEMORY_N_POOLS int;
MEMORY_TARGET int;
BUFFER INT;
MAX_BUFFER INT;
RECYCLE int;
CACHE_POOL_SIZE int;
BUFFER_POOLS int;
RECYCLE_POOLS int;
SORT_BUF_SIZE int;
SORT_BUF_GLOBAL_SIZE INT;
DICT_BUF_SIZE INT;
HJ_BUF_SIZE INT;
HAGR_BUF_SIZE INT;
HJ_BUF_GLOBAL_SIZE INT;
HAGR_BUF_GLOBAL_SIZE INT;
SORT_FLAG INT;
SORT_BLK_SIZE INT;
RLOG_POOL_SIZE INT;
TASK_THREADS INT;
IO_THR_GROUPS INT;
FAST_POOL_PAGES INT :=3000;
FAST_ROLL_PAGES INT :=1000;
CNT INT;
begin
CNT :=0;
if exec_mode=0 then
SELECT TOP 1 N_CPU,TOTAL_PHY_SIZE/1024/1024 INTO v_cpus,v_mem_mb FROM V$SYSTEMINFO;
end if;
v_mem_mb := v_mem_mb * (mem_per/100.0);
v_mem_mb=round(v_mem_mb,-3);
IF v_mem_mb <= 2000 THEN
goto return_2000;
END IF;
IF v_mem_mb > 512000 THEN
v_mem_mb :=v_mem_mb*0.8;
END IF;
MEMORY_TARGET=round(cast(v_mem_mb * 0.12 as int),-3);
TASK_THREADS :=4;
IO_THR_GROUPS :=4;
IF v_cpus < 8 THEN
TASK_THREADS :=4;
IO_THR_GROUPS :=2;
END IF;
IF v_cpus >= 64 THEN
v_cpus := 64;
TASK_THREADS :=16;
IO_THR_GROUPS :=8;
END IF;
BUFFER := round(cast(v_mem_mb * 0.4 as int),-3);
RECYCLE :=cast(v_mem_mb * 0.04 as int);
IF v_mem_mb < 70000 THEN
with t as
(
select rownum rn from dual connect by level <= 100
) ,
t1 as
(
select * from t where rn > 1 minus
select
ta.rn * tb.rn
from
t ta,
t tb
where
ta.rn <= tb.rn
and ta.rn > 1
and tb.rn > 1
)
select top 1 rn into BUFFER_POOLS from t1 where rn > v_mem_mb/800 order by 1;
ELSE
BUFFER_POOLS := 101;
END IF;
--修改内存池
IF v_mem_mb >= 16000 THEN
IF v_mem_mb= 16000 THEN
MEMORY_POOL := 1500;
SORT_BUF_GLOBAL_SIZE := 1000;
MEMORY_N_POOLS := 3;
CACHE_POOL_SIZE := 512;
ELSE
MEMORY_POOL := 2000;
SORT_BUF_GLOBAL_SIZE := 2000;
MEMORY_N_POOLS := 11;
CACHE_POOL_SIZE := 1024;
END IF;
FAST_POOL_PAGES :=9999;
SORT_FLAG = 0;
SORT_BLK_SIZE=1;
SORT_BUF_SIZE := 10;
RLOG_POOL_SIZE := 1024;
HJ_BUF_GLOBAL_SIZE := LEAST(cast(v_mem_mb * 0.0625 as int),10000);
HAGR_BUF_GLOBAL_SIZE := LEAST(cast(v_mem_mb * 0.0625 as int),10000);
HJ_BUF_SIZE :=250;
HAGR_BUF_SIZE :=250;
IF v_mem_mb >= 64000 THEN
FAST_POOL_PAGES :=99999;
FAST_ROLL_PAGES :=9999;
BUFFER :=BUFFER-3000;
CACHE_POOL_SIZE := 2048;
RLOG_POOL_SIZE := 2048;
SORT_FLAG = 1;
SORT_BLK_SIZE=1;
SORT_BUF_SIZE=50;
SORT_BUF_GLOBAL_SIZE= cast(v_mem_mb * 0.02 as int);
HJ_BUF_GLOBAL_SIZE := cast(v_mem_mb * 0.15625 as int);
HAGR_BUF_GLOBAL_SIZE := cast(v_mem_mb * 0.04 as int);
HJ_BUF_SIZE :=512;
HAGR_BUF_SIZE :=512;
MEMORY_N_POOLS := 59;
END IF;
DICT_BUF_SIZE := 50;
HJ_BUF_GLOBAL_SIZE :=round(HJ_BUF_GLOBAL_SIZE,-3);
HAGR_BUF_GLOBAL_SIZE :=round(HAGR_BUF_GLOBAL_SIZE,-3);
SORT_BUF_GLOBAL_SIZE :=round(SORT_BUF_GLOBAL_SIZE,-3);
RECYCLE :=round(RECYCLE,-3);
ELSE
MEMORY_POOL :=GREAT(cast(v_mem_mb * 0.0625 as int),100);
MEMORY_POOL :=round(MEMORY_POOL,-2);
MEMORY_N_POOLS := 2;
CACHE_POOL_SIZE := 200;
RLOG_POOL_SIZE := 256;
SORT_BUF_SIZE := 10;
SORT_BUF_GLOBAL_SIZE := 500;
DICT_BUF_SIZE := 50;
SORT_FLAG = 0;
SORT_BLK_SIZE=1;
HJ_BUF_GLOBAL_SIZE := GREAT(cast(v_mem_mb * 0.0625 as int),500);
HAGR_BUF_GLOBAL_SIZE := GREAT(cast(v_mem_mb * 0.0625 as int),500);
HJ_BUF_SIZE := GREAT(cast(v_mem_mb * 0.00625 as int),50);
HAGR_BUF_SIZE :=GREAT(cast(v_mem_mb * 0.00625 as int),50);
END IF;
--设置根据RECYCLE情况RECYCLE_POOLS参数
with t as
(
select rownum rn from dual connect by level <= 100
) ,
t1 as
(
select * from t where rn > 1 minus
select
ta.rn * tb.rn
from
t ta,
t tb
where
ta.rn <= tb.rn
and ta.rn > 1
and tb.rn > 1
)
select top 1 rn into RECYCLE_POOLS from t1 where rn <= RECYCLE*1024/3000/(page()/1024) order by 1 desc;
tname :='BAK_DMINI_' || to_char(sysdate,'yymmdd');
execute IMMEDIATE 'select count(*) from USER_ALL_TABLES where table_name= ?' into CNT using tname;
if exists(select 1 from V$INSTANCE where MODE$ in ('NORMAL','PRIMARY')) then
IF CNT=0 THEN
execute IMMEDIATE 'CREATE TABLE BAK_DMINI_' || to_char(sysdate,'yymmdd') || ' as select *,sysdate uptime from v$dm_ini';
ELSE
execute IMMEDIATE 'INSERT INTO BAK_DMINI_' || to_char(sysdate,'yymmdd') || ' select *,sysdate uptime from v$dm_ini';
END IF;
end if;
--如果sort_mode设置为0,采用旧的排序模式
if sort_mode=0 then
SORT_FLAG = 0;
SORT_BUF_SIZE := 2;
end if;
MAX_BUFFER := BUFFER;
IF exec_mode=0 THEN
--修改cpu相关参数
SP_SET_PARA_VALUE(2,'WORKER_THREADS',v_cpus);
SP_SET_PARA_VALUE(2,'IO_THR_GROUPS',IO_THR_GROUPS);
--将此参数改为0
SP_SET_PARA_VALUE(2,'GEN_SQL_MEM_RECLAIM',0);
--修改内存池相关参数
SP_SET_PARA_VALUE(2,'MAX_OS_MEMORY', 100);
SP_SET_PARA_VALUE(2,'MEMORY_POOL', MEMORY_POOL);
SP_SET_PARA_VALUE(2,'MEMORY_N_POOLS', MEMORY_N_POOLS);
SP_SET_PARA_VALUE(2,'MEMORY_TARGET', MEMORY_TARGET);
--修改内存检测参数为1
SP_SET_PARA_VALUE(2,'MEMORY_MAGIC_CHECK', 1);
--修改缓冲区相关参数
SP_SET_PARA_VALUE(2,'BUFFER', BUFFER);
--新版本已去掉MAX_BUFFER参数,如果存在就修改
IF EXISTS (SELECT * FROM V$DM_INI WHERE PARA_NAME='MAX_BUFFER') THEN
SP_SET_PARA_VALUE(2,'MAX_BUFFER', MAX_BUFFER);
END IF;
SP_SET_PARA_VALUE(2,'BUFFER_POOLS', BUFFER_POOLS);
SP_SET_PARA_VALUE(2,'RECYCLE', RECYCLE);
SP_SET_PARA_VALUE(2,'RECYCLE_POOLS', RECYCLE_POOLS);
--修改fast_pool相关参数,如果是dsc环境,适当放小,以免影响启动速度
IF is_dsc= 1 THEN
SP_SET_PARA_VALUE(2,'FAST_POOL_PAGES', 10000);
SP_SET_PARA_VALUE(2,'FAST_ROLL_PAGES', 3000);
SP_SET_PARA_VALUE(2,'TASK_THREADS', 16);
ELSE
SP_SET_PARA_VALUE(2,'FAST_POOL_PAGES', FAST_POOL_PAGES);
SP_SET_PARA_VALUE(2,'FAST_ROLL_PAGES', FAST_ROLL_PAGES);
SP_SET_PARA_VALUE(2,'TASK_THREADS',TASK_THREADS);
--如果不是dsc环境,开启热页动态加载,关闭预读
SP_SET_PARA_VALUE(2,'ENABLE_FREQROOTS',1);
SP_SET_PARA_VALUE(2,'MULTI_PAGE_GET_NUM',1);
SP_SET_PARA_VALUE(2,'PRELOAD_SCAN_NUM',0);
SP_SET_PARA_VALUE(2,'PRELOAD_EXTENT_NUM',0);
END IF;
--修改HASH相关参数
SP_SET_PARA_VALUE(1,'HJ_BUF_GLOBAL_SIZE', HJ_BUF_GLOBAL_SIZE);
SP_SET_PARA_VALUE(1,'HJ_BUF_SIZE', HJ_BUF_SIZE );
SP_SET_PARA_VALUE(1,'HAGR_BUF_GLOBAL_SIZE',HAGR_BUF_GLOBAL_SIZE);
SP_SET_PARA_VALUE(1,'HAGR_BUF_SIZE', HAGR_BUF_SIZE );
--修改排序相关参数
SP_SET_PARA_VALUE(2,'SORT_FLAG',SORT_FLAG);
SP_SET_PARA_VALUE(2,'SORT_BLK_SIZE',SORT_BLK_SIZE);
SP_SET_PARA_VALUE(2,'SORT_BUF_SIZE', SORT_BUF_SIZE);
SP_SET_PARA_VALUE(2,'SORT_BUF_GLOBAL_SIZE', SORT_BUF_GLOBAL_SIZE);
--修改其他内存参数
SP_SET_PARA_VALUE(2,'RLOG_POOL_SIZE', RLOG_POOL_SIZE);
SP_SET_PARA_VALUE(2,'CACHE_POOL_SIZE', CACHE_POOL_SIZE);
SP_SET_PARA_VALUE(2,'DICT_BUF_SIZE', DICT_BUF_SIZE);
SP_SET_PARA_VALUE(2,'VM_POOL_TARGET', 16384);
SP_SET_PARA_VALUE(2,'SESS_POOL_TARGET', 16384);
--修改实例相关参数
SP_SET_PARA_VALUE(2,'USE_PLN_POOL', 1);
SP_SET_PARA_VALUE(2,'ENABLE_MONITOR', 1);
SP_SET_PARA_VALUE(2,'SVR_LOG', 0);
SP_SET_PARA_VALUE(2,'TEMP_SIZE', 1024);
SP_SET_PARA_VALUE(2,'TEMP_SPACE_LIMIT', 102400);
SP_SET_PARA_VALUE(2,'MAX_SESSIONS', 1500);
SP_SET_PARA_VALUE(2,'MAX_SESSION_STATEMENT', 20000);
--性能要求高且大字段较少的业务场景建议设置为1,大字段多的场景设置为0
if pk_cluster_mode = 1 then
SP_SET_PARA_VALUE(2,'PK_WITH_CLUSTER',1);
else
SP_SET_PARA_VALUE(2,'PK_WITH_CLUSTER',0);
end if;
SP_SET_PARA_VALUE(2,'ENABLE_ENCRYPT',0);
--修改优化器相关参数
SP_SET_PARA_VALUE(2,'OLAP_FLAG',2);
SP_SET_PARA_VALUE(2,'VIEW_PULLUP_FLAG',1);
SP_SET_PARA_VALUE(2,'OPTIMIZER_MODE',1);
SP_SET_PARA_VALUE(2,'ADAPTIVE_NPLN_FLAG',0);
--开启并行PURGE
SP_SET_PARA_VALUE(2,'PARALLEL_PURGE_FLAG',1);
--开启手动并行
SP_SET_PARA_VALUE(2,'PARALLEL_POLICY',2);
--UNDO_RETENTION如果放大,可以适当调大UNDO_EXTENT_NUM。负载高的时候,减少文件系统的申请/释放操作。
SP_SET_PARA_VALUE(2,'UNDO_EXTENT_NUM',16);
--开启SQL 注入HINT功能
SP_SET_PARA_VALUE(2,'ENABLE_INJECT_HINT',1);
SP_SET_PARA_VALUE(2,'FAST_LOGIN',1);
SP_SET_PARA_VALUE(2,'BTR_SPLIT_MODE',1);
--关闭参数监控
SP_SET_PARA_VALUE(2,'ENABLE_MONITOR_BP',0);
IF is_dsc= 1 THEN
SP_SET_PARA_VALUE(2,'ENABLE_FREQROOTS',0);
--DSC关闭数据页预加载参数
SP_SET_PARA_VALUE(2,'MULTI_PAGE_GET_NUM',1);
SP_SET_PARA_VALUE(2,'PRELOAD_SCAN_NUM',0);
SP_SET_PARA_VALUE(2,'PRELOAD_EXTENT_NUM',0);
SP_SET_PARA_VALUE(2,'DSC_N_POOLS',MEMORY_N_POOLS);
IF EXISTS (SELECT * FROM V$DM_INI WHERE PARA_NAME='DSC_GBS_REVOKE_OPT') THEN
SP_SET_PARA_VALUE(2,'DSC_GBS_REVOKE_OPT',0);
END IF;
SP_SET_PARA_VALUE(2,'DSC_HALT_SYNC',0);
SP_SET_PARA_VALUE(2,'DSC_N_CTLS',50000);
SP_SET_PARA_VALUE(2,'DSC_ENABLE_MONITOR',0);
SP_SET_PARA_VALUE(2,'TRX_DICT_LOCK_NUM',5);
SP_SET_PARA_VALUE(2,'DIRECT_IO',1);
END IF;
ELSE
--修改cpu相关参数
PRINT 'SP_SET_PARA_VALUE(2,''WORKER_THREADS'','||v_cpus||');';
PRINT 'SP_SET_PARA_VALUE(2,''IO_THR_GROUPS'','||IO_THR_GROUPS||');';
PRINT 'SP_SET_PARA_VALUE(2,''GEN_SQL_MEM_RECLAIM'',0);';
--修改内存池相关参数
PRINT 'SP_SET_PARA_VALUE(2,''MAX_OS_MEMORY'', '||100||');';
PRINT 'SP_SET_PARA_VALUE(2,''MEMORY_POOL'', '||MEMORY_POOL||');';
PRINT 'SP_SET_PARA_VALUE(2,''MEMORY_N_POOLS'', '||MEMORY_N_POOLS||');';
PRINT 'SP_SET_PARA_VALUE(2,''MEMORY_TARGET'', '||MEMORY_TARGET||');';
--修改缓冲区相关参数
PRINT 'SP_SET_PARA_VALUE(2,''BUFFER'', '||BUFFER||');';
--新版本已去掉MAX_BUFFER参数,如果存在就修改
IF EXISTS (SELECT * FROM V$DM_INI WHERE PARA_NAME='MAX_BUFFER') THEN
PRINT 'SP_SET_PARA_VALUE(2,''MAX_BUFFER'', '||MAX_BUFFER||');';
END IF;
PRINT 'SP_SET_PARA_VALUE(2,''BUFFER_POOLS'', '||BUFFER_POOLS||');';
PRINT 'SP_SET_PARA_VALUE(2,''RECYCLE'', '||RECYCLE||');';
PRINT 'SP_SET_PARA_VALUE(2,''RECYCLE_POOLS'', '||RECYCLE_POOLS||');';
--修改fast_pool相关参数,如果是dsc环境,适当放小,以免影响启动速度
IF is_dsc= 1 THEN
PRINT 'SP_SET_PARA_VALUE(2,''FAST_POOL_PAGES'', 10000);';
PRINT 'SP_SET_PARA_VALUE(2,''FAST_ROLL_PAGES'', 3000);';
PRINT 'SP_SET_PARA_VALUE(2,''TASK_THREADS'', 16);';
ELSE
PRINT 'SP_SET_PARA_VALUE(2,''FAST_POOL_PAGES'', '||FAST_POOL_PAGES||');';
PRINT 'SP_SET_PARA_VALUE(2,''FAST_ROLL_PAGES'', '||FAST_ROLL_PAGES||');';
--如果不是dsc环境,开启热页动态加载,关闭预读
PRINT 'SP_SET_PARA_VALUE(2,''ENABLE_FREQROOTS'',1);';
PRINT 'SP_SET_PARA_VALUE(2,''MULTI_PAGE_GET_NUM'',1);';
PRINT 'SP_SET_PARA_VALUE(2,''PRELOAD_SCAN_NUM'',0);';
PRINT 'SP_SET_PARA_VALUE(2,''PRELOAD_EXTENT_NUM'',0);';
PRINT 'SP_SET_PARA_VALUE(2,''TASK_THREADS'','||TASK_THREADS||');';
END IF;
--修改内存检测参数为1
PRINT 'SP_SET_PARA_VALUE(2,''MEMORY_MAGIC_CHECK'', 1);';
--修改HASH相关参数
PRINT 'SP_SET_PARA_VALUE(1,''HJ_BUF_GLOBAL_SIZE'', '||HJ_BUF_GLOBAL_SIZE||');';
PRINT 'SP_SET_PARA_VALUE(1,''HJ_BUF_SIZE'', '||HJ_BUF_SIZE||');';
PRINT 'SP_SET_PARA_VALUE(1,''HAGR_BUF_GLOBAL_SIZE'','||HAGR_BUF_GLOBAL_SIZE||');';
PRINT 'SP_SET_PARA_VALUE(1,''HAGR_BUF_SIZE'', '||HAGR_BUF_SIZE||');';
--修改排序相关参数
PRINT 'SP_SET_PARA_VALUE(2,''SORT_FLAG'','||SORT_FLAG||');';
PRINT 'SP_SET_PARA_VALUE(2,''SORT_BLK_SIZE'','||SORT_BLK_SIZE||');';
PRINT 'SP_SET_PARA_VALUE(2,''SORT_BUF_SIZE'', '||SORT_BUF_SIZE||');';
PRINT 'SP_SET_PARA_VALUE(2,''SORT_BUF_GLOBAL_SIZE'', '||SORT_BUF_GLOBAL_SIZE||');';
--修改其他内存参数
PRINT 'SP_SET_PARA_VALUE(2,''RLOG_POOL_SIZE'', '||RLOG_POOL_SIZE||');';
PRINT 'SP_SET_PARA_VALUE(2,''CACHE_POOL_SIZE'', '||CACHE_POOL_SIZE||');';
PRINT 'SP_SET_PARA_VALUE(2,''DICT_BUF_SIZE'', '||DICT_BUF_SIZE||');';
PRINT 'SP_SET_PARA_VALUE(2,''VM_POOL_TARGET'', 16384);';
PRINT 'SP_SET_PARA_VALUE(2,''SESS_POOL_TARGET'', 16384);';
--修改实例相关参数
PRINT 'SP_SET_PARA_VALUE(2,''USE_PLN_POOL'', 1);';
PRINT 'SP_SET_PARA_VALUE(2,''ENABLE_MONITOR'', 1);';
PRINT 'SP_SET_PARA_VALUE(2,''SVR_LOG'', 0);';
PRINT 'SP_SET_PARA_VALUE(2,''TEMP_SIZE'', 1024);';
PRINT 'SP_SET_PARA_VALUE(2,''TEMP_SPACE_LIMIT'', 102400);';
PRINT 'SP_SET_PARA_VALUE(2,''MAX_SESSIONS'', 1500);';
PRINT 'SP_SET_PARA_VALUE(2,''MAX_SESSION_STATEMENT'', 20000);';
--性能要求高且大字段较少的业务场景建议设置为1,大字段多的场景设置为0
if pk_cluster_mode = 1 then
PRINT 'SP_SET_PARA_VALUE(2,''PK_WITH_CLUSTER'', 1);';
else
PRINT 'SP_SET_PARA_VALUE(2,''PK_WITH_CLUSTER'', 0);';
end if;
PRINT 'SP_SET_PARA_VALUE(2,''ENABLE_ENCRYPT'',0);';
--修改优化器相关参数
PRINT 'SP_SET_PARA_VALUE(2,''OLAP_FLAG'',2);';
PRINT 'SP_SET_PARA_VALUE(2,''VIEW_PULLUP_FLAG'',1);';
PRINT 'SP_SET_PARA_VALUE(2,''OPTIMIZER_MODE'',1);';
PRINT 'SP_SET_PARA_VALUE(2,''ADAPTIVE_NPLN_FLAG'',0);';
--开启并行PURGE
PRINT 'SP_SET_PARA_VALUE(2,''PARALLEL_PURGE_FLAG'',1);';
--开启手动并行
PRINT 'SP_SET_PARA_VALUE(2,''PARALLEL_POLICY'',2);';
--UNDO_RETENTION如果放大,可以适当调大UNDO_EXTENT_NUM。负载高的时候,减少文件系统的申请/释放操作。
PRINT 'SP_SET_PARA_VALUE(2,''UNDO_EXTENT_NUM'',16);';
--开启INJECT HINT功能
PRINT 'SP_SET_PARA_VALUE(2,''ENABLE_INJECT_HINT'',1);';
PRINT 'SP_SET_PARA_VALUE(2,''BTR_SPLIT_MODE'',1);';
PRINT 'SP_SET_PARA_VALUE(2,''FAST_LOGIN'',1);';
--关闭参数监控
PRINT 'SP_SET_PARA_VALUE(2,''ENABLE_MONITOR_BP'',0);';
IF is_dsc= 1 THEN
PRINT 'SP_SET_PARA_VALUE(2,''ENABLE_FREQROOTS'',0);';
--DSC关闭数据页预加载参数
PRINT 'SP_SET_PARA_VALUE(2,''MULTI_PAGE_GET_NUM'',1);';
PRINT 'SP_SET_PARA_VALUE(2,''PRELOAD_SCAN_NUM'',0);';
PRINT 'SP_SET_PARA_VALUE(2,''PRELOAD_EXTENT_NUM'',0);';
PRINT 'SP_SET_PARA_VALUE(2,''DSC_N_POOLS'',' ||MEMORY_N_POOLS ||');';
IF EXISTS (SELECT * FROM V$DM_INI WHERE PARA_NAME='DSC_GBS_REVOKE_OPT') THEN
PRINT 'SP_SET_PARA_VALUE(2,''DSC_GBS_REVOKE_OPT'',0);';
END IF;
PRINT 'SP_SET_PARA_VALUE(2,''DSC_HALT_SYNC'',0);';
PRINT 'SP_SET_PARA_VALUE(2,''DSC_N_CTLS'',50000);';
PRINT 'SP_SET_PARA_VALUE(2,''DSC_ENABLE_MONITOR'',0);';
PRINT 'SP_SET_PARA_VALUE(2,''TRX_DICT_LOCK_NUM'',5);';
PRINT 'SP_SET_PARA_VALUE(2,''DIRECT_IO'',1);';
END IF;
END IF;
select MEMORY_TARGET+BUFFER+RECYCLE+HJ_BUF_GLOBAL_SIZE+HAGR_BUF_GLOBAL_SIZE+CACHE_POOL_SIZE
+DICT_BUF_SIZE+SORT_BUF_GLOBAL_SIZE+RLOG_POOL_SIZE;
exception
when others then
raise_application_error (-20001,substr( ' 执行失败, '||SQLCODE||' '||SQLERRM||' '||dbms_utility.format_error_backtrace , 1, 400));
<<return_2000>> null;
end;
/
1.2.14 启动sysdba本地认证登录
考虑到sysdba密码忘记无法登录,官网建议重装。更改本地验证参数ENABLE_LOCAL_OSAUTH=1,该参数不在dm.ini中,默认为0不允许 只有具有DBA角色的用户才有权限更改。建议首次安装后进行更改参数,解决后期忘记sysdba密码,无法初始化sysdba密码导致无法登录数据库。
共享集群DSC环境下SYSDBA密码为dminit.ini配置文件中SYSDBA_PWD参数值。1个节点更改即可
--登录数据库
[dmdba@localhost ~]$ /dmdb8/dmdbms/bin/disql SYSDBA/SYSDBA:5236
SQL> select para_name,para_type,para_value from v$dm_ini where para_name like 'ENABLE_LOCAL_OSAUTH';
LINEID PARA_NAME PARA_TYPE PARA_VALUE
---------- ------------------- --------- ----------
1 ENABLE_LOCAL_OSAUTH READ ONLY 0
--更改为本地认证
SP_SET_PARA_VALUE(2,'ENABLE_LOCAL_OSAUTH',1);
--重启数据库
[dmdba@localhost ~]$ /dmdb8/dmdbms/bin/DmServiceDSC stop
[dmdba@localhost ~]$ /dmdb8/dmdbms/bin/DmServiceDSC start
--查看参数
[dmdba@localhost ~]$ /dmdb8/dmdbms/bin/disql SYSDBA:SYSDBA:5236
SQL> select para_name,para_type,para_value from v$dm_ini where para_name like 'ENABLE_LOCAL_OSAUTH';
LINEID PARA_NAME PARA_TYPE PARA_VALUE
---------- ------------------- --------- ----------
1 ENABLE_LOCAL_OSAUTH READ ONLY 1
--更改sysdba密码(可选)
alter user sysdba identified by "SYSDBA";
二、配置应用连接
Linux 环境:dm_svc.conf 放在应用服务器 /etc 目录下。
Windows32 环境:dm_svc.conf 放在应用服务器 System32 目录下。
Windows64 环境:dm_svc.conf 放在应用服务器 System32 和 SysWOW64 目录下。
2.1 创建 dm_svc.conf
以 2 节点 DSC 集群为例,配置 dm_svc.conf 文件如下:
[root@~]# vi /etc/dm_svc.conf
TIME_ZONE=(+8:00)
LANGUAGE=(en)
DSC=(192.168.40.180:5236,192.168.40.200:5236)
[DSC]
LOGIN_ENCRYPT=(0)
SWITCH_TIME=(20) #以服务名连接数据库时,若未找到符合条件的库成功建立连接,将尝试遍历服务名中库列表的次数。
SWITCH_INTERVAL=(2000) #在服务器之间切换的时间间隔,单位为毫秒
2.2 应用连接
<DRIVER>dm.jdbc.driver.DmDriver</DRIVER>
<URL>jdbc:dm://DSC1:?compatibleMode=oracle</URL>
三、数据库参数优化调整
共享集群完成安装部署后,一般需要进行参数优化,以便数据库集群能发挥最佳性能。本节列举了主要需要优化的参数,其他参数内容请参考数据库安装目录 doc 路径下《共享存储集群》使用手册。
3.1 dmdcr_cfg.ini
| 参数推荐配置 | 配置说明 |
|---|---|
| DCR_EP_SHM_SIZE=1024 | 每个簇描述项大概占用 64byte 内存空间,每个簇描述项对应 4M 磁盘空间,通过计算 10M /64 * 4M = 655G;655G 左右的磁盘,使用 10M 大小的共享内存能保证使用过程中簇描述项不被淘汰。现场需要根据当前业务规模和后期数据增量来规划共享内存的大小。注:若是调整了该参数需要检查共享内存配置 (ipcs) 并需要清除原有的共享内存 (ipcrm)。 |
| DCR_EP_ASM_LOAD_PATH=/dev/环境实际路径 | ASM 磁盘扫描路径,Linux 下一般为 /dev/raw 或 /dev,文件模拟情况,必须是全路径,不能是相对路径。建议使用单独的 asm 磁盘路径,避免 dmasmtool 在执行某些命令时会报错 xxx 不是共享存储,引起误判 |
| DCR_OGUID | 消息标识,一个组里面只有一个。dmdcr_cfg.ini 中的 DCR_OGUID 应与 dmcssm.ini 中的 CSSM_OGUID 保持一致 |
3.2 dmdcr.ini
| 参数推荐配置 | 配置说明 |
|---|---|
| DMDCR_ASM_TRACE_LEVEL=2 | 指定日志级别。1:TRACE 级别;2:WARN 级别;3:ERROR 级别;4:FATAL 级别。默认为 1。日志级别越低(参数值越小),输出的日志越详细。当设置日志级别为较低级别时,兼容输出级别大的日志,如 WARN 级别也可输出 ERROR 级别的日志建议配置为 2,默认的 trace 级别会导致 asm 的日志一天就写满几十 GB,可能将磁盘撑满,影响数据库服务运行。 |
| DMDCR_AUTO_OPEN_CHECK | 当 DSC 集群异常,需要单节点启动时使用,集群正常状态不配置该参数。指定时间内如果节点实例未启动,DMCSS 会自动将节点踢出集群环境,单位为秒,取值范围应大于等于 30s。不配置此参数时表示不启用此功能当系统遇到某些故障不得不单节点提供服务时,使用次参数将该节点拉起 |
| DMDCR_ASM_RESTART_INTERVAL=0 | DMCSS 认定 DMASM 节点故障重启的时间间隔(取值 0~ 86400s),DMCSS 只负责和 DMDCR_SEQNO 节点号相等的 DMASM 节点的故障重启,超过设置的时间后,如果 DMASM 节点的 active 标记仍然为 FALSE,则 DMCSS 会执行自动拉起。如果配置为 0,则不会执行自动拉起操作,默认为 60s |
| DMDCR_DB_RESTART_INTERVAL=0 | DMCSS 认定 DMDSC 节点故障重启的时间间隔(取值 0~ 86400s),DMCSS 只负责和 DMDCR_SEQNO 节点号相等的 DMDSC 节点的故障重启,超过设置的时间后,如果 DMDSC 节点的 active 标记仍然为 FALSE,则 DMCSS 会执行自动拉起。如果配置为 0,则不会执行自动拉起操作,默认为 60s |
3.3 dm.ini
| 参数推荐配置 | 配置说明 |
|---|---|
| DSC_N_POOLS 依据服务器资源配置进行调整,一般取质数 | LBS/GBS 池数目。有效值范围(2~1024),默认值 2。与 BUFFER_POOLS 类似,DSC_N_POOLS 将系统中的 LBS/GBS 根据页号进行分组,以降低 LBS/GBS 处理的并发冲突 |
| MEMORY_N_POOLS 依据服务器资源配置进行调整,一般取质数 | 共享内存池个数,有效值范围(0~2048),0 与 1 等价,即共享池不分片。分片时,每池的初始容量为 MEMORY_POOL / MEMORY_N_POOLS,但受最小初始容量为 30M 限制,因此实际分片数可能会小于 MEMORY_N_POOLS。对共享内存进行分片可以降低高并发情况下访问 mem pool 的冲突 |
| BUFFER_POOLS 依据服务器资源配置进行调整,一般取质数 | BUFFER 系统分区数,每个 BUFFER 分区的大小为 BUFFER/BUFFER_POOLS。对 BUFFER 进行分片可以降低高并发情况下访问数据页的冲突 |
| MEMORY_EXTENT_SIZE=32 | 共享内存池每次扩充的大小,22 年的新版本中增加了共享池快速回收处理机制,需要将该参数设置为 2 的次幂,建议值 16、32 |
| FAST_POOL_PAGES=30000 | 快速缓冲区页数,在 DSC 架构中,由于不支持热页动态填充,所以该参数不能设置的太大,防止启动时耗时较长 |
| ENABLE_FREQROOTS=0 | DSC 架构下必须配置为 0,经典模式,系统启动时装入常用的描述页、索引的根、索引的控制页、指定常驻内存的表以及索引第二层的节点,之后不再变化 |
| BUFFER_MODE=1 | 热页和动态填充能有效的解决单机的回表性能问题,dsc 架构下都不支持使用,所以为了解决回表问题需要调整此参数。BUFFER 淘汰机制,默认为 0,采用 LRU 算法进行淘汰,取值 1 时采用时钟算法进行淘汰当 buffer_mode = 0 时,每个读页请求对 buffer 分片都是使用的 X 锁,在高并发访问时存在非常明显的热点冲突当 buffer_mode = 1 时,读页请求可以并发的访问 buffer 分片中的数据页,仅在出现缺页的场景时才会对 buffer 分片上 X 锁 |
| FAST_RW_LOCK=2 | 快速读写锁标记,0 不启用;1(默认值) 表示只有 FAST POOL 启用,2 表示所有 POOL 都启用。在 dsc 架构下设置为 2,传统的读写锁对于读是 S 锁,写是 X 锁,而快速读写锁是我们自己实现的一种用于数据页的封锁机制,同样属于轻量级内存闩锁,但采用乐观封锁机制,即直接申请 S 锁。在单机情况下放大 fast pool 并将数据页表放入 fast pool 可以有效提升性能的原因也是在于 fast pool 在这个参数的默认值情况下启用了快速读写锁,但是由于 dsc 不支持动态填充,我们需要将普通的 buffer 也启用这种机制,在高并发读的场景,所有数据页都采用 os_inter_lock 原子操作方式实现增加/减少操作更高效。当数据页上有写请求的时候,fast_rw_x_lock 会在底层实际调用传统的 rw_x_lock,相比直接采用 rw_x_lock,会多一些额外的处理步骤 |
| FAST_LOGIN=1 | 是否在登录时记录登录失败历史信息。0 是,同步记录;1 否,不记录;2 是,异步记录 DSC 架构下设置为 1,避免在故障恢复、系统启动时出现登录失败引发双写性能问题导致整个集群性能下降 |
3.4 dmarch.ini
| 参数推荐配置 | 配置说明 |
|---|---|
| ARCH_LOCAL_SHARE=1 | 当需要将归档放置在 ASM 中时,将此参数设置为 1,使用对端的本地归档作为远程归档,就不需要再配置多生成一份 remote 归档了 |
| ARCH_LOCAL_SHARE_CHECK=0 | 当需要将归档放在 ASM 中且需要生成多份 local 归档时,需要将该参数设置为 0,否则启动时会校验归档路径不在 asm 中会导致对端节点无法访问到 remote 归档而启动失败 |
3.5 dm_svc.conf
| 参数推荐配置 | 配置说明 |
|---|---|
| 常规配置: |
DMDB=(IP1:端口,IP2:端口)
必要时非常规配置:
DMDB=(IP1:端口,IP2:端口)
[DMDB]
LOGIN_DSC_CTRL=(1) | LOGIN_DSC_CTRL=(1) 指定应用只连接控制节点,通常应
用无需配置此参数,在某些有大量读写的应用中建议配置,
规避 DSC 集群双节点写入性能 |
四、安装数据库软件预安装脚本
#!/bin/bash
#将安装介质上传到当前目录下
file=dm8_20230418_x86_rh6_64.iso
dir=$(pwd)
port=5236
basedir=/dmdb8
#1.系统参数调整
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#firewall-cmd --zone=public --add-port=5236/tcp --permanent
#firewall-cmd --zone=public --add-port=22/tcp --permanent
#systemctl restart firewalld
#禁用selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
setenforce 0
#永久关闭swap
sed -ri 's/.*swap.*/#&/' /etc/fstab
#修改磁盘调度算法
##SSD 固态硬盘:NOOP 调度
##SAS 机械盘:DEADLINE 调度
##查看调度:cat /sys/block/sda/queue/scheduler
##临时修改:echo "deadline" > /sys/block/sda/queue/scheduler
##永久修改: grubby --update-kernel=ALL --args="elevator=deadline"
grubby --update-kernel=ALL --args="elevator=deadline"
#关闭 numa和禁用透明大页
sed -i "s/quiet/quiet numa=off transparent_hugepage=never/g" /etc/default/grub
grub2-mkconfig -o /etc/grub2.cfg
#调整 sysctl.conf 参数
cat >> /etc/security/limits.conf << "EOF"
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba hard data unlimited
dmdba soft data unlimited
dmdba hard fsize unlimited
dmdba soft fsize unlimited
dmdba soft core unlimited
dmdba hard core unlimited
EOF
cat >> /etc/systemd/system.conf << "EOF"
DefaultLimitNOFILE=65536
DefaultLimitNPROC=65536
EOF
cat >> /etc/security/limits.d/nproc.conf << "EOF"
##添加配置:
dmdba soft nproc 65536
dmdba hard nproc 65536
EOF
#调整 login
cat >> /etc/pam.d/login << "EOF"
session required /lib64/security/pam_limits.so
session required pam_limits.so
EOF
#2.创建数据库用户
groupadd -g 12349 dinstall
useradd -u 12349 -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
echo "top@123"|passwd --stdin dmdba
#3.创建目录
mkdir -p $basedir/{dmdbms,dmarch,dmbak,dmdata,dmtmp}
mkdir -p $basedir/dmbak/{all,add}
chown dmdba:dinstall -R $basedir/
chmod -R 755 $basedir
#4.数据库软件安装
mount $dir/$file /mnt
cp /mnt/DMInstall.bin /home/dmdba
chown -R dmdba:dinstall /home/dmdba
su - dmdba -c '/home/dmdba/DMInstall.bin -i'
#5.初始化数据库实例
#su - dmdba -c '$basedir/dmdbms/bin/dminit PATH=$basedir/dmdata PAGE_SIZE=32 LOG_SIZE=2048 CASE_SENSITIVE=0 CHARSET=1 LENGTH_IN_CHAR=0 DB_NAME=fuwa INSTANCE_NAME=fuwa PORT_NUM=5236'
#创建数据库实例服务
#$basedir/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini $basedir/dmdata/fuwa/dm.ini -p fuwa
#启停数据库
#systemctl start DmServicefuwa
#systemctl status DmServicefuwa
#systemctl enable DmServicefuwa
#LOG_SIZE:日志文件大小
#CASE_SENSITIVE:建议从 MYSQL 和 SQLSERVER 迁移过来的系统,使用大小写不敏感,ORACLE 迁移过来的系统,使用大小写敏感,默认为区分。取值:Y、y、1 表示敏感;N、n、0 表示不敏感。默认值为 Y 。
#CHARSET/UNICODE_FLAG:0 代表 GB18030,1 代表 UTF-8,2 代表韩文字符集 EUC-KR。默认为 0
#DB_NAME:初始化数据库名称,默认为 DAMENG
#INSTANCE_NAME:初始化数据库实例名称,默认为 DMSERVER
#PORT_NUM:数据库端口号,默认5236
#LENGTH_IN_CHAR:VARCHAR 类型对象的长度是否以字符为单位。取值为 1 或者 Y 表示是,取值为 0 或 N 表示否。默认值为 0
#六.数据库实例配置
#6.1.实例参数优化调整
#6.2.开启本地归档
#ALTER DATABASE MOUNT;
#ALTER DATABASE ARCHIVELOG;
#ALTER DATABASE ADD ARCHIVELOG 'DEST=/dmarch, TYPE=LOCAL, FILE_SIZE=2048, SPACE_LIMIT=102400';
#ALTER DATABASE OPEN;




