centos 下载oracle_使用ora2pg完成从Oracle到Postgres的迁移

执行从Oracle到Postgres的迁移,非常重要的一个部分是选择正确的工具来帮助进行系统间的转换。当人们问我应该如何开始迁移过程,我喜欢推荐一个功能强大的开源工具,叫做“ora2pg”。

顾名思义,ora2pg是一种通过生成兼容的SQL文件将Oracle(或MySQL)数据库迁移到PostgreSQL的工具。正如文档所述,ora2pg“连接Oracle数据库,自动扫描并提取其结构或数据,然后生成SQL脚本,您可以将其加载到PostgreSQL数据库中。”

  如下所示,ora2pg还具有许多简洁的功能。要查看所有功能并了解有关ora2pg的更多信息,请访问 http://ora2pg.darold.net/start.html 。  

导出完整数据库schema(表,视图,序列,索引),并带有唯一键、主键、外键和检查约束。

*导出用户和组的grants/privileges。

*导出范围/列表分区和子分区。

*Oracle数据库的迁移成本评估。

*Oracle数据库的迁移难度级别评估。

*文件中PL / SQL代码的迁移成本评估。

摘要

安装ora2pg的过程非常简单,但是涉及的步骤数量似乎有些令人生畏。以下是我们将要执行的步骤的摘要: 1. 安装必要的先决条件 2. 构建并安装DBD :: Oracle 3. 编译并安装ora2pg 4. 配置ora2pg 5. 测试并使用ora2pg  

建立演示环境

关于如何安装ora2pg的演示,我们使用的是安装了Oracle 12.1的Centos 7.7环境。我们还将使用ora2pg 20.0。ora2pg既可以在PostgreSQL服务器上运行,也可以在Oracle服务器上运行。ora2pg在我的Oracle服务器上运行。在此演示中,我使用了一个虚拟机来创建我的环境,我将假定您已经设置了Oracle环境。

如果您不想在Oracle服务器上安装ora2pg,而在PostgreSQL服务器上安装,则需要执行几个额外的步骤。首先,您需要安装PostgreSQL。如果需要关于安装PostgreSQL的帮助,请查看以前发布的博客文章。    在PostgreSQL服务器中,您将需要安装以下先决条件,并且需要安装Oracle Instantclient SDK。   先决条件:安装PostgreSQL并确保一切正常运行之后,您将需要运行:
`sudo yum install -y gcc postgresql11-devel \ perl-ExtUtils-MakeMaker perl-DBI perl-DBD-Pg perl-tests`
Oracle Instantclient SDK: 在PostgreSQL服务器上安装Instantclient需要执行以下步骤。  

*您将需要从以下站点下载建议的Oracle 12.2 Basic&SDK Instantclient RPM,即sqlplus。https://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

要安装软件包,只需运行:

sudo yum localinstall -y /path/to/oracle-instantclient12*.rpm
您需要在您的 〜 / .bash_profile中包含以下内容:
# InstantClientexport ORACLE_HOME=/usr/lib/oracle/12.2/client64export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATexport PATH=$ORACLE_HOME/bin:$PATH
然后通过运行以下代码来获取新的环境变量:
 `source ~/.bash_profile` 
然后,您将测试与Oracle服务器的连接(如果已安装sqlplus Instantclient软件包,只需运行以下命令):
sqlplus hr/hr1234@//192.168.99.21:1521/ORCLPDB1
请记住,如果要在PostgreSQL服务器中安装ora2pg,则只需执行上述操作。完成上述操作后,您可以继续Build / Install DBD:oracle部分。  

Building的先决条件

在开始之前,我的环境需要一些先决条件才能构建DBD :: Oracle和ora2pg。我需要安装几个perl模块,以使一切正常运行。我通过运行以下代码来实现:
sudo yum install perl-develsudo yum install perl-DBI.x86_64

Build/Install DBD::Oracle

