单机安装部署

一、数据库软件安装

1.1 解压安装包

1.1.1 Windows 环境

Windows 环境中,如果安装包是压缩包,而非 exe 文件,则需要先对压缩包进行解压,右键解压即可。

1.1.2 Linux 环境

iso 后缀的文件,需要对文件进行挂载,命令如下:

mount -o loop /opt/dmsetup/dm8_20200907_FTarm_kylin4_64_ent_8.1.1.126.iso /dm

挂载

1.2 安装数据库软件

1.2.1 Windows 环境

1)运行安装程序

双击 “setup.exe” 安装程序后可根据系统配置选择相应语言与时区,点击“确定”按钮继续安装。如下图所示:

选择语言与时区

2)欢迎页面

点击“开始”按钮继续安装。如下图所示:

安装向导

3)许可证协议

在安装和使用之前,该安装程序需要阅读许可协议条款,如接受该协议,则选中“接受”,并点击“下一步”继续安装;若选中“不接受”,将无法进行安装。如下图所示:

许可证协议

4)验证 Key 文件

点击“浏览”按钮,选取 Key 文件,安装程序将自动验证 Key 文件信息。如果是合法的 Key 文件且在有效期内,用户可以点击“下一步”继续安装。如下图所示:

选择 Key 文件

5)选择安装组件

数据库软件安装程序提供四种安装方式:“典型安装”、“服务器安装”、“客户端安装”和“自定义安装”,用户可根据实际情况灵活地选择。如下图所示:

典型安装包括:服务器、客户端、驱动、用户手册、数据库服务。
服务器安装包括:服务器、驱动、用户手册、数据库服务。
客户端安装包括:客户端、驱动、用户手册。
自定义安装包括:用户根据需求勾选组件,可以是服务器、客户端、驱动、用户手册、数据库服务中的任意组合。
生产环境可以根据实际需求选择,一般情况下选择"典型安装"即可。

选择组件

6)选择安装目录

根据前期规划,指定安装路径。

选择安装位置

注意

安装路径里的目录名由英文字母、数字和下划线等组成,不建议使用包含空格和中文字符等的路径。

7)安装前小结

显示即将进行的安装有关信息,例如产品名称、版本信息、安装类型、安装目录、可用空间、可用内存等信息,用户检查无误后点击“安装”按钮进行软件安装。如下图所示:

安装前小结

8)完成安装

点击“完成”,完成数据库安装。

完成安装

1.2.2 Linux 环境

严禁使用 root 用户安装数据库及数据库相关操作。必须使用 dmdba 用户执行安装以及数据库相关操作。

  • 图形化方式

1)安装运行

执行 ./DMInstall.bin 命令将运行图形化安装。根据系统配置选择相应语言与时区,点击“确定”按钮继续安装。如下图所示:

选择语言与时区

2)欢迎页面

点击“开始”按钮继续安装。如下图所示:

安装向导

3)许可证协议

在安装和使用之前,该安装程序需要用户阅读许可协议条款,用户如接受该协议,则选中“接受”,并点击“下一步”继续安装;用户若选中“不接受”,将无法进行安装。如下图所示:

许可证协议

4)验证 Key 文件

点击“浏览”按钮,选取 Key 文件,安装程序将自动验证 Key 文件信息。如果是合法的 Key 文件且在有效期内,用户可以点击“下一步”继续安装。如下图所示:

选择 Key 文件

5)选择安装组件

数据库软件安装程序提供四种安装方式:“典型安装”、“服务器安装”、“客户端安装”和“自定义安装”,用户可根据实际情况灵活地选择。如下图所示:

典型安装包括:服务器、客户端、驱动、用户手册、数据库服务。
服务器安装包括:服务器、驱动、用户手册、数据库服务。
客户端安装包括:客户端、驱动、用户手册。
自定义安装包括:用户根据需求勾选组件,可以是服务器、客户端、驱动、用户手册、数据库服务中的任意组合。
生产环境可以根据实际需求选择,一般情况下选择"典型安装"即可。

选择组件

6)选择安装目录

根据前期规划,指定安装路径。

选择安装位置

注意

安装路径里的目录名由英文字母、数字和下划线等组成,不建议使用包含空格和中文字符等的路径。

7)安装前小结

显示即将进行的安装的有关信息,例如产品名称、版本信息、安装类型、安装目录、可用空间、可用内存等信息,用户检查无误后点击“安装”按钮进行软件的安装。如下图所示:

安装前小结

8)注册数据库服务

当安装进度完成时将会弹出对话框,提示使用 root 系统用户执行相关命令。用户可根据对话框的说明完成相关操作,之后可关闭此对话框,点击“完成”按钮结束安装。如下图所示:

执行配置脚本

以 root 用户执行脚本

9)完成安装

点击“完成”,完成数据库安装。

完成安装

  • 命令行方式

1)执行安装命令

在终端进入到安装程序所在文件夹,执行以下命令进行命令行安装:

[dmdba@~]# /opt/dmsetup/DMInstall.bin -i

2)选择安装语言

根据系统配置选择相应语言,输入选项,回车进行下一步。如下所示:

请选择安装语言(C/c:中文 E/e:英文) [C/c]:C
解压安装程序..........
欢迎使用达梦数据库安装程序

3)验证 key 文件

可以选择是否输入 Key 文件路径。不输入则进入下一步安装,输入 Key 文件路径,安装程序将显示 Key 文件的详细信息,如果是合法的 Key 文件且在有效期内,可以继续安装。如下所示:

是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]:Y
请输入Key文件的路径地址 [dm.key]:/opt/dmsetup/dm.key
有效日期: 2020-12-25
服务器颁布类型: 企业版
发布类型: 试用版
用户名称: 武汉达梦公司疫情期间临时授权
授权用户数: 无限制
并发连接数: 无限制

4)输入时区

可以选择的时区信息。如下所示:

是否设置时区? (Y/y:是 N/n:否) [Y/y]:Y
设置时区:
[ 1]: GTM-12=日界线西
[ 2]: GTM-11=萨摩亚群岛
[ 3]: GTM-10=夏威夷
[ 4]: GTM-09=阿拉斯加
[ 5]: GTM-08=太平洋时间(美国和加拿大)
[ 6]: GTM-07=亚利桑那
[ 7]: GTM-06=中部时间(美国和加拿大)
[ 8]: GTM-05=东部部时间(美国和加拿大)
[ 9]: GTM-04=大西洋时间(美国和加拿大)
[10]: GTM-03=巴西利亚
[11]: GTM-02=中大西洋
[12]: GTM-01=亚速尔群岛
[13]: GTM=格林威治标准时间
[14]: GTM+01=萨拉热窝
[15]: GTM+02=开罗
[16]: GTM+03=莫斯科
[17]: GTM+04=阿布扎比
[18]: GTM+05=伊斯兰堡
[19]: GTM+06=达卡
[20]: GTM+07=曼谷,河内
[21]: GTM+08=中国标准时间
[22]: GTM+09=汉城
[23]: GTM+10=关岛
[24]: GTM+11=所罗门群岛
[25]: GTM+12=斐济
[26]: GTM+13=努库阿勒法
[27]: GTM+14=基里巴斯
请选择设置时区 [21]:21

5)选择安装类型

数据库软件安装程序提供四种安装方式:“典型安装”、“服务器安装”、“客户端安装”和“自定义安装”,用户可根据实际情况灵活地选择。如下所示:

典型安装包括:服务器、客户端、驱动、用户手册、数据库服务。
服务器安装包括:服务器、驱动、用户手册、数据库服务。
客户端安装包括:客户端、驱动、用户手册。
自定义安装包括:用户根据需求勾选组件,可以是服务器、客户端、驱动、用户手册、数据库服务中的任意组合。
生产环境可以根据实际需求选择,一般情况下选择"典型安装"即可。

安装类型:
1 典型安装
2 服务器
3 客户端
4 自定义
请选择安装类型的数字序号 [1 典型安装]:1
所需空间: 1010M

6)选择安装路径

输入数据库软件的安装路径,不输入则使用默认路径,默认路径为 $HOME/dmdbms (如果安装用户为 root ,则默认安装路径为 /opt/dmdbms ,但不建议使用 root 系统用户来安装)。如下所示:

