Oracle 迁移达梦要适配什么
Oracle 到达梦数据库的迁移面主要集中在五块:数据类型映射、序列与自增改造、PL/SQL 存储过程与包、分页与函数行为差异、以及同义词与物化视图等对象。达梦提供 Oracle 兼容模式,能减少改写量,但兼容不等于零改动——函数返回值类型、空串与 NULL 语义等细节仍可能不同,因此迁移的验收标准应是业务 SQL 全量回归,而不是只看建表是否成功。
基本信息
| 常见运行端口 | 达梦默认实例端口 5236 |
|---|---|
| 命令行工具 | disql,格式为 disql 用户/口令@主机:端口 |
| 兼容模式 | 建库时可选择 Oracle 兼容,需按实际实例确认 |
| 迁移工具 | 达梦 DTS,支持异构库迁入 |
| 验收方式 | 业务 SQL 与 Top SQL 逐条回归执行 |
典型使用场景
- 存量 Oracle 业务系统整体替换为达梦,需要评估改写工作量与风险点
- 先做兼容性摸底:抽取 Top SQL 在达梦侧执行,输出不兼容清单
- 存储过程与触发器迁移,逐个人工核对移植后的逻辑与异常处理
- 把一个 schema 作为试点完整迁移并回归,验证方案后再推广到其它库
- 性能对比:同一批 SQL 在两侧执行,确认执行计划与响应时间可接受
- 版本升级或打补丁后重跑回归用例,持续确认兼容性
适配核查与验证
适配核查与验证
# 1) 数据类型:NUMBER、VARCHAR2、CLOB、DATE 映射逐列抽检
# 2) 对象:序列、同义词、物化视图、包体逐项迁移验证
# 3) Top SQL 清单在达梦侧逐条执行回归
./disql SYSDBA/口令@localhost:5236 -e "SELECT COUNT(*) FROM user_objects;" # 对象数量对照
./disql SYSDBA/口令@localhost:5236 -e "SELECT COUNT(*) FROM 业务表;" # 行数对照
# 分页写法按版本核对(兼容模式下支持 ROWNUM 形式):
# SELECT * FROM (SELECT t.*, ROWNUM rn FROM t WHERE ROWNUM <= 20) WHERE rn > 10;
# 空串与 NULL 语义、日期函数返回值类型做重点用例适配重点对照
| 对象或特性 | 迁移关注点 | 验证方法 |
|---|---|---|
| 数据类型 | NUMBER 精度、VARCHAR2 长度语义 | 建表后在两侧比对列定义 |
| 序列与自增 | 序列取值与缓存策略 | 插入压测后核对最大值与唯一性 |
| PL/SQL 包体 | 语法与异常处理差异 | 逐个编译并跑业务用例 |
| 分页查询 | ROWNUM 与 LIMIT 形式差异 | Top SQL 逐条执行比对结果 |
| 空串与 NULL | 空串处理语义可能不同 | 构造用例核对条件过滤结果 |
把兼容性回归用例固化成脚本化清单:每次达梦版本升级或打补丁后重跑一遍,兼容性问题往往在升级后才暴露,靠人工临时抽查很难覆盖。
序列改造必须连同应用代码一起回归:只改数据库侧而应用仍在用旧取值方式,属于半改状态,在并发插入场景下会直接产生重复键。