原作者:陈坤
背景:有客户需要从oracle 迁移部分数据到mogdb中,需要修改schema 名,修改表名,并希望使用mvd进行批量的对比。在单独使用mvd进行对比时,只支持读取mtk的json格式,但不能获取remap的信息,或只能进行单表对比。可以直接使用mtk调用mvd进行批量的对比。命令行模式为,先进行mtk迁移后,执行mtk -c ora2mogdb.json mvd。而这里介绍使用图形化工具mtkd 进行迁移并对比数据。
软件版本:
操作系统:linux-centos-v7.6.1810
源库:oracle 19.11.0
目标库:mogdb 5.0.1
MTKD 2.9.5
MVD 3.6.9
安装环境
下载mtkd:
https://docs.mogdb.io/zh/mtk/v2.0/release-2.9#295
mtkd 可以安装在源库,也可以安装在目标库上,本案例是安装在目标库。一般来说,源库有数据或者有业务,而目标库是新环境,大多数情况也会选择装在目标库上。
安装mtk的环境配置,如果要迁移oracle数据库,就要安装oracle 客户端。具体源库目标库分别依赖的环境可以参考:https://docs.mogdb.io/zh/mtk/v2.0/mtk-env
安装oracle客户端
本案例是以迁移oracle为例,需要安装oracle客户端。
在下面地址中找到对应操作系统的版本
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
oracle官网没找到19.11对应的,只有最新的,下载了一个19.21的客户端的zip版本,也是可以用的。
下载后解压
unzip instantclient-basic-linux.x64-19.21.0.0.0dbru.zip
出现一个目录,这样就可以了
instantclient_19_21
例如:
[enmo@master137 ~]$ ll /home/enmo/mtk
total 161744
drwx------ 3 enmo enmo 4096 Dec 4 15:32 instantclient_19_21
-rw-r–r-- 1 enmo enmo 75320771 Dec 4 15:32 instantclient-basic-linux.x64-19.21.0.0.0dbru.zip
设置oracle 环境变量
在执行mtk 之前需要设置oracle 客户端的环境变量,否则会报错:
DPI-1047: Cannot locate a 64-bit Oracle Client library: “libclntsh.so: cannot open shared object file: No such file or directory”.
根据我当前的目录,设置环境变量:
export LD_LIBRARY_PATH=/home/enmo/mtk/instantclient_19_21:$LD_LIBRARY_PATH
安装MTKD
环境安装好之后。在主机上解压MTKD安装包,我是安装在数据库操作系统用户下的,没有装在root下,具体安装步骤如下:
[enmo@master137 ~]$ cp mtkd_2.9.5_linux_amd64.tar.gz mtkd/
[enmo@master137 ~]$ cd mtkd
[enmo@master137 mtkd]$ ll
total 27360
-rw------- 1 enmo enmo 28012941 Dec 6 14:14 mtkd_2.9.5_linux_amd64.tar.gz
[enmo@master137 mtkd]$ tar -zxf mtkd_2.9.5_linux_amd64.tar.gz
[enmo@master137 mtkd]$ ll
total 27364
drwx------ 2 enmo enmo 4096 Dec 6 14:14 mtkd_2.9.5_linux_amd64
-rw------- 1 enmo enmo 28012941 Dec 6 14:14 mtkd_2.9.5_linux_amd64.tar.gz
[enmo@master137 mtkd]$ cd mtkd_2.9.5_linux_amd64/
[enmo@master137 mtkd_2.9.5_linux_amd64]$ ll
total 81912
-rw------- 1 enmo enmo 82994 Nov 1 09:44 CHANGELOG.md
-rw------- 1 enmo enmo 3451 May 12 2023 HOW-TO-RUN.md
-rwx------ 1 enmo enmo 83785920 Nov 1 09:43 mtkd
生成license
生成license的命令,需要能连接外网,填写邮箱后会生成license ,也会下载一份到当前目录:
mtkd license gen
如果已有mtk,mvd等产品的license 可以直接复制过来用。
[enmo@master137 mtkd_2.9.5_linux_amd64]$ cp …/…/mtk/license.json license.json
[enmo@master137 mtkd_2.9.5_linux_amd64]$ ll
total 81916
-rw------- 1 enmo enmo 82994 Nov 1 09:44 CHANGELOG.md
-rw------- 1 enmo enmo 3451 May 12 2023 HOW-TO-RUN.md
-rw------- 1 enmo enmo 3714 Dec 6 14:16 license.json
-rwx------ 1 enmo enmo 83785920 Nov 1 09:43 mtkd
安装MVD
因为要在MTKD中调用MVD进行对比,所以也需要提前安装好MVD。
下载MVD:
https://docs.mogdb.io/zh/mvd/v3.4/release-notes
解压后找到mvd_linux_x86_64文件
[enmo@master137 mvd_v3.6.5_Linux_centos_7_x86_64]$ ll
total 65104
-rw------- 1 enmo enmo 24788 Dec 1 14:54 changelog.md
-rw------- 1 enmo enmo 33 Dec 1 14:54 CHECKSUM
drwx------ 14 enmo enmo 4096 May 31 2023 clidriver
drwx------ 2 enmo enmo 4096 Dec 1 14:54 images
-rw------- 1 enmo enmo 6913 Dec 1 14:54 mvd_config_example.json
-rwx------ 1 enmo enmo 66582376 Dec 1 14:54 mvd_linux_x86_64
-rw------- 1 enmo enmo 29365 Dec 1 14:54 ReadMe.md
修改好文件权限,将mvd_linux_x86_64文件复制到mtkd的目录中
[enmo@master137 mtkd]$ cp …/mvd/mvd_v3.6.5_Linux_centos_7_x86_64/mvd_linux_x86_64 mvd_linux_x86_64
[enmo@master137 mtkd]$ ll
total 92388
drwx------ 3 enmo enmo 4096 Dec 6 15:02 mtkd_2.9.5_linux_amd64
-rw------- 1 enmo enmo 28012941 Dec 6 14:14 mtkd_2.9.5_linux_amd64.tar.gz
-rwx------ 1 enmo enmo 66582376 Dec 6 15:04 mvd_linux_x86_64
这样就可以了。
启动mtkd
./mtkd
[enmo@master137 mtkd_2.9.5_linux_amd64]$ ./mtkd
Using license file: /home/enmo/mtkd/mtkd_2.9.5_linux_amd64/license.json
Name : ShangHai Futures Exchange
Expiry: 2026-12-31 00:00:00 +0000 UTC
Version: 2.7.2
MMMMMMMM MMMMMMMMTTTTTTTTTTTTTTTTTTTTTTTKKKKKKKKK KKKKKKKDDDDDDDDDDDDD
M:::::::M M:::::::MT:::::::::::::::::::::TK:::::::K K:::::KD::::::::::::DDD
M::::::::M M::::::::MT:::::::::::::::::::::TK:::::::K K:::::KD:::::::::::::::DD
M:::::::::M M:::::::::MT:::::TT:::::::TT:::::TK:::::::K K::::::KDDD:::::DDDDD::::😄
M::::::::::M M::::::::::MTTTTTT T:::::T TTTTTTKK::::::K K:::::KKK D::::😄 D::::😄
M:::::::::::M M:::::::::::M T:::::T K:::::K K:::::K D::::😄 D::::😄
M:::::::M::::M M::::M:::::::M T:::::T K::::::K:::::K D::::😄 D::::😄
M::::::M M::::M M::::M M::::::M T:::::T K:::::::::::K D::::😄 D::::😄
M::::::M M::::M::::M M::::::M T:::::T K:::::::::::K D::::😄 D::::😄
M::::::M M:::::::M M::::::M T:::::T K::::::K:::::K D::::😄 D::::😄
M::::::M M:::::M M::::::M T:::::T K:::::K K:::::K D::::😄 D::::😄
M::::::M MMMMM M::::::M T:::::T KK::::::K K:::::KKK D::::😄 D::::😄
M::::::M M::::::M TT:::::::TT K:::::::K K::::::KDDD:::::DDDDD::::😄
M::::::M M::::::M T:::::::::T K:::::::K K:::::KD:::::::::::::::DD
M::::::M M::::::M T:::::::::T K:::::::K K:::::KD::::::::::::DDD
MMMMMMMM MMMMMMMM TTTTTTTTTTT KKKKKKKKK KKKKKKKDDDDDDDDDDDDDRelease version: v2.9.5
Git Commit hash: 710fa655
Git Commit Date: 2023-11-01T01:43:44Z
Git Tag : v2.9.5
Build timestamp: 20231101014614…
此时mtkd就已经启动了。
使用mtkd图形界面进行迁移
可以在前台用浏览器打开图形化界面:我的虚拟机主机ip是 192.168.182.137,所以打开以下地址。http://192.168.182.137:8080/
这里有一个我已经测试的项目,第一次打开是没有的。
点击创建项目
填写源库和目标库配置,其实相当于mtk配置json文件中的source 和target项目。也可以直接编辑json
下方有迁移配置,可填写要迁移的表或schema
填写好之后,还会进入一次json格式配置文件页面,可以手动编辑,调整其他参数,直接在左边的页面上编辑json文件。
parameter中需要注意的参数:
remapschema,可以配置重命名schema
remaptabl,可以控制重命名表
可按如下配置
“remapSchema”: {“CK”:“MOMO”},
“remapTable”: {“T1”:“TT1”,“TEST”:“TTEST”},
如果每次迁移需要truncate已经存在的表,需要设置truncTable,默认值是false
“truncTable”: true,
还有:dropSchema,dropExistingObject,skipExistPLSQL等参数,默认值都是false,如果真需要在迁移前删除目标库的同名对象,可以进行配置。
可以点击参数在右边查看参数的含义。
编辑完之后,需要先点击保存配置。
然后就可以启动迁移,选择一次性全部迁移,可以给迁移记录命名。点确定就开始迁移了。
然后会跳转到运行日志界面,展示迁移的日志
迁移完成后,可以检查概览和报告
报告中会详细列出迁移的对象类型,数量,成功数量等,也会自动执行数据对比,这里只是数据量对比。
调用mvd进行数据对比
注意迁移报告中的对比的只是比较行数,并不会比较具体数据。要进行更严格的对比,需要配置mvd对比。
回到配置页面,点击启动迁移,但是选择数据对比。
对比完成后,可以看到使用了mvd对比,以及对比结果。
如果结果不一致,也可以下载查看不一致的地方。
关于remap table
目前的官方文档中写明了,已经废弃了该功能,但实际测试是可用的。只是页面上不支持,但点开查看sql,可以看到在目标库是用新表名创建的。