请选择安装目录 [/home/dmdba/dmdbms]:/opt/dmdbms
可用空间: 11G
注意

安装路径里的目录名由英文字母、数字和下划线等组成,不建议使用包含空格和中文字符等的路径。

7)安装小结

安装程序将打印用户之前输入的部分安装信息。如下所示:

是否确认安装路径(/opt/dmdbms)? (Y/y:是 N/n:否)  [Y/y]:Y
安装前小结
安装位置: /opt/dmdbms
所需空间: 1010M
可用空间: 11G
版本信息: 企业版
有效日期: 2020-12-25
安装类型: 典型安装

8)安装

是否确认安装? (Y/y:是 N/n:否):Y
2020-12-24 21:52:38 
[INFO] 安装达梦数据库...
2020-12-24 21:52:39 
[INFO] 安装 基础 模块...
2020-12-24 21:52:48 
[INFO] 安装 服务器 模块...
2020-12-24 21:52:48 
[INFO] 安装 客户端 模块...
2020-12-24 21:52:56 
[INFO] 安装 驱动 模块...
2020-12-24 21:52:58 
[INFO] 安装 手册 模块...
2020-12-24 21:53:00 
[INFO] 安装 服务 模块...
2020-12-24 21:53:02 
[INFO] 移动ant日志文件。
2020-12-24 21:53:03 
[INFO] 安装达梦数据库完成。

请以root系统用户执行命令:
/opt/dmdbms/script/root/root_installer.sh

安装结束

9)注册数据库服务

当安装进度完成时将会弹出对话框,提示使用 root 系统用户执行相关命令。用户可根据对话框的说明完成相关操作,之后可关闭此对话框,点击“完成”按钮结束安装。如下所示:

[dmdba@~]# su - root
密码:<输入密码>
[root@~]# /opt/dmdbms/script/root/root_installer.sh
移动 /opt/dmdbms/bin/dm_svc.conf 到/etc目录
修改服务器权限
创建DmAPService服务
Created symlink from /etc/systemd/system/multiuser.target.wants/DmAPService.service to /usr/lib/systemd/system/DmAPService.service
创建服务(DmAPService)完成
启动DmAPService服务

1.3 初始化数据库实例

1.3.1 Windows 环境

初始化实例的示例如下:设置页大小(PAGE_SIZE)为 32,日志大小(LOG_SIZE)为 2048,大小写(CASE_SENSITIVE)为敏感,字符集(CHARSET)为 GB18030。

其它参数默认,如需设置其它参数,请参考安装路径 doc 目录下的《dminit 使用手册》。

1)选择操作方式

在创建数据库实例、删除数据库实例、注册数据库服务和删除数据库服务四种操作方式中,选择创建数据库实例选项,点击“开始”进入下一步。

打开数据库配置助手

2)创建数据库模板

系统提供三套数据库模板供用户选择:一般用途、联机分析处理和联机事务处理,用户可根据自身的用途选择相应的模板。通常选择“一般用途”,如下图所示:

创建数据库模板

3)选择数据库目录

根据前期规划,通过浏览或是输入的方式选择数据库所在目录。如下图所示:

指定数据库所在目录

注意

路径里的目录名由英文字母、数字和下划线等组成,不建议使用包含空格和中文字符等的路径。

4)输入数据库标识

可输入数据库名称、实例名、端口号等参数。如下图所示:

数据库标识

5)数据库文件所在位置

通过选择或输入确定数据库控制、数据库日志等文件的所在位置,并可通过右侧功能按钮,对文件进行添加或删除。如下图所示:

数据库文件所在位置

6)数据库初始化参数

可输入数据库相关参数,如簇大小、页大小、日志文件大小、选择字符集、是否大小写敏感等。如下图所示:

初始化参数

注意

实际环境中,簇大小建议选择 16,页大小选择 32K,日志大小选择 2048,字符集和大小写敏感需要和应用厂商对接后,再进行选择。

7)创建数据库摘要

在安装数据库之前,将显示数据库配置工具设置的相关参数。如下图所示:

创建数据库概要

8)安装初始化数据库

安装过程如下图所示:

创建数据库

9)安装结束

安装结束时,点击完成即可。如下图所示:

创建数据库完成

1.3.2 Linux 环境

  • 图形化方式

初始化实例的示例如下:设置页大小(PAGE_SIZE)为 32,日志大小(LOG_SIZE)为 2048,大小写(CASE_SENSITIVE)为敏感,字符集(CHARSET)为 GB18030。

其它参数默认,如需更改其它参数,请参考安装路径 doc 目录下的《dminit 使用手册》。

1)选择操作方式

在创建数据库实例、删除数据库实例、注册数据库服务和删除数据库服务四种操作方式中,选择创建数据库实例选项,点击“开始”进入下一步。

打开数据库配置助手

2)创建数据库模板

系统提供三套数据库模板供用户选择:一般用途、联机分析处理和联机事务处理,用户可根据自身的用途选择相应的模板。通常选择“一般用途”,如下图所示:

创建数据库模板

3)选择数据库目录

根据前期规划,通过浏览或是输入的方式选择数据库所在目录。如下图所示:

指定数据库所在目录

注意

路径里的目录名由英文字母、数字和下划线等组成,不建议使用包含空格和中文字符等的路径。

4)输入数据库标识

可输入数据库名称、实例名、端口号等参数。如下图所示:

数据库标识

5)数据库文件所在位置

通过选择或输入确定数据库控制、数据库日志等文件的所在位置,并可通过右侧功能按钮,对文件进行添加或删除。如下图所示:

数据库文件所在位置

6)数据库初始化参数

可输入数据库相关参数,如簇大小、页大小、日志文件大小、选择字符集、是否大小写敏感等。如下图所示:

初始化参数

注意

实际环境中,簇大小建议选择 16,页大小选择 32K,日志大小选择 2048,字符集和大小写敏感需要和应用厂商对接后,再进行选择。

7)创建数据库摘要

在安装数据库之前,将显示数据库配置工具设置的相关参数。如下图所示:

创建数据库概要

8)安装初始化数据库

安装过程如下图所示:

创建数据库

9)注册数据库服务

当安装进度完成时将会弹出对话框,提示使用 root 系统用户执行相关命令。用户可根据对话框的说明完成相关操作,之后可关闭此对话框,点击“完成”按钮结束安装。如下图所示:

执行配置脚本

以 root 用户执行脚本

10)安装结束

安装结束时,点击完成即可。如下图所示:

创建数据库完成

  • 命令行方式

1)初始化过程

初始化实例的示例如下:设置页大小(PAGE_SIZE)为 32,日志大小(LOG_SIZE)为 2048,大小写(CASE_SENSITIVE)为敏感,字符集(CHARSET)为 GB18030。

其它参数默认,如需更改其它参数,请参考安装路径 doc 目录下的《dminit 使用手册》。

[dmdba@~]# /opt/dmdbms/bin/dminit PATH=/opt/dmdbms/data PAGE_SIZE=32 LOG_SIZE=2048 CHARSET=0 CASE_SENSITIVE=Y
initdb V8
db version: 0x7000a
License will expire in 1 day(s) on 2020-12-25
log file path: /opt/dmdbms/data/DAMENG/DAMENG01.log
log file path: /opt/dmdbms/data/DAMENG/DAMENG02.log
write to dir [/opt/dmdbms/data/DAMENG].
create dm database success. 2020-12-24 22:05:38

初始化参数设置

注意

实际环境中,簇大小建议选择 32,页大小选择 32K,日志大小选择 2048,字符集和大小写敏感需要和应用厂商对接后,再进行选择。

2)创建实例服务

[dmdba@~]# su - root
密码:<输入密码>
[root@~]# /opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /opt/dmdbms/data/DAMENG/dm.ini -p DMSERVER
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceDMSERVER.service to /usr/lib/systemd/system/DmServiceDMSERVER.service.
创建服务(DmServiceDMSERVER)完成

创建实例服务

3)启动实例服务