在我们构建/安装ora2pg之前,您需要构建/安装Perl模块DBD :: Oracle。DBD :: Oracle是Perl模块,可与DBI模块一起使用来提供对Oracle数据库的访问。如果您想了解更多信息,请单击以下链接 https://metacpan.org/pod/DBD::Oracle 。   如您所见,可以使用两种方式来构建、安装DBD::Oracle。在我的环境中,我使用的是第一种。您可以看到,在第一步中运行wget命令从站点获取tar文件。如果没有wget,并且正在使用Centos或RHEL操作系统,则可以通过运行以下命令进行安装:
sudo yum install wgetwget https://cpan.metacpan.org/authors/id/Z/ZA/ZARQUON/DBD-Oracle-1.76.tar.gztar -xvzf DBD-Oracle-1.76.tar.gzcd DBD-Oracle-1.76perl Makefile.PLmake && make testsudo make install
如前所述,如果您不想执行上述步骤,则只需执行以下两个步骤即可构建/安装DBD :: Oracle:
sudo yum install perl-CPANperl -MCPAN -e 'install DBD::Oracle' # configure for sudo  

Build/Install ora2pg

安装DBD :: Oracle之后,您将需要构建/安装ora2pg。以下步骤与ora2pg文档中的步骤相似,您可以在此链接http://ora2pg.darold.net/中找到它们。唯一的区别是第一步,您需要从ora2pg Github存档中获取tar文件。
 wget https://github.com/darold/ora2pg/archive/v20.0.tar.gz tar -xvzf v20.0.tar.gz cd ora2pg-20.0 perl Makefile.PL make sudo make install

配置ora2pg

构建和安装ora2pg后,现在可以配置ora2pg.conf与Oracle服务器一起使用。您在下面看到的设置是我的环境中的设置。ora2pg.conf文件具有许多可以更改的配置设置。下面是需要应用到ora2pg.conf的配置更改,以便能够使用ora2pg。请记住,您将需要更改设置以匹配您的环境。如果您想了解有关其他配置的更多信息,请查看文档:http : //ora2pg.darold.net/documentation.html#CONFIGURATION。
In ora2pg-20.0/ora2pg.conf:PG_VERSION      11ORACLE_DSN      dbi:Oracle:host=192.168.99.21;port=1521;service_name=ORCLPDB1ORACLE_USER     hrORACLE_PWD      hr1234USER_GRANTS    1 EXPORT_SCHEMA   1SCHEMA          hrTRANSACTION     READONLY # This is needed for Oracle XE 11 with ora2pg <= v20, but safe# to add for any versionSYSUSERS        APEX_040000

测试ora2pg

现在已经配置了ora2pg,您终于可以测试连接了。通过测试连通性,您将看到您已经正确配置了ora2pg,如果未正确配置,则会收到错误消息。您可以通过运行以下命令进行测试:
 $ ora2pg -t SHOW_VERSION -c ora2pg.conf

评估报告

Ora2pg有一个惊人的特性,它可以估算从Oracle到PostgreSQL的迁移成本。在实际迁移之前使用此功能是很重要的。根据文档,“为了获得对该迁移成本的良好评估,Ora2Pg将检查所有数据库对象,所有功能和存储过程,以检测是否还有一些对象和PL / SQL代码无法由Ora2Pg自动转换。”   如前所述,生成的报告会显示是否有任何数据库对象,PL / SQL代码等不会被ora2pg自动转换。这意味着您需要做一些手动工作。这可能是您不愿意听到的事情,但是只有在完美世界种,工具才可以为您完成所有工作。要了解更多有关评估报告的信息,请参阅 文档。   如您在上面的链接中所见,有许多生成评估报告的方法。下面的命令将为您提供迁移成本的报告和估计。
$ ora2pg -t SHOW_REPORT --estimate_cost -c ora2pg.conf
以下链接显示了ora2pg具有的报告功能的绝佳示例: https  ://ora2pg.darold.net/report.html 。   正如您在链接中看到的,这个特性提供了一个非常详细的报告,甚至在PostgreSQL中无法使用对象时提供了解决方案。例如,如果您在报告中查找下列对象序列和同义词,那么注释将显示如下内容。   SEQUENCE:完全支持序列,但是对sequence_name.NEXTVAL或sequence_name.CURRVAL的所有调用将转换为NEXTVAL('sequence_name')或CURRVAL('sequence_name')。   SYNONYM:同义词将被导出为视图。同义词在PostgreSQL中不存在,但是一个常见的解决方法是使用视图或在会话中设置PostgreSQL search_path来访问当前模式之外的对象。   报告的特性对于计划迁移到ora2pg很有价值。  

您将要做的工作

下面,我想提供一些要点,供您从Oracle迁移到PostgreSQL时考虑。

