Oracle迁移至DM8常见适配问题
驱动下载及DEM工具使用指导
DM数据库兼容性设置
请在迁移数据之前,将兼容参数调整为兼容Oracle数据库,可参考下列措施:
- 在实例指定的配置文件dm.ini中修改参数COMPATIBLE_MODE=2。
- 使用语句ALTER SYSTEM SET 'COMPATIBLE_MODE'=2 SPFILE;修改,修改后重启数据库服务使其生效。
整数相除时相关设置
若需要整数相除保留小数位,请在迁移数据之前,可参考下列措施:
- 在实例指定的配置文件“dm.ini”中修改CALC_AS_DECIMAL=1。
- 使用语句ALTER SYSTEM SET 'CALC_AS_DECIMAL'=1 SPFILE;修改,修改后重启数据库服务使其生效。
系统保留字配置
当在DM中创建表等对象时,出现“语法分析出错”报错,可能是因为使用的对象名为系统保留字。请通过SQL语句SELECT * FROM V$RESERVED_WORDS WHERE RESERVED='Y' AND KEYWORD=对象名称;,查询该对象名是否为保留字,若是,可参考下列措施:
- 使用双引号包裹对象名称,并在查询时使用引号。
- (推荐)配置客户端dm_svc.conf文件,在对应数据库的服务配置区,添加KEYWORDS配置屏蔽关键字:KEYWORDS=对象名称。
- 修改使用到系统关键字相关的SQL语句和对象名称。
迁移视图指导
在迁移视图的过程中,若出现“无效的表或视图名”报错,可能是因为在迁移视图前,没有将依赖的表迁移过去。请按照迁移的顺序,先迁移序列、再迁移表、最后迁移视图、自定义类型、类、函数、存储过程、包等。
精度与标度设置
Oracle中数据类型number(m,n),允许n>m,达梦中要求m>=n,达梦中m表示精度,n表示标度。精度是一个无符号整数,定义了总的数字数;标度定义了小数点后的数字位数。如果数据列中遇到number类型定义m<n的场景,请确认是否可以修改为m>=n,若无法修改,请单独迁移这张表,修改达梦中的数据类型。
数据溢出报错指导
如果从Oracle迁移到DM的过程出现“数据溢出”报错,可能是因为Oracle的int类型自动转换成number(38)或Oracle的number类型存放精度超过38位。可参考下列措施:
- 理论上Oracle中不支持存储这种超长的数值,请确认数据本身是否存在错误。
- DM超过38位的number类型,建议改成varchar类型。
父主题: 参考