[dmdba@~]# /opt/dmdbms/bin/DmServiceDMSERVER start
Starting DmServiceDMSERVER:[ OK ]

1.3.3 实例参数介绍

  • 异构数据库建议参数

迁移异构数据库时,建议实例参数值如下:

关注点 DM查询方式 ORACLE查询方式 MYSQL查询方式
字符集 SELECT '字符集',DECODE(UNICODE,'0','GB18030','1','UTF-8','2','EUC-KR') SELECT USERENV('LANGUAGE') FROM DUAL; SHOW VARIABLES LIKE '%CHARACTER%';
大小写是否敏感 SELECT '大小写敏感',DECODE(SF_GET_CASE_SENSITIVE_FLAG,'0','不敏感','1','敏感') 建议设置为敏感 SHOW GLOBAL VARIABLES LIKE "%LOWER%";
(1,大小写不敏感;0,大小写敏感)
建议设置为不敏感
VARCHAR以字符为单位 SELECT 'CHAR是否以字符为单位',DECODE(PARA_VALUE,0,'否',1,'是') FROM V$DM_INI WHERE "V$DM_INI".PARA_NAME='LENGTH_IN_CHAR'; 建议设置为否 建议设置为是
页大小 SELECT '页大小',PAGE()/1024||'KB';
建议设置为32
建议设置为32 SHOW GLOBAL STATUS LIKE 'INNODB_PAGE_SIZE';
建议设置为32
兼容性要求 SELECT '数据库兼容',DECODE(PARA_VALUE,0,'不兼容',1,'SQL92',2,'ORACLE',3,'MS SQL SERVER',4,'MYSQL',5,'DM6',6,'TERADATA') FROM V$DM_INI WHERE PARA_NAME='COMPATIBLE_MODE'; / /
其他要求 SELECT '关键字过滤',PARA_VALUE FROM V$DM_INI WHERE PARA_NAME ='EXCLUDE_RESERVED_WORDS';
同时核实 DM_SVC.CONF
CAT /ETC/DM_SVC.CONF GREP KEYWORDS
/ /

具体参数值重点以用户查询的结果为准。

  • 常用实例参数介绍

本章节列举常用参数,如需更改其它参数,请参考安装路径 doc 目录下的《dminit 使用手册》。

  1. PATH

初始数据库存放的路径。默认路径为 dminit 当前所在的工作目录。文件路径长度最大为 256 个字符,PATH 为可选参数。

生产环境中,该路径可根据前期规划的路径进行修改,一般为最大空间路径。

  1. EXTENT_SIZE

数据文件使用的簇大小,即每次分配新的段空间时连续的页数。取值:16、32、64。单位:页数。缺省值 16。EXTENT_SIZE 为可选参数。

生产环境中该参数保持默认即可。

  1. PAGE_SIZE

数据文件使用的页大小。取值:8、16、32,单位:K。默认值为 8。可选参数。选择的页大小越大,则支持的元组长度也越大,但同时空间利用率可能下降。

关于页大小 PAGE_SIZE。Oracle 也叫块大小(block),在达梦数据库中,页大小可以为 8 KB、16 KB 或者 32 KB,一旦创建好了数据库,在该库的整个生命周期内,页大小都不能够改变。如果系统中存在或者以后可能存在含有较长的字符串类型的表,建议该参数设置为 16 或者 32。页大小设置越大,最后数据文件的物理大小就会越大,系统运行时,每次从磁盘调入内存的数据单位也就越大。除了每个字段的最大长度限制外,每条记录总长度不能大于页面大小的一半,如下图:

页大小

生产环境中该参数建议设置为 32,或依据用户实际需求进行指定。

  1. LOG_SIZE

重做日志文件大小。取值:64~2048 之间的整数,单位 M 。默认值为 256。可选参数。每个数据库实例至少有两个重做日志文件,循环使用,LOG_SIZE 设置每个重做日志文件的大小。

生产环境中该参数建议给 2048,或依据用户实际需求进行指定。

  1. CASE_SENSITIVE

标识符大小写敏感。当大小写敏感时,小写的标识符应用""括起,否则被系统自动转换为大写;当大小写不敏感时,系统不会转换标识符的大小写,在标识符比较时也不能区分大小写。取值:Y、y、1 表示敏感;N、n、0 表示不敏感。默认值为 Y 。可选参数。

DM 为了兼容不同的数据库,在初始化数据库的时候有一个参数字符串比较大小写敏感,用于确定数据库对象及数据是否区分大小写,默认为区分,不可更改。建议 MYSQL 和 SQLSERVER 迁移过来的系统,使用大小写不敏感,ORACLE 迁移过来的系统,使用大小写敏感,以便和原来系统匹配。

生产环境中该参数依据用户实际需求进行指定。

实际环境影响范围:

  1. 对象名:
    (1)在大小写敏感时:对于创建表,表名不加双引号(例如 Abc ),系统会自动转换成大写表名;如果表名添加双引号(例如 "Abc" ),那么创建的表名就是双引号下的实际表名。
    (2)在大小写不敏感时:对于创建表,表名是否加双引号(例如 Abc 或者 "Abc" ),对查询结果没影响。
  2. 字符串内容
    (1)在大小写敏感时:对于插入的数据,如果数据是字符串( 'Abc' 和 'ABC' 各一条),那么数据就是单引号内的实际数据。
    (2)在大小写不敏感时:对于插入的数据,如果数据是字符串( 'Abc' 和 'ABC' 各一条),那么数据就不会区分大小写,都可识别。
  3. CHARSET/UNICODE_FLAG

字符集选项。取值:0 代表 GB18030,1 代表 UTF-8,2 代表韩文字符集 EUC-KR。默认为 0。可选参数。

GB18030 编码向下兼容 GBK 和 GB2312,兼容的含义是不仅字符兼容,而且相同字符的编码也相同。GB18030 收录了所有 Unicode3.1 中的字符,包括中国少数民族字符,GBK 不支持的韩文字符等等,也可以说是世界大多民族的文字符号都被收录在内。

Unicode Transformation Format-8bit 是用以解决国际上字符的一种多字节编码,它对英文使用 8 位(即一个字节),中文使用 24 为(三个字节)来编码。UTF-8 包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8 编码的文字可以在各国支持 UTF8 字符集的浏览器上显示。

建议采用默认值 GB18030,如果需要国际字符可以采用 Unicode,GB18030 数字字母占 1 个字节,普通汉字占 2 个字节,部分繁体及少数民族文字占 4 字节,Unicode 在达梦中采用 UTF-8 编码格式,欧洲的字母字符占 1 到 2 个字节,亚洲的大部分字符占 3 个字节,附加字符为 4 个字节。如果只存储中文和字母数字,一般来说 GB18030 更节省空间一些。

生产环境中该参数依据用户实际需求进行指定。

  1. LENGTH_IN_CHAR

VARCHAR 类型对象的长度是否以字符为单位。取值:1、Y 表示是,0、N 表示否。默认值为 0。可选参数。

1 或 Y:是,所有 VARCHAR 类型对象的长度以字符为单位。这种情况下,定义长度并非真正按照字符长度调整,而是将存储长度值按照理论字符长度进行放大。所以会出现实际可插入字符数超过定义长度的情况,这种情况也是允许的。同时,存储的字节长度 8188 上限仍然不变,也就是说,即使定义列长度为 8188 字符,其实际能插入的字符串占用总字节长度仍然不能超过 8188;

0 或 N:否,所有 VARCHAR 类型对象的长度以字节为单位。

生产环境中该参数依据用户实际需求进行指定。

此参数配合字符集时,有多种搭配结果:

  1. 当参数 UNICODE_FLAG=1LENGTH_IN_CHAR=0 时。一个汉字占用三个字节,一个英文占用一个字节。例如:列定义为 varchar(3),那么只能存入 1 个汉字或者 3 个英文字母。如下图:

列长度定义 1

  1. 当参数 UNICODE_FLAG=1LENGTH_IN_CHAR=1 时,一个汉字占三个字节,一个英文字母占一个字节,一个字符四个字节(即一个 varchar 单位占四个字节),可以存四个英文字母。例如:列定义为 varchar(1),那么最多只能存入一个汉字或者 4 个英文字母。如下图:

列长度定义 2

  1. 当参数 UNICODE_FLAG=0LENGTH_IN_CHAR=1 时,一个汉字占两个字节一个字符,一个英文字母占一个字节,一个字符可以存一个汉字或者两个英文字母。例如:列定义为 varchar(3),那么最多只能存入三个汉字或者 6 个英文字母。如下图:

列长度定义 3

  1. 当参数 UNICODE_FLAG=0LENGTH_IN_CHAR=0 时,一个汉字占两个字节,一个英文字符占一个字节。一个汉字占用两个字节。例如:列定义为 varchar(3),那么最多存入一个汉字或者 3 个英文字母。如下图:

列长度定义 4

  1. DB_NAME

初始化数据库名称,默认为 DAMENG。名称为字符串,长度不能超过 128 个字符。可选参数。WINDOWS 下文件名不能包含字符 /\*:? <>"|,LINUX 下文件名不能包含字符 /\:<>"|

生产环境中该参数一般保持默认,或依据用户实际需求进行指定。

  1. INSTANCE_NAME

初始化数据库实例名称,默认为 DMSERVER。名称为字符串,长度不能超过 128 个字符。可选参数。
生产环境中该参数一般保持默认,或依据用户实际需求进行指定。

  1. PORT_NUM

初始化时设置 dm.ini 中的监听端口号,默认 5236 。服务器配置此参数,有效值范围(1024~65534),发起连接端的端口在 1024~65535 之间随机分配。可选参数。

生产环境中该参数一般保持默认,或依据用户实际需求进行指定。

二、数据库配置

2.1 数据库参数优化调整

2.1.1 执行优化脚本

数据库参数自动优化脚本:AutoParaAdj.sql.sql

说明:为便于演示,以数据库服务器 cpu 总核数为 16,物理总内存大小为 32G 为例。

  1. 根据数据库服务器 cpu 核数和物理内存大小调整脚本中 v_mem_mb(数据库服务器物理内存大小)与 v_cpus(数据库服务器 cpu 核数)值。参数修改后的样例如下图所示:

修改后样例

  1. 将修改后的优化脚本使用 disql 或管理工具执行。
  • 使用 disql 执行优化脚本

1)在 disql 中执行如下语句:

SQL> set serveroutput on
SQL> start /home/dmdba/AutoParaAdj.sql

2)拷贝优化脚本的输出结果:

image.png

3)执行拷贝的输出结果

image.png

4)脚本执行成功后,须重启数据库使参数生效。进入数据库 bin 目录,以数据库服务名为 DmServiceDAMENG 为例。

[dmdba@localhost bin]$ ./DmServiceDAMENG restart
  • 使用 DM 管理工具执行优化脚本

1)新建文件 AutoParaAdj.sql,拷贝修改后的脚本到 AutoParaAdj.sql 并保存。
2)使用管理工具以 SYSDBA 用户登录。
3)点击执行脚本,在弹出的打开窗口中选中保存的 AutoParaAdj.sql 文件并打开。

image.png4)复制脚本输出的内容。image.png
5.拷贝输出结果在新的窗口中进行执行

image.png

6)脚本执行成功后,须重启数据库使参数生效。进入数据库 bin 目录,以数据库服务名为 DmServiceDAMENG 为例。

[dmdba@localhost bin]$ ./DmServiceDAMENG restart

2.1.2 数据库内存参数说明

  • 内存相关参数
参数名 推荐值 说明
MEMORY_POOL 查看 v$mem_pool 尽量保持每个池自持,减少池外分配。 共享内存池一次性向操作系统申请大片的内存,即内存池在实例运行中需要内存时,可在共享内存池内进行申请或者释放。内存充裕时,建议放大,减少向操作系统申请/释放内存,避免因效率低下造成操作系统内存零碎化。
MEMORY_N_POOLS 高并发下建议调大,建议设置为质数,减少临界区冲突。 共享内存池个数;把共享内存池划分为几个独立的单元,以减少并发访问的冲突,提升并发效率;分片数根据维护的全局变量进行取模。
MEMORY_TARGET 实例级别的共享内存区域,空闲是否释放多余占用内存的控制值,要求 >=MEMORY_POOL 共享内存池扩充上线。当超过此大小后,空闲时会收缩回此指定大小。
BUFFER 推荐值:为物理内存的 50% 左右;具体是否够用,可以通过查看 v$bufferpool 分析命中率,不宜低于 75%。 用户对表空间进行查询、删除、增加,都是操作的这个区域,该区域是固定的,通过 LRU 进行淘汰,且一般不用考虑是否存在内存泄漏。
BUFFER_POOLS 高并发下建议调大,建议设置为质数。 配置的是 BUFFER 分片的数量,每一个 BUFFER 片是一个独用资源,在同一时刻,只能被一个人访问。在高并发情况下,特别是 BUFFER 自身还存在严重的换入换出时,会极大降低系统使用效率,特别是磁盘 IO 性能很差的情况(例如,经常要访问的数据有 500G,而只有 50G 内存时,BUFFER 就会经常和磁盘做文件置换:把 BUFFER 里面的被修改过的数据写到磁盘、把 BUFFER 里面最早未被使用的内存区域释放掉、把要访问的数据写到 BUFFER,这是一个很冗长的过程)。BUFFER_POOLS 是把一个大的系统缓冲区分割为多个小的部分,每一个小的部分作为临界资源,这样只要所访问的数据页不在同一个池子里,就会少发生冲突,从而提升并发性能;但是如果磁盘性能较差,或者经常被访问到的数据远远大于服务器可用内存,配置 BUFFER_POOLS 则没有太大意义。
RECYCLE 一般设置为 1000 即可,内存比较小的虚拟机也可设置为 500;具体是否足够,需要根据实例运行后的对应 recycle 缓冲区的命中率和相关信息进行判断。高并发或大量使用 with、临时表、排序等的情境下应该适当调整该参数大小。 RECYCLE 的淘汰算法与 BUFFER 完全一样,引入 RECYCLE 的目的是防止某些复杂查询的中间结果挤占大量的 BUFFER 空间,降低 BUFFER 的命中率,从而增加额外的 IO 操作。使用 RECYCLE 的场景主要有:
(1)大表的散列连接,在内存达到 HJ_BUF_SIZE 时使用;
(2)排序,大数据量的排序操作;
(3)蓄水池操作符,如:NTTSSPLHTAB 等,这些操作符需要把数据收集在一起;
(4)临时表数据;
(5)MAL 系统中,堆积的邮件;
(6)并行查询中,堆积的消息;
(7)大字段的临时数据。
RECYCLE_POOLS 默认即可或依据实际情况稍调大。 RECYCLE 的分区数;减少冲突,提升并发性能。
SORT_BUF_SIZE 不需要设置太大,可以通过查看 v$mtab_used_history 来确定是否够用。 SORT_FLAG 为 0 时,该参数设置的单个 SORT 操作符的可用内存上限,小于需要内存就会和磁盘做交互;系统内所有活动会话语句,可用的总的排序内存上限,由 SORT_BUF_GLOBAL_SIZE 设置,超过就报错,但不影响已经在运行的会话。
SORT_BUF_GLOBAL_SIZE 需要根据系统并发、和 SORT_FLAG 的配置来看。 SORT_FLAG 为 1 时,单个 SORT 操作符是可以用到 SORT_BUF_GLOBAL_SIZE 配置的内存大小的。
HJ_BUF_GLOBAL_SIZE 该参数不需要设置太大,一般情况下哈希连接所用的内存都不大。 HJ_BUF_GLOBAL_SIZE 指定 DM 中同时进行的 HASH 连接一共可使用的最大内存。如果系统需要同时做很多个 HASH 连接,可以考虑增大这个参数的值。
HJ_BUF_SIZE 单个 HASH 操作所用内存大小,若内存不够就和磁盘做交互。 HJ_BUF_SIZE 指定单个 HASH 连接可使用的最大内存大小,其参数值不能超过 HJ_BUF_GLOBAL_SIZE 参数值。
HAGR_BUF_GLOBAL_SIZE 该参数需要设置的足够大,特别是系统中有分组、集合运算、统计信息、DISTINCT、临时表、TOP 等操作,且当这类操作并发较高时,一定要关注 v$sysstat 中间的相关监控值,检查 HAGR 的使用率,并判断是否要扩大。 在 DM 中,分组、集合运算、统计信息、DISTINCT 、临时表、TOP 等操作均会使用此空间。用户应根据应用操作的数据量进行参数设置,在内存允许的情况下可将 HAGR_BUF_GLOBAL_SIZE 设大一些,尽量满足实际需要。
HAGR_BUF_SIZE 单个 HAGR 类型的操作所用内存大小,若内存不够就和磁盘做交互。 如上。
DICT_BUF_SIZE 大小够用即可。如果系统进行压力测试时,CPU 使用率不高,但效率很差,可以优先查看该值是否为默认值,并进行调整。 字典缓冲区主要存储一些数据字典信息,如模式信息、表信息、列信息、触发器信息等。每次对数据库的操作都会涉及到数据字典信息,访问数据字典信息的效率直接影响到相应的操作效率。
CACHE_POOL_SIZE 执行 sql 语句过程中所需要的内存,包括包信息、计划、sql 语句和结果集缓存,按需配置,不建议配置的过大。 SQL 缓冲池大小,单位为 MB。
SESS_POOL_SIZE 高并发下推荐设置为 1024。 会话缓冲区能扩充到的最大大小。
SESS_POOL_TARGET 单个 SESSION 的内存片上,空闲释放的控制水位,该参数要求 >=SESS_POOL_SIZE。 会话缓冲区能扩充到的最大大小,以 KB 为单位。
MAX_SESSION_MEMORY 建议根据实际需求配置,且不宜 >2GB。 单个会话的运行内存上限,该参数是系统级动态参数,修改后立即对所有会话生效。
  • 数据库三大内存

