目前国产化浪潮的浪花儿是一浪高过一浪,感觉比后浪都猛。作为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
摘要:摘要第九届中国数据库技术大会,阿里云数据库产品专家萧少聪带来以阿里云如何打破迁移上云的壁垒为题的演讲。于是,阿里云给出了上面的解决方案。 摘要: 2018第九届中国数据库技术大会,阿里云数据库产品专家萧少聪带来以阿里云如何打破Oracle迁移上云的壁垒为题的演讲。Oracle是指数据库管理系统,面对Oracle迁移上云的壁垒,阿里云如何能够打破它呢?本文提出了Oracle 到云数据库P...
摘要:作者谭峰张文升出版日期年月页数页定价元本书特色中国开源软件推进联盟分会特聘专家撰写,国内多位开源数据库专家鼎力推荐。张文升中国开源软件推进联盟分会核心成员之一。 很高兴《PostgreSQL实战》一书终于出版,本书大体上系统总结了笔者 PostgreSQL DBA 职业生涯的经验总结,本书的另一位作者张文升拥有丰富的PostgreSQL运维经验,目前就职于探探科技任首席PostgreS...
摘要:打开多个窗口一个数据库连接打开多个窗口用于查看数据表及数据进入工具首选项数据库对象查看器勾选自动冻结对象查看器窗口即可。显示行号进入工具首选项代码编辑器行装订线勾选显示行数即可。 Oracle SQL Developer 个人使用记录 以下简称 SQL Developer 对我Java开发来说,这个工具已经足够使用了,虽然还有很多缺点,但够用就行,相对于我来说的优点: 整体UI还算舒...
阅读 1346·2023-01-11 13:20
阅读 1684·2023-01-11 13:20
阅读 1132·2023-01-11 13:20
阅读 1858·2023-01-11 13:20
阅读 4100·2023-01-11 13:20
阅读 2704·2023-01-11 13:20
阅读 1385·2023-01-11 13:20
阅读 3597·2023-01-11 13:20