1.概述
本文主要介绍使用MTK工具,将Oracle数据库中的数据迁移至PostgreSQL数据库中。
MTK(Database Migration Toolkit)是一个异构数据库迁移工具,支持源库为Oracle目标库为PostgreSQL的迁移场景,当然更多迁移场景和注意事项可以详见MTK官方文档:
https://docs.mogdb.io/zh/mtk/v2.0/overview
2.迁移步骤
2.0 创建测试用户及数据库
注:’#’ 代表root用户命令提示符,’$’表示普通用户命令提示符
PostgreSQL端(监听的端口号为5432,版本为13.1)操作:
// 连接数据库,如果没有指定连接的用户和数据库,默认会连接与当前操作系统 // 用户同名的数据库和用户 $ psql create database mtk_db encoding 'utf8'; // 切换到新创建的数据库mtk_db,然后创建测试用户和模式 \c mtk_db create user mtk_user password 'test@123'; create schema mtk_user authorization mtk_user; // 退出psql客户端,编辑pg_hba.conf配置文件,配置mtk_user远程连接接入 // 认证,同时修改postgresql.conf配置文件,设置listen_addresses=’*’,是数据库服// 务监听宿主机上的所有IP。 $ vim postgresql.conf listen_addresses = '*' $ vim pg_hba.conf host mtk_db mtk_user 10.0.0.11/32 md5 // 重启数据库,使得配置生效 pg_ctl restart -D /usr/local/pgsql/data -l logfile
复制
注:MTK工具将安装在PostgreSQL数据库服务运行的主机(centOS7.6)上,主机IP为10.0.0.11,当MTK工具运行时,可以使用mtk_user用户通过主机10.0.0.11远程连接PostgreSQL数据库,将从Oracle中读取到的数据写入到PostgreSQL数据库中。
Oracle端:
本次测试的Oracle数据库是安装在windows操作系统上,监听的端口号为1521,监听的主机IP地址为10.0.0.1。这次演示迁移scott用户下的所有数据到PostgreSQL中,用户密码为test1234。Oracle版本为:11.2.0.1.0:
// 授予scott用户管理员权限 sqlplus / as sysdba grant dba to scott;
复制
2.1安装Oracle客户端
根据Oracle数据库版本在Oracle客户端下载页面下载相应版本,Oracle客户端与MTK工具需要安装在同一台主机上,这里规划到PostgreSQL数据库服务所在的主机,操作步骤如下:
// 创建Oracle客户端工具包存放目录 # mkdir -p /opt/software/mtk # cd /opt/software/mtk // 下载Basic Package(zip)包到当前路径,并解压 // 然后配置LD_LIBRARY_PATH环境变量 // 注意如下下载是登录之后复制了下载链接,这里只是展示,如果服务器可以上 // 网,那么,我们可以通过wget命令直接下载,你也可以提前下载,然后上传: # wget https://download.oracle.com/otn/linux/instantclient/11204/instantclient-basic-linux.x64-11.2.0.4.0.zip?AuthParam=1660892062_c06aef3a746b8f5de17b1f822ed8ae3d # unzip instantclient-basic-linux.x64-11.2.0.4.0.zip # export LD_LIBRARY_PATH=/opt/software/mtk/instantclient_11_2/:$LD_LIBRARY_PATH
复制
2.2下载MTK
MTK可以到官网下载页面下载对应操作系统和CPU架构的版本,如果可以上网,可以直接使用wget命令下载到上面创建的目录中:
# wget https://cdn-mogdb.enmotech.com/mtk/v2.5.1/mtk_2.5.1_linux_amd64.tar.gz //解压 # tar -zxvf mtk_2.5.1_linux_amd64.tar.gz
复制
2.3申请许可证
// 进入mtk解压目录,然后执行许可证申请命令 # cd mtk_2.5.1_linux_amd64 # ./mtk license gen // 然后根据邮箱接收的license信息,在当前目录下编写license.json文件 vim license.json // 查看MTK版本信息 ./mtk -v
复制
2.4初始化项目
// 执行如下命令,初始化迁移项目(会在当前目录下创建同名的子目录) ./mtk init-project -n ora2pg -s oracle -t postgresql // 选项说明: // -n 指定项目名 // -s 指定源库类型 // -t 指定目标库类型
复制
2.5编写迁移配置文件
初始化项目之后,在项目目录下的config子目录中会自动生成示例迁移配置文件mtk.json,我们只需要对这个文件做适当的修改即可,修改后的配置文件信息如下所示:
# vim ora2pg/config/mtk.json { # 源库端连接信息 "source": { "type": "oracle", "connect": { "host": "10.0.0.1", "user": "scott", "port": 1521, "password": "test1234", "dbName": "orcl" }, "parameter": { "charAppendEmptyString": false } }, # 目标库端连接信息 "target": { "type": "postgresql", "connect": { "host": "10.0.0.11", "user": "mtk_user", "port": 5432, "password": "test@123", "dbName": "mtk_db" }, "parameter": { "parallelInsert": 1, "dropExistingObject": false, "truncTable": false, "colKeyWords": {}, "objKeyWords": {}, "caseSensitive": 0, "quoteMark": false, "path": "ora2pg/data", "schemaPath": "ora2pg/schema", "dataPath": "ora2pg/data", "errDataPath": "", "fileType": "", "fileSize": "", "csvHeader": false, "csvNullValue": "", "csvFieldDelimiter": ",", "csvOptionallyEnclosed": "\"", "excludeSysTable": [], # 设置模式的映射关系,在目标库端将SCOTT模式改名为mtk_user "remapSchema": {"SCOTT":"mtk_user"}, "remapTable": {}, "remapTablespace": {}, "enableSyncTabTbsPro": false, "enableSyncCompTabPro": false, "timeFormat": "HH:MI:SS", "dateFormat": "YYYY-MM-DD", "dateTimeFormat": "YYYY-MM-DD HH24:MI:SS", "noSupportPartTabToNormalTab": true, "ignoreDB2PartInclusive": false, "igNotSupportIntervalPart": false, "igErrorData": false, "enableBatchCommit": false, "ignoreTabPartition": false, "autoAddMaxvaluePart": false, "autoAddMySQLAutoIncr": false, "autoAddMySQLAutoIncrTabList": [], "ignoreNotSupportDefault": false, "replaceZeroDate": "", "virtualColToNormalCol": false, "virtualColConv": {}, "mySQLSkipErrorDateTimeData": false, "ignoreTableDDLCompErr": false, "convertPackageMethod": "", "convertOracleIntegerToNumeric": false, "enableOgBlobClob": false, "enableConvertSrid": false, "defaultSrid": "4326", "seqLastNumAddNum": 0, "skipColumnType": {}, "skipColumnName": {}, "templateSeqName": "", "charAppendEmptyString": false, "tableOptions": {}, "indexOptions": {} } }, "limit": { "parallel": 2, "fetchSize": 1000, "batchSize": 1000, "bufferSize": 8, "cpBufferSize": 8, "oracleSelectParallel": 2, "channelCacheNum": 10000, "limit": 0 }, "object": { "tables": [], # 设置要迁移的对象信息,tables项和schemas项是冲突的,只需配置其中一个 # 即可,如果两项都不配置,那么就不进行数据迁移。 "schemas": ["SCOTT"], "excludeTable": {}, "tableSplit": {} }, "dataOnly": false, "schemaOnly": false, "disableTableDataComp": false, "disableCollStatistics": false, "reportFile": "ora2pg/report", "debug": false, "disableIgnoreCase": false, "disableSelectPart": false, "disableFKCons": false, "disableSyncIdxAfterData": false, "disablePrintMigDataProgress": false }
复制
2.6执行迁移命令
# ./mtk -c ora2pg/config/mtk.json
复制
2.7查看迁移报告
先将迁移报告压缩,然后下到windows主机中查看:
# cd ora2pg/report # zip -r report.zip report_20220819140839 // 将压缩文件上到windows主机 # sz report.zip
复制
将下载下来的迁移报告压缩包解压,然后打开其中的index.html文件,报告页面如下图所示:
本次测试迁移中,全部迁移成功,主要有11张表,从迁移报告的总结中可以看到,迁移耗时,以及源库和目标库的基本信息。
连接到PostgreSQL中查看数据:
[postgres@PG1 ~]$ psql mtk_db mtk_user psql (13.1) Type "help" for help. mtk_db=> \dt List of relations Schema | Name | Type | Owner ----------+-----------+-------+---------- mtk_user | a | table | mtk_user mtk_user | bonus | table | mtk_user mtk_user | dept | table | mtk_user mtk_user | dept1_bak | table | mtk_user mtk_user | dept_bak | table | mtk_user mtk_user | emp | table | mtk_user mtk_user | emp1 | table | mtk_user mtk_user | news | table | mtk_user mtk_user | salgrade | table | mtk_user mtk_user | test | table | mtk_user mtk_user | users | table | mtk_user (11 rows)
复制
2.8补充(搭建nginx服务查看迁移报告)
在安装了MTK工具的主机上进行如下操作:
//查看是否安装了nginx软件,没有则安装 # rpm -qa nginx # yum install -y nginx //启动nginx服务 # systemctl start nginx //编写nginx配置文件,随便创建一个网站服务 # cd /etc/nginx/conf.d // 配置文件名随便起一个 # vim report.conf server { listen 80; location / { root /opt/software/mtk/mtk_2.5.1_linux_amd64/ora2pg/report/report_20220819140839; index index.html; } } // 注意:安装nginx服务时,会自动创建nginx用户,需要确保nginx用户能够访问报告目录下的 // 文件,我们可以改变迁移报告目录的权限 # chown -R nginx.nginx /opt/software/mtk/mtk_2.5.1_linux_amd64/ora2pg/report/report_20220819140839 // 检查配置是否正确 # nginx -t // 如果正确的话,重新加载nginx服务 # systemctl reload nginx
复制
上述操作准备完之后,可以在windows宿主机上输入nginx服务所在主机的IP地址即可访问迁移报告网页文件(前提:windows宿主机与nginx服务所在主机之间的网络是连通的),如下图所示:
到此,通过MTK工具将数据从Oracle迁移至PostgreSQL中的操作步骤就结束了。