资讯专栏INFORMATION COLUMN

oracle迁移PostgreSQL步骤及工具介绍

IT那活儿 / 2628人阅读
oracle迁移PostgreSQL步骤及工具介绍

目前国产化浪潮的浪花儿是一浪高过一浪,感觉比后浪都猛。作为IT技术界的文艺青年,怎能错过这海天盛筵。今天给大家带来的是oracle迁移到postgresql迁移过程评估及对应阶段的方法和工具介绍,毕竟工欲善其事,必先利其器,下面开始今天的分享。



评估迁移



迁移工作之前,需要全面评估需选定的应用程序或数据库。一般老司机都是选择较低挑战性,较低风险的业务库进行迁移,在迁移过程中不断踩坑,填坑,积累使用PostgreSQL的经验,以此总结出适合自己的迁移路线和迁移方法。作为规划迁移的第一步,需要估算从现有数据库迁移到PostgreSQL的难易程度(哪些对象能从oracle百分百迁移到PostgreSQL,哪些只有一部分),这些都是有对应工具可以预估支撑的,请接着往下看。


安装Orcfce扩展包

我们可以安装一个扩展Orafce,Orafce在PostgreSQL中实现了Oracle的某些功能。例如,如果习惯于在Oracle中的DATE函数,则此扩展名允许我们使用这些函数。有关Orafce的信息,可以访问:https : //github.com/orafce/orafce。 


以下是安装了该扩展后的一些示例:





postgres-# dn

     List of schemas

     Name     |  Owner   

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

 dbms_alert   | postgres

 dbms_assert  | postgres

 dbms_output  | postgres

 dbms_pipe    | postgres

 dbms_random  | postgres

 dbms_utility | postgres

 oracle       | postgres

 plunit       | postgres

 plvchr       | postgres

 plvdate      | postgres

 plvlex       | postgres

 plvstr       | postgres

 plvsubst     | postgres

 public       | postgres

 utl_file     | postgres

(15 rows)


postgres-# df dbms_random.*

                                        List of functions

   Schema    |    Name    | Result data type |             Argument data types             | Type 

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

 dbms_random | initialize | void             | integer                                     | func

 dbms_random | normal     | double precision |                                             | func

 dbms_random | random     | integer          |                                             | func

 dbms_random | seed       | void             | integer                                     | func

 dbms_random | seed       | void             | text                                        | func

 dbms_random | string     | text             | opt text, len integer                       | func

 dbms_random | terminate  | void             |                                             | func

 dbms_random | value      | double precision |                                             | func

 dbms_random | value      | double precision | low double precision, high double precision | func

(9 rows)






向上滑动查看更多内容


使用AWS Schema Conversion Tool生成迁移评估报告

AWS Schema ConversionTool是亚马逊推出的一款强大的迁移工具,它可以帮助我们实现数据的迁移,还有一些代码和数据类型的转换。同时它可生成迁移报告。





表自动转换达到85%以上。而约束和索引均能达到100%自动转换。



这里可以看到包和存储过程。工具自动转换只能完成10%,剩下的需要手动修改。


点击save,会生成一个excel列表,该列表展示了一些无法自动迁移的信息,例如包、触发器,此类需要手工修改。


此类工作也可以使用Ora2PG来实现迁移工作量的评估。这类工具的作用都是对元数据进行迁移和改造。




也可以保存成.sql脚本




执行迁移完的效果如下所示:



数据迁移



元数据迁移完成之后,即可对数据进行迁移工作了。元数据迁移需要注意不要导入索引和约束、触发器。进行数据迁移,包括全量迁移时,可以使用AWSSchema Conversion Tool或者ora2PG工具。


对于大数据量的表,建议采用sqluldr2工具。sqluldr2在大数据量导出方面速度超快,能导出亿级数据为excelcsv文件。使用sqluldr2可以输出到多个文件中,指定行数分割或者按照文件大小分割。增加并发性。然后使用psql工具对CSV文件进行导入。导入完成之后,再创建索引,约束、触发器。



数据一致性



数据迁移完成之后需要对数据做对比验证,目前主流的方法是HASH算法,也可以使用MD5算法。以测试数据为例,分别在Oracle和PG中执行以下命令:

Oracle

