注册
DM8数据库参数文件及数据库初始化常用参数介绍
技术分享/ 文章详情 /

DM8数据库参数文件及数据库初始化常用参数介绍

BigQ 2026/08/07 244 0 0

一 参数文件概述

1.1 参数文件作用

每创建一个 DM 数据库,就会自动生成对应的dm.ini 参数文件。dm.ini 是 DM 数据库启动所必须的配置文件,DM8数据库所有实例级配置均依赖参数文件生效,是数据库启动、运行、调优的核心依据,该文件的主要作用如下:

  1. 实例初始化管控:数据库创建、启动时,通过参数文件定义内存大小、实例名、端口、文件路径等基础属性,决定数据库实例的基础运行状态。
  2. 性能资源调度:管控数据库内存池、线程数、排序缓冲、连接数、缓存阈值等资源,直接影响数据库并发能力、查询效率、IO性能。
  3. 安全策略配置:定义密码复杂度、登录权限、审计策略、加密等级、访问白名单等安全规则,保障数据库运行安全。
  4. 兼容与功能开关:控制数据库兼容模式,归档、集群、SQL日志等功能的开启与关闭,适配不同业务场景。

1.2 参数类型

DM8所有参数根据生效方式、修改权限、作用范围,分为四大属性类型,这是参数修改的核心依据,直接决定修改命令与生效方式。

  1. READ ONLY:手动参数,不能通过 SQL 命令或函数修改;只能通过修改 dm.ini 文本文件修改此参数(需要重启数据库才能生效)。
  2. SYS:动态(系统级)参数。数据库运行中可以直接修改,可以即可以修改内存中的值,也可以修改参数文件中的值。可以通过 SQL 命令或系统函数修改。
  3. SESSION:动态(会话级)参数,数据库运行中可以直接修改,可以即可以修改内存中的值,也可以修改参数文件中的值,还可以只修改当前会话的值。可以通过 SQL 命令或函数修改,且可以只针对当前会话生效。
  4. IN FILE:静态参数,不能修改内存中的值,只能修改参数文件中的值,可以通过 SQL 命令或函数修改,但需要重启数据库才能生效。

静态参数在数据库运行期间不能修改内存中的值,动态参数在数据库运行期间可以修改内存中的值(修改后立即生效)。可通过查询v$dm_ini的PARA_TYPE 来查看参数的类型。

SQL> select PARA_TYPE from v$dm_ini; 行号 PARA_TYPE ---------- --------- 1 READ ONLY 2 SYS 3 IN FILE 4 SESSION

二 参数修改方式

2.1 手动修改dm.ini文件

适用场景:只读参数、静态参数批量调整、参数异常数据库无法启动修复

  1. 停止数据库服务:
[root@dm8 ~]# systemctl stop DmServiceDMSERVER
  1. 编辑参数文件:
[dmdba@dm8 ~]#vim /data/dmdata/DAMENG/dm.ini
  1. 修改对应参数值,保存退出。
  2. 启动数据库服务:
[root@dm8 ~]# systemctl start DmServiceDMSERVER
  1. 查询参数验证:
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='参数名';

2.2 存储过程方式修改

适用场景:适用于修改 SYS、SESSION、IN FILE类型的参数。

2.2.1 存储过程生效范围

在使用 SP_SET_PARA_VALUE(scope, paraname, value) 等存储过程时,scope 的取值含义如下:

  • scope = 0 仅修改内存中的参数值,立即生效,但不会写入 dm.ini 配置文件。数据库重启后修改失效,恢复为配置文件中的原值。仅适用于动态参数SYSSESSION)。
  • scope = 1 同时修改内存dm.ini** 配置文件**,立即永久生效。修改后无需重启,但只能用于动态参数SYSSESSION),若尝试修改静态参数(IN FILE)会报错。
  • scope = 2 仅修改 dm.ini 配置文件中的值,不修改内存,当前运行实例不生效,必须重启数据库后才能生效。可用于动态参数静态参数IN FILE)。

2.2.2 存储过程修改

根据参数值类型的不同,可分为整型参数、字符串参数、浮点型参数,不同的参数值类型需要通过对应的存储过程进行修改,否则会报[-3503]:无效的函数参数,同时还可以设置仅针对当前会话生效。

  1. 整形参数
SQL> SP_SET_PARA_VALUE(scope, '参数名', 值);
  1. 字符串参数
