dts达梦数据迁移工具


一、前言

今天无意间发现一篇不错的博客,关于达梦迁移工具的,正好最近也用到了,趁机整理一下,部分图是从那篇博客里拷出来的,因为不想自己再操作一遍了,请见谅。

数据迁移方式有很多,跨库比较常用的是dts和dmfldr。

迁移的时候建议先不迁移外键等约束,在选择好要迁移的表时,点击转换,按照下面步骤迁移。

(1)第一次只选择表定义,不选择约束等

(2)第一次迁移完成后(确保没有错误),第二次只选择数据

(3)第三步选择约束、索引等

(4)数据量大的表,可以用达梦的dmfldr工具单独迁移

(4)驱动建议用源库自带的驱动,不然可以会迁移出错

二、迁移

1、dts打开方式

可以在xx/dmdbms/tool下找到dts打开,或者管理工具里,在主页双击DM数据库迁移工具。

 

2、新建工程

 

 

 

3、数据类型映射

打开找到新建工程下的数据类型映射,这步可以不做,一般直接创建迁移就行,里面有转换按钮,需要的话可以做类型映射。

 

点击添加,添加对应要迁移的数据库类型和目前数据库类型的对应关系

 

达梦数据库对应类型

 

4、新建迁移任务

 

 

 

点击下一步,选择对应迁移数据库

 

点击下一步,输入源端(需要迁移库)和目的端(把数据迁移到的目标库)的连接信息

5、选择迁移方式

1)查询方式迁移

 

2)从数据源复制对象

这里要多说一句,迁移前要先在目的库创建用户,创建好用户,达梦会自动创建同名的模式,如果源库和目的库模式名称不同,这里要先做好模式映射,在“目的模式”中输入你想迁入的目的库的模式名。

 

点击下一步选择需要迁移的表

选择后可以点击转换按钮,设置你要迁移哪些东西,比如只迁移表结构,还是只迁移数据,等等,还可以设置数据类型映射,如下图的“数据类型”。

如果想把你在转换中的设置,应用到其他的表上,可以勾选“应用当前选项到其他同类对象”。

 

6、迁移出错处理

1)重新迁移出错的对象

建议保存迁移错误

 

2)导入迁移对象

如果迁移对象很多,在迁移的时候,可以导入迁移对象,只迁移部分表,最常用的场景是,重新迁移出错的表

 

可以自定义导入对象的格式,现在只支持txt,文件格式如下:

 

逗号前面的是模式名称,逗号后面的是表名称。

最终效果:

 

 

 

3)补充

如果表比较多,txt整理起来还挺麻烦的,在这里补充个notpade快捷键的用法。

a)先添加一个逗号

 

b)复制列

复制第一个逗号

Alt+鼠标左键

选取要复制的列

Ctrl+v

效果如下:

 

或者,也可以把光标放在第三行DEM后面,点击“编辑”-列块编辑,插入文本输入逗号

 

点击确定即可

 

c)在行末添加“,

使用notepad++替换功能在每行末尾添加”,,构成所需要的字符串内容

点击确定之后,执行全部替换

Ctrl+F

点替换

 

$表示行末

 

7、数据比对

迁移完,想知道数据到底迁移过来没,一般直接比较数据量就行了。

可以先创建一张统计表,然后统计每张表的数据量,把数据量信息插入统计表中,如下:

create table TMP_GET_ACTURAL_TABLE_COUNT(table_name varchar(50),table_cnt int);
begin
    for cursor_sql in(
      select 'insert into TMP_GET_ACTURAL_TABLE_COUNT(table_name,table_cnt) select '''||table_name||''' as table_name,count(1) as table_cnt from '||table_name as sqlstr1,table_name from (select b.name table_name from sysobjects a,sysobjects b
              where a.type$='SCH' and a.id = b.schid
               and b.type$='SCHOBJ' and b.subtype$='UTAB'
               and a.name ='SYSDBA' and b.name not like 'TMP%' )
     ) loop
     --print cursor_sql.table_name;
          execute immediate (cursor_sql.sqlstr1);
          commit;
    end loop;
end;

统计达梦库中某个模式下的数据量,注意表名称如果是关键字,需要加引号,不然这个过程块会报错。 oracle中换成从all_tables中查询,根据owner筛选。SYSDBA是本例统计的模式名称。

select b.name table_name from sysobjects a,sysobjects b
              where a.type$='SCH' and a.id = b.schid
               and b.type$='SCHOBJ' and b.subtype$='UTAB'
               and a.name ='SYSDBA' and b.name not like 'TMP%' 这个是达梦的语法,其实也能换成通过all_tables来统计,或者使用模式所属用户登录,通过user_tables统计,user_tables只能查到当前登录用户下的所有表。

8、其他

达梦有个云适配中心,地址如下:

https://eco.dameng.com/docs/zh-cn/start/migrate-oracle-dm.html

里面有迁移手册之类的,还有迁移时遇到的各种问题整理,会定时更新,有需要的可以参考下。

 

 

 

 

 

 更多资讯请上达梦技术社区了解: https://eco.dameng.com


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM