暂无图片
暂无图片
4
暂无图片
暂无图片
暂无图片

Mogdb--MTK异构迁移工具(Oracle-->Mogdb)

原创 张鹏远 2021-11-08
2955

MTK工具介绍

MTK–异构数据迁移工具

异构数据库迁移工具,支持在不同的数据库之间进行数据迁移和程序迁移,目前支持离线全量迁移。

1.多数据库类型支持
支持 Oracle,DB2, openGauss,sqlServer, MySQL 等数据库之间的互相迁移 (互为源和目标)。

2.迁移性能调整

支持调整数据迁移过程中的批量查询、批量插入大小等细粒度参数,来调整数据迁移的性能。

支持数据迁移时的多并发,并行和数据分片。

3.结构和数据分离

支持同步迁移对象结构和数据;也支持仅迁移结构或者仅迁移数据(在结构已经迁移完之后)。

支持表级和 Schema 级的迁移范围限定,允许指定schema下全部对象或者某些对象进行迁移 。

支持迁移过程中的 Schema 重映射,也就是支持将对象从源Schema迁移到目标端的不同名Schema下 。

4.程序迁移(支持Oracle/MySQL为源,openGauss/Mogdb为目标)

支持Oracle/MySQL->openGauss/Mogdb的存储过程,函数,触发器,包迁移。

自动根据openGauss/Mogdb的语法规则,对Oracle/MySQL的程序进行改写,之后再在目标端openGauss/Mogdb数据库中创建。

MTK模块

image.png

MTK迁移

1.MTK表结构定义转换
读取线程从源数据库视图获取基本信息,内部转为为自定义数据结构,写入线程根据目标数据库类型转为支持的语法进行创建。
2.MTK数据迁移
MTK内部定义数据结构,读取线程从数据库读取原始数据转为内部格式,然后放入队列,写入线程从队列里进行读取并分批次,批量提交到目标数据库
image.png

MTK迁移测试(ORACLE–>MOGDB)

1.基准测试

获取MTK license

./mtk license gen

2.在Mogdb数据库服务器中安装ORACLE客户端

安装完成后,配置TNS,设置环境变量,确保可以正常访问ORACLE数据库

export LD_LIBRARY_PATH=/app/oracle/client/instantclient_19_5

image.png

3.在Mogdb中创建数据库、用户,并赋予权限。

create database test;创建目标数据库

CREATE USER MOGDB WITH PASSWORD "mogdb_123";

GRANT ALL ON schema public TO MOGDB ;

ALTER user MOGDB SYSADMIN;

grant create on database test to mogdb;(MTK支持同时迁移多个schema,在MogDB中会自动创建需要的schema,因此需要赋予迁移用户创建schema的权限)

4.在ORACLE中创建表空间、用户及生成测试数据

create tablespace mogdb datafile '+data' size 10G;
create user mogdb identified by "mogdb_123" default tablespace mogdb;
grant connect,resource to mogdb;

测试数据采用BenchmarkSql 生成100仓数据。
props.ora 配置

db=oracle
driver=oracle.jdbc.driver.OracleDriver
conn=jdbc:oracle:thin:@192.168.6.52:1521/new19cdb
user=mogdb
password=mogdb@123

warehouses=100
loadWorkers=20

terminals=1
//To run specified transactions per terminal- runMins must equal zero
runTxnsPerTerminal=10
//To run for specified minutes- runTxnsPerTerminal must equal zero
runMins=0
//Number of total transactions per minute
limitTxnsPerMin=300

//Set to true to run in 4.x compatible mode. Set to false to use the
//entire configured database evenly.
terminalWarehouseFixed=true

//The following five values must add up to 100
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4

// Directory name to create for collecting detailed result data.
// Comment this out to suppress.
resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
osCollectorScript=./misc/os_collector_linux.py
osCollectorInterval=1
//osCollectorSSHAddr=user@dbhost
osCollectorDevices=net_eth0 blk_sda

5.编辑mtk_config.json文件
关于MTK配置说明可以参考:https://docs.mogdb.io/zh/mtk/v2.0/mtk-config

