暂无图片
暂无图片
4
暂无图片
暂无图片
暂无图片

达梦数据库快速上手指南

原创 孙莹 2025-04-10
944

达梦数据库快速上手指南

前言

虽然网上已经有很多文章写关于达梦安装部署和管理,本人还是整理一份快速查阅手册,便于自己手上信创工作的效率。最佳实践本人还是推荐参考官方文档

数据库规范部署

环境信息

主机名 IP地址 操作系统版本 达梦版本 磁盘空间 内存
cms-dmdb-2025temp 10.37.255.101 CentOS7.9 dm8_20250122 500G 32G

安装包下载

可以直接到达梦官网下载最新开发版本

微信截图_20250410102733.jpg

上传到服务器的/soft目录下

关闭防火墙

systemctl stop firewalld.service systemctl disable firewalld.service [root@cms-dmdb-2025temp ~]# systemctl stop firewalld.service [root@cms-dmdb-2025temp ~]# systemctl disable firewalld.service

关闭 SELINUX

setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config [root@cms-dmdb-2025temp ~]# setenforce 0 setenforce: SELinux is disabled [root@cms-dmdb-2025temp ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

关闭透明大页和numa

sed -i 's/quiet/quiet transparent_hugepage=never numa=off/' /etc/default/grub grub2-mkconfig -o /boot/grub2/grub.cfg [root@cms-dmdb-2025temp ~]# sed -i 's/quiet/quiet transparent_hugepage=never numa=off/' /etc/default/grub [root@cms-dmdb-2025temp ~]# grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-3.10.0-1160.119.1.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-1160.119.1.el7.x86_64.img Found linux image: /boot/vmlinuz-3.10.0-1160.71.1.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-1160.71.1.el7.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-84de6cb3f8f8413599c46831bde4ded4 Found initrd image: /boot/initramfs-0-rescue-84de6cb3f8f8413599c46831bde4ded4.img done [root@cms-dmdb-2025temp ~]#

关闭swap

关闭的意义
在 Linux 下,SWAP 的作用类似 Windows 系统下的“虚拟内存”。当物理内存不足时,拿出部分硬盘空间当 SWAP 分区(虚拟成内存)使用,从而解决内存容量不足的情况。

数据库系统一般都对响应延迟比较敏感,如果使用 swap 代替内存,数据库服务性能必然不可接受。对于响应延迟极其敏感的系统来讲,延迟太大和服务不可用没有任何区别,比服务不可用更严重的是,swap 场景下进程一直处于活动状态,这就意味着系统一直不可用。

swapoff -a sed -ri 's/.*swap.*/#&/' /etc/fstab reboot free -m [root@cms-dmdb-2025temp ~]# swapoff -a [root@cms-dmdb-2025temp ~]# sed -ri 's/.*swap.*/#&/' /etc/fstab [root@cms-dmdb-2025temp ~]#

调整system.conf参数

system.conf 为系统和服务管理的配置文件,当运行系统实例时,systemd 将读取这个配置文件 system.conf,相反读取 user.conf。

达梦数据库服务注册为系统服务的进程,如通过 systemctl 或者 service 方式设定随机自启动的数据库服务,其能打开的最大文件描述符、proc 数量等不受 limits.conf 控制,需要修改 /etc/systemd/system.conf 文件。

vim /etc/systemd/system.conf ##添加配置: DefaultLimitNOFILE=65536 DefaultLimitNPROC=10240 cat >> /etc/systemd/system.conf <<EOF DefaultLimitNOFILE=65536 DefaultLimitNPROC=10240 EOF [root@cms-dmdb-2025temp ~]# cat >> /etc/systemd/system.conf <<EOF > > DefaultLimitNOFILE=65536 > DefaultLimitNPROC=10240 > > EOF [root@cms-dmdb-2025temp ~]#

创建安装用户

groupadd -g 12349 dinstall useradd -u 12345 -g dinstall -m -d /home/dmdba -s /bin/bash dmdba echo sinopharm | passwd --stdin dmdba id dmdba [root@cms-dmdb-2025temp ~]# groupadd -g 12349 dinstall [root@cms-dmdb-2025temp ~]# useradd -u 12345 -g dinstall -m -d /home/dmdba -s /bin/bash dmdba [root@cms-dmdb-2025temp ~]# echo sinopharm | passwd --stdin dmdba Changing password for user dmdba. passwd: all authentication tokens updated successfully. [root@cms-dmdb-2025temp ~]# id dmdba uid=12345(dmdba) gid=12349(dinstall) groups=12349(dinstall) [root@cms-dmdb-2025temp ~]#

创建安装目录及授权

#实例保存目录 mkdir -p /dmdata/data #归档保存目录 mkdir -p /dmdata/arch #备份保存目录 mkdir -p /dmdata/dmbak #修改目录权限 chown -R dmdba:dinstall /dmdata chmod -R 755 /dmdata [root@cms-dmdb-2025temp ~]# mkdir -p /dmdata/data [root@cms-dmdb-2025temp ~]# mkdir -p /dmdata/arch [root@cms-dmdb-2025temp ~]# mkdir -p /dmdata/dmbak [root@cms-dmdb-2025temp ~]# chown -R dmdba:dinstall /dmdata [root@cms-dmdb-2025temp ~]# chmod -R 755 /dmdata

调整sysctl.conf参数

cat >> /etc/sysctl.conf <<EOF fs.file-max = 6815744 fs.aio-max-nr = 1048576 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 4194304 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 vm.dirty_ratio = 80 vm.dirty_expire_centisecs = 500 vm.dirty_writeback_centisecs = 100 kernel.core_pattern = /dmdata/core.%e_%p_%t vm.swappiness=10 vm.dirty_background_ratio = 0 vm.min_free_kbytes = 512000 EOF sysctl -p [root@cms-dmdb-2025temp ~]# cat >> /etc/sysctl.conf <<EOF > > fs.file-max = 6815744 > fs.aio-max-nr = 1048576 > kernel.shmmni = 4096 > kernel.sem = 250 32000 100 128 > net.ipv4.ip_local_port_range = 9000 65500 > net.core.rmem_default = 4194304 > net.core.rmem_max = 4194304 > net.core.wmem_default = 262144 > net.core.wmem_max = 1048576 > vm.dirty_ratio = 80 > vm.dirty_expire_centisecs = 500 > vm.dirty_writeback_centisecs = 100 > kernel.core_pattern = /dmdata/core.%e_%p_%t > vm.swappiness=10 > vm.dirty_background_ratio = 0 > vm.min_free_kbytes = 512000 > > EOF [root@cms-dmdb-2025temp ~]# sysctl -p fs.file-max = 6815744 fs.aio-max-nr = 1048576 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 4194304 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 vm.dirty_ratio = 80 vm.dirty_expire_centisecs = 500 vm.dirty_writeback_centisecs = 100 kernel.core_pattern = /dmdata/core.%e_%p_%t vm.swappiness = 10 vm.dirty_background_ratio = 0 vm.min_free_kbytes = 512000 [root@cms-dmdb-2025temp ~]#

调整limits.conf参数

cat >> /etc/security/limits.conf <<EOF dmdba soft nice 0 dmdba hard nice 0 dmdba soft as unlimited dmdba hard as unlimited dmdba soft fsize unlimited dmdba hard fsize unlimited dmdba soft nproc 65536 dmdba hard nproc 65536 dmdba soft nofile 65536 dmdba hard nofile 65536 dmdba soft core unlimited dmdba hard core unlimited dmdba soft data unlimited dmdba hard data unlimited EOF tail -18 /etc/security/limits.conf [root@cms-dmdb-2025temp ~]# cat >> /etc/security/limits.conf <<EOF > > dmdba soft nice 0 > dmdba hard nice 0 > dmdba soft as unlimited > dmdba hard as unlimited > dmdba soft fsize unlimited > dmdba hard fsize unlimited > dmdba soft nproc 65536 > dmdba hard nproc 65536 > dmdba soft nofile 65536 > dmdba hard nofile 65536 > dmdba soft core unlimited > dmdba hard core unlimited > dmdba soft data unlimited > dmdba hard data unlimited > > EOF [root@cms-dmdb-2025temp ~]# tail -18 /etc/security/limits.conf # End of file dmdba soft nice 0 dmdba hard nice 0 dmdba soft as unlimited dmdba hard as unlimited dmdba soft fsize unlimited dmdba hard fsize unlimited dmdba soft nproc 65536 dmdba hard nproc 65536 dmdba soft nofile 65536 dmdba hard nofile 65536 dmdba soft core unlimited dmdba hard core unlimited dmdba soft data unlimited dmdba hard data unlimited [root@cms-dmdb-2025temp ~]#

调整login参数

cat >> /etc/pam.d/login <<EOF session required /lib/security/pam_limits.so session required pam_limits.so EOF [root@cms-dmdb-2025temp ~]# cat >> /etc/pam.d/login <<EOF > session required /lib/security/pam_limits.so > session required pam_limits.so > EOF [root@cms-dmdb-2025temp ~]#

调整RemoveIPC参数

cat >> /etc/systemd/logind.conf <<EOF RemoveIPC=no EOF [root@cms-dmdb-2025temp ~]# cat >> /etc/systemd/logind.conf <<EOF > RemoveIPC=no > EOF [root@cms-dmdb-2025temp ~]#

配置dmdba环境变量

vim /home/dmdba/.bash_profile #dameng setting export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/dmdba/dmdbms/bin" export DM_HOME='/home/dmdba/dmdbms' export DM_DATA='/dmdata/data' export NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss" export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool export MALLOC_ARENA_MAX=4 [dmdba@cms-dmdb-2025temp ~]$ vim /home/dmdba/.bash_profile [dmdba@cms-dmdb-2025temp ~]$ source /home/dmdba/.bash_profile [dmdba@cms-dmdb-2025temp ~]$

挂载镜像

unzip -q /soft/dm8_20250122_x86_rh7_64.zip -d /soft mount -o loop /soft/dm8_20250122_x86_rh7_64.iso /mnt [root@cms-dmdb-2025temp ~]# unzip -q /soft/dm8_20250122_x86_rh7_64.zip -d /soft [root@cms-dmdb-2025temp ~]# mount -o loop /soft/dm8_20250122_x86_rh7_64.iso /mnt mount: /dev/loop0 is write-protected, mounting read-only [root@cms-dmdb-2025temp ~]#

命令行安装

这里我们选择使用命令行安装,没有 key 文件选择 “n”,时区按需求选择一般选择 “21”,安装类型选择“1”,安装目录按实际情况配置,这里示例使用默认安装位置。数据库安装完成后,需要切换至 root 用户执行上图中的命令 /home/dmdba/dmdbms/script/root/root_installer.sh 创建 DmAPService,否则会影响数据库备份。

su - dmdba cd /mnt ./DMInstall.bin -i /home/dmdba/dmdbms/script/root/root_installer.sh [root@cms-dmdb-2025temp ~]# su - dmdba Last login: Thu Apr 10 13:24:17 CST 2025 on pts/1 [dmdba@cms-dmdb-2025temp ~]$ cd /mnt [dmdba@cms-dmdb-2025temp mnt]$ ./DMInstall.bin -i Installer Language: [1]: 简体中文 [2]: English Please select the installer's language [2]:1 解压安装程序......... 硬件架构校验通过! 欢迎使用达梦数据库安装程序 是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]:n 是否设置时区? (Y/y:是 N/n:否) [Y/y]:y 设置时区: [ 1]: (GTM-12:00) 日界线西 [ 2]: (GTM-11:00) 萨摩亚群岛 [ 3]: (GTM-10:00) 夏威夷 [ 4]: (GTM-09:00) 阿拉斯加 [ 5]: (GTM-08:00) 太平洋时间(美国和加拿大) [ 6]: (GTM-07:00) 亚利桑那 [ 7]: (GTM-06:00) 中部时间(美国和加拿大) [ 8]: (GTM-05:00) 东部部时间(美国和加拿大) [ 9]: (GTM-04:00) 大西洋时间(美国和加拿大) [10]: (GTM-03:00) 巴西利亚 [11]: (GTM-02:00) 中大西洋 [12]: (GTM-01:00) 亚速尔群岛 [13]: (GTM) 格林威治标准时间 [14]: (GTM+01:00) 萨拉热窝 [15]: (GTM+02:00) 开罗 [16]: (GTM+03:00) 莫斯科 [17]: (GTM+04:00) 阿布扎比 [18]: (GTM+05:00) 伊斯兰堡 [19]: (GTM+06:00) 达卡 [20]: (GTM+07:00) 曼谷,河内 [21]: (GTM+08:00) 中国标准时间 [22]: (GTM+09:00) 首尔 [23]: (GTM+10:00) 关岛 [24]: (GTM+11:00) 所罗门群岛 [25]: (GTM+12:00) 斐济 [26]: (GTM+13:00) 努库阿勒法 [27]: (GTM+14:00) 基里巴斯 请选择时区 [21]: 安装类型: 1 典型安装 2 服务器 3 客户端 4 自定义 请选择安装类型的数字序号 [1 典型安装]:1 所需空间: 1912M 请选择安装目录 [/home/dmdba/dmdbms]: 可用空间: 588G 是否确认安装路径(/home/dmdba/dmdbms)? (Y/y:是 N/n:否) [Y/y]:y 安装前小结 安装位置: /home/dmdba/dmdbms 所需空间: 1912M 可用空间: 588G 版本信息: 有效日期: 安装类型: 典型安装 是否确认安装? (Y/y:是 N/n:否):y 2025-04-10 13:27:15 [INFO] 安装达梦数据库... 2025-04-10 13:27:15 [INFO] 安装 基础 模块... 2025-04-10 13:27:18 [INFO] 安装 服务器 模块... 2025-04-10 13:27:28 [INFO] 安装 客户端 模块... 2025-04-10 13:27:43 [INFO] 安装 驱动 模块... 2025-04-10 13:27:44 [INFO] 安装 手册 模块... 2025-04-10 13:27:44 [INFO] 安装 服务 模块... 2025-04-10 13:27:46 [INFO] 移动日志文件。 2025-04-10 13:27:47 [INFO] 安装达梦数据库完成。 请以root系统用户执行命令: /home/dmdba/dmdbms/script/root/root_installer.sh 安装结束 [dmdba@cms-dmdb-2025temp mnt]$ exit logout [root@cms-dmdb-2025temp ~]# /home/dmdba/dmdbms/script/root/root_installer.sh 移动 /home/dmdba/dmdbms/bin/dm_svc.conf 到/etc目录 创建DmAPService服务 Created symlink from /etc/systemd/system/multi-user.target.wants/DmAPService.service to /usr/lib/systemd/system/DmAPService.service. 创建服务(DmAPService)完成 启动DmAPService服务 [root@cms-dmdb-2025temp ~]#

