---
title: Oracle迁移至DM8常见适配问题
description: "1. 请下载  DM驱动(https://download.dameng.com/eco/adapter/resource/jdbc/jdbc-20240326.zip)"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevps/portingadvisor/systemmigration/DevKit_Porting_0056.html
sourcePath: /source/zh/kunpengdevps/portingadvisor/systemmigration/DevKit_Porting_0056.html
indexId: 6ae82579f63f839da009a791fdad5150eeaa73a7c7510dfcad4a8fb89f9442fc79
---
# Oracle迁移至DM8常见适配问题

#### 驱动下载及DEM工具使用指导

1. 请下载  DM驱动(https://download.dameng.com/eco/adapter/resource/jdbc/jdbc-20240326.zip)
，将Oracle的JDBC驱动ojdbc，替换为DM8驱动DmJdbcDriver18。
2. 请使用DEM工具进行数据移植。
  具体操作请参见《从Oracle移植到DM》(https://eco.dameng.com/document/dm/zh-cn/start/oracle_dm.html)及《DM DBA手记之Oracle移植到DM》(https://eco.dameng.com/eco-file-server/file/eco/download/20220816140933HEYWAISNVYNVCDZI1C)。


#### DM数据库兼容性设置

请在迁移数据之前，将兼容参数调整为兼容Oracle数据库，可参考下列措施：

- 在实例指定的配置文件dm.ini中修改参数COMPATIBLE_MODE=2。
- 使用语句ALTER SYSTEM SET 'COMPATIBLE_MODE'=2 SPFILE;修改，修改后重启数据库服务使其生效。

详情请参见DM官方数据移植文档迁移准备(https://eco.dameng.com/document/dm/zh-cn/start/oracle_dm.html#3.4.1 迁移准备)中兼容性参数设置。


#### 整数相除时相关设置

若需要整数相除保留小数位，请在迁移数据之前，可参考下列措施：

- 在实例指定的配置文件“dm.ini”中修改CALC_AS_DECIMAL=1。
- 使用语句ALTER SYSTEM SET 'CALC_AS_DECIMAL'=1 SPFILE;修改，修改后重启数据库服务使其生效。

详情请参见DM官方数据移植文档迁移准备(https://eco.dameng.com/document/dm/zh-cn/start/oracle_dm.html#3.4.1 迁移准备)中兼容性参数设置。


#### 系统保留字配置

当在DM中创建表等对象时，出现“语法分析出错”报错，可能是因为使用的对象名为系统保留字。请通过SQL语句SELECT * FROM V$RESERVED_WORDS WHERE RESERVED='Y' AND KEYWORD='对象名称';，查询该对象名是否为保留字，若是，可参考下列措施：

- 使用双引号包裹对象名称，并在查询时使用引号。
- （推荐）配置客户端dm_svc.conf文件，在对应数据库的服务配置区，添加KEYWORDS配置屏蔽关键字：KEYWORDS=对象名称。
- 修改使用到系统关键字相关的SQL语句和对象名称。

详情请参见达梦数据库屏蔽系统保留字的方法(https://eco.dameng.com/community/article/6ca6b591fecb40d2941e524af5fc25c9)和SQL语句在两台机器上的达梦上，运行结果不同（保留字段问题）(https://eco.dameng.com/community/question/a7e82dcd4b3857650f017fa1d0e79406)。


#### 迁移视图指导

在迁移视图的过程中，若出现“无效的表或视图名”报错，可能是因为在迁移视图前，没有将依赖的表迁移过去。请按照迁移的顺序，先迁移序列、再迁移表、最后迁移视图、自定义类型、类、函数、存储过程、包等。

详情请参见官方FAQ：迁移视图提示：无效的用户对象(https://eco.dameng.com/document/dm/zh-cn/faq/faq-oracle-dm8-migrate.html#迁移视图提示：无效的用户对象)。


#### 精度与标度设置

Oracle中数据类型number(m,n)，允许n > m，达梦中要求m ≥ n，达梦中m表示精度，n表示标度。精度是一个无符号整数，定义了总的数字数；标度定义了小数点后的数字位数。如果数据列中遇到number类型定义m < n的场景，请确认是否可以修改为m ≥ n，若无法修改，请单独迁移这张表，修改达梦中的数据类型。

详情请参见官方FAQ：报错：精度必须大于标度(https://eco.dameng.com/document/dm/zh-cn/faq/faq-oracle-dm8-migrate.html#报错：精度必须大于标度)。


#### 数据溢出报错指导

如果从Oracle迁移到DM的过程出现“数据溢出”报错，可能是因为Oracle的INT类型自动转换成NUMBER(38)或Oracle的NUMBER类型存放精度超过38位。可参考下列措施：

- 理论上Oracle中不支持存储这种超长的数值，请确认数据本身是否存在错误。
- DM超过38位的NUMBER类型，建议改成VARCHAR类型。

详情请参见官方FAQ：Oracle迁移到DM，表结构一致，迁移数据报错：数据溢出(https://eco.dameng.com/document/dm/zh-cn/faq/faq-oracle-dm8-migrate.html#oracle 迁移到 DM，表结构一致，迁移数据报错：数据溢出)。


#### 索引不存在报错指导

如果从Oracle迁移到DM的过程出现“引用索引不存在”报错，可能是因为先迁移了子表的数据，父表的数据没有迁移，可参考下列措施：

- 父表数据迁移完毕后，再迁移子表。
- 使用DEM工具迁移，设置表映射关系时，首次只选择表定义；第二次迁移数据；第三次迁移约束、索引。

详情请参见官方FAQ：违反引用约束(https://eco.dameng.com/document/dm/zh-cn/faq/faq-oracle-dm8-migrate.html#违反引用约束)。