WITH foo AS (SELECT stragg(lower(standard_hash(id||name||

to_char(price,fm999999990.999999999), MD5)) 

order by lower(standard_hash(id||name||to_char(price,fm999999990.999999999), MD5)) asc) 

AS total_md5 from hello ) SELECT lower(standard_hash(total_md5, MD5)) AS md5 FROM foo;


PostgreSQL

WITH foo AS (select string_agg(md5(id||name||to_char(price,fm999999990.999999999)) order by md5(id||name||to_char(price,fm999999990.999999999)) asc) AS total_md5  FROM hello) SELECT md5(total_md5) AS md5 FROM foo;


以上得到2个库中表的MD5值,如果一致则数据一致。




数据库对象改造



整个数据迁移完成之后,就需要对存储过程,触发器、函数等代码进行改造,根据前面报告提示的点进行修改。


特殊处理

AWS SchemaConversionTool或者ora2PG工具不能完全无损迁移,需要根据评估报告和迁移测试,对转换不彻底的,进行适当的手工修改,从测试来看,重点还是在语法兼容性上,已知的一些问题有:


  • 存储过程、函数目前的pg版本(12)不支持OUT参数,需要用INOUT代替;

  • 存储过程中游标定义的语法转换有误,需要人工修改

  • 某些情况下SELECT会被错误的转换为PERFORM

  • 分区表只支持rang、list,不支持Hash分区

  • Sequence的访问方式变化

Sequencesare fully supported, but all call to sequence_name.NEXTVAL orsequence_name.CURRVAL will be transformed intoNEXTVAL(sequence_name) or CURRVAL(sequence_name).

  • Oracle同义词转为View

  • DBLINK转为FDW

  • JOB不支持,在PG中需要改为外部CRONTAB

  • 物化视图转为物化视图快照,仅在完全刷新的时候更新



应用程序迁移测试及改造



此时搭建好,可以提供给应用测试环境进行测试。在测试过程中遇到问题,需要修改SQL代码。当然也可以从Oracle中创建SPA任务,捕捉全量的SQL,找到下面相关语法的SQL,提交给开发人员修改。


表连接

Oracle

Postgresql

(+)


查询

Oracle

Postgresql

unique

connect by

insert all into

╳ insert into values

merge into

╳ upsert



应用程序性能测试



迁移之后有一些SQL语句性能会下降,我们需要捕捉到性能下降的SQL,查找引起性能下降的原因,并进行针对性优化,将性能问题最大程度排除在上线前,以免上线后引起性能问题,影响业务的正常使用。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/130201.html

相关文章

  • 阿里云如何打破Oracle迁移上云的壁垒

    摘要:摘要第九届中国数据库技术大会,阿里云数据库产品专家萧少聪带来以阿里云如何打破迁移上云的壁垒为题的演讲。于是,阿里云给出了上面的解决方案。 摘要: 2018第九届中国数据库技术大会,阿里云数据库产品专家萧少聪带来以阿里云如何打破Oracle迁移上云的壁垒为题的演讲。Oracle是指数据库管理系统,面对Oracle迁移上云的壁垒,阿里云如何能够打破它呢?本文提出了Oracle 到云数据库P...

    chavesgu 评论0 收藏0
  • 新书推荐 |《PostgreSQL实战》出版(提供样章下载)

    摘要:作者谭峰张文升出版日期年月页数页定价元本书特色中国开源软件推进联盟分会特聘专家撰写,国内多位开源数据库专家鼎力推荐。张文升中国开源软件推进联盟分会核心成员之一。 很高兴《PostgreSQL实战》一书终于出版,本书大体上系统总结了笔者 PostgreSQL DBA 职业生涯的经验总结,本书的另一位作者张文升拥有丰富的PostgreSQL运维经验,目前就职于探探科技任首席PostgreS...

    Martin91 评论0 收藏0
  • Oracle SQL Developer 个人使用记录

    摘要:打开多个窗口一个数据库连接打开多个窗口用于查看数据表及数据进入工具首选项数据库对象查看器勾选自动冻结对象查看器窗口即可。显示行号进入工具首选项代码编辑器行装订线勾选显示行数即可。 Oracle SQL Developer 个人使用记录 以下简称 SQL Developer 对我Java开发来说,这个工具已经足够使用了,虽然还有很多缺点,但够用就行,相对于我来说的优点: 整体UI还算舒...

    leanxi 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<