ORACLE迁移到PostgreSQL迁移(一)——EDB 在线方法迁移

ORACLE迁移到PostgreSQL迁移(一)——EDB 在线方法迁移

上篇文章我给大家分享了数据库结构化对象的迁移注意事项,今天我们分享一下oracle向postgresql的数据部分迁移。我们这里会用到两种工具EDB migration tookit,ora2pg,我们在这章说一下EDB migretion的在线迁移方法。

环境介绍:

EDB migration tookit

下载后得到文件:

edb-migrationtoolkit-51.0.1-1-linux-x64.run

将其拖到系统上执行:

[root@ora15 soft]# ./edb-migrationtoolkit-51.0.1-1-linux-x64.run

这里有好多种方法安装,可以text方法安装,可以图形化安装,图形化安装保证数据库开启Xmanager - Passive,并且配置好环境变量。

这样我们就将EDB MIGRATION 安装到了/opt/edb/mtk下了。

在迁移的时候

先在ORACLE里面创建一个表

现在我们将ORACLE的包和postgres的驱动包放到对应的lib路径下。

这两个包我放到网盘里,有需要的自行下载:

链接:https://pan.baidu.com/s/1r8VxX-Ja-HgTIz_axC2F0A 密码:koh9

现在修改url连接文件:

cd/opt/edb/mtk/etc

vitoolkit.properties

SRC_DB_URL=jdbc:oracle:thin:@ip:1521:uxdb #源端URL

SRC_DB_USER=cui

SRC_DB_PASSWORD=oracle

TARGET_DB_URL=jdbc:postgresql://ip:5455/qianyi#目标端URL

TARGET_DB_USER=qianyi

TARGET_DB_PASSWORD=postgres

网上很多都是使用离线的同步方式,离线的同步方式是将数据库中的数据导成脚本,这样可以灵活的调整。

也可以在线迁移,这样如果有和两端数据库不匹配的,就会导入不进去,但是省空间,我们先看下在线的方法。

cd /opt/edb/mtk/bin

./runMTK.sh -sourcedbtype oracle -targetdbtype postgres -tables ORACLE_TABLE CUI

指定源端数据库,目标端数据库,迁移的类型(如果是ORACLE的话源端的表一定要使用大写),源端的用户(schema,也要大写)。

./runMTK.sh -sourcedbtype oracle -targetdbtype postgres -tables ORACLE_TABLE CUI

Running EnterpriseDB Migration Toolkit (Build 51.0.1) ...

Source database connectivity info...

conn =jdbc:oracle:thin:@ip:1521:uxdb

user =cui

password=******

Target database connectivity info...

conn =jdbc:postgresql://ip:5455/qianyi

user =qianyi

password=******

Connecting with source Oracle database server...

Connected to Oracle, version 'Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, Automatic Storage Management, OLAP, Data Mining

and Real Application Testing options'

Connecting with target Postgres database server...

Connected to PostgreSQL, version '10.6'

Importing redwood schema CUI...

Table List: 'ORACLE_TABLE'

Creating Tables...

Creating Table: ORACLE_TABLE

Created 1 tables.

Loading Table Data in 8 MB batches...

Loading Table: ORACLE_TABLE ...

[ORACLE_TABLE] Migrated 2 rows.

[ORACLE_TABLE] Table Data Load Summary: Total Time(s): 0.037 Total Rows: 2

Data Load Summary: Total Time (sec): 0.086 Total Rows: 2 Total Size(MB): 0.0

Schema CUI imported successfully.

Migration process completed successfully.

Migration logs have been saved to /home/oracle/.enterprisedb/migration-toolkit/logs

******************** Migration Summary ********************

Tables: 1 out of 1

Total objects: 1

Successful count: 1

Failed count: 0

Invalid count: 0

*************************************************************

这样就迁移成功了。

我们到postgreSQL查看一下数据情况:

我们注意:应为URL写的后面是qianyi,所以文件迁移后会到qianyi这个库下。

postgres@uxdb lib]$ psql -d postgres -p 5455

口令:

psql (10.6)

输入 "help" 来获取帮助信息.

postgres=# \dn

架构模式列表

名称 | 拥有者

--------+----------

public | postgres

(1 行记录)

postgres=# \c qianyi

您现在已经连接到数据库 "qianyi",用户 "postgres".

