2025年9月25日: PostgreSQL 18 发布!

Ora2Pg 16 发布

发布于 2015-10-16,作者 Dalibo

法国巴黎 - 2015 年 10 月 16 日

Ora2Pg 16 发布

Ora2Pg 版本 16.0,一个免费可靠的工具,用于将 Oracle 数据库迁移到 PostgreSQL,已正式发布并可公开下载。

这个主要版本改进了 PL/SQL 代码替换,修复了多个 bug,并增加了一些重要的dequeue功能。

  • 完全迁移 MySQL 数据库,其工作方式与 Oracle 数据库相同。
  • MySQL 数据库的完整迁移评估报告。
  • 新增脚本 ora2pg_scanner,用于对网络上所有 Oracle 和 MySQL 实例执行迁移评估。
  • 在迁移评估中添加技术难度级别。
  • 允许对从 AUDIT_TRAIL (oracle) 或 general_log 表 (mysql) 中提取的客户端查询进行迁移评估。
  • Ora2Pg 有一个“一夜之间打造”的全新网站(仍需一些工作)http://ora2pg.darold.net/

使用 sakila 数据库,并增加了一些难度,进行技术难度级别评估输出的示例。

总计 83.90 个迁移成本单元,大约相当于 1 个工作日。迁移级别:B-5

这是对迁移级别代码的解释。

  • 迁移级别
  • A - 迁移可能自动运行
  • B - 需要重写代码,人力成本最多 5 天
  • C - 需要重写代码,人力成本超过 5 天
  • 技术级别
  • 1 = 微不足道:没有存储函数和触发器
  • 2 = 简单:没有存储函数但有触发器,无需手动重写
  • 3 = 简单:有存储函数和/或触发器,无需手动重写
  • 4 = 手动:没有存储函数但有触发器或视图,需要重写代码
  • 5 = 困难:有存储函数和/或触发器,需要重写代码

这有助于您找出可以以较小的工作量(A 和 B)首先迁移的数据库,以及那些需要进行完整迁移项目(C)的数据库。

此版本还包含一些有用的新功能。

  • 导出类型 SHOW_TABLE 现在显示有关表类型的附加信息(FOREIGN, EXTERNAL 或 PARTITIONED,以及分区数)。
  • 连接的用户和密码可以通过环境变量 ORA2PG_USER 和 ORA2PG_PASSWD 传递,以避免在 ora2pg 命令行中设置它们。
  • 改进了 ADD_MONTH(), ADD_YEAR(), TRUNC(), INSTR() 的 PL/SQL 替换,并取消了对 DECODE() 的替换限制。
  • 增加了视图中迁移难度的检测,以前仅限于函数、过程、包和触发器。
  • 当使用 --init_project 时,用命令行选项 -s, -n, -u 和 -p 替换自动生成的配置文件中的值。
  • 根据 Ora2Pg 中的新功能调整了许多评分,例如:自治事务、dblink 或同义词现在更容易迁移。

ora2pg 脚本增加了一些新的命令行选项。

  • -m | --mysql : 与 --init_project 和 -i 选项一起使用,告知 ora2pg 我们正在处理 MySQL 格式。
  • -T | --temp_dir : 允许设置一个不同的临时目录,以便 ora2pg 可以并行运行。
  • --audit_user : 用于设置审计过滤器中使用的用户,并启用对来自 AUDIT_TRAIL (oracle) 或 general_log 表 (mysql) 的查询的迁移评估报告。
  • --dump_as_sheet 和 --print_header 选项,用于计算来自 Oracle 数据库列表的所有迁移评估的 CSV 文件。
  • --dump_as_csv 选项,用于将评估报告写入 CSV 文件。它不包含注释或详细信息,只包含对象名称、数量和成本。

某些更改可能破坏向后兼容性。

  • 将 NULL_EQUAL_EMPTY 的默认值更改为禁用,强制在应用程序中进行更改,而不是转换 PL/SQL。

此版本增加了一些新的配置指令。

  • MYSQL_PIPES_AS_CONCAT: 如果双管道和双与号(|| 和 &&)不应被视为 OR 和 AND 的等价项,请启用此选项。
  • MYSQL_INTERNAL_EXTRACT_FORMAT: 如果希望 EXTRACT() 替换使用作为整数返回的内部格式,请启用此选项。
  • AUDIT_USER: 设置必须用于从 DBA_AUDIT_TRAIL 或 general_log 表进行过滤的用户名的逗号分隔列表。
  • REPLACE_ZERO_DATE: “零”日期:0000-00-00 00:00:00 默认替换为 NULL,使用它可以替换为您选择的日期。当有 NOT NULL 约束时很有用。
  • INDEXES_RENAMING: 强制重命名所有索引,使用类似于 tablename_columnsnames 的名称。对于数据库中存在多个相同索引名或索引名与表名相同的场景很有用。
  • HUMAN_DAYS_LIMIT: 默认为 5 天,用于设置 C 类迁移的人天数限制。

一如既往,还有一些 bug 修复和 Oracle 到 PostgreSQL 的转换调整,完整列表请参阅 changelog

链接与致谢

感谢所有贡献者,他们在 changelog 文件中都有提及。

有用链接


关于 Ora2Pg

Ora2Pg 是一个简单可靠的工具,用于从 Oracle 迁移到 PostgreSQL。自 2001 年以来一直在开发,它可以导出大多数 Oracle 对象(表、视图、物化视图、表空间、序列、索引、触发器、权限、函数、过程、包、分区、数据、blob、外部表等)。

Ora2Pg 可以在任何平台上运行,并根据 GPL v3 许可证提供。

文档、下载和支持请访问 ora2pg.darold.net