从其他数据库迁移到 DM

DTS 能否把其他数据库脚本生成 DM 的脚本

不可以。不能直接通过 DTS 从其他数据库生成 DM 数据库语法的脚本,但是可以使用 DTS 工具将其他数据库中的数据对象及数据迁移到 DM 数据库中,在 DM 数据库中生成 DM 数据库语法的脚本。

DTS 能够只迁移表结构吗

DTS 可以只迁移表结构,使用 DTS 工具迁移选中表,双击后出现下图所示:

迁移策略

根据迁移需要可以设置表的迁移策略,来达到迁移表结构的目的。

DTS 目的模式名可以自定义么

目的模式名可以自定义,首先在需要迁移的目的端创建自己想要迁移的模式名,然后进行迁移的时候双击目的模式名。如下图所示:

目的模式

会出现选项,选之前创建好的模式名,就可以实现目的模式名的自定义了。

DTS 批量操作迁移所有表的表定义

DTS 转换的界面,还有个【应用到其它对象的按钮】的按钮,在左下角。如下图所示:

迁移策略

迁移对象有哪些

迁移对象如下图所示:

迁移对象

表/视图/序列对象是以不同的图标区分,如下图所示:

表表示“表”

视图表示“视图”

序列表示“序列”

存储过程表示“存储过程”

函数表示“函数”

包表示“包”

类表示“类”

同义词表示“同义词”

详细文档可在迁移工具的帮助文档中找到。

管理工具、DTS 缓存清理

在使用 DM 数据库管理工具和数据迁移工具时,清理工具缓存操作如下:

  • 进入数据库安装目录下的 tool 目录。
  • dmdbms\tool\configuratio,把里面的除 config.iniorg.eclipse.equinox.simpleconfigurator 的其他目录删掉。
  • dmdbms\tool\workspace,把里面的除 local 的其它目录删掉。

PG12 向 DM 迁移无法显示源端

【问题描述】

PG12 向 DM 迁移的时候,无法显示源端的模式,并且不能迁移成功,一直报分析表失败的错。

【解决方法】

需要更新 PG 驱动。

迁移数据至 DM MPP 集群提示随机分布表不能建唯一索引

DTS 工具分发方式设置成 HASH 分布即可。

报错:表或视图不存在

  • 如果是用 DTS 做数据迁移报错:需要在源端查看用户是否有权限;
  • 如果用驱动访问达梦数据库报错:要考虑是否是跨模式访问,给表加上模式名;
  • dimp 导入数据时报错:考虑大小写敏感的问题和权限问题。

GaussDB 的表如何迁移到达梦

可以选择 PG 迁移达梦,指定 GaussDB 的驱动。

PG 迁移到达梦数据库,可以参考从 PostgreSQL 迁移到 DM

Sybase 迁移到 DM

可以参考:Sybase 迁移到 DM7

如何先删除旧表的记录 ,再迁移数据

在迁移的“转换”页面,然后选择“如果目的表已存在,先删除”

DTS界面信息

DTS界面信息

Excel 表中数据粘贴到数据库表

当 Excel 表中数据列顺序与数据库表中列一致时,可以采用 DM 数据库自带的 DTS 迁移工具进行迁移,迁移时选择 Excel-DM 即可。

DTS界面信息

神通数据库date类型数据迁移到DM时,时间精度丢失

【问题原因】

神通数据库的 date 类型精确到时分秒,DTS 迁移工具转换成 DM 的 date 类型是没有时分秒的,导致 time 时间精度丢失。

【问题解决】

指定神通数据库驱动,同时迁移过程强制转换神通数据库的 date 类型为达梦数据库的 timestamp 类型。在数据类型映射的 ShenTong——DM 中,添加 date 到 timestamp(6) 的数据类型映射。

添加数据类型映射

在迁移界面取消勾选使用默认数据类型映射关系,就可以使用手动添加的数据类型映射了。

迁移设置

若要迁移某个包,如何查询所对应的依赖对象的 DDL 语句

【问题描述】