qianyi=# \dn

架构模式列表

名称 | 拥有者

--------+----------

cui | qianyi

public | postgres

qianyi | qianyi

(3 行记录)

我们注意到,迁移的时候为PostgreSQL创建了一个名为cui的schema,这个schema是属于qianyi这个用户,这个逻辑很重要!!!!!!!所以我们如果直接使用postgres用户和qianyi用户都无法直接看到这个表的信息!

qianyi=# select * from oracle_table;

错误: 关系 "oracle_table" 不存在

第1行select * from oracle_table;

^

qianyi=# \c - qianyi

用户 qianyi 的口令:

您现在已经连接到数据库 "qianyi",用户 "qianyi".

qianyi=> select * from oracle_table;

错误: 关系 "oracle_table" 不存在

第1行select * from oracle_table;

^

所以我们需要在qianyi用户下,改变他的Search_path,改变到cui的schema下。

qianyi=> set search_path = cui;

SET

qianyi=> select * from oracle_table;

id | name

----+------

1 | aaa

2 | bbb

(2 行记录)

qianyi=> \d oracle_table;

数据表 "cui.oracle_table"

栏位 | 类型 | Collation | Nullable | Default

------+-----------------------+-----------+----------+---------

id | numeric(10,0) | | |

name | character varying(10) | | |

在迁移的时候,顺便将数据类型也迁移成了PostgreSQL可以使用的数据类型!方便呀!!!!!

报错解决:

1.如果你的环境在跑./runMTK.sh的时候会有如下报错的话:

[oracle@ora15 bin]$ ./runMTK.sh

Unable to find JRE in path.

这个是因为runMTK.sh这个脚本的校验问题,我们可以直接将其脚本更改:

这个脚本只是验证作用,我们如果正常安装了java的话,就可以跳过这个验证,直接java执行就行。。。

2.如果你在执行迁移的时候报这个错:

[oracle@ora15 bin]$ ./runMTK.sh -sourcedbtype oracle -targetdbtype postgres -tables oracle_table QIANYI

Running EnterpriseDB Migration Toolkit (Build 51.0.1) ...

Source database connectivity info...

conn =jdbc:oracle:thin:@ip:1521:uxdb

user =cui

password=******

Target database connectivity info...

conn =jdbc:postgres://ip:5455/qianyi

user =qianyi

password=******

Connecting with source Oracle database server...

Connected to Oracle, version 'Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, Automatic Storage Management, OLAP, Data Mining

and Real Application Testing options'

Connecting with target Postgres database server...

Exception in thread "main" java.lang.NoClassDefFoundError: org/postgresql/Driver

at com.edb.MigrationToolkit.createNewTargetConnection(MigrationToolkit.java:6463)

at com.edb.MigrationToolkit.initToolkit(MigrationToolkit.java:3601)

at com.edb.MigrationToolkit.main(MigrationToolkit.java:1856)

Caused by: java.lang.ClassNotFoundException:org.postgresql.Driver

at java.net.URLClassLoader$1.run(URLClassLoader.java:372)

at java.net.URLClassLoader$1.run(URLClassLoader.java:361)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:360)

at java.lang.ClassLoader.loadClass(ClassLoader.java:424)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)

at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

... 5 more

这个是因为我们jar包,和EDB migration 的工具不匹配导致的,我们可以将migration的工具包拖到桌面上解压。

进入到这个目录

打开这个文件我们发现,在这个文件下这个工具所指定的数据库驱动包是postgresql-9.4-1201.jdbc4.jar,而我们的驱动包是postgresql-42.2.5.jar

所以有这么几种方法解决:

1,将这个文件改成postgresql-42.2.5.jar,重新打包。

2,上网上找它对应的jar包(我是没找见)。

3,直接把你现在的jar包改成这个工具规定的名字(这个最简单)。

就用第三种方法!!!!!

[oracle@ora15 lib]$ mv postgresql-42.2.5.jar postgresql-9.4-1201.jdbc4.jar

再跑./runMTK.sh -sourcedbtype oracle -targetdbtype postgres -tables oracle_table QIANYI就能用了。

THAT'S ALL

BY CUI PEACE!!!!!

下章我们介绍EDB MIGRATION 离线迁移!!!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181114G1GHVE00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励