配置实例

命令行方式初始化实例,使用 dmdba 用户配置实例,进入到 DM 数据库安装目录下的 bin 目录中。使用 dminit 命令初始化实例,dminit 命令可设置多种参数,可执行如下命令查看可配置参数。

需要注意的是 页大小 (page_size)、簇大小 (extent_size)、大小写敏感 (case_sensitive)、字符集 (charset) 、空格填充模式 (BLANK_PAD_MODE) 、页检查模式(PAGE CHECK) 等部分参数,一旦确定无法修改,在初始化实例时确认需求后谨慎设置。

部分参数解释如下:

  • page_size:数据文件使用的页大小。取值范围 4、8、16、32,单位:KB。缺省值为 8。可选参数。选择的页大小越大,则 DM 支持的元组长度也越大,但同时空间利用率可能下降。数据库创建成功后无法再修改页大小,可通过系统函数 SF_GET_PAGE_SIZE()获取系统的页大小。
  • extent_size:数据文件使用的簇大小,即每次分配新的段空间时连续的页数。取值范围 16、32、64。单位:页数。缺省值为 16。可选参数。数据库创建成功后无法再修改簇大小,可通过系统函数 SF_GET_EXTENT_SIZE()获取系统的簇大小。
  • case_sensitive: 标识符大小写敏感。当大小写敏感时,小写的标识符应用""括起,否则被系统自动转换为大写;当大小写不敏感时,系统不会转换标识符的大小写,系统比较函数会将大写字母全部转为小写字母再进行比较。取值:Y、y、1 表示敏感;N、n、0 表示不敏感。缺省值为 Y。可选参数。此参数在数据库创建成功后无法修改,可通过系统函数 SF_GET_CASE_SENSITIVE_FLAG()或 CASE_SENSITIVE()查询设置的参数值。
  • charset:字符集选项。取值范围 0、1、2。0 代表 GB18030,1 代表 UTF-8,2 代表韩文字符集 EUC-KR。缺省值为 0。可选参数。此参数在数据库创建成功后无法修改,可通过系统函数 SF_GET_UNICODE_FLAG()或 UNICODE()查询设置的参数值。
  • BLANK_PAD_MODE:设置字符串比较时,结尾空格填充模式是否兼容 ORACLE。1:兼容;0:不兼容。缺省值为 0。可选参数。此参数在数据库创建成功后无法修改,可通过查询 V$PARAMETER 中的 BLANK_PAD_MODE 参数名查看此参数的设置值。
  • PAGE_CHECK:PAGE_CHECK 为页检查模式。取值范围 0、1、2、3。0:禁用页校验;1:开启页校验并使用 CRC 校验;2:开启页校验并使用指定的 HASH 算法进行校验;3:开启页校验并使用快速 CRC 校验。缺省值为 3。可选参数。在数据库创建成功后无法修改。

更多 dminit 参数解释可参考达梦数据库安装目录下 doc 目录中《DM8_dminit 使用手册》。

建议

在实际使用中,初始化时建议提前设置好 COMPATIBLE_MODE 的参数值,便于更好的兼容其他数据库。参数说明:是否兼容其他数据库模式。0:不兼容,1:兼容 SQL92 标准,2:部分兼容 ORACLE,3:部分兼容 MS SQL SERVER,4:部分兼容 MYSQL,5:兼容 DM6,6:部分兼容 TERADATA,7:部分兼容 POSTGRES。

su - dmdba cd /home/dmdba/dmdbms/bin ./dminit path=/dmdata/data PAGE_SIZE=8 EXTENT_SIZE=16 CASE_SENSITIVE=n CHARSET=1 DB_NAME=DAMENG INSTANCE_NAME=DMSERVER PORT_NUM=5236 SYSDBA_PWD=Sin0pharm SYSAUDITOR_PWD=Sin0pharm [root@cms-dmdb-2025temp ~]# su - dmdba Last login: Thu Apr 10 13:46:09 CST 2025 on pts/2 [dmdba@cms-dmdb-2025temp ~]$ cd /home/dmdba/dmdbms/bin [dmdba@cms-dmdb-2025temp bin]$ ./dminit path=/dmdata/data PAGE_SIZE=8 EXTENT_SIZE=16 CASE_SENSITIVE=n CHARSET=1 DB_NAME=DAMENG INSTANCE_NAME=DMSERVER PORT_NUM=5236 SYSDBA_PWD=Sin0pharm SYSAUDITOR_PWD=Sin0pharm initdb V8 db version: 0x7000d file dm.key not found, use default license! License will expire on 2026-01-17 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL log file path: /dmdata/data/DAMENG/DAMENG01.log log file path: /dmdata/data/DAMENG/DAMENG02.log write to dir [/dmdata/data/DAMENG]. create dm database success. 2025-04-10 14:00:22 [dmdba@cms-dmdb-2025temp bin]$

注意如果此处自定义了初始化参数,在后面的注册服务和启动数据库等步骤中,请按实际的自定义参数进行操作。

注册服务

命令行注册服务,DM 提供了将 DM 服务脚本注册成操作系统服务的脚本,同时也提供了卸载操作系统服务的脚本。注册和卸载脚本文件所在目录为安装目录的“/script/root”子目录下。

注册服务脚本为 dm_service_installer.sh,用户可以使用注册服务脚本将服务脚本注册成为操作系统服务。注册服务需使用 root 用户进行注册,使用 root 用户进入数据库安装目录的 /script/root 下。

cd /home/dmdba/dmdbms/script/root/ ./dm_service_installer.sh -t DMSERVER -dm_ini /dmdata/data/DAMENG/dm.ini -p DAMENG DmServiceDAMENG [root@cms-dmdb-2025temp ~]# cd /home/dmdba/dmdbms/script/root/ [root@cms-dmdb-2025temp root]# ./dm_service_installer.sh -t DMSERVER -dm_ini /dmdata/data/DAMENG/dm.ini -p DAMENG Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceDAMENG.service to /usr/lib/systemd/system/DmServiceDAMENG.service. 创建服务(DmServiceDAMENG)完成 [root@cms-dmdb-2025temp root]#

进入数据安装目录下 bin 目录中可以看到已经注册好的服务 DmServiceDAMENG。

ls -lh /home/dmdba/dmdbms/bin/DmServiceDAMENG [root@cms-dmdb-2025temp root]# ls -lh /home/dmdba/dmdbms/bin/DmServiceDAMENG -rwxr-xr-x 1 dmdba dinstall 19K Apr 10 14:09 /home/dmdba/dmdbms/bin/DmServiceDAMENG [root@cms-dmdb-2025temp root]#

启动、停止数据库

命令行启停数据库

服务名方式,服务注册成功后,启动数据库。使用 dmdba 用户进入 DM 安装目录下的 bin 目录下,启动数据库,如下所示:

su - dmdba /home/dmdba/dmdbms/bin/DmServiceDAMENG start [root@cms-dmdb-2025temp root]# su - dmdba Last login: Thu Apr 10 14:01:16 CST 2025 on pts/0 [dmdba@cms-dmdb-2025temp ~]$ /home/dmdba/dmdbms/bin/DmServiceDAMENG start Starting DmServiceDAMENG: [ OK ] [dmdba@cms-dmdb-2025temp ~]$

查看数据库状态

/home/dmdba/dmdbms/bin/DmServiceDAMENG status [dmdba@cms-dmdb-2025temp ~]$ /home/dmdba/dmdbms/bin/DmServiceDAMENG status DmServiceDAMENG (pid 1843) is running. [dmdba@cms-dmdb-2025temp ~]$

停止数据库

/home/dmdba/dmdbms/bin/DmServiceDAMENG stop [dmdba@cms-dmdb-2025temp ~]$ /home/dmdba/dmdbms/bin/DmServiceDAMENG stop Stopping DmServiceDAMENG: [ OK ] [dmdba@cms-dmdb-2025temp ~]$

前台方式动数据库后如果启动界面会话关闭数据库也相应会关闭所以一般情况下建议采用服务的方式启动数据库。dmdba 用户使用前台的方式启动数据库,进入 DM 安装目录下的 bin 目录下,命令如下:

/home/dmdba/dmdbms/bin/dmserver /dmdata/data/DAMENG/dm.ini [dmdba@cms-dmdb-2025temp ~]$ /home/dmdba/dmdbms/bin/dmserver /dmdata/data/DAMENG/dm.ini file dm.key not found, use default license! version info: develop csek2_vm_t = 1440 nsql_vm_t = 328 prjt2_vm_t = 176 ltid_vm_t = 216 nins2_vm_t = 1120 nset2_vm_t = 272 ndlck_vm_t = 192 ndel2_vm_t = 768 slct2_vm_t = 352 nli2_vm_t = 200 aagr2_vm_t = 304 pscn_vm_t = 376 dist_vm_t = 960 DM Database Server 64 V8 03134284336-20250117-257733-20132 startup... Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL Database mode = 0, oguid = 0 License will expire on 2026-01-17 file lsn: 47446 ndct db load finished, code:0 ndct second level fill fast pool finished ndct third level fill fast pool finished ndct second level fill fast pool finished ndct third level fill fast pool finished ndct fill fast pool finished pseg_set_gtv_trxid_low next_trxid in mem:[8009] pseg_collect_mgr_items, total collect 0 active_trxs, 0 cmt_trxs, 0 pre_cmt_trxs, 0 to_release_trxs, 0 active_pages, 0 cmt_pages, 0 pre_cmt_pages, 0 to_release_pages, 0 mgr pages, 0 mgr recs! next_trxid in mem:[10011] next_trxid = 12013. pseg recv finished nsvr_startup end. uthr_pipe_create, create pipe[read:10, write:11] uthr_pipe_create, create pipe[read:12, write:13] uthr_pipe_create, create pipe[read:14, write:15] uthr_pipe_create, create pipe[read:16, write:17] uthr_pipe_create, create pipe[read:18, write:19] uthr_pipe_create, create pipe[read:20, write:21] uthr_pipe_create, create pipe[read:22, write:23] uthr_pipe_create, create pipe[read:24, write:25] uthr_pipe_create, create pipe[read:26, write:27] uthr_pipe_create, create pipe[read:28, write:29] uthr_pipe_create, create pipe[read:30, write:31] uthr_pipe_create, create pipe[read:32, write:33] uthr_pipe_create, create pipe[read:34, write:35] uthr_pipe_create, create pipe[read:36, write:37] uthr_pipe_create, create pipe[read:38, write:39] uthr_pipe_create, create pipe[read:40, write:41] aud sys init success. aud rt sys init success. systables desc init success. ndct_db_load_info finished, code:0. nsvr_process_before_open begin. nsvr_process_before_open success. SYSTEM IS READY. checkpoint requested by INI_INTERVAL, rlog free space[8589910016], used space[16384] checkpoint generate by ckpt_interval checkpoint begin, used_space[16384], free_space[8589910016]... checkpoint end, 0 pages flushed, used_space[12288], free_space[8589914112]. exit Server is stopping... listener closed and all sessions disconnected adjust undo_retention & wakeup purge thread...full check point starting... generate force checkpoint, rlog free space[8589914112], used space[12288] checkpoint begin, used_space[12288], free_space[8589914112]... checkpoint end, 0 pages flushed, used_space[12288], free_space[8589914112]. full check point end. shutdown audit subsystem...OK shutdown schedule subsystem...OK shutdown timer successfully. pre-shutdown MAL subsystem...OK shutdown worker threads subsystem...OK shutdown logic log subsystem...OK shutdown sequence cache subsystem...OK wait for mtsk link worker to exit..OK shutdown mpp session subsystem...OK wait for rapply is all over... OK rapply worker threads exit successfully. pre ending task & worker threads...OK shutdown dblink subsystem...OK shutdown local parallel threads pool successfully. shutdown pthd_pools...OK shutdown session subsystem...shutdown aux session subsystem...OK shutdown rollback segments purging subsystem...OK shutdown transaction subsystem...OK shutdown locking subsystem...OK shutdown dbms_lock subsystem...OK ending tsk and worker threads...OK ckpt2_exec_immediately begin. checkpoint begin, used_space[12288], free_space[8589914112]... checkpoint end, 0 pages flushed, used_space[8192], free_space[8589918208]. checkpoint begin, used_space[8192], free_space[8589918208]... checkpoint begin, used_space[0], free_space[8589926400]... shutdown archive subsystem...OK shutdown redo log subsystem...OK shutdown MAL subsystem...OK shutdown message compress subsystem successfully. shutdown task subsystem...OK shutdown trace subsystem...OK shutdown svr_log subsystem...OK shutdown plan cache subsystem...OK shutdown database dictionary subsystem...OK shutdown file subsystem...OK shutdown mac cache subsystem...OK shutdown dynamic login cache subsystem...OK shutdown ifun/bifun/sfun/afun cache subsystem...OK shutdown crypt subsystem...OK shutdown pipe subsystem...OK shutdown compress component...OK shutdown slave redo subsystem...OK shutdown kernel buffer subsystem...OK shutdown SQL capture subsystem...OK shutdown control file system...OK shutdown dtype subsystem...OK shutdown huge buffer and memory pools...OK close lsnr socket DM Database Server shutdown successfully. [dmdba@cms-dmdb-2025temp ~]$

