ITPub博客

首页 > 数据库 > 国内数据库 > DM8 数据库初始化工具(dminit)参数总结

DM8 数据库初始化工具(dminit)参数总结

原创 国内数据库 作者:liujiujiu 时间:2026-07-18 14:32:43 0 删除 编辑

DM8 数据库初始化工具(dminit)参数总结

一、基础概念

1.1 dminit

dminit 是达梦数据库的命令行初始化工具,位于安装目录的 /bin 路径下,可以在磁盘上创建一套完整的数据库文件(包括数据文件、控制文件、重做日志文件以及核心配置文件 dm.ini),从而生成一个可运行的数据库实例。

1.2 核心存储单位

概念 说明
页(Page) 数据库最小的存储单位和 I/O 单元
簇(Extent) 空间分配的最小单位,由连续的页组成
段(Segment) 由若干个簇组成,用于存放表、索引等对象

1.3 初始化参数分类

按是否可修改分类

类别 说明 典型参数
不可修改参数(Read Only) 数据库创建后无法修改,只能重建数据库 PAGE_SIZE、EXTENT_SIZE、CASE_SENSITIVE、CHARSET、BLANK_PAD_MODE
可修改参数 初始化后可通过配置文件或SQL调整 内存相关参数( BUFFER, MEMORY_POOL等) ;线程相关参数(WORKER_THREADS, TASK_THREADS等) ;I/O相关参数(IO_THR_GROUPS);会话连接参数(MAX_SESSIONS)

不可修改参数设定需要谨慎,选错只能重建迁移,代价极高。

按持久性特性分类

类别 说明
静态参数(IN FILE) 修改后需要重启数据库才能生效
动态参数(SYS/SESSION) SYS级:修改后立即对所有会话生效;SESSION级:仅影响新创建的会话
手动参数(READ ONLY) 必须直接修改dm.ini文件并重启,无法通过SQL修改

二、关键初始化参数详解

2.1 PAGE_SIZE(数据页大小)

参数简介

属性 说明
含义 数据页的大小,数据库最小 I/O 单位
可选值 4、8、16、32(单位:KB)
默认值 8
是否可改 否,可通过 SF_GET_PAGE_SIZE() 查询

原理与影响

数据库记录 不能跨页存储,每条记录的总长度不能超过页面大小的 一半。不同页大小对应的最大行长度:

页大小 单行记录最大长度(约) 数据文件最小大小
4KB 1900 字节 16 MB
8KB 3900 字节 32 MB
16KB 8000 字节 64 MB
32KB 16000 字节 128 MB

页大小越大,单行能存储的数据越多,但空间利用率可能下降,且同样大小的内存能缓存的页数越少。

影响测试

-- 查询当前页大小
SELECT SF_GET_PAGE_SIZE();

创建表,测试行长度限制

-- 测试行长度限制(假设页大小32KB,最大行约16KB)
CREATE TABLE T(C1 VARCHAR(8000), C2 VARCHAR(8000));
INSERT INTO T VALUES(REPEAT('A', 8000), REPEAT('B', 8000));

-- 若总长度超过页大小一半,报错
INSERT INTO T VALUES(REPEAT('A', 8001),REPEAT('B',8001));

生产环境配置建议

场景 建议值 原因
常规 OLTP,行记录短小 8KB(默认) 空间 利用率高,内存 缓存效率好
含长字段或多字段表 16KB 或 32KB 避免"记录超长"错误
数据仓库/分析场景 32KB 提升 I/O 吞吐量
有达梦工具对接需求 32KB 部分工具(如 Dmlog)强制要求

2.2 EXTENT_SIZE(簇大小)

参数简介

属性 说明
含义 每次分配空间时的连续页数
可选值 16、32、64(单位:页)
默认值 16
是否可改 否,可通过 SF_GET_EXTENT_SIZE() 查询

原理与影响

簇是空间分配的最小单位,每次为表或索引分配空间时,系统会一次性分配 EXTENT_SIZE 个连续页。每个簇的实际大小 = PAGE_SIZE × EXTENT_SIZE。

  • 簇越大,批量分配效率越高,适合 大量数据写入场景
  • 簇越大,可能导致空间浪费(小表也分配较大的连续空间)

影响测试

-- 查询当前簇大小
SELECT SF_GET_EXTENT_SIZE();

-- 查看表空间数据文件的最小大小受页大小影响
-- 页大小32KB时,最小数据文件为128MB
CREATE TABLESPACE TEST DATAFILE 'test.dbf' SIZE 127;  -- 报错