SQL> SP_SET_PARA_STRING_VALUE(scope, '参数名', '值');
  1. 浮点型参数
SQL> SP_SET_PARA_DOUBLE_VALUE(scope, '参数名', 值);
  1. 会话级参数,仅针对当前会话生效
SQL> SF_SET_SESSION_PARA_VALUE('参数名', 值);

2.3 通过SQL命令修改

2.3.1 SQL命令生效范围

在通过ALTER SYSTEM 语句修改参数时,根据使用的参数不同,生效的范围也存在不同,具体影响范围如下;

  • MEMORY(默认) :仅修改内存值,重启后失效。
  • BOTH : 同时修改内存和 dm.ini 文件,动态参数立即永久生效。
  • SPFILE :只修改配置文件,静态参数需用此方式,重启后生效。

2.3.2 SQL语句修改

可通过ALTER SYSTEM 语句进行参数修改,需注意修改参数时需要在参数名称处加单引号,具体SQL语法如下:

ALTER SYSTEM SET '<参数名称>' =<参数值> [DEFERRED] [MEMORY|BOTH|SPFILE];

其中 DEFERRED 含义如下:

  • 供动态会话级参数使用(指定了MEMORY或BOTH的情况下),是否同步修改当前会话参数值:DEFERRED表示不同步修改(新会话才会使用新值),缺省为同步修改(当前会话和新会话均使用新值)。
  • 对于静态参数或使用了SPFILE的动态会话级参数,无论是否指定DEFERRED,均不修改当前会话值。
  • 对于动态系统级参数,无论是否指定DEFERRED,系统均同步修改当前会话值。

2.4 通过console工具修改

提供的 Console​ 工具可以可视化加载并修改 dm.ini 中的参数,修改完成后同样需要重启数据库实例才能生效,适合不习惯命令行操作的环境。

#调用console图形化工具 [dmdba@dm8 ~]$ cd /home/dmdba/dmdbms/tool/ [dmdba@dm8 tool]$ ./console

图片.png

四 数据库初始化常用参数

初始化参数决定数据库底层架构,是建库的核心参数,以下为数据库初始化常用参数:

参数名 作用说明 常用取值
PATH 数据库文件存储路径 /data/dmdata
DB_NAME 数据库名称 DAMENG
INSTANCE_NAME 数据库实例名,服务名依据该参数生成 DMSERVER
PORT_NUM 数据库监听端口 5236
PAGE_SIZE 数据页大小,影响单条数据存储上限 4/8/16/32 ,单位默认为K
EXTENT_SIZE 数据文件使用的簇大小 16/32/64 ,单位默认为页
CHARSET 数据库字符集 0=GB18030,1=UTF-8,2=EUC-KR
CASE_SENSITIVE 标识符大小写敏感 0/N=不敏感(适配MySQL、SqlServer)<br>1/Y=敏感(适配Oracle)
BLANK_PAD_MODE 设置空格填充模式 0/1(兼容Oracle值为1)
SYSDBA_PWD 管理员初始密码 自定义复杂度密码
SYSAUDITOR_PWD 审计员初始密码 自定义复杂度密码
LOG_SIZE 日志文件大小 范围为:256M ~ 8G,单位默认为M
LENGTH_IN_CHAR 控制 VARCHAR/VARCHAR2 字段定义长度的计数单位:是按「字节」还是「字符」计算存储上限 0/1(该参数新版本已废弃,默认以字节存储)

数据库初始化完成后,可在数据库软件安装目录 log 目录下,查看数据库初始化配置,具体路径可参考如下:

/home/dmdba/dmdbms/log/dminit_DAMENG_xxxxx.log

4.1 PAGE_SIZE

在 DM 数据库中,页大小可以为 4KB、8KB、16KB 或者 32KB,用户在创建数据库时可以指定,默认大小为 8KB,一旦创建好了数据库,在该库的整个生命周期内,页大小都不能够改变。

如果要修改该参数,需要重新初始化实例。

页大小对字符数据类型实际最大长度及每行记录的影响如下表所示(不同的数据库版本略有差异):

数据库页大小 每个字符类型字段实际最大长度(字节) 每行记录除大字段外其他字段总长度(字节)
4K 1900 2000
8K 3900 4000
16K 8000 8000
32K 8188 16000

除了每个字段的最大长度限制外,每条记录总长度不能大于页面大小的一半。如果系统中存在或者以后可能存在含有较长的字符串类型的表,建议该参数设置为 16 或者 32。