该启动方式为前台启动,界面输出“SYSTEM IS READY”后表示前台启动成功,若想关闭数据库,输入 exit 退出即可。

数据库目录结构介绍

数据库安装目录,下图展示为 DM8 数据库目录。

达梦目录说明.jpg

数据库实例目录以实例 DAMENG 为例,该目录下存放 DAMENG 实例的配置文件 *.ini、控制文件 dm.ctl、数据文件 *.DBF、日志文件 *.log 等。如下图

微信截图_20250410151507.jpg

数据库实例配置

实例参数优化可通过手动方式和自动方式进行调整。为增强参数优化的适用性,降低参数修改的过程风险,建议使用达梦数据库提供的 AutoParaAdj.sql 脚本进行实例参数优化。

AutoParaAdj.sql 脚本详细内容和具体使用步骤见:参数自动优化脚本工具-DM8.zip

注意:解压后把AutoParaAdj3.8_dm8.sql放到/home/dmdba目录下,脚本执行成功后,须重启数据库使参数修改生效。

su - dmdba disql SYSDBA start /home/dmdba/AutoParaAdj3.8_dm8.sql exit /home/dmdba/dmdbms/bin/DmServiceDAMENG restart [root@cms-dmdb-2025temp ~]# su - dmdba Last login: Thu Apr 10 15:51:18 CST 2025 on pts/2 [dmdba@cms-dmdb-2025temp ~]$ disql SYSDBA 密码: 服务器[LOCALHOST:5236]:处于普通打开状态 登录使用时间 : 4.546(ms) disql V8 SQL> start /home/dmdba/AutoParaAdj3.8_dm8.sql SQL> /* ************************************************************************** * * * Auto parameter adjustment 3.8 for dm8* * [November 22, 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时请自行根据机器实际内存调整此参数,单位为M v_cpus int:= 8; --exec_mode为1时请自行根据机器实际CPU核数调整此参数 oltp_mode int:=0; --并发量较高的OLTP类型系统此参数设置为1,并发量不高的一般业务系统和OLAP类的系统此参数设置为0,影响SORT_FLAG和UNDO_RETENTION 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; UNDO_RETENTION INT :=90; 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 :=8; IF v_cpus > 64 THEN v_cpus := 64; TASK_THREADS :=16; IO_THR_GROUPS :=32; END IF; IF v_cpus <= 64 THEN IO_THR_GROUPS :=16; TASK_THREADS :=8; END IF; IF v_cpus <= 8 THEN TASK_THREADS :=4; 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 <= great(RECYCLE*1024/3000/(page()/1024),2) 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; --如果oltp_mode设置为0,采用旧的排序模式,undo_relation采用默认值 if oltp_mode=1 then SORT_FLAG = 0; SORT_BUF_SIZE := 2; end if; --如果oltp_mode设置为0,undo_relation适当放大,采用新的排序方法 if oltp_mode=0 then UNDO_RETENTION = 900; 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); SP_SET_PARA_DOUBLE_VALUE(2,'UNDO_RETENTION',UNDO_RETENTION); --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); --SLCT_OPT_FLAG参数设置为0 IF EXISTS (SELECT * FROM V$DM_INI WHERE PARA_NAME='SLCT_OPT_FLAG') THEN SP_SET_PARA_VALUE(1,'SLCT_OPT_FLAG',0); END IF; 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);'; PRINT 'SP_SET_PARA_DOUBLE_VALUE(2,''UNDO_RETENTION'','||UNDO_RETENTION||');'; --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);'; --SLCT_OPT_FLAG参数设置为0 IF EXISTS (SELECT * FROM V$DM_INI WHERE PARA_NAME='SLCT_OPT_FLAG') THEN PRINT 'SP_SET_PARA_VALUE(1,''SLCT_OPT_FLAG'',0);'; END IF; 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; 行号 MEMORY_TARGET+BUFFER+RECYCLE+HJ_BUF_GLOBAL_SIZE+HAGR_BUF_GLOBAL_SIZE+CACHE_POOL_SIZE+DICT_BUF_SIZE+SORT_BUF_GLOBAL_SIZE+RLOG_POO ---------- -------------------------------------------------------------------------------------------------------------------------------- 1 13586 已用时间: 156.517(毫秒). 执行号:701. SQL> exit [dmdba@cms-dmdb-2025temp ~]$ /home/dmdba/dmdbms/bin/DmServiceDAMENG restart Stopping DmServiceDAMENG: [ OK ] Starting DmServiceDAMENG: [ OK ] [dmdba@cms-dmdb-2025temp ~]$

数据库运维监控

开启免密登录

需要创建dmdba 组,然后将组权限附加给 dmdba用户

groupadd dmdba usermod -a -G dmdba dmdba [root@cms-dmdb-2025temp ~]# groupadd dmdba [root@cms-dmdb-2025temp ~]# usermod -a -G dmdba dmdba [root@cms-dmdb-2025temp ~]#

配置隐藏参数ENABLE_LOCAL_OSAUTH,重启生效

su - dmdba disql SYSDBA sp_set_para_value(2,'ENABLE_LOCAL_OSAUTH',1); exit /home/dmdba/dmdbms/bin/DmServiceDAMENG restart [root@cms-dmdb-2025temp ~]# su - dmdba Last login: Thu Apr 10 15:54:25 CST 2025 on pts/2 [dmdba@cms-dmdb-2025temp ~]$ disql SYSDBA 密码: 服务器[LOCALHOST:5236]:处于普通打开状态 登录使用时间 : 5.156(ms) disql V8 SQL> sp_set_para_value(2,'ENABLE_LOCAL_OSAUTH',1); DMSQL 过程已成功完成 已用时间: 11.186(毫秒). 执行号:601. SQL> exit [dmdba@cms-dmdb-2025temp ~]$ /home/dmdba/dmdbms/bin/DmServiceDAMENG restart Stopping DmServiceDAMENG: [ OK ] Starting DmServiceDAMENG: [ OK ] [dmdba@cms-dmdb-2025temp ~]$

免密登录测试

disql / as sysdba [dmdba@cms-dmdb-2025temp ~]$ disql / as sysdba 服务器[LOCALHOST:5236]:处于普通打开状态 登录使用时间 : 5.434(ms) disql V8 SQL>

会话监控

会话监控主要监控数据库中的活动会话,总会话以及其占最大连接数( max_sessions )的百分比。可以通过以下两种方式查询会话数。

SQL 方法查询会话数

--查询当前所有会话数 select count(*) from v$sessions; --查看当前数据库中活动会话 select count(*) from v$sessions where state='ACTIVE'; --查看当前空闲会话 select count(*) from v$sessions where state='IDLE'; --结束会话 SP_CLOSE_SESSION(v$sessions.sess_id); [dmdba@cms-dmdb-2025temp ~]$ disql / as sysdba 服务器[LOCALHOST:5236]:处于普通打开状态 登录使用时间 : 3.804(ms) disql V8 SQL> select * from v$sessions where state='IDLE'; 行号 SESS_ID SESS_SEQ SQL_TEXT STATE N_STMT N_USED_STMT SEQ_NO CURR_SCH USER_NAME TRX_ID CREATE_TIME CLNT_TYPE TIME_ZONE CHK_CONS CHK_IDENT RDONLY INS_NULL COMPILE_FLAG AUTO_CMT DDL_AUTOCMT RS_FOR_QRY CHK_NET ---------- -------------------- ----------- ----------------------------------------------------------------------- ----- ----------- ----------- ----------- -------- --------- -------------------- -------------------------- --------- --------- -------- --------- ------ -------- ------------ -------- ----------- ---------- ------- ISO_LEVEL CLNT_HOST APPNAME CLNT_IP OSNAME CONN_TYPE VPOOLADDR RUN_STATUS MSG_STATUS LAST_RECV_TIME LAST_SEND_TIME DCP_FLAG THRD_ID CONNECTED PORT_TYPE SRC_SITE MAL_ID CONCURRENT_FLAG CUR_LINENO CUR_MTDNAME CUR_SQLSTR CLNT_VER SQL_ID ----------- ----------------- ------- --------- ------ ----------- -------------------- ---------- ---------- -------------------------- -------------------------- -------- ----------- ----------- ----------- ----------- -------------------- --------------- ----------- ----------- ---------- -------- ----------- EID CLIENT_INFO CLIENT_IDENTIFIER MODULE ACTION HEART_BEAT_INTERVAL HEART_BEAT_TIMEOUT TMP_USED_TYPE TMP_USED_EXTENT_NUM SQL_TEXT_ID -------------------- ----------- ----------------- ------ ------ ------------------- ------------------ ------------- ------------------- ------------- 1 140022376473000 10 BACKUP ARCHIVE LOG ALL BACKUPSET '/dmdata/dmbak/arch_all_bak_20250410'; IDLE 64 1 4 SYSDBA SYSDBA 0 2025-04-10 22:01:51.000000 SQL3 +08:00 N N N Y N N Y N N 1 cms-dmdb-2025temp disql ::1:59660 Linux HOMOGENEOUS 140022376406864 IDLE SEND 2025-04-10 22:01:53.752255 2025-04-10 22:01:58.802530 N 1860 1 0 65535 NULL 0 NULL NULL NULL 8.1.4.48 -1 -1 0 0 NULL 0 ftabgcgy2f4ii 已用时间: 49.192(毫秒). 执行号:1101. SQL> SP_CLOSE_SESSION(140022376473000); DMSQL 过程已成功完成 已用时间: 2.411(毫秒). 执行号:1102. SQL>

操作系统命令查询会话数

--基于端口为 5236 的会话数查询 lsof -i:5236|grep dmserver|wc -l netstat -nat|awk '{print $4}'|grep 5236|wc -l [dmdba@cms-dmdb-2025temp ~]$ lsof -i:5236|grep dmserver|wc -l 2 [dmdba@cms-dmdb-2025temp ~]$ netstat -nat|awk '{print $4}'|grep 5236|wc -l 2 [dmdba@cms-dmdb-2025temp ~]$

查看当前活动会话时,若当前活动会话连接数量太大,则说明数据库当前可能存在以下异常情况:

  1. 当前业务繁忙,业务量太大;
  2. 当前系统中存在慢 SQL;
  3. 应用的重连机制存在缺陷。

查看当前非活动会话时,若当前非活动会话连接数量太大,说明数据库可能存在以下情况:

  1. 系统当前处于会话空闲期;
  2. 连接池会话上线设置过高;
  3. 应用释放连接机制存在异常。

线程监控

线程监控主要监控数据库中活动线程信息和等待线程信息。

  1. 监控当前系统中活动线程的信息。
SELECT * FROM V$THREADS;

​ 2.监控当前正在等待的线程信息。

SELECT * FROM V$LATCHES;

SQL 监控

