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模塊

MTK遷移
1.MTK表結構定義轉換
讀取線程從源數據庫視圖獲取基本信息,內部轉為為自定義數據結構,寫入線程根據目標數據庫類型轉為支持的語法進行創建。
2.MTK數據遷移
MTK內部定義數據結構,讀取線程從數據庫讀取原始數據轉為內部格式,然后放入隊列,寫入線程從隊列里進行讀取并分批次,批量提交到目標數據庫

MTK遷移測試(ORACLE–>MOGDB)
1.基準測試
獲取MTK license
./mtk license gen
2.在Mogdb數據庫服務器中安裝ORACLE客戶端
安裝完成后,配置TNS,設置環境變量,確??梢哉TL問ORACLE數據庫
export LD_LIBRARY_PATH=/app/oracle/client/instantclient_19_5

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
以下是遷移后的日志輸出:
可以看到包含用戶、序列、表結構、表數據、索引、約束、對比表數據、修改不適用序列以及統計信息。

以下是表數據、及表數據對比。

mtk參數配置reportFfile后會生成相應的HTML報告,更加方便閱讀。

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