{
  "source": {
    "type": "oracle",
    "connect": {
      "version": "",
      "host": "192.168.6.52",
      "user": "mogdb",
      "port": 1521,
      "password": "mogdb",
      "dbName": "new19cdb",
      "dsn": ""
    }
  },
  "target": {
    "type": "MogDB",
    "connect": {
      "version": "2.0.1",
      "host": "192.168.6.7",
      "user": "mogdb",
      "port": 26000,
      "password": "mogdb@123",
      "dbName": "test",
      "dsn": ""
    },
    "parameter": {
      "dropExistingObject": false,
      "truncTable": false,
      "parallelInsert": 4,
      "path": "./data",
      "fileType": "sql"
    }
  },
  "limit": {
    "parallel": 4,
    "fetchSize": 0,
    "batchSize": 0,
    "bufferSize": 0
  },
  "object": {
    "schemas": [
      "MOGDB"
    ]
  },
  "dataOnly": false,
  "schemaOnly": false,
  "reportFile": "./report_Oracle2MogDB_schemaOnly.html"
}

5.迁移开始

export LD_LIBRARY_PATH=/app/oracle/client/instantclient_19_5
./mtk -c oracle2opengauss.json --reportFile mtk_report.html --logfile mtk_report.log

以下是迁移后的日志输出:
可以看到包含用户、序列、表结构、表数据、索引、约束、对比表数据、修改不适用序列以及统计信息。
image.png
以下是表数据、及表数据对比。

image.png

mtk参数配置reportFfile后会生成相应的HTML报告,更加方便阅读。
image.png

mtk常用命令

1.检查配置文件
[omm@mogdb1 mtk_0.0.38_linux_amd64]$ ./mtk check-config -c oracle2opengauss.json 
use config :oracle2opengauss.json

2.预运行检查
[omm@mogdb1 mtk_0.0.38_linux_amd64]$ ./mtk check-config -c oracle2opengauss.json --preRun 
use config :oracle2opengauss.json
There is no error in the configuration file
3.显示源端数据库模式大小
[omm@mogdb1 mtk_0.0.38_linux_amd64]$ ./mtk show-schema -c oracle2opengauss.json 
SchemaName                     Size
MOGDB                          2.72GiB
SYS                            2.287GiB
TEST                           940MiB
MDSYS                          235.2MiB
XDB                            69.81MiB
AUDSYS                         52.25MiB
SYSTEM                         18.12MiB
WMSYS                          6.562MiB
DVSYS                          4.562MiB
CTXSYS                         2.812MiB
GSMADMIN_INTERNAL              1.5MiB
ORDDATA                        1.312MiB
DBSNMP                         896KiB
OUTLN                          576KiB
ORDSYS                         384KiB
OJVMSYS                        384KiB
LBACSYS                        320KiB

4.显示源端数据库信息
[omm@mogdb1 mtk_0.0.38_linux_amd64]$ ./mtk show-db-info -c oracle2opengauss.json
Source Database          : oracle 
    Version              : 19.6.1.0.0 
    ChartSet             : AL32UTF8 
Target Database              : MogDB 
    Version              : 2.0.1 
    ChartSet             : SQL_ASCII 
    DatCompatibility        : A 


5.显示支持数据库类型
[omm@mogdb1 mtk_0.0.38_linux_amd64]$ ./mtk show-type -c oracle2opengauss.json 
Type                 Database                                 Comments
Schema               ALL                                      Oracle Users, 
                                                              MySQL Database, 
                                                              DB2 Schema, 
                                                              SqlServer Database Schema
ObjectType           oracle,postgres,opengauss                Oracle, 
                                                              Postgres, 
                                                              openGauss