当需要重现某个包或者存储过程问题时,可能需要单独迁移个别包、存储过程到测试环境。当需要被迁移的某个包的依赖对象较多时,不建议手动拷贝,那如何高效迁移?

【问题分析】

这种情况需要明确所涉及对象 DDL 语句,以此可以在测试环境中进行问题重现。可通过以下语句获取:

select 
objs.ID,
CAST(dbms_metadatA.get_ddl(dobjs.refed_type$,objs.name,sobjs.name)  AS VARCHAR)
from
        (
                select * from sysdependencies where id = (select object_id from DBA_OBJECTS t 
                where t.OWNER = '所属用户' and t.object_name = '对象名' and object_type = 'PACKAGE BODY')
        )
        dobjs
left join sysobjects objs
on
        dobjs.refed_id = objs.id
left join sysobjects sobjs
on
        objs.schid = sobjs.id
    and objs.schid != 0

利用 DTS 迁移工具,从 postgresql 到 DM 数据的迁移报错:时间类型错误

【问题描述】

利用 DTS 迁移工具,从 postgresql 到 DM 数据的迁移报时间类型错误。但源表和目的表字段类型都一致,看日志提示已迁移部分记录成功,目的数据库查询也能查到迁移成功的部分记录但记录不全,如何定位问题在哪?

【问题分析】

通过以下步骤进行检查:
步骤 1:将目的表中所有 timestamp 类型字段修改成 varchar 类型后,重新导入数据成功;
步骤 2:将步骤 1 中修改的的字段类型 还原为 timestamp 字段,看哪个还原成 timestamp 字段有报错;
步骤 3:找出修改字段类型报“非法的时间日期类型数据”的错误;
步骤 4:检查步骤 3 找出的该字段数据,通过 isdate()函数 查看是否有非日期型数据;
步骤 5:若检查到有非日期型异常记录,源端修改记录数据在 timestamp 范围内后,重新导入。例如,经检查有条非日期型异常记录是'20019-01-01 00:00:00',该数据在 postgre 中认为是有效的日期型数据,能存储在 timestamp 字段中。

注意

达梦 TIMESTAMP/DATETIME 类型包括年、月、日、时、分、秒信息,定义了一个在'-4712-01-01 00:00:00.000000'和'9999-12-31 23:59:59.999999'之间的有效日期时间;'20019-01-01 00:00:00' 中的年份不在此范围内,所以会出现迁移报时间类型错误,而 postgre 中定义的有效的日期型数据精度较为广泛,能存储在 timestamp 字段中,此类错误很隐蔽,需要逐一排查数据才能定位到问题。

Postgresql 视图迁移到 DM 报错: string index out of range:17

【问题分析】

首先查看日志,获取视图脚本,在 disql 中执行,获取更详细的报错信息,定位到是语法分析错误,再进行语法修正即可。

例如视图对应相关基表的建表脚本为:

create table test(a INTEGER,b INTEGER);

dts 生成的视图脚本:

create or replace view v_test as(select a::text||b::text from test);

Postgresql 中数值型字段不允许直接拼接,需要强制转换为字符或文本型才允许拼接。而达梦无相关转换语法,数字型字段可直接拼接,所以将 ::text 的强制转换直接去掉即可。修正后的视图脚本:

create or replace view v_test as(select a||b from test);

Postgresql 源表中有字段定义默认值约束为序列的,将表结构迁移到 DM 时报错:default 约束表达式无效

【问题分析】

出现该问题是由于目的端 DTS 的登录账号和迁移表的模式不属于同一个,脚本中的 DEFAULT 序列名.NEXTVAL 无法找到,需要加上模式名,即 DEFAULT 模式名.序列名.NEXTVAL。

使用 dts 从人大金仓迁移到 DM,报错:com.kingbase8.jdbc.KbArray cannot be cast to dm.jdbc.driver.DmdbArray

【问题解决】

在进行 DTS 迁移时,需要指定人大金仓和 DM 数据库的驱动包,如下图所示:

指定驱动

微信扫码
分享文档
扫一扫
联系客服