简单来说,数据库有“三大片内存”:Buffer、mem_pool、会话级私有的。使用过程中需要明确以下内容:

  1. Buffer 是固定配置的,Buffer 大小与磁盘 IO 性能紧密相关。
  2. mem_pool 是不固定的,无法进行限制,但可以通过“高水位”来控制。即曾经超过这个值没关系,如果未来空闲下来后,超过这个高水位的,需要立即释放掉。可通过 Select * from v$dm_ini where para_name like ‘%TARGET’; 查看相关值。
  3. 私有会话池可能是单独申请的,也可能是通过 mem_pool 申请而来。如果是单独申请的,原则上认为它可以自行进行内存管理和释放,当语句执行完成后,即可释放内存。如果是通过 mem_pool 申请而来,例如 sess_pool_size 内存区,它的释放与否与 sess_pool_targetmem_pool_target 的配置相关。
  • MAX_SESSION 和内存使用上限

当前绝大部分应用系统都是使用连接池配置,有时会出现需要配置 max_session 较大的需求,在实际生产环境中,属于危险操作,原因如下:

  1. 如果使用的是 mem_pool 申请的内存,则会通过两层 target 进行管理和释放。但如果是 session 独立申请和管理的内存,其释放机制不清,只能保证断开会话连接时会进行释放。
  2. 连接池的作用是保证连接即来即用。当连接池配置过大时,例如启动应用,连接池初始化了 1000 个连接,而系统运行过程中,最大并发数仅为 5(即最大可能只有 5 个会话在运行;同时,系统 99% 的语句,在运行时需要的内存为 10MB,但是 1% 的语句,在运行时内存需要使用的内存可能为 1G)。这种情况下,当应用系统运行一段时间后,这 1% 的语句,可能会把 1000 个连接都遍历一次,如果相关配置没有处理好,可能就会需要 1000*1G=1T 的服务器内存,极易影响数据库的稳定运行。如果这 1% 的连接每次使用完都断开连接,则不会出现上述问题。相反,如果连接上持续有事务未提交,该连接一直被应用反复申请和使用,也会有内存使用隐患。
建议

根据以上分析,MAX_SESSION 的值应根据实际业务情况而定。

  • 如何控制内存

本节以服务器内存是 32GB 为例,介绍如何控制内存以保证数据库的安全运行。

首先,需要了解以下两个查询语句(常用于监控数据库内存)。

查询一:mem_pool 信息查询。

select
                regexp_replace(name, '[0-9]'),
                count(*),
                trunc(sum((org_size    /1024.0/1024))) 初始,
                trunc(sum((data_size   /1024.0/1024))) 在用,
                trunc(sum((total_size  /1024.0/1024))) 总的,
                trunc(sum((target_size /1024.0/1024))) 水位
        from
                v$mem_pool
        group by
                regexp_replace(name, '[0-9]')
        order by
                总的 desc;

达梦数据库运行过程中,查询一的结果是浮动的,无法通过某个参数限制。默认情况下,一个超大的笛卡尔积的 sql,可能就会触发操作系统的 OOM。在部署数据库时,可通过运行时的一些数据(即查询一的结果),来计算和衡量一系列参数如何配置。

查询二:bufferpool 信息查询。

select
                name,
                count(*),
                avg(rat_hit) 命中率75,
                trunc(sum((n_pages /1024.0/1024*page))) 大小,
                trunc(sum((free    /1024.0/1024*page))) 空闲,
                trunc(sum((n_dirty /1024.0/1024*page))) 脏页,
                trunc(sum((n_clear /1024.0/1024*page))) 零页
                -- select *
        from
                v$bufferpool
        group by
                name;

达梦运行的过程中,查询二的结果是固定的,可通过简单的个别参数限制总内存大小。在部署数据库时,可通过查询二的结果,来计算和衡量相关参数设置是否合理。

以下提供一实例充分理解数据库内存。

例如达梦数据库中查询一的结果如下:

执行结果

一般情况下,主要关注前五行的结果。以上结果说明 mem_pool 使用量相对于当前内存的大小,总的大小(倒数第二列)一共使用了: 14761+6568+6129+2457+908 = 30823 的大小,一般情况下可以乘以系数 1.05,即约用了 32364.15MB(考虑到还有许多其他比较小的内存区域,通过乘以系数 1.05 直接忽略掉,以简化学习初期的理解,同时尽可能获取一个与实际情况相匹配的值,降低对实际配置的影响)。

注意

1.SHARE_POOL 的水位值通过 dm.ini 中参数 MEMORY_POOL_TARGET 配置,有实际意义;
2.SHARE_POOL 总的值通过 dm.ini 中参数 MEMORY_POOL 配置,表示初始值大小,实际意义不大;
3.SESSION 的初始值通过 dm.ini 中 SESS_POOL_SIZE 配置,有一定实际意义。例如在频繁新建连接的系统中,如果每个 session 最低的使用内存总是高于这个值,每次新建连接都需要重新申请内存并重置,会存在一定的开销(比如在 perf top 等监控命令中频繁看到 mem_set 等函数,则可能是这类的配置偏小,当然这部分的影响在达梦数据库中,可通过大池的分片极大地规避掉,在分片之前,所有 session 申请时,实际上是同一个临界区);
4.SESSION 的水位值通过 dm.ini 中 SESS_POOL_TARGET 配置,有实际意义(例如一个 sql 语句在某个会话上执行完成且内存释放后,在这个依然被连接池保持,未断开时,对应的内存是否还被这个 session 持有,则通过参数 SESS_POOL_TARGET 控制的,超过该参数的会释放出来,未超过的,就会被这个 session 持续持有);
5.VIRTUAL_MACHINE 的情况与 SESSION 类似,也与两个参数 VM_POOL_SIZE 和 VM_POOL_TARGET 有关;
6.SQL_CACHE_MANAGERMENT 的初始值通过 dm.ini 中间的 CACHE_POOL_SIZE 配置;
7.MAL_SYS 只有集群环境需要考虑,如果要计算内存使用,一般情况下,可根据实际值减掉 1280 的大小进行预留。