CREATE TABLESPACE TEST DATAFILE 'test.dbf' SIZE 128;  -- 成功

生产环境配置建议

场景 推荐值 理由
一般系统 16 平衡空间利用与分配效率
大型系统/批量写入多 32(生产环境推荐) 减少分配次数,提升性能
极大型数据仓库 64 最大化空间分配效率,但需接受空间浪费

2.3 CASE_SENSITIVE(大小写敏感)

参数简介

大小写敏感影响的内容: 表空间, 对象名(表名/列名), 数据内容(字符串内容)

属性 说明
含义 标识符和 数据内容比较时是否区分大小写
可选值 Y/y/1(敏感)、N/n/0(不敏感)
默认值 Y(敏感)
是否可改 否,修改 dm.ini 中 GLOBAL_STR_CASE_SENSITIVE 无效

原理与影响

这是配置错误影响最明显的参数。它同时影响:

  1. 标识符(表名、列名等) :敏感模式下,不带双引号的标识符默认的转换为大写;带双引号则保持原样
  2. 字符串数据比较:敏感模式下 'a' 和 'A' 不同;不敏感模式下相同
场景 大小写敏感 ( CASE_SENSITIVE=1) 大小写不敏感 ( CASE_SENSITIVE=0)
对象名存储 不加双引号时,自动转为 大写存储。加双引号则保留原大小写。 保留创建时的大小写形式。
对象名比较 TABLE、 table、 "TABLE" 视为 同一个对象(都转为大写); "table" 是另一个 不同的对象。 只要字母拼写相同,无论大小写,都视为 同一个对象。例如 TABLE、 table、 "table" 都指向同一个对象。
能否同名 (大小写不同) 可以。通过使用双引号,可以创建 TABLE 和 "table" 两个不同的对象。 不可以。因为比较时忽略大小写, TABLE 和 table 会被认为是相同的。

影响测试

敏感模式测试(CASE_SENSITIVE=Y) :

CREATE TABLE "table1"(id INT);   -- 对象名为 table1(小写,固定)
CREATE TABLE table2(id INT);     -- 对象名为 TABLE2(自动转大写)
-- 数据内容比较
CREATE TABLE Test(C VARCHAR(10));
INSERT INTO Test VALUES('a');
INSERT INTO Test VALUES('A');
INSERT INTO TEST VALUES(D);
SELECT * FROM T ;

查看表数据,分别成功插入了三条数据,表示‘a’和‘A’不一样,表名Test和TEST没有加‘’识别为同一个表。

不敏感模式测试(CASE_SENSITIVE=N) :

-- 所有表名视为同一对象
CREATE TABLE "table1"(id INT);   -- 与 TABLE1、Table1 视为同一表
-- 数据内容比较
SELECT * FROM T WHERE C = 'a';   -- 返回 'a' 和 'A'
SELECT * FROM T WHERE C = 'A';   -- 同样返回 'a' 和 'A'

生产环境配置建议

源库类型 推荐值 理由
从 Oracle 迁移 Y(敏感) Oracle 默认大小写敏感,保持一致避免兼容问题
从 MySQL 迁移 N(不敏感) MySQL 在 Unix 环境下对数据内容不敏感

迁移场景中,若大小写敏感配置与源库不一致,可能导致唯一约束冲突、查询结果不符合预期。

2.4 CHARSET / UNICODE_FLAG(字符集)

参数简介

属性 说明
含义 数据库存储字符的编码方式
可选值 0=GB18030、1=UTF-8、2=EUC-KR(韩文)
默认值 0(GB18030)
是否可改 否,可通过 SF_GET_UNICODE_FLAG() 查询

原理与影响

不同字符集对中文的存储字节数不同:

字符集 英文字母 中文字符 适用场景
GB18030 1 字节 2 字节(常用字) 纯国内业务,存储效率高
UTF-8 1 字节 3 字节 国际化业务,多语言支持
-- 查询当前字符集(0=GB18030,1=UTF-8)
SELECT SF_GET_UNICODE_FLAG();
-- 测试字符存储长度
SELECT LENGTHB('中文');  -- GB18030 返回 4,UTF-8 返回 6

生产环境配置建议

场景 推荐值 理由
纯国内业务,主要为中文 GB18030(0) 存储效率高,节省空间
国际化业务、多语言支持 UTF-8(1) 兼容性好,支持所有语言
从 MySQL 迁移 与源库保持一致 避免字符集不匹配导致乱码或导入失败

2.5 BLANK_PAD_MODE(行尾空格填充模式)