Domain               postgres,opengauss                       Not Support
Sequence             postgres,oracle,db2,opengauss,dm,mysql   
Queue                oracle                                   Not Support
Table                ALL                                      
Rule                 postgres,opengauss                       Not Support
TableData            ALL                                      
TableDataEstimate    oracle,mysql,db2                         
Index                ALL                                      
Constraint           ALL                                      
View                 ALL                                      
MaterializedView     oracle,db2,postgres,opengauss            
Function             ALL                                      Support Oracle To openGauss
Procedure            ALL                                      Support Oracle To openGauss
Package              oracle,dm                                Support Oracle To openGauss
Trigger              ALL                                      Support Oracle To openGauss
DBLink               oracle,dm                                Not Support
Synonym              oracle,db2,opengauss,dm                  
TableDataCom         ALL                                      
AlterSequence        ALL                                      MySQL table auto incr to To OpenGauss Seq
                                                              DB2 Column Generated Always Id To MySQL auto incr
CollStatistics       ALL                                      Collect Table statistics

6.显示源端要迁移的前n个表大小
[omm@mogdb1 mtk_0.0.38_linux_amd64]$ ./mtk show-table -c oracle2opengauss.json 
(-n 前n个表(默认为20))
TabName                                                       Partitioned  TotalSize   DataSize    LobSize       Rows AvgRowsLen   ColCount
MOGDB.BMSQL_STOCK                                                   false       1GiB       1GiB         0B    3000000       306B          0
MOGDB.BMSQL_ORDER_LINE                                              false     640MiB     640MiB         0B    9003690        60B          0
MOGDB.BMSQL_CUSTOMER                                                false     568MiB     568MiB         0B     900000       552B          0
MOGDB.BMSQL_HISTORY                                                 false      60MiB      60MiB         0B     900000        54B          0
MOGDB.BMSQL_OORDER                                                  false      39MiB      39MiB         0B     900000        33B          0
MOGDB.BMSQL_ITEM                                                    false       9MiB       9MiB         0B     100000        72B          0
MOGDB.BMSQL_NEW_ORDER                                               false       5MiB       5MiB         0B     270000        10B          0
MOGDB.BMSQL_CONFIG                                                  false      64KiB      64KiB         0B          4        16B          0
MOGDB.BMSQL_WAREHOUSE                                               false      64KiB      64KiB         0B         30        78B          0
MOGDB.BMSQL_DISTRICT                                                false      64KiB      64KiB         0B        300        87B          0
MOGDB.TEST1                                                      true        44B        44B         0B          0       8MiB          0



7.自动生成单表并行条件
Oracle - rowid
DB2 - MOD (仅支持数字列和主键)
MySQL - MOD (仅支持数字列和主键)
  -f, --format string   生成显示格式为json或yaml(默认为“json”)
  -p, --parallel int    拆分并行任务
  -s, --size string     大表的大小(默认为“1GB”)