参数 MEMORY_POOL_TARGET 控制了达梦数据库的内存是否会还给操作系统,即单个内存池只有低于 TARGET 才会还给 MEMORY_POOL。可以将 MEMORY_POOL_TARGET 理解为一个大管家,它会往下级 session 划分内存,而每个下级 session 又会有自己的 TARGET,超过 TARGET 的区域空闲后,下级就会还给大管家;如果总的内存超过 MEMORY_POOL_TARGET 了,就会还给操作系统;反之,就不会。

例如达梦数据库中查询二的结果如下:

执行结果

一般情况下,主要关注 RECYCLENORMAL 这两行,其他行比较小,可以忽略不看(但当 FAST 配置较大时,也需要关注,尤其在 DSC 集群环境中,FAST 不应配置过小)。主要关注命中率大小,如果命中率低于 0.75,说明这片内存是可以限制住,但是对于当前这个业务系统来说可能偏小,需要放大(比如为物理服务器添加内存,然后把相关的内存参数对应的调大,过几个业务周期后,继续观察),也可能说明这个业务系统上,待优化的语句比较多)。

注意

1.RECYCLE 配置对应 dm.ini 中间的 RECYCLE 参数;NORMAL 配置对应的是 dm.ini 中间的 BUFFER 参数。
2.当 RECYCLE 命中率较低时,需要通过充分优化 SQL 语句或者修改对应参数内存设置进行解决。

  • 个别参数单独调整
  1. 数据库相关参数
参数名 默认值 推荐值 备注
MAX_SESSION 100 500 系统允许同时连接的最大数,同时还受到 LICENSE 的限制,取二者中较小的值,有效值范围(1~65000 )。
参考配置如下:
内存 8GB,MAX_SESSION=50-100;
内存 16GB,MAX_SESSION=100-200;
内存 32GB,MAX_SESSION=200-300;
内存 64GB,MAX_SESSION=300-800;
内存 128GB,MAX_SESSION=800-1500;
内存 256GB,MAX_SESSION=1500-3000;
内存 512GB,MAX_SESSION=3000-5000 。
  1. 兼容性参数
参数名称 默认配置 推荐配置 备注
OLAP_FLAG 0 2 OLTP 类型的应用建议设置 2,OLAP 类型应用建议设置为 1。
COMPATIBLE_MODE 0 按应用要求调整 是否兼容其他数据库模式,建议设置为 0。
0:不兼容
1:兼容 SQL92 标准;
2:兼容 ORACLE;
3:兼容 MS SQL SERVER;
4:兼容 MYSQL;
5:兼容 DM6;
6:兼容 TERADATA。
DATETIME_FMT_MODE 0 按应用要求调整 是否兼容 ORACLE 日期格式。 0: 不兼容; 1:兼容。
注: 此参数被动态修改后仅影响新生成的会话。
CALC_AS_DECIMAL 0 按应用要求调整 0:默认值, 表示整数类型的除法、整数与字符或 BINARY 串的所有四则运算,结果都处理成整数;
1:表示整数类型的除法全部转换为 DEC(0,0) 处理;
2:表示将整数与字符或 BINARY 串的所有四则运算都转换为 DEC(0, 0) 处理。
注: 该参数只有在 USE_PLN_POOL 为 0 或 1 时有效。当 USE_PLN_POOL 为 2 或 3 时, 按照 CALC_AS_DECIMAL=2 处理。
  1. 优化相关参数
参数名称 默认值 推荐值 备注
SORT_FLAG 4 16 排序机制。0:原排序机制;1:新排序机制。
VIEW_PULLUP_FLAG 0 16 是否对视图进行上拉优化,把视图转换为其原始定义,消除视图。可取值 0、1、2、4、8、16、32。
0:不进行视图上拉优化;
1:对不包含别名和同名列的视图进行上拉优化;
2:对包含别名和同名列的视图也进行上拉优化;
4:强制允许带变量的查询语句进行视图上拉优化,有可能造成结果集错误;
8:不对 LEFT JOIN 的右孩子\RIGHT JOIN 的左孩子\FULL JOIN 左右孩子进行上拉;
16:不对 LEFT JOIN 的左孩子进行上拉;
32:视图上拉后,从视图符号表删除不被引用的列;
支持使用上述有效值的组合值,如 3 表示同时进行 1 和 2 的优化。
OPTIMIZER_MODE 1 1 DM 优化器的模式。 0:老优化器模式;1:新优化器模式。
ADAPTIVE_NPLN_FLAG 3 0 是否启用自适应计划机制,仅 OPTIMIZER_MODE=1 时生效。
0:不启用;
1:对索引连接、嵌套含 VAR 连接等复杂连接启用自适应计划;
2: ORDER BY 在 HASH 连接时启用自适应计划;
3:同时启用 1 和 2 的优化机制。
ENABLE_INJECT_HINT 0 1 是否启用 SQL 指定 HINT 的功能。0: 不启用; 1:启用。
OPTIMIZER_OR_NBEXP 0 根据实际情况 OR 表达式的优化方式。
0:不优化;
1:生成 UNION_FOR_OR 操作符时, 优化为无 KEY 比较方式;
2:OR 表达式优先考虑整体处理方式;
4:相关子查询的 OR 表达也优考虑整体处理方式;
8:OR 布尔表达式的范围合并优化;
16:同一列上同时存在常量范围过滤和 IS NULL 过滤时的优化,如 C1 > 5 OR C1 IS NULL;
支持使用上述有效值的组合值,如 7 表示同时进行 1、 2、 4 的优化。
TOP_ORDER_OPT_FLAG 0 根据实际情况 优化带有 TOPORDER BY 子句的查询, 使得 SORT 操作符可以省略。优化的效果是尽量使得 ORDER BY 的排序列所对应的基表可以使用包含排序列的索引,从而可以移除排序 SORT 操作符,减少排序操作。如果排序列不属于同一个基表,或者排序列不是基表列,则肯定是不可以优化。
取值:0:不启用该优化;1:启用该优化。
  1. 临时表空间参数
参数名称 默认值 推荐值 备注
TEMP_SIZE 4 1024 默认创建的临时表空间大小,以 M 为单位。有效值范围(10~1048576)。
TEMP_SPACE_LIMIT 0 102400 临时表空间大小上限,以 M 为单位。0 表示不限制临时表空间大小。有效范围(0~ 4294967294)。
注: TEMP_SPACE_LIMIT 一定要大于等于 TEMP_SIZE
  1. REDO 相关参数
参数名称 默认值 推荐值 备注
REDOS_BUF_SIZE 1024 1024 待重演日志堆积的内存限制,堆积的日志缓冲区占用内存超过此限制,则新的日志将会被延迟加入重演队列, 等待重演释放部分内存后再加入。
以 M 为单位, 有效值范围(0~65536),默认 1024。 0 表示无内存限制。REDOS_BUF_SIZEREDOS_BUF_NUM 同时起作用, 只要达到一个条件即会触发延迟处理。
REDOS_BUF_NUM 4096 4096 待重演日志缓冲区允许堆积的数目限制, 超过限制则新的日志将会被延迟加入重演队列, 等待堆积数减少后再加入。
以个数为单位, 有效值范围(0~9999), 默认 4096。 0 表示无限制。REDOS_BUF_SIZEREDOS_BUF_NUM 同时起作用,只要达到一个条件即会触发延迟处理
REDOS_MAX_DELAY 1800 1800 备库重演日志缓冲区的时间限制,超过此限制则认为重演异常,服务器自动宕机,防止日志堆积、主库不能及时响应用户请求。
以秒(S)为单位, 有效值范围(0~7200) 。 0 表示无重做时间限制。
REDOS_PARALLEL_NUM 1 1 指定故障重启、还原恢复、备库重演场景下,并行日志重演的线程数, 有效值范围(1~64)。1 表示不进行并行日志重演。
RLOG_APPEND_LOGIC 0 根据实际情况配置 是否启用在日志中记录逻辑操作的功能, 取值范围 0、 1、 2、 3。0: 不启用; 1、 2、 3 启用。
1: 如果有主键列, 记录 UPDATEDELETE 操作时只包含主键列信息, 若没有主键列则包含所有列信息;
2:不论是否有主键列, 记录 UPDAT E 和 DELETE 操作时都包含所有列的信息;
3: 记录 UPDATE 时包含更新列的信息以及 ROWID, 记录 DELETE 时只有 ROWID。

2.2 开启本地归档

2.2.1 归档概述

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

2.2.2 开启方法

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

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

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

登录数据库执行如下 SQL 语句:

ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/dmarch, TYPE=LOCAL, FILE_SIZE=2048, SPACE_LIMIT=102400';
ALTER DATABASE OPEN;
  • 修改数据库配置文件方式
##修改数据库实例的 /dmdata/DAMEGN/dm.ini文件中 ARCH_INI 参数值
vi /dmdata/DAMENG/dm.ini
##将 MAL_INI 值改为 1,保存后退出
MAL_INI = 1 #打开 MAL 系统

##新增文件dmarch.ini
vi /dmdata/DAMENG/dmarch.ini
##新增如下内容
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmarch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400

##最后重启数据库完成归档配置
注意

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

2.3 配置数据库 SQLLOG 日志

  • 创建 SQL 日志存放目录。
su - dmdba
mkdir -p /data/dmdbms/log/logcommit
  • 检查 SVR_LOG 参数。
select * from v$parameter where name like ‘SVR_LOG%’;
  • 修改实例路径下 sqllog.ini 文件如下:设置 sql 日志为异步,按照文件大小进行切换,每个 1024M,20 个文件循环写。
cd /data/dmdata/DAMENG
vi sqllog.ini
BUF_TOTAL_SIZE = 10240 #SQLs Log Buffer Total Size(K)(1024~1024000)
BUF_SIZE = 1024 #SQLs Log Buffer Size(K)(50~409600)
BUF_KEEP_CNT = 6 #SQLs Log buffer keeped count(1~100)

[SLOG_ALL]
FILE_PATH = /data/dmdbms/log/logcommit  #sql 日志生成路径
PART_STOR = 0
SWITCH_MODE = 2
SWITCH_LIMIT = 1024  #每个日志文件 1024M
ASYNC_FLUSH = 1
FILE_NUM = 20  #循环收集 20 个可以根据实际情况做调整
ITEMS = 0
SQL_TRACE_MASK = 1
MIN_EXEC_TIME = 0
USER_MODE = 0
USERS =
  • 执行调用存储过程生效配置文件,并开启 SQLLOG 日志。
SP_REFRESH_SVR_LOG_CONFIG();
sp_set_para_value(1,'SVR_LOG',1);

--检查 SVR_LOG 参数。
select * from v$parameter where name like ‘SVR_LOG’;
  • 检查日志生成情况。
ls  /data /logcommit

2.4 数据库备份

2.4.1 备份介绍

达梦数据库中的数据存储在数据库的物理数据文件中,数据文件按照页、簇和段的方式进行管理,数据页是最小的数据存储单元。任何一个对达梦数据库的操作,其根本都是对某个数据文件页的读写操作。因此,DM 备份的本质就是从数据库文件中拷贝有效的数据页保存到备份集中,这里的有效数据页包括数据文件的描述页和被分配使用的数据页。
数据库备份时,对于不同的数据量,建议采用不同的备份方式。当数据量小于 100G 时,建议采用每天全量备份方式;当数据量大于 100G 并且小于 3T 时,建议采用每周的全量 + 每天的增量的备份方式;当数据量大于 3T 时,备份效率较低,建议修改备份的架构,比如主备集群、备份一体机、或者关键表进行冷备等方式。

2.4.2 定时备份及删除

使用命令进行备份时,由于版本差异,备份的命令行参数也存在差异。

  • 含 v8.1.1.190-Build(2021.03.12-136419) 之后版本

备份作业

删除作业

SUCC_ACTION 指定步骤执行成功后,下一步该做什么事,取值 0、1、2、3。0 表示不报告步骤执行成功,并结束作业。1 表示报告步骤执行成功,并结束作业。2 表示不报告步骤执行成功,并执行下一步。3 表示报告步骤执行成功,并执行下一步。
FAIL_ACTION 指定步骤执行失败后,下一步该做什么事。取值 0、1、2、3。0 表示不报告步骤执行失败,并结束作业。1 表示报告步骤执行失败,并结束作业。2 表示不报告步骤执行失败,并执行下一步。3 表示报告步骤执行失败,并执行下一步。

  • 含 v8.1.1.172-Build(2021.02.01-134275) 之前版本

备份作业

删除作业

SUCC_ACTION 指定步骤执行成功后,下一步该做什么事,取值 0 或 1。0 表示执行下一步。1 表示报告执行成功,并执行下一步。
FAIL_ACTION 指定步骤执行失败后,下一步该做什么事,取值 0 或 2。0 表示执行下一步。2 表示报告执行失败,并结束作业。

故新版本第一个增加步骤 SUCC_ACTIONFAIL_ACTION 分别取值是 3 和 3。第二个增加步骤取值是 1 和 1。如果使用老版本参数,意义会有很大的出入,造成作业无法正确执行。

  • 含 v8.1.1.190-Build(2021.03.12-136419) 之后版本

适用范围:含 v8.1.1.190-Build(2021.03.12-136419) 之后版本

  1. 全量 + 删除(推荐使用)

