暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Oracle To PostgreSQL数据迁移指南(MTK)

原创 周波 云和恩墨 2022-08-19
1766

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文件,报告页面如下图所示:
image.png
  本次测试迁移中,全部迁移成功,主要有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服务所在主机之间的网络是连通的),如下图所示:
image.png

  到此,通过MTK工具将数据从Oracle迁移至PostgreSQL中的操作步骤就结束了。

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

评论