注册
迁移时参数的设置
专栏/技术分享/ 文章详情 /

迁移时参数的设置

雾岛听风 2026/09/04 144 0 0
摘要

DM 从 MySQL/Oracle 迁移 — 初始化参数设置总结


一、核心兼容性参数:COMPATIBLE_MODE

COMPATIBLE_MODE 是 DM 中最重要的兼容性开关,位于 dm.ini 配置文件中。

取值 含义
0 不兼容(达梦默认模式)
1 兼容 SQL92 标准
2 部分兼容 ORACLE 👈
3 部分兼容 MSSQLSERVER
4 部分兼容 MYSQL 👈
5 兼容 DM6
6 部分兼容 TERADATA
7 部分兼容 POSTGRES
8 部分兼容 DB2

COMPATIBLE_MODE静态参数,修改后必须重启数据库才能生效。


二、从 Oracle 迁移的关键参数设置

当兼容模式设置为 COMPATIBLE_MODE=2 时,还需要同步调整以下参数:

2.1 建库时必要参数(dminit)

参数 推荐值 说明
CASE_SENSITIVE Y Oracle 默认大小写敏感,建议保持一致
CHARSET 0(GB18030) 或 1(UTF-8) 根据源库字符集选择
BLANK_PAD_MODE 1 兼容 Oracle 结尾空格填充规则:CHAR 类型按定义长度填充空格,VARCHAR2 不填充也不截断

2.2 dm.ini 中必须配合设置的参数

参数 推荐值 说明
COMPATIBLE_MODE 2 部分兼容 Oracle
FLOAT_MODE 1 必须与 COMPATIBLE_MODE=2 同时开启,支持浮点特殊值(NaN/Infinity 等)
NUMBER_MODE 1 兼容 Oracle 的 NUMBER/FLOAT/REAL/DOUBLE PRECISION 类型处理方式
ORA_DATE_FMT 1 仅当 COMPATIBLE_MODE=2 时有效;DATE 类型使用 NLS_DATE_FORMAT 格式
ORA_REVERSE_MODE 1 REVERSE() 函数按字符反转(与 DM 默认一致);0 则按字节反转(与 Oracle 一致)???
DATETIME_FMT_MODE 1 兼容 Oracle 五种日期时间类型的默认格式
LEGACY_SEQUENCE 0 与 Oracle 序列兼容(0 表示与 Oracle 兼容,1 表示与 DM 旧版本兼容)
CASE_COMPATIBLE_MODE 1 CASE/DECODE 运算兼容 Oracle 处理策略
PL_SQLCODE_COMPATIBLE 1 PL/SQL 异常处理中 SQLCODE 错误码尽量与 Oracle 一致
VIEW_ACCESS_MODE 1 视图自主访问控制兼容 Oracle
SPACE_COMPARE_MODE 1 查询语句中比较字符串后缀空格 ???
XA_COMPATIBLE_MODE 1 XA 事务兼容 Oracle(返回与 Oracle 一致的报错码)
CHAR_CHECK_INTEGRATED 1 检查字符完整性(配合 COMPATIBLE_MODE=2)
JSON_MODE 0 JSON 语法解析兼容 ORACLE

2.3 Oracle 迁移的 dminit 建库示例

dminit PATH=/data/dmdata PAGE_SIZE=16 CASE_SENSITIVE=Y CHARSET=1 BLANK_PAD_MODE=1 DB_NAME=ORACLEDB INSTANCE_NAME=ORCL PORT_NUM=5236 SYSDBA_PWD=XXXXXXX SYSAUDITOR_PWD=XXXXXXX

建库后在 dm.ini 中修改/确认:

COMPATIBLE_MODE = 2 FLOAT_MODE = 1 NUMBER_MODE = 1 ORA_DATE_FMT = 1 DATETIME_FMT_MODE = 1 LEGACY_SEQUENCE = 0 PL_SQLCODE_COMPATIBLE = 1 VIEW_ACCESS_MODE = 1

