前言
近把10几套数据库从Oracle迁移到了PostgreSQL。迁移过程中使用的工具主要是ora2pg和 dataX,迁移结构时还会使用亚马逊的 AWS schema Conversion Tool工具,但总感觉有些缺陷,因此也就想到了尝试 EDB PostgresMigration Protal工具的想法。确切地说,是一颗躁动的心。
EDB Migration Protal
访问网站https://migration.enterprisedb.com/
,您需要注册。注册完毕之后登录。登陆后的件事就是下载edb_ddl_extractor.sql
脚本,它的主要功能是在 Oracle中导出结构。
把下载的脚本上传到你的Oracle服务器,然后执行它。运行时需要输入三个参数,即要导出的模式名,导出的路径,是否需要导出依赖对象。如下图所示:
不得不说这个脚本还挺不错的,可以从Oracle schema导出元数据。在/tmp下您可以看到导出的 Oracle脚本。
再返回到刚才的网页,创建新项目,上传脚本,选择相应的数据库版本,这里大的问题是,我们只能选择转换到EDB Postgres Advanced Server
,这与我们使用的原生PG有些不同。这是一个企业级版本,提供了许多与 Oracle兼容的功能。具体请参阅https://www.enterprisedb.com/compare-postgres-databases
在点完 create& assess后,出现以下界面,您将看到,能够实现直接转换兼容性达到了99%。
单击 report可进一步了解对象转换的细节。
比如我的这个 schema,总共有1083个对象,523个可以直接转换,555个可以自动转换和修复,还有5个无法转换。
下一步,我们可以修改有问题的地方。修改之后,点 Reassess可以进行验证。这里有一个做的比较棒的地方,首先,它会提示您代码中存在错误,例如,当您看到一个不兼容的函数时,您可以看到它的右下脚 repaired。它可以帮助你进行修复和查找,右侧为它的在线知识库,能帮助您找到可以替代的函数。不需要你再到处找资料
但这里的 dump函数,知识库没有。但这并不重要,毕竟我完成了99%的迁移工作。单击右侧的COMMON FAILURURES,可以看到在转换中出现失败的点。
完成所有 fix后,就可以执行导出操作了。按一下Migrate to.....
选择Existing on-premise EDB Postgres Advanced Server,点击Next。
在选择指定 Schema确认无误之后,再次点击 Next,此时您就可以把修改好的脚本导出来。
在自己的服务器上导入下载的脚本,就实现了从Oracle把结构迁移到PostgreSQL了。剩下工作是使用工具迁移数据。
后记
EDB Migration Protal工具看起挺适合我们使用。但一个大问题是,它指定的版本并非原生的PostgreSQL,而是其自己的EDB Postgres Advanced Server。如果您在本地使用 EDB PostgresAdvanced Server版本,那么没有任何问题。若您正在使用原生PG,则估计还需要再次处理兼容性问题。