*记住,在进行迁移之前,您的团队需要PostgreSQL培训。在迁移之前有更多的PostgreSQL知识可以带来更加有效的迁移,并且您可以在迁移过程中了解有关Oracle和PostgreSQL的更多信息。

*您应该对Oracle数据库体系结构进行深入分析。如前所述,ora2pg不会迁移每个对象或函数。最好是分析Oracle数据库,确定是否可以更改其中的一些内容,以使迁移更容易。

*考虑连接到数据库的应用程序。您需要确保您没有使用PostgreSQL的第三方应用程序。

*最后,确保你做了研究。这可能很乏味,但做研究总比把所有东西都弄坏好。通过阅读这篇文章,你已经在研究了。

*事务在PostgreSQL中的实现与在Oracle中的不同。Oracle支持嵌套事务,而Postgresql不支持。通常,您可以使用PostgreSQL保存点来实现类似的行为,但如果您的Oracle部署广泛使用PL/SQL并使用嵌套事务,您可能需要进行一些手动移植。

*PostgreSQL和Oracle中的模式是不同的。在PostgreSQL中,模式对象被用来为数据库添加命名空间或作用域。在PostgreSQL中,模式独立于用户、组或角色对象。

*在PostgreSQL中,角色、用户和组都是全局对象——角色/用户/组不是数据库的一部分,它们独立于PostgreSQL实例中的所有数据库。角色/用户/组可以被授予实例中的任何数据库的特权。用户实例一次可以直接连接到集群中的一个数据库。

*Oracle提供了数百个软件包。如果您广泛使用Oracle软件包,则可能需要提前进行一些手动移植。  

*Oracle和PostgreSQL都提供了存储过程和用户定义函数。PostgreSQL在服务器中支持多种嵌入式语言。最常用的过程式服务器端语言——Oracle中的PL/SQL和PostgreSQL中的PL/ pgsql——非常相似,ora2pg可以直接翻译一些函数或UDF。它将识别那些它不能直接转化和识别问题。

*在PostgreSQL中,有一些常见的替代方案可以替代Oracle的原生动态SQL,EXECUTE IMMEDIATE -参见使用dblink PostgreSQL扩展。

*PostgreSQL提供了一种扩展核心的方法——PostgreSQL扩展。这是一个大量且不断增长的扩展。值得去检查扩展,看看是否有一些可以帮助您迁移的。

本文作者:yorvi arias

I Love PG

关于我们

中国开源软件推进联盟PostgreSQL分会(简称:中国PG分会)于2017年成立,由国内多家PostgreSQL生态企业所共同发起,业务上接受工信部中国电子信息产业发展研究院指导。中国PG分会是一个非盈利行业协会组织。我们致力于在中国构建PostgreSQL产业生态,推动PostgreSQL产学研用发展。

欢迎投稿

做你的舞台,show出自己的才华 。

投稿邮箱:partner@postgresqlchina.com

                    ——愿能安放你不羁的灵魂

技术文章精彩回顾PostgreSQL学习的九层宝塔PostgreSQL职业发展与学习攻略2019,年度数据库舍 PostgreSQL 其谁?Postgres是最好的开源软件PostgreSQL是世界上最好的数据库从Oracle迁移到PostgreSQL的十大理由从“非主流”到“潮流”,开源早已值得拥有PG活动精彩回顾创建PG全球生态!PostgresConf.CN2019大会盛大召开首站起航!2019“让PG‘象’前行”上海站成功举行走进蓉城丨2019“让PG‘象’前行”成都站成功举行中国PG象牙塔计划发布,首批合作高校授牌仪式在天津举行群英论道聚北京,共话PostgreSQL相聚巴厘岛| PG Conf.Asia 2019  DAY0、DAY1简报相知巴厘岛| PG Conf.Asia 2019 DAY2简报独家|硅谷Postgres大会简报直播回顾 | Bruce Momjian:原生分布式将在PG 14版本发布PG培训认证精彩回顾中国首批PGCA认证考试圆满结束,203位考生成功获得认证!中国第二批PGCA认证考试圆满结束,115位考生喜获认证!重要通知:三方共建,中国PostgreSQL认证权威升级!近500人参与!首次PGCE中级、第三批次PGCA初级认证考试落幕!2020年首批 | 中国PostgreSQL初级认证考试圆满结束一分耕耘一分收获,第五批次PostgreSQL认证考试成绩公布

8016c14b1efe9817f489203d4f4d6ac7.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值