SQL 监控主要包括慢 SQL 及阻塞、死锁、有事务未提交的表等。更多 sql 监控详见 [SQL 监控查询语句汇总](https://eco.dameng.com/document/dm/zh-cn/faq/faq-db-check.html#SQL 监控查询语句汇总)。

慢 SQL 及阻塞监控

通过以下语句检查当前数据库中包含的慢 SQL 及阻塞语句:

SELECT DS.SESS_ID "被阻塞的会话ID", DS.SQL_TEXT "被阻塞的SQL", DS.TRX_ID "被阻塞的事务ID", (CASE L.LTYPE WHEN 'OBJECT' THEN '对象锁' WHEN 'TID' THEN '事务锁' END CASE ) "被阻塞的锁类型", DS.CREATE_TIME "开始阻塞时间", SS.SESS_ID "占用锁的会话ID", SS.SQL_TEXT "占用锁的SQL", SS.CLNT_IP "占用锁的IP", L.TID "占用锁的事务ID" FROM V$LOCK L LEFT JOIN V$SESSIONS DS ON DS.TRX_ID = L.TRX_ID LEFT JOIN V$SESSIONS SS ON SS.TRX_ID = L.TID WHERE L.BLOCKED = 1; [dmdba@cms-dmdb-2025temp ~]$ disql / as sysdba 服务器[LOCALHOST:5236]:处于普通打开状态 登录使用时间 : 4.549(ms) disql V8 SQL> SELECT DS.SESS_ID "被阻塞的会话ID", DS.SQL_TEXT "被阻塞的SQL", DS.TRX_ID "被阻塞的事务ID", (CASE L.LTYPE WHEN 'OBJECT' THEN '对象锁' WHEN 'TID' THEN '事务锁' END CASE ) "被阻塞的锁类型", DS.CREATE_TIME "开始阻塞时间", SS.SESS_ID "占用锁的会话ID", SS.SQL_TEXT "占用锁的SQL", SS.CLN2 T_IP "占用锁的IP", L.TID "占用锁的事务ID" FROM V$LOCK L LEFT JOIN V$SESSIONS DS ON DS.TRX3 4 5 6 7 8 9 10 11 12 13 14 15 _ID = L.TRX_ID LEFT JOIN V$SESSIONS SS ON SS.TRX_ID = L.TID WHERE L.BLOCKED = 1;16 17 18 19 20 行号 被阻塞的会话ID 被阻塞的SQL 被阻塞的事务ID 被阻塞的锁类型 开始阻塞时间 占用锁的会话ID 占用锁的SQL 占用锁的IP 占用锁的事务ID ---------- -------------------- ------------------------------------ -------------------- --------------------- -------------------------- -------------------- ------------------- -------------- -------------------- 1 140022376473000 delete from city where city_id='BJ'; 38086 事务锁 2025-04-10 22:23:07.000000 140022242186328 select * from city; ::1:59668 38083 已用时间: 60.204(毫秒). 执行号:1901. SQL>

上述 SQL 语句中,“占用锁的会话 ID ”表示该会话占用这个对象的锁,且事务一直没有提交。导致“被阻塞的会话 ID ”无法对该对象上锁。可以参考以下解决方式:

方式一:杀掉占用锁的会话,释放锁。

SP_CLOSE_SESSION ( 占用锁的会话 ID ); SQL> SP_CLOSE_SESSION(140022242186328); DMSQL 过程已成功完成 已用时间: 2.047(毫秒). 执行号:1902. SQL>

方式二:杀掉被阻塞的会话。

SP_CLOSE_SESSION ( 被阻塞的会话 ID ); SQL> SP_CLOSE_SESSION(140022376473000); DMSQL 过程已成功完成 已用时间: 0.438(毫秒). 执行号:1903. SQL>

查询死锁历史事务信息

select dh.trx_id , sh.sess_id, wm_concat(top_sql_text) from V$DEADLOCK_HISTORY dh, V$SQL_HISTORY sh where dh.trx_id =sh.trx_id and dh.sess_id=sh.sess_id group by dh.trx_id, sh.sess_id;

有事务未提交的表查询

SELECT b.object_name, c.sess_id, a.* FROM v$lock a, dba_objects b, v$sessions c WHERE a.table_id = b.object_id AND ltype = 'OBJECT' AND a.trx_id = c.trx_id; SQL> SELECT b.object_name, c.sess_id, a.* FROM v$lock a, dba_objects b, v$sessions c WHERE a.table_id = b.object_id AND ltype = 'OBJECT' AND a.trx_id = c.trx_id;2 3 行号 object_name sess_id ADDR TRX_ID LTYPE LMODE BLOCKED TABLE_ID ROW_IDX TID IGN_FLAG HLCK_EP SPT_NO THRD_ID ---------- ----------------- -------------------- -------------------- -------------------- ------ ----- ----------- ----------- -------------------- -------------------- ----------- ----------- ----------- ----------- 1 SYS 186718312 140023139186784 38091 OBJECT IS 0 150994944 0 38091 1 255 7 2067 2 TEST 140022242186328 140023139325760 38093 OBJECT IX 0 150995944 0 38093 0 255 2 2068 3 TEST 186718312 140023139186632 38091 OBJECT IS 0 150995944 0 38091 1 255 7 2067 4 SYSDBA 180091320 140023139260288 38089 OBJECT IS 0 150994945 0 38089 1 255 4 2054 5 SYS 180091320 140023139260440 38089 OBJECT IS 0 150994944 0 38089 1 255 2 2054 6 DBA_OBJECTS 186718312 140023139187088 38091 OBJECT IS 0 16777260 0 38091 1 255 7 2067 7 SYSHPARTTABLEINFO 186718312 140023139188304 38091 OBJECT IS 0 19 0 38091 1 255 7 2067 8 SYSINDEXES 186718312 140023139188608 38091 OBJECT IS 0 1 0 38091 1 255 7 2067 9 SYSOBJECTS 186718312 140023139187392 38091 OBJECT IS 0 0 0 38091 1 255 7 2067 10 SYSOBJINFOS 186718312 140023139187696 38091 OBJECT IS 0 27 0 38091 1 255 7 2067 11 SYSTEXTS 186718312 140023139188000 38091 OBJECT IS 0 5 0 38091 1 255 7 2067 行号 object_name sess_id ADDR TRX_ID LTYPE LMODE BLOCKED TABLE_ID ROW_IDX TID IGN_FLAG HLCK_EP SPT_NO THRD_ID ---------- ----------- -------------------- -------------------- -------------------- ------ ----- ----------- ----------- -------------------- -------------------- ----------- ----------- ----------- ----------- 12 city 140022242186328 140023139325912 38093 OBJECT IX 0 1018 0 38093 0 255 2 2068 13 city 186718312 140023139186480 38091 OBJECT IS 0 1018 0 38091 1 255 2 2067 14 DBA_OBJECTS 186718312 140023139186936 38091 OBJECT IS 0 268436516 0 38091 1 255 7 2067 15 TSYSOBJECTS 186718312 140023139187240 38091 OBJECT IS 0 268436461 0 38091 1 255 7 2067 15 rows got 已用时间: 186.325(毫秒). 执行号:2203. SQL>

表空间监控

表空间监控主要监控数据库表空间使用率。需要注意以下内容:

  1. 表空间监控主要关注业务表空间、ROLL 表空间和 TEMP 表空间;
  2. 不同业务数据使用独立表空间,建议不要使用 MAIN 表空间;
  3. 可以根据实际业务需求对表空间设置阈值上限。

查看表空间的使用情况

SELECT Upper(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)", D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)", To_char(Round(( D.TOT_GROOTTE_MB - F.TOTAL_BYTES ) / D.TOT_GROOTTE_MB * 100, 2), '990.99') || '%' "使用比", F.TOTAL_BYTES "空闲空间(M)", F.MAX_BYTES "最大块(M)" FROM (SELECT TABLESPACE_NAME, Round(Sum(BYTES) / ( 1024 * 1024 ), 2) TOTAL_BYTES, Round(Max(BYTES) / ( 1024 * 1024 ), 2) MAX_BYTES FROM SYS.DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F, (SELECT DD.TABLESPACE_NAME, Round(Sum(DD.BYTES) / ( 1024 * 1024 ), 2) TOT_GROOTTE_MB FROM SYS.DBA_DATA_FILES DD GROUP BY DD.TABLESPACE_NAME) D WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME ORDER BY 2 desc; SQL> SELECT Upper(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)", D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)", To_char(Round(( D.TOT_GROOTTE_MB - F.TOTAL_BYTES ) / D.TOT_GROOTTE_MB * 100, 2), '990.99') || '%' "使用比", F.TOTAL_BYTES "空闲空间(M)", F.MAX_BYTES "最大块(M)" FROM (SELECT TABLESPACE_NAME, Round(Sum(BYTES) / (2 3 4 5 6 7 8 9 1024 * 1024 ), 2) TOTAL_BYTES, Round(Max(BYTES) / ( 1024 * 1024 ), 2) MAX_BYTES FROM SYS.DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F, (SELECT DD.TABLESPACE_NAME, Round(Sum(DD.BYTES) / ( 1024 * 1024 ),10 11 12 13 14 2) TOT_GROOTTE_MB FROM SYS.DBA_DATA_FILES DD GROUP BY DD.TABLESPACE_NAME) D WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME ORDER BY 2 desc;15 16 17 18 行号 表空间名 表空间大小(M) 已使用空间(M) 使用比 空闲空间(M) 最大块(M) ---------- ------------ ------------------ ------------------ --------- --------------- ------------ 1 MAIN 128 2.25 1.76% 125.75 125.75 2 ROLL 128 4.5 3.52% 123.5 123.5 3 TEST 128 0.25 0.20% 127.75 127.75 4 SYSTEM 74 24.87 33.61% 49.13 49.13 5 TEMP 10 0.37 3.70% 9.63 9.63 已用时间: 168.345(毫秒). 执行号:2302. SQL>

临时表空间经常过大,说明内存设置过小或存在大量中间结果集存放,需要视情况进行优化。

注意:为了不影响磁盘空间的使用,可以通过 ini 参数 TEMP_SIZE 配置大小、TEMP_SPACE_LIMIT 设置上限、存储过程 SP_TRUNC_TS_FILE 来收缩 TEMP 表空间文件(生产环境请谨慎使用)。

查看表空间与数据文件对应关系

SELECT TS.NAME, DF.PATH FROM V$TABLESPACE AS TS, V$DATAFILE AS DF WHERE TS.ID = DF.GROUP_ID; SQL> SELECT TS.NAME, DF.PATH FROM V$TABLESPACE AS TS, V$DATAFILE AS DF WHERE TS.ID = DF.GROUP_ID; 行号 NAME PATH ---------- ------ ------------------------------ 1 SYSTEM /dmdata/data/DAMENG/SYSTEM.DBF 2 ROLL /dmdata/data/DAMENG/ROLL.DBF 3 TEST /dmdata/data/DAMENG/TEST.DBF 4 TEMP /dmdata/data/DAMENG/TEMP.DBF 5 MAIN /dmdata/data/DAMENG/MAIN.DBF 已用时间: 3.325(毫秒). 执行号:2303. SQL>

UNDO 与 REDO 信息查询

UNDO 日志空间是否增长过快,查看已使用 roll 表空间的大小,命令如下:

select a.tablespace_name space_name , total /1024/1024/1024 "总大小(G)" , free /1024/1024/1024 "可使用(G)" , (total -free) /1024/1024/1024 "已使用(G)", round((total -free)/total, 4)*100 "使用率" from ( select tablespace_name, sum(bytes) free from dba_free_space group by tablespace_name ) a, ( select tablespace_name, sum(bytes) total from dba_data_files group by tablespace_name ) b where a.tablespace_name = b.tablespace_name ORDER BY "使用率" DESC; SQL> select a.tablespace_name space_name , total /1024/1024/1024 "总大小(G)" , free /1024/1024/1024 "可使用(G)" , (total -free) /1024/1024/1024 "已使用(G)", round((total -free)/total, 4)*100 "使用率" from ( select tablespace_name, sum(bytes) free from dba_free_space group by 2 3 4 5 6 7 8 9 10 11 12 13 14 15 tablespace_name ) a, ( select tablespace_name, sum(bytes) total from dba_data_files group by 16 17 18 19 20 21 22 23 24 25 tablespace_name ) b where a.tablespace_name = b.tablespace_name ORDER BY "使用率" DESC;26 27 28 29 30 31 行号 space_name 总大小(G) 可使用(G) 已使用(G) 使用率 ---------- ---------- -------------------- --------------- ---------------- --------- 1 SYSTEM 0 0.0479736328125 0.0242919921875 33.61 2 TEMP 0 0.0093994140625 0.0003662109375 3.75 3 ROLL 0 0.12060546875 0.00439453125 3.52 4 MAIN 0 0.122802734375 0.002197265625 1.76 5 TEST 0 0.124755859375 0.000244140625 0.2 已用时间: 29.649(毫秒). 执行号:2304. SQL>

当对数据进行修改时,数据库会产生 undo 信息,若数据出现丢失,可采用 rollback 请求回滚,可以利用这些 undo 信息将数据回滚到修改前的状态。但是生产环境建议根据数据分区所在磁盘空间和业务系统来限制 ROLL 文件的大小上限,防止发生大操作导致 ROLL 文件被撑大直至磁盘写满导致发生宕机风险,具体设置 ROLL 文件大小上限的方法如下,将回滚文件大小上限设置为 500GB

alter tablespace "ROLL" datafile 'ROLL.DBF' autoextend on maxsize 512000; SQL> alter tablespace "ROLL" datafile 'ROLL.DBF' autoextend on maxsize 512000; 操作已执行 已用时间: 66.187(毫秒). 执行号:2306. SQL>

REDO:重做日志包含所有数据产生的历史改变记录,是在线或归档重做日志文件中记录的信息。

SELECT * FROM v$rlogfile; SQL> SELECT * FROM v$rlogfile; 行号 GROUP_ID FILE_ID PATH CLIENT_PATH CREATE_TIME RLOG_SIZE MIN_EXEC_VER MIN_DCT_VER ---------- ----------- ----------- -------------------------------- ------------ -------------------------- -------------------- ------------ ----------- 1 2 0 /dmdata/data/DAMENG/DAMENG01.log DAMENG01.log 2025-04-10 14:00:21.000000 4294967296 V8.1.1.1 4 2 2 1 /dmdata/data/DAMENG/DAMENG02.log DAMENG02.log 2025-04-10 14:00:21.000000 4294967296 V8.1.1.1 4 已用时间: 2.657(毫秒). 执行号:2305. SQL>

开启本地归档

在达梦数据库归档模式下,数据库会同时将重做日志写入联机日志文件和归档日志文件中分别进行存储。采用归档模式会对系统的性能产生影响,然而,当系统一旦出现介质故障,如磁盘损坏时,利用归档日志,系统可被恢复至故障发生的前一刻, 也可以还原到指定的时间点,而如果没有归档日志文件,则只能利用备份进行恢复。因此,系统在归档模式下运行会更安全,当出现故障时,丢失数据的可能性更小。

开启数据库归档可通过两种方式实现。方式一:通过 SQL 命令方式开启归档;方式二:通过修改数据库配置文件方式开启归档。下面详细介绍这两种配置方式。

数据库归档目录位置:/dmdata/arch。

参数名称 默认值 推荐值 说明
ARCH_FILE_SIZE 128 2048 本地单个归档文件最大值(单位:M)。
ARCH_SPACE_LIMIT 0 102400 归档大小上限,0 表示无限制(按数据量的 1/5 保留,例如 500G 数据,保留 100G 归档)。

SQL 命令方式开启归档

disql / as sysdba ALTER DATABASE MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE ADD ARCHIVELOG 'DEST=/dmdata/arch, TYPE=LOCAL, FILE_SIZE=2048'; ALTER DATABASE OPEN; SELECT ARCH_MODE FROM V$DATABASE; exit [dmdba@cms-dmdb-2025temp ~]$ disql / as sysdba 服务器[LOCALHOST:5236]:处于普通打开状态 登录使用时间 : 5.434(ms) disql V8 SQL> ALTER DATABASE MOUNT; 操作已执行 已用时间: 3.408(毫秒). 执行号:0. SQL> ALTER DATABASE ARCHIVELOG; 操作已执行 已用时间: 53.163(毫秒). 执行号:0. SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/dmdata/arch, TYPE=LOCAL, FILE_SIZE=2048'; 操作已执行 已用时间: 8.040(毫秒). 执行号:0. SQL> ALTER DATABASE OPEN; 操作已执行 已用时间: 30.777(毫秒). 执行号:0. SQL> SELECT ARCH_MODE FROM V$DATABASE; 行号 ARCH_MODE ---------- --------- 1 Y 已用时间: 3.015(毫秒). 执行号:601. SQL> exit [dmdba@cms-dmdb-2025temp ~]$

注意:相关路径及归档大小上限参数需按照实际要求配置,建议以生产环境每日增量数据的 1 至 2 倍设置归档上限;不论使用哪种方法,均需要对数据库进行 mount 或重启操作。

配置 SQL 日志

SQL 日志内容包含系统各会话执行的 SQL 语句、参数信息、错误信息等。SQL 跟踪日志主要用于分析错误和分析性能问题,基于跟踪日志可以对系统运行状态有一个分析,比如,可以挑出系统现在执行速度较慢的 SQL 语句,进而对其进行优化。

打开 SQL 日志会对系统的性能会有较大影响,一般用于查错和调优的时候才会打开,默认情况下系统是关闭 SQL 跟踪日志的。若需要 SQL 跟踪日志但对日志的实时性没有严格的要求,又希望系统有较高的效率,可以设置 sqllog.ini 参数 SQL_TRACE_MASK 和 MIN_EXEC_TIME 只记录关注的相关记录,减少日志总量;设置 sqllog.ini 参数 ASYNC_FLUSH 打开 SQL 日志异步刷盘功能,以提高系统性能。

  • 创建 SQL 日志存放目录。
mkdir -p /dmdata/log/logcommit [dmdba@cms-dmdb-2025temp DAMENG]$ mkdir -p /dmdata/log/logcommit [dmdba@cms-dmdb-2025temp DAMENG]$
  • 检查 SVR_LOG 参数。
disql / as sysdba SELECT * FROM V$PARAMETER WHERE NAME LIKE 'SVR_LOG%'; [dmdba@cms-dmdb-2025temp DAMENG]$ disql / as sysdba 服务器[LOCALHOST:5236]:处于普通打开状态 登录使用时间 : 4.077(ms) disql V8 SQL> select * from v$parameter where name like ‘SVR_LOG%’; select * from v$parameter where name like ‘SVR_LOG%’; 第1 行附近出现错误[-2111]:无效的列名[‘SVR_LOG]. 已用时间: 2.247(毫秒). 执行号:0. SQL> SELECT * FROM V$PARAMETER WHERE NAME LIKE 'SVR_LOG%'; 行号 ID NAME TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION DEFAULT_VALUE ISDEFAULT ---------- ----------- --------------- ------- -------- --------- ---------- --------------------------------------------------------------------------------------------------------------------------- ------------- ----------- 1 550 SVR_LOG_NAME SYS SLOG_ALL SLOG_ALL SLOG_ALL Using which sql log sys in sqllog.ini NULL 1 2 553 SVR_LOG SYS 0 0 0 Whether the Sql Log sys Is open or close. 1:open, 0:close, 2:use switch and detail mode. 3:use not switch and simple mode. 0 1 3 999 SVR_LOG_PLN_STR SESSION 1 1 1 Enable sql pln str write in sql log. 0: do not write. 1: write sql pln str. 2: write dynamic sql pln str 1 1 已用时间: 18.435(毫秒). 执行号:1001. SQL> exit [dmdba@cms-dmdb-2025temp DAMENG]$
  • 修改实例路径下 sqllog.ini 文件如下:设置 sql 日志为异步,按照文件大小进行切换,每个 1024M,20 个文件循环写。

[dmdba@cms-dmdb-2025temp DAMENG]$ cd /dmdata/data/DAMENG
[dmdba@cms-dmdb-2025temp DAMENG]$ vi sqllog.ini
[dmdba@cms-dmdb-2025temp DAMENG]$ cat sqllog.ini 
BUF_TOTAL_SIZE          = 10240         #SQLs Log Buffer Total Size(K)(1024~1024000)
    BUF_SIZE                = 1024          #SQLs Log Buffer Size(K)(50~102400)
    BUF_KEEP_CNT            = 6             #SQLs Log buffer keeped count(1~100)

    [SLOG_ALL]
    FILE_PATH    = /dmdata/log/logcommit
    PART_STOR    = 0
    SWITCH_MODE  = 2
    SWITCH_LIMIT   = 1024
    ASYNC_FLUSH   = 1
    FILE_NUM = 20
    ITEMS    = 0 
    SQL_TRACE_MASK  = 1 
    MIN_EXEC_TIME = 0 
    USER_MODE   = 0 
    USERS =
    EXECTIME_PREC_FLAG = 0 
    
    [SLOG_ERROR]
    SQL_TRACE_MASK = 23
    FILE_PATH      = /dmdata/log/logcommit
    
    [SLOG_DDL]
    SQL_TRACE_MASK = 3
    
    [SLOG_LONG_SQL]
    SQL_TRACE_MASK = 25
    MIN_EXEC_TIME = 60000 
[dmdba@cms-dmdb-2025temp DAMENG]$ 

  • 执行调用存储过程生效配置文件,并开启 SQLLOG 日志。
disql / as sysdba SP_REFRESH_SVR_LOG_CONFIG(); sp_set_para_value(1,'SVR_LOG',1); SELECT * FROM V$PARAMETER WHERE NAME LIKE 'SVR_LOG%'; [dmdba@cms-dmdb-2025temp DAMENG]$ disql / as sysdba 服务器[LOCALHOST:5236]:处于普通打开状态 登录使用时间 : 3.904(ms) disql V8 SQL> SP_REFRESH_SVR_LOG_CONFIG(); DMSQL 过程已成功完成 已用时间: 1.973(毫秒). 执行号:1101. SQL> sp_set_para_value(1,'SVR_LOG',1); DMSQL 过程已成功完成 已用时间: 27.340(毫秒). 执行号:1102. SQL> SELECT * FROM V$PARAMETER WHERE NAME LIKE 'SVR_LOG%'; 行号 ID NAME TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION DEFAULT_VALUE ISDEFAULT ---------- ----------- --------------- ------- -------- --------- ---------- --------------------------------------------------------------------------------------------------------------------------- ------------- ----------- 1 550 SVR_LOG_NAME SYS SLOG_ALL SLOG_ALL SLOG_ALL Using which sql log sys in sqllog.ini NULL 1 2 553 SVR_LOG SYS 1 1 1 Whether the Sql Log sys Is open or close. 1:open, 0:close, 2:use switch and detail mode. 3:use not switch and simple mode. 0 0 3 999 SVR_LOG_PLN_STR SESSION 1 1 1 Enable sql pln str write in sql log. 0: do not write. 1: write sql pln str. 2: write dynamic sql pln str 1 1 已用时间: 15.376(毫秒). 执行号:1103. SQL>
  • 检查日志生成情况。
ls -lh /dmdata/log/logcommit/ tail -f /dmdata/log/logcommit/dmsql_DMSERVER_20250410_170617.log [dmdba@cms-dmdb-2025temp DAMENG]$ ls -lh /dmdata/log/logcommit/ total 32K -rw-r--r-- 1 dmdba dinstall 31K Apr 10 17:10 dmsql_DMSERVER_20250410_170617.log [dmdba@cms-dmdb-2025temp DAMENG]$ tail -f /dmdata/log/logcommit/dmsql_DMSERVER_20250410_170617.log 1 #NSET2: [1, 11, 112] 2 #PRJT2: [1, 11, 112]; exp_num(4), is_atom(FALSE) 3 #CSCN2: [1, 11, 112]; INDEX33555472(city); btr_scan(1) 2025-04-10 17:10:45.920 (EP[0] sess:0x7f6a8801a638 thrd:3274 user:TEST trxid:32072 stmt:0x7f6a880167c8 appname:disql ip:::1) [SEL] select * from city; 2025-04-10 17:10:45.920 (EP[0] sess:0x7f6a8801a638 thrd:3274 user:TEST trxid:32072 stmt:0x7f6a880167c8 appname:disql ip:::1) DLCK used time:4(us) 2025-04-10 17:10:45.920 (EP[0] sess:0x7f6a8801a638 thrd:3274 user:TEST trxid:32072 stmt:0x7f6a880167c8 appname:disql ip:::1) [SEL] select * from city; EXECTIME: 0(ms) ROWCOUNT: 11(rows) EXEC_ID: 1414. 2025-04-10 17:10:48.502 (EP[0] sess:0x7f6a8801a638 thrd:3274 user:TEST trxid:32072 stmt:NULL appname:disql ip:::1) MSG: COMMIT 2025-04-10 17:10:48.502 (EP[0] sess:0x7f6a8801a638 thrd:3274 user:TEST trxid:32072 stmt:NULL appname:disql ip:::1) TRX: COMMIT 2025-04-10 17:10:48.502 (EP[0] sess:0x7f6a8801a638 thrd:3274 user:TEST trxid:0 stmt:NULL appname:disql ip:::1) [LGN] FREE SESSION 2025-04-10 17:11:44.512 (EP[0] sess:NULL thrd:NULL user:NULL trxid:NULL stmt:NULL) trx[32067]: purg2_page free pseg page (0, 399), page_lsn = 48303 ^C [dmdba@cms-dmdb-2025temp DAMENG]$

日志监控与分析

数据库日志监控和分析作为数据库故障诊断的重要手段之一。

日志中信息记录分类

达梦数据库日志主要有 INFO、WARNING、ERROR 和 FATAL 四类信息。

  • INFO(正常):用于打印程序应该出现的正常状态信息, 便于追踪定位;
  • WARNING(告警):表明系统出现轻微的不合理,一般不影响运行和使用;
  • ERROR(错误):表明出现了系统错误和异常,无法正常完成目标操作;
  • FATAL(致命):表明发生了严重的错误,会导致数据库宕机,服务停止。

一般在进行数据库日志监控时,主要关注以下内容:

  • WARNING、ERROR 和 FATAL 类信息监控。
  • INFO 类信息中涉及实例重启的信息。

在 Linux 环境中查看相关信息,可参考如下命令:数据库日志监控实现方法:通过 cat 命令进行数据库日志定期检查,过滤日志当中包含 ERROR、WARNING 信息的记录,并输出信息至前台监控显示界面,命令如下:

cd $DM_HOME cd log ls -ltr *.log ##检查日志中是否有错误信息 cat xxxx.log |grep '\[ERROR' ##检查日志中是否有警告信息 cat xxxx.log |grep '\[WARNING' ##检查数据库是否重启过 cat xxxx.log |grep 'SYSTEM IS READY' [dmdba@cms-dmdb-2025temp ~]$ cd $DM_HOME [dmdba@cms-dmdb-2025temp dmdbms]$ cd log [dmdba@cms-dmdb-2025temp log]$ ls -ltr *.log -rw-r--r-- 1 dmdba dinstall 424495 Apr 10 13:27 install_ant.log -rwxr-xr-x 1 dmdba dinstall 480 Apr 10 13:27 install.log -rw-r--r-- 1 dmdba dinstall 0 Apr 10 21:00 DmServiceDAMENG.log -rw-r--r-- 1 dmdba dinstall 0 Apr 10 21:07 DmAPService.log -rw-r--r-- 1 dmdba dinstall 0 Apr 10 21:08 DmAPService_err.log -rw-r--r-- 1 dmdba dinstall 3513 Apr 10 21:08 dm_unknown_202504.log -rw-r--r-- 1 dmdba dinstall 2345 Apr 10 21:08 dmsvc_sh.log -rw-r--r-- 1 dmdba dinstall 3645 Apr 10 22:01 dm_dmap_202504.log -rw-r--r-- 1 dmdba dinstall 2080 Apr 10 22:01 dm_dmap_br_202504.log -rw-r--r-- 1 dmdba dinstall 72567 Apr 10 22:01 dm_BAKRES_202504.log -rw-r--r-- 1 dmdba dinstall 10420 Apr 10 22:44 DmServiceDAMENG_err.log -rw-r--r-- 1 dmdba dinstall 291011 Apr 10 22:44 dm_DMSERVER_202504.log [dmdba@cms-dmdb-2025temp log]$ cat dm_DMSERVER_202504.log|grep '\[ERROR' [dmdba@cms-dmdb-2025temp log]$ cat dm_DMSERVER_202504.log |grep '\[WARNING' 2025-04-10 14:24:54.312 [WARNING] database P0000001843 T0000000000000001843 fail to load libxqilla.so, libicui18n.so.50: cannot open shared object file: No such file or directory 2025-04-10 14:24:55.629 [WARNING] database P0000001843 T0000000000000001843 fail to load libgssapi_krb5.so, libgssapi_krb5.so: cannot open shared object file: No such file or directory 2025-04-10 14:33:14.049 [WARNING] database P0000002209 T0000000000000002209 fail to load libxqilla.so, libicui18n.so.50: cannot open shared object file: No such file or directory 2025-04-10 14:33:14.555 [WARNING] database P0000002209 T0000000000000002209 fail to load libgssapi_krb5.so, libgssapi_krb5.so: cannot open shared object file: No such file or directory 2025-04-10 15:53:18.318 [WARNING] database P0000002538 T0000000000000002538 fail to load libxqilla.so, libicui18n.so.50: cannot open shared object file: No such file or directory 2025-04-10 15:53:18.801 [WARNING] database P0000002538 T0000000000000002538 fail to load libgssapi_krb5.so, libgssapi_krb5.so: cannot open shared object file: No such file or directory 2025-04-10 15:58:57.493 [WARNING] database P0000002779 T0000000000000002779 fail to load libxqilla.so, libicui18n.so.50: cannot open shared object file: No such file or directory 2025-04-10 15:58:57.996 [WARNING] database P0000002779 T0000000000000002779 fail to load libgssapi_krb5.so, libgssapi_krb5.so: cannot open shared object file: No such file or directory 2025-04-10 16:09:03.869 [WARNING] database P0000003043 T0000000000000003043 fail to load libxqilla.so, libicui18n.so.50: cannot open shared object file: No such file or directory 2025-04-10 16:09:04.363 [WARNING] database P0000003043 T0000000000000003043 fail to load libgssapi_krb5.so, libgssapi_krb5.so: cannot open shared object file: No such file or directory 2025-04-10 21:08:30.833 [WARNING] database P0000001173 T0000000000000001173 fail to load libxqilla.so, libicui18n.so.50: cannot open shared object file: No such file or directory 2025-04-10 21:08:34.059 [WARNING] database P0000001173 T0000000000000001173 fail to load libgssapi_krb5.so, libgssapi_krb5.so: cannot open shared object file: No such file or directory [dmdba@cms-dmdb-2025temp log]$ cat dm_DMSERVER_202504.log | grep 'SYSTEM IS READY' 2025-04-10 14:25:11.796 [INFO] database P0000001843 T0000000000000001843 SYSTEM IS READY. 2025-04-10 14:25:11.796 [INFO] database P0000001843 T0000000000000001843 [for dem]SYSTEM IS READY. 2025-04-10 14:33:14.731 [INFO] database P0000002209 T0000000000000002209 SYSTEM IS READY. 2025-04-10 14:33:14.731 [INFO] database P0000002209 T0000000000000002209 [for dem]SYSTEM IS READY. 2025-04-10 15:53:18.976 [INFO] database P0000002538 T0000000000000002538 SYSTEM IS READY. 2025-04-10 15:53:18.976 [INFO] database P0000002538 T0000000000000002538 [for dem]SYSTEM IS READY. 2025-04-10 15:58:58.172 [INFO] database P0000002779 T0000000000000002779 SYSTEM IS READY. 2025-04-10 15:58:58.172 [INFO] database P0000002779 T0000000000000002779 [for dem]SYSTEM IS READY. 2025-04-10 16:09:04.530 [INFO] database P0000003043 T0000000000000003043 SYSTEM IS READY. 2025-04-10 16:09:04.530 [INFO] database P0000003043 T0000000000000003043 [for dem]SYSTEM IS READY. 2025-04-10 21:08:35.149 [INFO] database P0000001173 T0000000000000001173 SYSTEM IS READY. 2025-04-10 21:08:35.149 [INFO] database P0000001173 T0000000000000001173 [for dem]SYSTEM IS READY. [dmdba@cms-dmdb-2025temp log]$

实例运行日志

实例运行日志记录了数据库服务启动,刷检查点,写归档、刷盘等一系列实例的运行过程,按月生成,一般默认命名为 “dm_实例名称_月份.log”。

针对该日志的分析,可了解以上过程的运行状态,通过检查点刷盘,也可以分析业务的繁忙程度,作为调整内存、检查点参数的依据。

更多实例日志监控内容可参考:实例日志常见异常信息汇总

通过 grep 筛选检查具有 ERROR 或者 FATAL 关键字的日志,并将结果输出至文件中:

##查看错误日志定位相关数据库报错 cat dm_DMSERVER_202504.log | grep "ERROR" > ERROR.log [dmdba@cms-dmdb-2025temp log]$ cat dm_DMSERVER_202504.log | grep "ERROR" > ERROR.log [dmdba@cms-dmdb-2025temp log]$

SQL 日志

SQL 日志开启步骤请参照 [配置数据库 SQLLOG 日志](https://eco.dameng.com/document/dm/zh-cn/ops/installation-install.html#2.3 配置数据库 SQLLOG 日志) 章节。

注意

(1)如果需要开启 SQL 日志,则必须配置日志切换模式 SWITCH_MODE 和 FILE_NUM,防止日志无限增长导致磁盘撑爆;

(2)同步日志会影响系统效率,生产环境建议设置为异步日志;

(3)在设置 SQL 过滤规则 SQL_TRACE_MASK 时,建议只设置需要记录的 SQL 掩码,生产环境不要直接设成 1。

SQL 日志记录了数据库服务器从客户端接收到的 SQL 请求语句,包括 SQL 语句对应的时间戳、用户名、事务号、SQL 文本和执行时间等信息。

我们将日志中如下记录进行举例说明:

2025-04-10 20:37:27.636 (EP[0] sess:0x7f6a90009288 thrd:3515 user:SYSDBA trxid:0 stmt:0x7f6a90135d00 appname:disql ip:::1) [DDL] BACKUP DATABASE FULL BACKUPSET '/dmdata/dmbak/db_full_bak_20250410'; EXECTIME: 5196(ms) EXEC_ID: 2301.^M

该条信息解读如下:

  • 2025-04-10 20:37:27.636 表示该条 SQL 被记录下来的时间;
  • sess:0x7f6a90009288 表示该 SQL 对应的 session_id 为 140095659217544;
  • thrd:3515 表示该 SQL 对应的线程 id 为 3515;
  • user:SYSDBA 表示执行该 SQL 时所使用的的数据库登录用户为 SYSDBA;
  • trxid:0表示该 SQL 对应事务的 trx_id 为0;
  • stmt:0x7f6a90135d00 表示该 SQL 对应的会话句柄号为 140095659442024;
  • appname:disql 表示发出该 SQL 请求对应的应用名称,如果为 NULL 表示应用代码中没有填充应用名称值;
  • ip:::1) 表示发出该 SQL 请求的客户端机器的 IP 地址;
  • [DDL] 表示该 SQL 所属类型,DDL 表示该 SQL 为DDL语句;
  • BACKUP DATABASE FULL BACKUPSET ‘/dmdata/dmbak/db_full_bak_20250410’;表示该 SQL 对应的 SQL 语句完整文本信息;
  • EXECTIME: 5196(ms)表示该 SQL 的执行耗时;

此外,达梦提供达梦 SQL 日志分析工具 DMLOG。该工具通过分析数据库的 SQL 日志文件,直观地反映 SQL 执行情况。

备份日志

备份日志,记录的是数据库备份情况的日志,主要用于记录数据库备份的过程信息,判断备份是否完成的日志,日志存放的位置和实例运行日志相同,命名格式为 “dm_BAKES_日期.log”。

[dmdba@cms-dmdb-2025temp log]$ cat dm_BAKRES_202504.log 2025-04-10 20:22:25.570 [CMD] database P0000003043 T0000003459 TID0264296066 CALL SP_DBMS_JOB_RUN(1744285916); 2025-04-10 20:22:25.570 [CMD] database P0000003043 T0000003459 TID0264296066 BACKUP DATABASE [DAMENG] 2025-04-10 20:22:25.570 [INFO] database P0000003043 T0000003459 TID0264296066 CMD START.... 2025-04-10 20:22:25.570 [INFO] database P0000003043 T0000003459 TID0264296066 BACKUP DATABASE [DAMENG],execute...... 2025-04-10 20:22:26.330 [INFO] database P0000003043 T0000003459 TID0264296066 check limits of huge data 2025-04-10 20:22:26.330 [INFO] database P0000003043 T0000003459 TID0264296066 CHECK LSN BEGIN 2025-04-10 20:22:26.330 [INFO] database P0000003043 T0000003459 TID0264296066 hpc_begin_apply_info_get_online p_db_magic(0), n_apply_ep(0), pkg_seq_arr([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), lsn_arr([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) 2025-04-10 20:22:26.381 [INFO] database P0000003043 T0000003459 TID0264296066 apply information n_apply_ep(1), pkg_seq_arr([3271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), lsn_arr([49597, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) 2025-04-10 20:22:26.381 [INFO] database P0000003043 T0000003459 TID0264296066 adjust checkpoint lsn to maximal apply lsn 0 2025-04-10 20:22:26.381 [INFO] database P0000003043 T0000003459 TID0264296066 CHECK LSN END 2025-04-10 20:22:26.382 [INFO] database P0000003043 T0000003459 TID0264296066 bpsp_connect_with_dmap send first message for validation 2025-04-10 20:22:26.382 [INFO] database P0000003043 T0000003459 TID0264296066 bpsp_connect_with_dmap receive response 2025-04-10 20:22:26.382 [INFO] database P0000003043 T0000003459 TID0264296066 bpsp_connect_with_dmap send second message for validation 2025-04-10 20:22:26.383 [INFO] database P0000003043 T0000003459 TID0264296066 bpsp_connect_with_dmap receive response 2025-04-10 20:22:26.419 [INFO] dmap_br P0000003481 T0000003481 TID0264296066 dmap_cmd_process start to process bakres command 2025-04-10 20:22:26.419 [INFO] database P0000003043 T0000003459 TID0264296066 send CMD [BMML_INIT] 2025-04-10 20:22:26.420 [INFO] dmap_br P0000003481 T0000003481 TID0264296066 brtsk_sys 140244642956928 is inited 2025-04-10 20:22:26.420 [INFO] dmap_br P0000003481 T0000003481 TID0264296066 dmap_cmd_process receive bakres cmd [BMML_INIT] 2025-04-10 20:22:26.420 [INFO] dmap_br P0000003481 T0000003482 TID0264296066 CMD [BMML_INIT] is ready 2025-04-10 20:22:26.421 [INFO] database P0000003043 T0000003459 TID0264296066 send CMD [SET_TIMEOUT] timeout[0] 2025-04-10 20:22:26.421 [INFO] dmap_br P0000003481 T0000003481 TID0264296066 dmap_cmd_process receive bakres cmd [SET_TIMEOUT] 2025-04-10 20:22:27.421 [INFO] database P0000003043 T0000003459 TID0264296066 BACKUP DATABASE [DAMENG],collect dbf...... 2025-04-10 20:22:27.434 [INFO] database P0000003043 T0000003459 TID0264296066 send CMD [SET_TIMEOUT] timeout[10000] 2025-04-10 20:22:27.434 [INFO] dmap_br P0000003481 T0000003481 TID0264296066 dmap_cmd_process receive bakres cmd [SET_TIMEOUT] 2025-04-10 20:22:28.435 [INFO] database P0000003043 T0000003459 TID0264296066 CMD CHECK ...... 2025-04-10 20:22:28.435 [INFO] database P0000003043 T0000003459 TID0264296066 send CMD [BACKUP_START] 2025-04-10 20:22:28.435 [INFO] dmap_br P0000003481 T0000003481 TID0264296066 dmap_cmd_process receive bakres cmd [BACKUP_START] 2025-04-10 20:22:28.436 [INFO] dmap_br P0000003481 T0000003482 TID0264296066 CMD [BACKUP_START] is ready 2025-04-10 20:22:28.436 [INFO] database P0000003043 T0000003459 TID0264296066 backupset ini_path[/dmdata/data/DAMENG/dm.ini], backup_dir[/dmdata/dmbak/DB_DAMENG_FULL_2025_04_10_20_22_25], backup_name[DB_DAMENG_FULL_2025_04_10_20_22_25], bkp_name[DB_DAMENG_FULL_2025_04_10_20_22_25], backupset_magic[310369542], cur_lsn[53877], maxpiecesize[131072], parallel_num[2] 。。。省略 2025-04-10 23:00:42.910 [CMD] database P0000001173 T0000001380 TID1464537966 REMOVE BACKUPSETS BATCH [end_time=2025-03-11 23:00:42, range=1, obj_name=, reserved_cnt=0] FROM DISK 2025-04-10 23:00:42.910 [INFO] database P0000001173 T0000001380 TID1464537966 CMD START.... 2025-04-10 23:00:42.911 [INFO] database P0000001173 T0000001380 TID1464537966 bpsp_connect_with_dmap send first message for validation 2025-04-10 23:00:42.911 [INFO] database P0000001173 T0000001380 TID1464537966 bpsp_connect_with_dmap receive response 2025-04-10 23:00:42.911 [INFO] database P0000001173 T0000001380 TID1464537966 bpsp_connect_with_dmap send second message for validation 2025-04-10 23:00:42.911 [INFO] database P0000001173 T0000001380 TID1464537966 bpsp_connect_with_dmap receive response 2025-04-10 23:00:42.947 [INFO] database P0000001173 T0000001380 TID1464537966 send CMD [BMML_INIT] 2025-04-10 23:00:42.947 [INFO] dmap_br P0000002145 T0000002145 TID1464537966 dmap_cmd_process start to process bakres command 2025-04-10 23:00:42.947 [INFO] dmap_br P0000002145 T0000002145 TID1464537966 brtsk_sys 140348794197632 is inited 2025-04-10 23:00:42.947 [INFO] dmap_br P0000002145 T0000002145 TID1464537966 dmap_cmd_process receive bakres cmd [BMML_INIT] 2025-04-10 23:00:42.948 [INFO] dmap_br P0000002145 T0000002146 TID1464537966 CMD [BMML_INIT] is ready 2025-04-10 23:00:42.948 [INFO] database P0000001173 T0000001380 TID1464537966 send CMD [BMML_CFG_FOR_NON_BACKUP] code = 0 2025-04-10 23:00:42.948 [INFO] dmap_br P0000002145 T0000002145 TID1464537966 dmap_cmd_process receive bakres cmd [BMML_CFG_NON_BACKUP] 2025-04-10 23:00:42.949 [INFO] dmap_br P0000002145 T0000002146 TID1464537966 CMD [BMML_CFG_NON_BACKUP] is ready 2025-04-10 23:00:42.949 [INFO] database P0000001173 T0000001380 TID1464537966 send CMD [RESTORE_BAKSET_DELETE] 2025-04-10 23:00:42.949 [INFO] dmap_br P0000002145 T0000002145 TID1464537966 dmap_cmd_process receive bakres cmd [DELETE_BAKSET] 2025-04-10 23:00:42.957 [INFO] dmap_br P0000002145 T0000002146 TID1464537966 CMD [BAKSET_DELETE] is ready. 2025-04-10 23:00:42.957 [INFO] database P0000001173 T0000001380 TID1464537966 BPSP notify subprocess complete, pipe send successfully 2025-04-10 23:00:42.957 [INFO] dmap_br P0000002145 T0000002145 TID1464537966 dmap_cmd_process receive bakres cmd [COMPLETE] 2025-04-10 23:00:42.957 [INFO] database P0000001173 T0000001380 TID1464537966 BPSP notify subprocess end, pipe send successfully 2025-04-10 23:00:42.957 [INFO] dmap_br P0000002145 T0000002145 TID1464537966 dmap_cmd_process receive bakres cmd [END] 2025-04-10 23:00:42.957 [INFO] dmap_br P0000002145 T0000002145 TID1464537966 dmap_baker_end bakres CMD [END] begin 2025-04-10 23:00:42.957 [INFO] dmap_br P0000002145 T0000002145 TID1464537966 dmap_baker_end bakres CMD [END] tsk node get 2025-04-10 23:00:42.957 [INFO] dmap_br P0000002145 T0000002145 TID1464537966 dmap_baker_end bakres CMD [END] end 2025-04-10 23:00:42.958 [INFO] dmap_br P0000002145 T0000002145 TID1464537966 brtsk_sys 140348794197632 is destoryed 2025-04-10 23:00:42.958 [INFO] database P0000001173 T0000001380 TID1464537966 CMD END.CODE:[0], COST:[00:00:00] 2025-04-10 23:00:42.958 [INFO] dmap_br P0000002145 T0000002145 TID1464537966 dmap_cmd_process exit successfully 2025-04-10 23:00:42.958 [INFO] dmap_br P0000002145 T0000002145 TID1464537966 dmap_dll_exec exit successfully [dmdba@cms-dmdb-2025temp log]$

数据库备份还原

备份概述

达梦数据库中的数据存储在数据库的物理数据文件中,数据文件按照页、簇和段的方式进行管理,数据页是最小的数据存储单元。任何一个对达梦数据库的操作,其根本都是对某个数据文件页的读写操作。因此,DM 备份的本质就是从数据库文件中拷贝有效的数据页保存到备份集中,这里的有效数据页包括数据文件的描述页和被分配使用的数据页。

数据库备份可按照实际需求进行手动备份或设置定时备份。手动备份详细内容可参考数据库安装目录 doc 路径下《DM8 备份与还原》手册。以下主要详细介绍定时备份相关内容。

手动备份

完全备份和增量备份是数据库备份的最常用策略

完全备份

执行数据库备份,数据库必须处于 OPEN 状态,MOUNT 和 SUSPEND 状态下不允许执行数据库备份。

数据库完全备份中包含了指定库的全部有效数据页,为了保证数据安全应该对数据库定期执行完全备份。多久执行一次完全备份才合适,一般规则是数据库经过频繁修改后最好执行一次完全备份。

完全备份数据库步骤如下:

配置归档;
保证数据库处于 OPEN 状态;
disql 中输入备份数据库语句,最简单的不设置其他参数的完全备份语句如下:

disql / as sysdba BACKUP DATABASE FULL BACKUPSET '/dmdata/dmbak/db_full_bak_20250410'; [dmdba@cms-dmdb-2025temp ~]$ disql / as sysdba 服务器[LOCALHOST:5236]:处于普通打开状态 登录使用时间 : 4.569(ms) disql V8 SQL> BACKUP DATABASE FULL BACKUPSET '/dmdata/dmbak/db_full_bak_20250410'; 操作已执行 已用时间: 00:00:05.199. 执行号:2301. SQL> exit [dmdba@cms-dmdb-2025temp ~]$ ls -lh /dmdata/dmbak/ total 0 drwxr-xr-x 2 dmdba dinstall 105 Apr 10 20:17 db_full_bak_20250410 [dmdba@cms-dmdb-2025temp ~]$

增量备份

disql / as sysdba BACKUP DATABASE INCREMENT WITH BACKUPDIR '/dmdata/dmbak/db_full_bak_20250410' BACKUPSET '/dmdata/dmbak/db_incr_bak_20250410'; [dmdba@cms-dmdb-2025temp ~]$ disql / as sysdba 服务器[LOCALHOST:5236]:处于普通打开状态 登录使用时间 : 15.083(ms) disql V8 SQL> BACKUP DATABASE INCREMENT WITH BACKUPDIR '/dmdata/dmbak/db_full_bak_20250410' BACKUPSET '/dmdata/dmbak/db_incr_bak_20250410'; 操作已执行 已用时间: 00:00:06.060. 执行号:501. SQL>

归档备份

disql / as sysdba BACKUP ARCHIVE LOG ALL BACKUPSET '/dmdata/dmbak/arch_all_bak_20250410'; [dmdba@cms-dmdb-2025temp ~]$ disql / as sysdba 服务器[LOCALHOST:5236]:处于普通打开状态 登录使用时间 : 4.103(ms) disql V8 SQL> BACKUP ARCHIVE LOG ALL BACKUPSET '/dmdata/dmbak/arch_all_bak_20250410'; 操作已执行 已用时间: 00:00:05.050. 执行号:901. SQL>

设置定时备份

达梦数据库提供定时备份功能。在设置定时备份前,应依据实际业务需求和数据量大小,采用不同的备份策略,达梦数据库常用备份策略包括全量备份 + 删除和全量备份 + 增量备份 + 删除。可使用命令行或图形化方式设置定时备份。

全量备份 + 删除(推荐使用)

此备份策略适用于数据量小于 100G 的场景下。注意开启数据库归档,确定备份路径。

例如设置每天 23:00 全量备份、删除 30 天前的全量备份。备份路径为 /dmdata/dmbak

注意:DM8 数据库中,使用命令行配置备份任务时,注意 SP_ADD_JOB_STEP 的 SUCC_ACTION 和 FAIL_ACTION 参数可能存在一定差异,详细可参考达梦数据库安装目录 doc 路径下《作业系统使用手册》。

命令行配置备份任务

disql / as sysdba CALL SP_INIT_JOB_SYS(1); CALL SP_CREATE_JOB('bakall_delall',1,0,'',0,0,'',0,'每天 23:00 全量备份、删除 30 天前的全量备份'); CALL SP_JOB_CONFIG_START('bakall_delall'); CALL SP_ADD_JOB_STEP('bakall_delall', 'bakall', 6, '01020000/dmdata/dmbak', 3, 1, 0, 0, NULL, 0); CALL SP_ADD_JOB_STEP('bakall_delall', 'delall', 0, 'SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/dmdata/dmbak''); CALL SP_DB_BAKSET_REMOVE_BATCH(''DISK'',SYSDATE-30);', 1, 1, 0, 0, NULL, 0); CALL SP_ADD_JOB_SCHEDULE('bakall_delall', 'bakall_delall_time01', 1, 1, 1, 0, 0, '23:00:00', NULL, '2019-01-01 01:01:01', NULL, ''); CALL SP_JOB_CONFIG_COMMIT('bakall_delall'); #作业相关信息 SELECT * FROM SYSJOB.SYSJOBS; #立即执行一次作业 CALL SP_DBMS_JOB_RUN(SYSJOB.SYSJOBS.ID); #作业的执行情况 SELECT * FROM SYSJOB.SYSJOBHISTORIES; #作业调度相关信息 SELECT * FROM SYSJOB.SYSJOBSCHEDULES; #作业步骤相关信息 SELECT * FROM SYSJOB.SYSJOBSTEPS; [dmdba@cms-dmdb-2025temp ~]$ disql / as sysdba 服务器[LOCALHOST:5236]:处于普通打开状态 登录使用时间 : 4.179(ms) disql V8 SQL> CALL SP_INIT_JOB_SYS(1); DMSQL 过程已成功完成 已用时间: 380.362(毫秒). 执行号:2101. SQL> CALL SP_CREATE_JOB('bakall_delall',1,0,'',0,0,'',0,'每天 23:00 全量备份、删除 30 天前的全量备份'); DMSQL 过程已成功完成 已用时间: 11.810(毫秒). 执行号:2102. SQL> CALL SP_JOB_CONFIG_START('bakall_delall'); DMSQL 过程已成功完成 已用时间: 0.538(毫秒). 执行号:2103. SQL> CALL SP_ADD_JOB_STEP('bakall_delall', 'bakall', 6, '01020000/dmdata/dmbak', 3, 1, 0, 0, NULL, 0); DMSQL 过程已成功完成 已用时间: 19.963(毫秒). 执行号:2104. SQL> CALL SP_ADD_JOB_STEP('bakall_delall', 'delall', 0, 'SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/dmdata/dmbak''); 2 CALL SP_DB_BAKSET_REMOVE_BATCH(''DISK'',SYSDATE-30);', 1, 1, 0, 0, NULL, 0); DMSQL 过程已成功完成 已用时间: 13.469(毫秒). 执行号:2105. SQL> CALL SP_ADD_JOB_SCHEDULE('bakall_delall', 'bakall_delall_time01', 1, 1, 1, 0, 0, '23:00:00', NULL, '2019-01-01 01:01:01', NULL, ''); DMSQL 过程已成功完成 已用时间: 14.527(毫秒). 执行号:2106. SQL> CALL SP_JOB_CONFIG_COMMIT('bakall_delall'); DMSQL 过程已成功完成 已用时间: 19.648(毫秒). 执行号:2107. SQL> SELECT * FROM SYSJOB.SYSJOBS; 行号 ID NAME ENABLE USERNAME CREATETIME MODIFYTIME ENABLE_EMAIL EMAIL_OPERID EMAIL_TYPE ENABLE_NETSEND NETSEND_OPERID NETSEND_TYPE VALID DESCRIBE SYS_FLAG EP_SEQNO RAFT_NAME ---------- ----------- ------------- ----------- -------- ------------------- ------------------- ------------ ------------ ----------- -------------- -------------- ------------ ----- ----------------------------------------------------------- ----------- ----------- --------- 1 1744285916 bakall_delall 1 SYSDBA 2025-04-10 20:09:17 2025-04-10 20:10:06 0 -1 0 0 -1 0 Y 每天 23:00 全量备份、删除 30 天前的全量备份 0 0 NULL 已用时间: 2.438(毫秒). 执行号:2108. SQL> CALL SP_DBMS_JOB_RUN(1744285916); DMSQL 过程已成功完成 已用时间: 00:00:07.049. 执行号:2114. SQL> exit [dmdba@cms-dmdb-2025temp ~]$ ls -lh /dmdata/dmbak/ total 0 drwxr-xr-x 4 dmdba dinstall 187 Apr 10 20:22 DB_DAMENG_FULL_2025_04_10_20_22_25 drwxr-xr-x 2 dmdba dinstall 105 Apr 10 20:17 db_full_bak_20250410 [dmdba@cms-dmdb-2025temp ~]$

备份管理

管理备份一个重要的目的是删除不再需要的备份。DMRMAN 工具提供 SHOWCHECKREMOVELOAD 等命令分别用来查看、校验、删除和导出备份集。

备份信息查看

DMRMAN 中使用 SHOW 命令可以查看备份集的信息,若指定具体备份集目录,则会生成相应的备份集链表信息。使用方法如下:

#查看单个备份集信息 RMAN> SHOW BACKUPSETS '/dmdata/dmbak/db_full_bak_20250410' #批量显示备份集信息 #SHOW BACKUPSETS...命令用于批量显示指定搜索目录下的备份集信息。 #可通过WITH BACKUPDIR 参数指定多个备份集搜索目录,同时查看所有的备份集。 RMAN>SHOW BACKUPSETS WITH BACKUPDIR '/dmdata/dmbak'; [dmdba@cms-dmdb-2025temp ~]$ dmrman dmrman V8 RMAN> SHOW BACKUPSET '/dmdata/dmbak/db_full_bak_20250410'; SHOW BACKUPSET '/dmdata/dmbak/db_full_bak_20250410'; <backupset [DEVICE TYPE:DISK, BACKUP_PATH: /dmdata/dmbak/db_full_bak_20250410] info start ..........> <DB INFO> system path: /dmdata/data/DAMENG pmnt_magic: 1897457503 src_db_magic: 998333492 db_magic: 998333492 dsc node: 1 sys mode: 0 page check: 3 rlog encrypt: 0 rlog encrypt id: 0 external cipher[id/name]: 0/ external hash[id/name]: 0/ length in char: 0 use new hash: 1 page size: 8KB extent size: 16 case sensitive: 0 log page size: 512B unicode_flag/charset: 1 data version: 0x7000D sys version: V8 pseg version: 0x7000B enable policy: 0 archive flag: 1 blank_pad_mode: 0 crc_check: TRUE page_enc_slice_size: 4096 char_fix_storage: 0 sql_log_forbid: 0 secur_flag: 2 db_enc_extend_size: 0 page_check_hash_size: 0 dpc_magic: 0 <META INFO> backupset sig: BA backupset version: 0x400A backupset sub-version: 0xE database name: DAMENG backup name: DB_FULL_20250410_203722_440688 backupset description: n_magic: 0x1B3CFDF7 bakset_magic: 456982007 parent n_magic: 0xFFFFFFFF bakset_seqno: 0 meta file size : 120320 compressed level: 0 encrypt type: 0 parallel num: 1 backup range: database mpp_timestamp: 1744288642 with_huge: TRUE backupset_type: NORMAL mpp_flag: FALSE backup level: online backup type: full without log: FALSE without mirror: FALSE use_bct: FALSE end_lsn: 53913 max_trxid: 53759 base begin_lsn: -1 base end_lsn: -1 base n_magic: 0xFFFFFFFF from lsn: 0 base name: base backupset: backup time: 2025-04-10 20:37:27 min exec ver: 0x08010227 min dct ver: 4 pkg size: 0x04000000 bak_magic: 0 l_term_id: 0 term_id: 0 c_seqno: 3347 c_lsn: 53913 h_seqno: 3347 h_lsn: 53913 <EP INFO> EP[0]: begin_pkg_seq: 3306 begin_lsn: 50445 end_pkg_seq: 3347 end_lsn: 53913 <FILE INFO> backupset directory: /dmdata/dmbak/db_full_bak_20250410 backupset name: db_full_bak_20250410 backup data file num: 5 backup piece num: 2 backup huge file num: 0 backup image copy file num: 0 <backup_piece_list> $file_seq |$size(KB) |$pos_desc |$content_type 0 |14926 |db_full_bak_20250410.bak |DATA 1 |581 |db_full_bak_20250410_1.bak |LOG <data_file_list> $file_seq |$group_id |$group_name |$file_id |$file_path |$mirror_path |$file_len |$copy_num |$size_flag|$asm_mirror|$asm_striping 1 |0 |SYSTEM |0 |/dmdata/data/DAMENG/SYSTEM.DBF | |77594624 |0 |0 |1 |0 2 |1 |ROLL |0 |/dmdata/data/DAMENG/ROLL.DBF | |134217728 |0 |0 |1 |0 3 |4 |MAIN |0 |/dmdata/data/DAMENG/MAIN.DBF | |134217728 |0 |0 |1 |0 4 |5 |TEST |0 |/dmdata/data/DAMENG/TEST.DBF | |134217728 |0 |0 |1 |0 <arch_file_list> $file_seq |$dsc_seq |$file_path |$file_len |$begin_seqno |$begin_lsn |$end_seqno |$end_lsn 5 |0 | |589824 |3306 |50445 |3347 |53913 <huge_file_list> $group_id |$schema_id|$table_id |$column_id|$file_id |$file_len |$path <img_copy_file_list> $dst_file_path |$src_file_path |$file_type|$file_len <TABLESPACE INFO> <tablespace_list> $ts_id |$name |$state |$cache |$copy_num |$size_flag|$cipher_name |$opt_node 0 |SYSTEM |0 | |0 |0 | |65535 1 |ROLL |0 | |0 |0 | |65535 4 |MAIN |0 | |0 |0 | |65535 5 |TEST |0 |NORMAL |0 |0 | |65535 <backupset [DEVICE TYPE:DISK, BACKUP_PATH: /dmdata/dmbak/db_full_bak_20250410] info end .> show backupsets successfully. time used: 47.384(ms) RMAN>

备份集校验

DMRMAN 中使用 CHECK 命令对备份集进行校验,校验备份集是否存在及合法。

#语法:CHECK BACKUPSET '<备份集目录>' ; #CHECK BACKUPSET...命令用于校验特定备份集,每次只能检验一个备份集。 RMAN>CHECK BACKUPSET '/dmdata/dmbak/db_full_bak_20250410'; RMAN> CHECK BACKUPSET '/dmdata/dmbak/db_full_bak_20250410'; CHECK BACKUPSET '/dmdata/dmbak/db_full_bak_20250410'; [Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00] check backupset successfully. time used: 424.453(ms) RMAN>

备份集删除

DMRMAN 中使用 REMOVE 命令删除备份集,可删除单个备份集,也可批量删除备份集。单个备份集删除时并行备份中的子备份集不允许单独删除;在指定备份集搜集目录中,发现存在引用待删除备份集作为基备份的需要执行级联删除,默认报错。批量删除备份集时,跳过收集到的单独的子备份集。

REMOVE BACKUPSET '/dmdata/dmbak/db_full_bak_20250410'; RMAN> REMOVE BACKUPSET '/dmdata/dmbak/db_full_bak_20250410'; REMOVE BACKUPSET '/dmdata/dmbak/db_full_bak_20250410' ==============================Error Stack============================== DM[-8202]:[/dmdata/dmbak/db_incr_bak_20250410]的基备份,不能删除 ======================================================================= RMAN> REMOVE BACKUPSET '/dmdata/dmbak/db_incr_bak_20250410'; REMOVE BACKUPSET '/dmdata/dmbak/db_incr_bak_20250410'; remove backupset successfully. time used: 54.219(ms) RMAN> REMOVE BACKUPSET '/dmdata/dmbak/db_full_bak_20250410'; REMOVE BACKUPSET '/dmdata/dmbak/db_full_bak_20250410'; remove backupset successfully. time used: 54.639(ms) RMAN>

数据还原恢复

数据库还原

使用 RESTORE 命令完成脱机还原操作,在还原语句中指定库级备份集,可以是脱机库级备份集,也可以是联机库级备份集。

注意:通过 RESTORE 命令还原后的数据库不可用,需进一步执行 RECOVER 命令,将数据库恢复到备份结束时的状态。

以联机数据库备份说明使用 DMRMAN 如何执行数据库还原操作:

#创建测试恢复目录 mkdir -p /home/dmdba/huifu #联机备份数据库,保证数据库运行在归档模式及 OPEN 状态; SQL>BACKUP DATABASE BACKUPSET '/dmdata/dmbak/db_full_bak_for_restore'; #准备目标库。还原目标库可以是已经存在的数据库,也可使用dminit工具初始化一个新库。如下所示: dminit path=/home/dmdba/huifu PAGE_SIZE=8 EXTENT_SIZE=16 CASE_SENSITIVE=n CHARSET=1 DB_NAME=DAMENG_FOR_RESTORE INSTANCE_NAME=DMSERVER PORT_NUM=5237 SYSDBA_PWD=Sin0pharm SYSAUDITOR_PWD=Sin0pharm #校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验; RMAN>CHECK BACKUPSET '/dmdata/dmbak/db_full_bak_for_restore'; #还原数据库。启动 DMRMAN,输入以下命令: RMAN>RESTORE DATABASE '/home/dmdba/huifu/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/dmdata/dmbak/db_full_bak_for_restore'; [dmdba@cms-dmdb-2025temp ~]$ mkdir -p /home/dmdba/huifu [dmdba@cms-dmdb-2025temp ~]$ disql / as sysdba 服务器[LOCALHOST:5236]:处于普通打开状态 登录使用时间 : 4.005(ms) disql V8 SQL> BACKUP DATABASE BACKUPSET '/dmdata/dmbak/db_full_bak_for_restore'; 操作已执行 已用时间: 00:00:05.143. 执行号:2601. SQL> exit [dmdba@cms-dmdb-2025temp ~]$ dminit path=/home/dmdba/huifu PAGE_SIZE=8 EXTENT_SIZE=16 CASE_SENSITIVE=n CHARSET=1 DB_NAME=DAMENG_FOR_RESTORE INSTANCE_NAME=DMSERVER PORT_NUM=5237 SYSDBA_PWD=Sin0pharm SYSAUDITOR_PWD=Sin0pharm initdb V8 db version: 0x7000d file dm.key not found, use default license! License will expire on 2026-01-17 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL log file path: /home/dmdba/huifu/DAMENG_FOR_RESTORE/DAMENG_FOR_RESTORE01.log log file path: /home/dmdba/huifu/DAMENG_FOR_RESTORE/DAMENG_FOR_RESTORE02.log write to dir [/home/dmdba/huifu/DAMENG_FOR_RESTORE]. create dm database success. 2025-04-11 09:37:23 [dmdba@cms-dmdb-2025temp ~]$ dmrman dmrman V8 RMAN> CHECK BACKUPSET '/dmdata/dmbak/db_full_bak_for_restore'; CHECK BACKUPSET '/dmdata/dmbak/db_full_bak_for_restore'; [Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00] check backupset successfully. time used: 213.982(ms) RMAN> RESTORE DATABASE '/home/dmdba/huifu/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/dmdata/dmbak/db_full_bak_for_restore'; RESTORE DATABASE '/home/dmdba/huifu/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/dmdata/dmbak/db_full_bak_for_restore'; file dm.key not found, use default license! [Percent:100.00%][Speed:0.00M/s][Cost:00:00:05][Remaining:00:00:00] restore successfully. time used: 00:00:05.323 RMAN>

数据库恢复

使用 RECOVER 命令完成数据库恢复工作,可以是基于备份集的恢复工作,也可以是使用本地归档日志的恢复工作。数据库恢复是指重做 REDO 日志,有两种方式:从备份集恢复,即重做备份集中的 REDO 日志;或从归档恢复,即重做归档中的 REDO 日志。

方式一:从备份集恢复

#执行还原数据库的命令之后,可以直接执行恢复数据库的命令,如下: RMAN>RECOVER DATABASE '/home/dmdba/huifu/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/dmdata/dmbak/db_full_bak_for_restore'; RMAN> RECOVER DATABASE '/home/dmdba/huifu/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/dmdata/dmbak/db_full_bak_for_restore'; RECOVER DATABASE '/home/dmdba/huifu/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/dmdata/dmbak/db_full_bak_for_restore'; [Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00] recover successfully! time used: 00:00:02.987 RMAN>

方式二:从归档恢复

#通过使用 WITH ARCHIVEDIR 关键字进行归档恢复,如下: RMAN>RECOVER DATABASE '/home/dmdba/huifu/DAMENG_FOR_RESTORE/dm.ini' WITH ARCHIVEDIR'/dmdata/arch';

数据库更新

数据库更新是指更新数据库的 DB_MAGIC,并将数据库调整为可正常工作状态,与数据库恢复一样使用 RECOVER 命令完成。数据库更新发生在重做 REDO 日志恢复数据库后。

RMAN>RECOVER DATABASE '/home/dmdba/huifu/DAMENG_FOR_RESTORE/dm.ini' UPDATE DB_MAGIC; RMAN> RECOVER DATABASE '/home/dmdba/huifu/DAMENG_FOR_RESTORE/dm.ini' UPDATE DB_MAGIC; RECOVER DATABASE '/home/dmdba/huifu/DAMENG_FOR_RESTORE/dm.ini' UPDATE DB_MAGIC; file dm.key not found, use default license! recover successfully! time used: 00:00:01.545 RMAN>

数据库启动

#注册服务 cd /home/dmdba/dmdbms/script/root/ ./dm_service_installer.sh -t DMSERVER -dm_ini /home/dmdba/huifu/DAMENG_FOR_RESTORE/dm.ini -p DAMENG_FOR_RESTORE ls -lh /home/dmdba/dmdbms/bin/DmServiceDAMENG_FOR_RESTORE #启动 su - dmdba /home/dmdba/dmdbms/bin/DmServiceDAMENG_FOR_RESTORE start [root@cms-dmdb-2025temp ~]# cd /home/dmdba/dmdbms/script/root/ [root@cms-dmdb-2025temp root]# ./dm_service_installer.sh -t DMSERVER -dm_ini /home/dmdba/huifu/DAMENG_FOR_RESTORE/dm.ini -p DAMENG_FOR_RESTORE Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceDAMENG_FOR_RESTORE.service to /usr/lib/systemd/system/DmServiceDAMENG_FOR_RESTORE.service. 创建服务(DmServiceDAMENG_FOR_RESTORE)完成 [root@cms-dmdb-2025temp root]# ls -lh /home/dmdba/dmdbms/bin/DmServiceDAMENG_FOR_RESTORE -rwxr-xr-x 1 dmdba dinstall 19K Apr 11 09:50 /home/dmdba/dmdbms/bin/DmServiceDAMENG_FOR_RESTORE [root@cms-dmdb-2025temp root]# su - dmdba Last login: Thu Apr 10 22:23:29 CST 2025 on pts/3 [dmdba@cms-dmdb-2025temp ~]$ /home/dmdba/dmdbms/bin/DmServiceDAMENG_FOR_RESTORE start Starting DmServiceDAMENG_FOR_RESTORE: [ OK ] [dmdba@cms-dmdb-2025temp ~]$

验证恢复数据

[dmdba@cms-dmdb-2025temp ~]$ disql test@localhost:5237 密码: 服务器[localhost:5237]:处于普通打开状态 登录使用时间 : 5.396(ms) disql V8 SQL> SELECT * FROM V$DATABASE; 行号 NAME CREATE_TIME ARCH_MODE LAST_CKPT_TIME STATUS$ ROLE$ MAX_SIZE TOTAL_SIZE DSC_NODES OPEN_COUNT STARTUP_COUNT LAST_STARTUP_TIME ---------- ------ ------------------- --------- ------------------- ----------- ----------- -------------------- -------------------- ----------- ----------- -------------------- ------------------- 1 DAMENG 2025-04-11 09:39:49 N 2025-04-11 09:59:47 4 0 0 43520 1 8 1 2025-04-11 09:56:47 已用时间: 4.176(毫秒). 执行号:505. SQL> DELETE FROM city WHERE city_id='BJ'; 影响行数 1 已用时间: 3.425(毫秒). 执行号:502. SQL> commit; 操作已执行 已用时间: 15.230(毫秒). 执行号:503. SQL> SELECT * FROM city; 行号 city_id city_name region_id ---------- ------- --------- ----------- 1 SJZ 石家庄 1 2 SH 上海 2 3 NJ 南京 2 4 GZ 广州 3 5 HK 海口 3 6 WH 武汉 4 7 CS 长沙 4 8 SY 沈阳 5 9 XA 西安 6 10 CD 成都 7 10 rows got 已用时间: 2.693(毫秒). 执行号:504. SQL> SELECT * FROM V$INSTANCE; 行号 NAME INSTANCE_NAME INSTANCE_NUMBER HOST_NAME SVR_VERSION DB_VERSION START_TIME STATUS$ MODE$ OGUID DSC_SEQNO DSC_ROLE BUILD_VERSION BUILD_TIME ---------- -------- ------------- --------------- ----------------- -------------------------- ------------------- ------------------- ------- ------ ----------- ----------- -------- --------------------------------- -------------------- 1 DMSERVER DMSERVER 1 cms-dmdb-2025temp DM Database Server x64 V8 DB Version: 0x7000d 2025-04-11 09:56:45 OPEN NORMAL 0 0 NULL 03134284336-20250117-257733-20132 Jan 22 2025 09:13:48 已用时间: 2.964(毫秒). 执行号:506. SQL> exit [dmdba@cms-dmdb-2025temp ~]$
最后修改时间:2025-04-11 10:06:31
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论