参数简介

属性 说明
含义 字符串比较时是否保留结尾空格
可选值 0(忽略空格)、1(保留空格,兼容 Oracle)
默认值 0
是否可改 否

原理与影响

该参数主要用于兼容 Oracle:

参数值 行为 Oracle 兼容性
0(默认) 比较时忽略右侧空格, 'a' = 'a ' 为真 不兼容
1 比较时保留右侧空格, 'a' ≠ 'a ' 兼容

影响测试

-- BLANK_PAD_MODE=0(忽略空格)
CREATE TABLE C(C1 INT, C2 VARCHAR(20));
INSERT INTO C VALUES(1, 'a');
INSERT INTO C VALUES(2, 'a ');   -- 与 'a' 视为相同
INSERT INTO C VALUES(3, 'a  ');  -- 与 'a' 视为相同
SELECT * FROM C WHERE C2='a';
-- BLANK_PAD_MODE=1(保留空格,Oracle模式)
-- 'a'、'a '、'a  ' 被视为三个不同的值,

生产环境配置建议

源库类型 推荐值 理由
从 Oracle 迁移 1 保持与 Oracle 的字符串比较行为一致
从 MySQL 迁移 0(默认) MySQL 不区分结尾空格,使用默认值即可
新项目 0 多数应用不依赖结尾空格差异

2.6 其他常用可调参数

以下参数可在初始化时设置,也可在运行期调整:

参数 含义 默认值 生产建议
PATH 数据文件存放路径 当前目录 选择高性能存储,预留足够空间
DB_NAME 数据库名称 DAMENG 不超过128字符
INSTANCE_NAME 实例名称 DMSERVER 不超过16字符
PORT_NUM 监听端口 5236 确保端口未被占用
LOG_SIZE 重做日志大小 256-4096MB(视版本) 根据数据更新频率规划,不宜过小
BUFFER 系统缓冲区 100-8000MB 建议设为物理内存的60%-80%
SYSDBA_PWD SYSDBA密码 必选 须含大小写字母、数字、特殊字符
SYSAUDITOR_PWD SYSAUDITOR密码 必选 须含大小写字母、数字、特殊字符

三、初始化常见错误

3.1 初始化后服务启动失败(权限问题)

错误现象: Permission denied 错误。

原因:数据目录所有者不是 dmdba,或权限不正确。

解决方案:

# 修改目录所有者为 dmdba
chown -R dmdba:dinstall /path/to/data
# 修正权限
chmod -R 755 /path/to/data

最佳实践:使用 dmdba 用户执行 dminit 命令,而非 root。

3.2 磁盘空间不足

错误现象: No space left on device。

原因:目标分区可用空间不足。

解决方案:

# 检查磁盘空间
df -h
# 检查目录占用
du -sh /path/to/data/*

预防:初始化前确认目标分区有足够空间,并合理设置 LOG_SIZE 避免日志文件过大。

3.3 大小写敏感误判

错误现象:应用查询报"表或视图不存在",或唯一约束冲突。

原因: CASE_SENSITIVE 配置与源库或应用预期不一致。

场景一:迁移 Oracle 时大小写敏感配置错误

某项目迁移 Oracle 至 DM8,多张表报违反唯一性约束,迁移失败。原因是 BLANK_PAD_MODE=0 且 CASE_SENSITIVE 配置与 Oracle 不一致,导致 Oracle 中视为不同的值在 DM 中被视为相同。

预防:迁移前确认源库的大小写敏感和空格填充模式,保持目标库与其一致。

场景二:应用中存在混合大小写表名

在敏感库中, CREATE TABLE test 实际创建的是大写的 TEST。应用代码中若使用 SELECT * FROM test 不加双引号,会因为自动转为大写 TEST 而成功;但若使用 SELECT * FROM "test" 则会失败。

预防:

  • 敏感库中统一使用大写的对象名,避免双引号
  • 或者在应用代码中统一使用双引号精确指定大小写

3.4 记录超长错误

错误现象:插入数据时报 记录超长。

原因:行记录总长度超过了页大小的一半。

解决方案:

方案 适用场景 操作
重建数据库 数据库刚建好 设置更大的 PAGE_SIZE(如 32KB)
开启超长记录 个别表有问题 ALTER TABLE 表名 ENABLE LONG ROW;
修改列类型 个别列超长 将 VARCHAR 改为 TEXT 等大字段类型

达梦在线社区: https://eco.dameng.com

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70050873/viewspace-3176218/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2026-07-13

  • 博文量
    3
  • 访问量
    2149