[omm@mogdb1 mtk_0.0.38_linux_amd64]$ ./mtk show-table-split -c oracle2opengauss.json -p 8 -s 500M(这里设置迁移并行度为8,大小超过500M的表分片)
{
 "MOGDB": {
  "BMSQL_CUSTOMER": [
   " rowid between 'AAAVoOAACAAAAGgAAA' and 'AAAVoOAACAAARt/EI/'",
   " rowid between 'AAAVoOAACAAARuAAAA' and 'AAAVoOAACAAAXN/EI/'",
   " rowid between 'AAAVoOAACAAAXOAAAA' and 'AAAVoOAACAAAnF/EI/'",
   " rowid between 'AAAVoOAACAAAnGAAAA' and 'AAAVoOAACAAAr9/EI/'",
   " rowid between 'AAAVoOAACAAAr+AAAA' and 'AAAVoOAACAAAxF/EI/'",
   " rowid between 'AAAVoOAACAAAxGAAAA' and 'AAAVoOAACAABBF/EI/'",
   " rowid between 'AAAVoOAACAABBGAAAA' and 'AAAVoOAACAABGN/EI/'",
   " rowid between 'AAAVoOAACAABGOAAAA' and 'AAAVoOAACAABI3/EI/'"
  ],
  "BMSQL_ORDER_LINE": [
   " rowid between 'AAAVoTAACAAALEwAAA' and 'AAAVoTAACAAAQf/EI/'",
   " rowid between 'AAAVoTAACAAAQgAAAA' and 'AAAVoTAACAAAVv/EI/'",
   " rowid between 'AAAVoTAACAAAVwAAAA' and 'AAAVoTAACAAAlX/EI/'",
   " rowid between 'AAAVoTAACAAAl4AAAA' and 'AAAVoTAACAAAqf/EI/'",
   " rowid between 'AAAVoTAACAAArIAAAA' and 'AAAVoTAACAAAvn/EI/'",
   " rowid between 'AAAVoTAACAAAvwAAAA' and 'AAAVoTAACAAA/X/EI/'",
   " rowid between 'AAAVoTAACAAA/oAAAA' and 'AAAVoTAACAABEf/EI/'",
   " rowid between 'AAAVoTAACAABEwAAAA' and 'AAAVoTAACAABJX/EI/'"
  ],
  "BMSQL_STOCK": [
   " rowid between 'AAAVoVAACAAAAC4AAA' and 'AAAVoVAACAAAEX/EI/'",
   " rowid between 'AAAVoVAACAAAEYAAAA' and 'AAAVoVAACAAAIX/EI/'",
   " rowid between 'AAAVoVAACAAAIYAAAA' and 'AAAVoVAACAAAaP/EI/'",
   " rowid between 'AAAVoVAACAAAaQAAAA' and 'AAAVoVAACAAAeP/EI/'",
   " rowid between 'AAAVoVAACAAAeQAAAA' and 'AAAVoVAACAAAiP/EI/'",
   " rowid between 'AAAVoVAACAAAiQAAAA' and 'AAAVoVAACAAA0H/EI/'",
   " rowid between 'AAAVoVAACAAA0IAAAA' and 'AAAVoVAACAAA4H/EI/'",
   " rowid between 'AAAVoVAACAAA4IAAAA' and 'AAAVoVAACAAA8H/EI/'"
  ]
 }
}

8.预估表数据迁移时间
  -n, --netBand int    指定网络带宽,以MB为单位(默认为100)
  -p, --parallel int   指定并行度,默认值为配置信息中的limit.parallel
[omm@mogdb1 mtk_0.0.38_linux_amd64]$ ./mtk show-table-data-estimate -c oracle2opengauss.json -n 500 -p 8 (这里设置带宽为500MB,并行为8)
    TableDataEstimate 
           BeginTime :2021-11-01T12:28:26+08:00
             EndTime :2021-11-01T12:29:51+08:00
             UseTime :1 m 24 ss

9.同步模式预览
mtk sync-schema -c oracle2opengauss.json
同步对象类型
mtk sync-object-type -c oracle2opengauss.json
同步域
mtk sync-domain -c oracle2opengauss.json
同步自定义类型
mtk sync-custom-type -c oracle2opengauss.json
同步序列
mtk sync-sequence -c oracle2opengauss.json
同步队列
mtk sync-queue -c oracle2opengauss.json
同步表
mtk sync-table -c oracle2opengauss.json

同步数据
mtk sync-table-data -c oracle2opengauss.json
预估表数据迁移时间
mtk sync-table-data-estimate -c oracle2opengauss.json


同步索引
mtk sync-index -c oracle2opengauss.json

同步约束
mtk sync-constraint -c oracle2opengauss.json
同步视图
mtk sync-view -c oracle2opengauss.json
同步触发器
mtk sync-trigger -c oracle2opengauss.json
同步存储过程
mtk sync-procedure -c oracle2opengauss.json
同步函数
mtk sync-function -c oracle2opengauss.json
同步包
mtk sync-package -c oracle2opengauss.json
同步同义词
mtk sync-synonym -c oracle2opengauss.json
同步dblink
mtk sync-db-link -c oracle2opengauss.json
同步规则
mtk sync-rule -c oracle2opengauss.json
表行计数比较
mtk sync-table-data-com -c oracle2opengauss.json
修改序列起始值
mtk sync-alter-sequence -c oracle2opengauss.json
收集表统计信息
mtk sync-coll-statistics -c oracle2opengauss.json

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论