三、从 MySQL 迁移的关键参数设置

当兼容模式设置为 COMPATIBLE_MODE=4 时,还需要同步调整以下参数:

3.1 建库时必要参数(dminit)

参数 推荐值 说明
CASE_SENSITIVE N MySQL 默认大小写不敏感,建议保持一致
CHARSET 1(UTF-8) MySQL 通常使用 UTF-8 字符集
BLANK_PAD_MODE 0 MySQL 不进行 Oracle 式的空格填充

3.2 dm.ini 中必须配合设置的参数

参数 推荐值 说明
COMPATIBLE_MODE 4 部分兼容 MySQL
CALC_AS_DECIMAL 2 整数除法和四则运算转为 DECIMAL 处理(兼容 MySQL 运算规则)
MY_STRICT_TABLES 1 仅在 COMPATIBLE_MODE=4 时有效。位掩码控制严格模式:bit0-数据超长、bit1-字符转数值、bit2-除零、bit3-CAST AS CHAR、bit4-CAST AS VARCHAR。0=最大容错(兼容 MySQL),各 bit 为 1=相应策略报错
JSON_MODE 2 JSON 语法解析兼容 MySQL
NO_AUTO_VALUE_ON_ZERO 1 AUTO_INCREMENT 列插入 0 时自动插入自增值(兼容 MySQL)???
AUTO_INCREMENT_INCREMENT 1 AUTO_INCREMENT 步长 ???
AUTO_INCREMENT_OFFSET 1 AUTO_INCREMENT 基准偏移 ???
XA_COMPATIBLE_MODE 2 XA 事务兼容 MySQL 的处理策略(注意:取值 2 时不支持 DBMS_XA 系统包)
BINARY_AS_HEX 0 UNHEX 函数返回 VARCHAR(兼容 MySQL)???
ENABLE_BLOB_CMP_FLAG 2 大字段与字符串比较时,字符串转换为大字段类型(兼容 MySQL)

3.3 MySQL 特有的行为控制

参数 说明
MY_STRICT_TABLES = 0 最大容错模式(最接近 MySQL 默认行为):数据超长自动截断、字符转数值失败转 0、除 0 返回 NULL
MY_STRICT_TABLES = 7 全部严格报错(数据超长报错 + 字符转数值失败报错 + 除零报错)
MY_STRICT_TABLES = 31 最严格模式(上述全部 + CAST AS CHAR/VARCHAR 严格匹配)

3.4 MySQL 迁移的 dminit 建库示例

dminit PATH=/data/dmdata PAGE_SIZE=16 CASE_SENSITIVE=N CHARSET=1 BLANK_PAD_MODE=0 DB_NAME=MYSQLDB INSTANCE_NAME=MYSQL PORT_NUM=5237 SYSDBA_PWD=XXXXXX SYSAUDITOR_PWD=XXXXXX

建库后在 dm.ini 中修改/确认:

COMPATIBLE_MODE = 4 CALC_AS_DECIMAL = 2 MY_STRICT_TABLES = 0 JSON_MODE = 2 NO_AUTO_VALUE_ON_ZERO = 1

四、客户端/JDBC 层的兼容性设置

DM 的 JDBC 驱动也支持 COMPATIBLE_MODE 参数(连接字符串级别),取值为数据库名称字符串:

取值 含义
oracle 兼容 Oracle
mysql 兼容 MySQL

示例 JDBC 连接 URL:

jdbc:dm://host:5236?COMPATIBLE_MODE=oracle
jdbc:dm://host:5237?COMPATIBLE_MODE=mysql

客户端层的 COMPATIBLE_MODE 可与会话级、系统级参数独立设置,灵活控制。


五、参数修改方法总结

5.1 静态参数修改(如 COMPATIBLE_MODE)