--查询当前数据库页大小 SQL> SELECT SF_GET_PAGE_SIZE(); 行号 SF_GET_PAGE_SIZE() ---------- ------------------ 1 32768

4.2 CHARSET

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

如果要修改该参数,需要重新初始化实例。

--查询数据库当前字符集 SQL> SELECT '字符集',CASE SF_GET_UNICODE_FLAG() WHEN '0' THEN 'GBK18030' WHEN '1' then 'UTF-8' when '2' then 'EUC-KR' end; 行号 '字符集' CASESF_GET_UNICODE_FLAG()WHEN'0'THEN'GBK18030'WHEN'1'THEN'UTF-8'WHEN'2'THEN'EUC-KR'END ---------- ----------- -------------------------------------------------------------------------------------- 1 字符集 GBK18030

4.3 CASE_SENSITIVE

该参数用来设置字符串比较是否大小写敏感,用于确定数据库对象及数据是否区分大小写,默认为区分,不可更改。建议 MYSQL 和 SQLSERVER 迁移过来的系统,使用大小写不敏感, ORACLE 迁移过来的系统,使用大小写敏感,以便和原来系统匹配。

如果要修改该参数,需要重新初始化实例。

--查询数据库当前大小写敏感 SQL> SELECT '大小写敏感',cast(case SF_GET_CASE_SENSITIVE_FLAG()when '1' then '是' when '0' then '否' end as varchar); 行号 '大小写敏感' CAST(CASESF_GET_CASE_SENSITIVE_FLAG()WHEN'1'THEN'是'WHEN'0'THEN'否'ENDASVARCHAR) ---------- ----------------- ---------------------------------------------------------------------------------- 1 大小写敏感 是

4.4 BLANK_PAD_MODE

该参数用于控制在字符串比较、唯一性约束、GROUP BY、ORDER BY等操作中,是否将字符串结尾的空格)视为有效字符参与运算。该参数建库后无法修改,缺省值为 0。兼容Oracle时,该参数设置为1。

如果要修改该参数,需要重新初始化实例。

--查询数据库当前BLANK_PAD_MODE值 SQL> select PARA_NAME,PARA_VALUE from V$DM_INI WHERE PARA_NAME='BLANK_PAD_MODE'; 行号 PARA_NAME PARA_VALUE ---------- -------------- ---------- 1 BLANK_PAD_MODE 0

示例如下:

CREATE TABLE t_blank(id INT, name VARCHAR(20)); INSERT INTO t_blank VALUES(1, 'A'); INSERT INTO t_blank VALUES(2, 'A '); -- 尾部一个空格 COMMIT; -- BLANK_PAD_MODE=0 时:返回 2,两条都查出来了 SQL> SELECT COUNT(*) FROM t_blank WHERE name = 'A'; 行号 COUNT(*) ---------- -------------------- 1 2 -- BLANK_PAD_MODE=1 时: -- 返回 1,只查到 'A' SQL> SELECT COUNT(*) FROM t_blank WHERE name = 'A'; 行号 COUNT(*) ---------- -------------------- 1 1 -- 返回 1,只查到 'A ' SQL> SELECT COUNT(*) FROM t_blank WHERE name = 'A '; 行号 COUNT(*) ---------- -------------------- 1 1

4.5 LENGTH_IN_CHAR

该参数的作用是建表时 VARCHAR 的长度是按照字符计算还是字节计算,默认以字节为单位,即字段的长度单位按照字节计算,如果采用字符为单位,字段的长度单位按照字符来计算,不同的字符集会导致字段长度不一样,实际最大长度受到页大小的限制。建议采用默认以字节为单位,如果从 MYSQL 迁移的同时又不方便扩大表结构的长度,需要设置为以字符为单位。

需要注意的是该参数在新版本已取消,初始化时无法指定该参数,默认以字节为单位。

--查询数据库当前LENGTH_IN_CHAR值 SQL> SELECT 'char是否以字符为单位',DECODE(PARA_VALUE,0,'否',1,'是') FROM V$DM_INI WHERE PARA_NAME='LENGTH_IN_CHAR'; 行号 'char是否以字符为单位' DECODE(PARA_VALUE,0,'否',1,'是') ---------- ------------------------------ ---------------------------------- 1 char是否以字符为单位 否
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服