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

| 概念 | 说明 |
|---|---|
| 页(Page) | 数据库最小的存储单位和 I/O 单元 |
| 簇(Extent) | 空间分配的最小单位,由连续的页组成 |
| 段(Segment) | 由若干个簇组成,用于存放表、索引等对象 |
| 类别 | 说明 | 典型参数 |
|---|---|---|
| 不可修改参数(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修改 |
| 属性 | 说明 |
|---|---|
| 含义 | 数据页的大小,数据库最小 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)强制要求 |
| 属性 | 说明 |
|---|---|
| 含义 | 每次分配空间时的连续页数 |
| 可选值 | 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 | 最大化空间分配效率,但需接受空间浪费 |
大小写敏感影响的内容: 表空间, 对象名(表名/列名), 数据内容(字符串内容)
| 属性 | 说明 |
|---|---|
| 含义 | 标识符和 数据内容比较时是否区分大小写 |
| 可选值 | Y/y/1(敏感)、N/n/0(不敏感) |
| 默认值 | Y(敏感) |
| 是否可改 |
否,修改
dm.ini 中
GLOBAL_STR_CASE_SENSITIVE 无效 |
这是配置错误影响最明显的参数。它同时影响:
'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 环境下对数据内容不敏感 |
迁移场景中,若大小写敏感配置与源库不一致,可能导致唯一约束冲突、查询结果不符合预期。
| 属性 | 说明 |
|---|---|
| 含义 | 数据库存储字符的编码方式 |
| 可选值 | 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 迁移 | 与源库保持一致 | 避免字符集不匹配导致乱码或导入失败 |
| 属性 | 说明 |
|---|---|
| 含义 | 字符串比较时是否保留结尾空格 |
| 可选值 | 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 | 多数应用不依赖结尾空格差异 |
以下参数可在初始化时设置,也可在运行期调整:
| 参数 | 含义 | 默认值 | 生产建议 |
|---|---|---|---|
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密码 | 必选 | 须含大小写字母、数字、特殊字符 |
错误现象:
Permission denied 错误。
原因:数据目录所有者不是
dmdba,或权限不正确。
解决方案:
# 修改目录所有者为 dmdba chown -R dmdba:dinstall /path/to/data # 修正权限 chmod -R 755 /path/to/data
最佳实践:使用
dmdba 用户执行 dminit 命令,而非 root。

错误现象:
No space left on device。
原因:目标分区可用空间不足。
解决方案:
# 检查磁盘空间 df -h # 检查目录占用 du -sh /path/to/data/*
预防:初始化前确认目标分区有足够空间,并合理设置
LOG_SIZE 避免日志文件过大。
错误现象:应用查询报"表或视图不存在",或唯一约束冲突。
原因:
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" 则会失败。
预防:
错误现象:插入数据时报
记录超长。
原因:行记录总长度超过了页大小的一半。
解决方案:
| 方案 | 适用场景 | 操作 |
|---|---|---|
| 重建数据库 | 数据库刚建好 | 设置更大的
PAGE_SIZE(如 32KB) |
| 开启超长记录 | 个别表有问题 |
ALTER TABLE 表名 ENABLE LONG ROW; |
| 修改列类型 | 个别列超长 | 将 VARCHAR 改为 TEXT 等大字段类型 |
达梦在线社区: https://eco.dameng.com
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70050873/viewspace-3176218/ ,如需转载,请注明出处,否则将追究法律责任。