配置前明确以下内容:
(1)备份策略。例如设置每天 23:00 全量备份、删除 30 天前的全量备份。
(2)注意开启数据库归档,确定备份路径:/opt/dmdbms/data/DAMENG/bak

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/opt/dmdbms/data/DAMENG/bak', 3, 1, 0, 0, NULL, 0);
call SP_ADD_JOB_STEP('bakall_delall', 'delall', 0, 'SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/opt/dmdbms/data/DAMENG/bak'');
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');
  1. 全量 + 增量 + 删除

配置前明确以下内容:
(1)备份策略。例如每月第一个周六 23:00 全量备份。每天(除周六) 23:00 增量备份、删除 30 天前的增量备份、删除 40 天前的全量备份。
(2)注意开启数据库归档,在 bak 目录下手动创建全备文件夹(all)和增备文件夹(add)。即全量备份路径:/opt/dmdbms/data/DAMENG/bak/all,增量备份路径:/opt/dmdbms/data/DAMENG/bak/add

--设置 2 分钟后自动进行一次全量备份
call SP_INIT_JOB_SYS(1);
call SP_CREATE_JOB('bakall_one',1,0,'',0,0,'',0,'执行一次全量备份');
call SP_JOB_CONFIG_START('bakall_one');
call SP_ADD_JOB_STEP('bakall_one', 'bakall', 6, '01020000/opt/dmdbms/data/DAMENG/bak/all', 1, 1, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('bakall_one', 'bakall_one_time01', 1, 0, 0, 0, 0, NULL, NULL, SYSDATE()+0.0014, NULL, '');
call SP_JOB_CONFIG_COMMIT('bakall_one');

--设置全量备份
call SP_CREATE_JOB('bakall',1,0,'',0,0,'',0,'每月第一个周六23:00全量备份');
call SP_JOB_CONFIG_START('bakall');
call SP_ADD_JOB_STEP('bakall', 'bakall', 6, '01020000/opt/dmdbms/data/DAMENG/bak/all', 1, 1, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('bakall', 'bakall_time01', 1, 4, 1, 7, 0, '23:00:00', NULL, '2019-01-01 01:01:01', NULL, '');
call SP_JOB_CONFIG_COMMIT('bakall');

--设置增量备份 + 删除备份
call SP_CREATE_JOB('bakadd_delbak',1,0,'',0,0,'',0,'每天(除周六)23:00增量备份、删除30天前的增量备份、删除40天前的全量备份');
call SP_JOB_CONFIG_START('bakadd_delbak');
call SP_ADD_JOB_STEP('bakadd_delbak', 'bakadd', 6, '11020000/opt/dmdbms/data/DAMENG/bak/all|/opt/dmdbms/data/DAMENG/bak/add', 3, 1, 0, 0, NULL, 0);
call SP_ADD_JOB_STEP('bakadd_delbak', 'delbak', 0, 'SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/opt/dmdbms/data/DAMENG/bak/add'');
CALL SP_DB_BAKSET_REMOVE_BATCH(''DISK'',SYSDATE-30);
SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/opt/dmdbms/data/DAMENG/bak/all'');
CALL SP_DB_BAKSET_REMOVE_BATCH(''DISK'',SYSDATE-40);', 1, 1, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('bakadd_delbak', 'bakadd_delbak_time01', 1, 2, 1, 63, 0, '23:00:00', NULL, '2019-01-01 01:01:01', NULL, '');
call SP_JOB_CONFIG_COMMIT('bakadd_delbak');
  • 含 v8.1.1.172-Build(2021.02.01-134275) 之前版本

适用范围:含 v8.1.1.172-Build(2021.02.01-134275) 之前版本

  1. 全量 + 删除(推荐使用)

配置前明确以下内容:
(1)备份策略。例如设置每天 23:00 全量备份、删除 30 天前的全量备份。
(2)注意开启数据库归档,确定备份路径:/opt/dmdbms/data/DAMENG/bak

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/opt/dmdbms/data/DAMENG/bak', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_STEP('bakall_delall', 'delall', 0, 'SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/opt/dmdbms/data/DAMENG/bak'');
CALL SP_DB_BAKSET_REMOVE_BATCH(''DISK'',SYSDATE-30);', 1, 2, 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');
  1. 全量 + 增量 + 删除

配置前明确以下内容:
(1)备份策略。例如每月第一个周六 23:00 全量备份。每天(除周六) 23:00 增量备份、删除 30 天前的增量备份、删除 40 天前的全量备份。
(2)注意开启数据库归档,在 bak 目录下手动创建全备文件夹(all)和增备文件夹(add)。即全量备份路径:/opt/dmdbms/data/DAMENG/bak/all,增量备份路径:/opt/dmdbms/data/DAMENG/bak/add

--说明:2 分钟后自动进行一次全量备份
call SP_INIT_JOB_SYS(1);
call SP_CREATE_JOB('bakall_one',1,0,'',0,0,'',0,'执行一次全量备份');
call SP_JOB_CONFIG_START('bakall_one');
call SP_ADD_JOB_STEP('bakall_one', 'bakall_one_work', 6, '01020000/opt/dmdbms/data/DAMENG/bak/all', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('bakall_one', 'bakall_one_time', 1, 0, 0, 0, 0, NULL, NULL, SYSDATE()+0.0014, NULL, '');
call SP_JOB_CONFIG_COMMIT('bakall_one');

--说明:全量备份
call SP_CREATE_JOB('bakall',1,0,'',0,0,'',0,'每月第一个周六23:00全量备份');
call SP_JOB_CONFIG_START('bakall');
call SP_ADD_JOB_STEP('bakall', 'bakall_work', 6, '01020000/opt/dmdbms/data/DAMENG/bak/all', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('bakall', 'bakall_time01', 1, 4, 1, 7, 0, '23:00:00', NULL, '2019-01-01 01:01:01', NULL, '');
call SP_JOB_CONFIG_COMMIT('bakall');

--说明:增量备份+删除备份
call SP_CREATE_JOB('bakadd_delbak',1,0,'',0,0,'',0,'每天(除周六)23:00增量备份、删除30天前的增量备份、删除40天前的全量备份、生成统计信息');
call SP_JOB_CONFIG_START('bakadd_delbak');
call SP_ADD_JOB_STEP('bakadd_delbak', 'bakadd', 6, '11020000/opt/dmdbms/data/DAMENG/bak/all|/opt/dmdbms/data/DAMENG/bak/add', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_STEP('bakadd_delbak', 'delbak', 0, 'SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/opt/dmdbms/data/DAMENG/bak/add'');
CALL SP_DB_BAKSET_REMOVE_BATCH(''DISK'',SYSDATE-30);
SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/opt/dmdbms/data/DAMENG/bak/all'');
CALL SP_DB_BAKSET_REMOVE_BATCH(''DISK'',SYSDATE-40);', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('bakadd_delbak', 'bakadd_delbak_time01', 1, 2, 1, 63, 0, '23:00:00', NULL, '2019-01-01 01:01:01', NULL, '');
call SP_JOB_CONFIG_COMMIT('bakadd_delbak');

2.4.3 图形化配置备份任务

  1. 全量备份 + 删除

以每天 23:00 进行全量备份、删除 30 天前的全量备份的备份策略为例:介绍图形化配置全量备份 + 删除备份作业的具体步骤。

  • 创建备份任务,定义作业名。
    在左侧导航栏中,找到代理选项,右键新建代理任务,新建成功后,点击代理的下拉菜单,找到作业选项,右键新建作业,配置好作业名和作业描述。如下图:

新建作业

  • 添加备份规则。
    在作业步骤点击添加后,在步骤类型中选择备份数据库,备份方式选择完全备份和压缩选项,添加好备份路径。如下图:

添加备份规则

  • 添加备份保留规则
    备份规则配置好后,添加一个 sql 脚本,将备份保留策略添加进去,可选择保留 30 天,具体保留时间可以和用户商议后进行修改。如下图:

添加备份保留规则

  • 添加作业调度
    在作业步骤选择项配置完成后,选择作业调度选择项,在右侧导航栏中,选择新建按钮,如下图:

添加作业调度

  • 作业调度规则
    此配置项中,可以配置调度类型,每天的全量备份的话,调度类型选择反复执行,频率为每天,执行时间为每天的 23 点,配置好后,点击确认即可。具体备份执行时间,可依据用户现场实际要求而定。

设置作业调度规则

  • 配置完成。
    所有配置完成后,点击页面的确定按钮,即可完成配置。如下图:

配置完成

  1. 增量备份 + 删除

举例:设置每月第一个周六 23:00 全量备份。每天(除周六)23:00 增量备份、删除 30 天前的增量备份、删除 40 天前的全量备份。
增量备份是在全量备份的基础上进行的,故需要做好全量备份的基础上,在进行增量备份。

  • 创建备份任务,定义作业名。
    在左侧导航栏中,找到代理选项,右键新建代理任务,新建成功后,点击下拉菜单,找到作业选项,右键新建作业,配置好作业名和作业描述。如下图:

创建备份任务

  • 添加作业步骤。
    在常规选择项设置好后,不用点击确定按钮,直接点击作业步骤选择项,点击添加按钮,进行组作业步骤的添加操作。如下图:

添加作业步骤

  • 添加备份规则。
    在作业步骤点击添加后,在步骤类型中,选择备份数据库,备份方式选择增量压缩备份,选择好备份路径,在基备份目录中,选择全量备份所在的路径,如下图:

添加备份规则

  • 添加备份保留规则。
    备份规则配置好后,在添加一个 sql 脚本,将备份保留策略添加进去,可选择保留 30 天,具体保留时间可以和用户商议后进行修改。如下图:

添加备份保留规则

  • 添加作业调度。
    在作业步骤选择项配置完成后,选择作业调度选择项,在右侧导航栏中,选择新建按钮,如下图:

添加作业调度

  • 作业调度规则。
    此配置项中,调度类型选择反复执行,因为是增量备份,所以建议要有基础的全量备份,并且增量备份的时间要避开全量备份的那一天,这里举例为每周的周一至周天(除周六 周六进行全量备份)进行增量备份,配置完成后点击确认即可。具体备份执行时间,可依据用户现场实际要求而定。如下图:

设置作业调度规则

  • 配置完成。
    所有配置完成后,点击页面的确定按钮,即可完成配置。如下图:

配置完成

2.4.4 常用参数

  • 压缩

达梦支持对备份数据进行压缩,在执行备份时,可以指定不同的压缩级别,以获得不同的数据压缩比。默认情况下,备份是不进行压缩的。达梦共支持 9 个级别(1~9 级)的压缩处理,级别越高压缩比越高,但相应的压缩速度越慢、CPU 开销越大。考虑到备份效率及备份文件大小,建议压缩级别为 1。

  • 并行

数据库可以进行并行备份,用户可以在备份步骤中指定并行数,考虑到备份过程中对于数据库的压力以及有可能和业务同时进行,达梦共支持 10 个级别(0~9 级),建议选择 2,可在尽可能在不影响业务的情况下,尽快完成数据备份。

微信扫码
分享文档
扫一扫
联系客服