一、前言
今天无意间发现一篇不错的博客,关于达梦迁移工具的,正好最近也用到了,趁机整理一下,部分图是从那篇博客里拷出来的,因为不想自己再操作一遍了,请见谅。
数据迁移方式有很多,跨库比较常用的是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