静态参数无法动态修改,需要:

  1. 方法一:直接编辑 dm.ini 文件,修改参数值,然后重启数据库
  2. 方法二:使用系统过程 SP_SET_PARA_VALUE(scope=2, ...) 仅修改 INI 文件,再重启
-- 仅写入 dm.ini 文件(scope=2),不修改内存值 SP_SET_PARA_VALUE(2, 'COMPATIBLE_MODE', 2); -- 重启数据库后生效

5.2 动态参数修改

动态参数可在数据库运行期间通过系统过程修改:

过程/函数 用途
SP_SET_PARA_VALUE(scope, name, value) 修改整型参数(scope: 0=内存, 1=内存+文件, 2=仅文件)
SP_SET_PARA_DOUBLE_VALUE(scope, name, value) 修改浮点型参数
SP_SET_PARA_STRING_VALUE(scope, name, value) 修改字符串类型参数
SP_SET_INI_PARA_VALUE(scope, name, value) 通用修改(整型/浮点/字符串),使用 VARCHAR 传入值
SF_SET_SYSTEM_PARA_VALUE(name, value, deferred, scope) 修改系统级参数
SF_SET_SESSION_PARA_VALUE(name, value) 仅修改当前会话的参数值
SF_GET_PARA_VALUE(scope, name) 查询当前参数值
SP_RESET_SESSION_PARA_VALUE(name) 重置某会话级参数为系统级默认值

示例:

-- 动态修改 MY_STRICT_TABLES,同时写入内存和文件 SP_SET_PARA_VALUE(1, 'MY_STRICT_TABLES', 7); -- 仅当前会话修改 CALC_AS_DECIMAL SF_SET_SESSION_PARA_VALUE('CALC_AS_DECIMAL', 2); -- 查询 COMPATIBLE_MODE 当前值 SELECT SF_GET_PARA_VALUE(2, 'COMPATIBLE_MODE');

5.3 通过数据库配置工具(GUI)

DM 管理工具 → 控制台工具 → 查看实例配置属性,在"兼容性"分类下可查看和修改兼容性相关参数。


六、迁移前检查清单

Oracle → DM

  • COMPATIBLE_MODE = 2
  • FLOAT_MODE = 1(必须)
  • CASE_SENSITIVE = Y(建库参数)
  • BLANK_PAD_MODE = 1(建库参数)
  • NUMBER_MODE = 1
  • ORA_DATE_FMT = 1
  • DATETIME_FMT_MODE = 1
  • LEGACY_SEQUENCE = 0
  • PL_SQLCODE_COMPATIBLE = 1
  • 检查 PL/SQL 语法差异(游标、异常处理等)
  • 检查 Oracle 特有函数替代方案

MySQL → DM

  • COMPATIBLE_MODE = 4
  • CASE_SENSITIVE = N(建库参数)
  • CALC_AS_DECIMAL = 2
  • MY_STRICT_TABLES = 0(最大容错,兼容 MySQL 默认行为)
  • JSON_MODE = 2
  • NO_AUTO_VALUE_ON_ZERO = 1
  • 检查存储引擎差异(InnoDB → DM 表空间映射)
  • 检查 MySQL 特有函数替代方案
  • 注意 AUTO_INCREMENT 行为差异

七、注意事项

  1. 兼容模式不可逆COMPATIBLE_MODE 的修改会影响数据存储格式和操作结果,一旦选定后修改可能导致已有数据异常,务必在建库前确定。
  2. 部分兼容:手册中明确用词为"部分兼容",意味着 Oracle/MySQL 的某些特性在 DM9 中可能表现不完全一致,迁移前须充分测试。
  3. 参数组合效应:多个兼容性参数之间存在相互影响(如 COMPATIBLE_MODE=2ORA_DATE_FMT 才生效),需要整体考虑。

参考文档:《DM8系统管理员手册》第2章(dm.ini配置参数)、第6章(创建和配置DM数据库)、第20章(问题跟踪和解决 - 调整配置参数)

https://eco.dameng.com

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服