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

Ora2Pg v23.1 发布

发布于 2022-02-14,作者 MigOps
相关开源项目

马达加斯加,塔那那利佛 - 2022 年 2 月 10 日

Ora2Pg

Ora2Pg 的 23.1 版本已正式发布,这是一个免费且可靠的工具,用于将 Oracle 数据库迁移到 PostgreSQL,现已公开提供下载。

本次发布修复了过去四个月以来报告的多个问题,并增加了一些主要的新功能和改进。

  • 添加了对 Orafce 新版本中 greatest() / least() 函数的使用,当需要像 Oracle 一样在输入为 NULL 时返回 NULL 时。
  • ALLOW 和 EXCLUDE 配置值现在可以从文件中读取。这对于您需要过滤大量表时非常有用。
  • 添加了通过提供特定的 SCN 来使用系统变更号 (SCN) 进行数据导出或数据验证的可能性。您可以使用命令行选项 -S--scn 来设置。您可以提供一个特定的 SCN,或者如果您想在第一次连接时使用当前 SCN,可以将值设置为 'current'。使用示例
        ora2pg -c ora2pg.conf -t COPY --scn 16605281
    您还可以使用 --scn 选项通过指定时间戳表达式而不是 SCN 来使用 Oracle 的闪回功能。例如
        ora2pg -c ora2pg.conf -t COPY --scn "TO_TIMESTAMP('2021-12-01 00:00:00', 'YYYY-MM-DD HH:MI:SS')"
    或者,例如,只检索昨天的数据
        ora2pg -c ora2pg.conf -t COPY --scn "SYSDATE - 1"
  • 为迁移评估添加了 json 输出格式。
  • 添加了新的 TO_CHAR_NOTIMEZONE 配置指令,用于在 TO_CHAR() 函数的格式部分删除任何时区信息。默认禁用。请注意,新的默认设置会破坏向后兼容性,旧的行为是始终删除时区部分。
  • 添加了新的 FORCE_IDENTITY_BIGINT 配置指令。通常,标识列必须是 bigint 才能对应一个自增序列,因此 Ora2Pg 总是将其强制设为 bigint。如果出于任何原因,您希望 Ora2Pg 尊重为标识列设置的 DATA_TYPE,则禁用此指令。
  • 当 EXPORT_INVALID 设置为 2 时,允许仅导出无效对象
  • 当在分区表上定义了 WHERE 子句或定义了全局 WHERE 子句时,禁用按分区的数据导出。

ora2pg 命令还有两个新选项。

  • 新的命令行选项 --lo_import。默认情况下,Ora2Pg 将 Oracle BLOB 导入为 bytea,目标列使用 bytea 数据类型创建。如果您想使用大型对象而不是 bytea,只需将 --blob_to_lo 选项添加到 ora2pg 命令。它将使用 Oid 数据类型创建目标列,并使用 lo_from_bytea() 函数将 BLOB 保存为大型对象。对 lo_from_bytea() 的调用返回的 Oid 将插入到目标列中,而不是 bytea。此选项只能与 SHOW_COLUMN、TABLE 和 INSERT 操作一起使用,不支持 COPY 操作。如果您想使用 COPY 或处理无法使用 lo_from_bytea() 导入的巨大 BLOB(> 1GB),您可以将 --lo_import 选项添加到 ora2pg 命令。这将允许分两步导入数据

  • 1) 使用 COPY 或 INSERT 导出数据时,将 BLOB 的 Oid 目标列设置为 0 值,并将 BLOB 值保存到专用文件中。它还将创建一个 Shell 脚本,使用 psql 命令 \lo_import 将 BLOB 文件导入数据库,并更新表 Oid 列以返回的大型对象 Oid。脚本名为 lo_import-TABLENAME.sh

  • 2) 执行所有脚本 lo_import-TABLENAME.sh,同时设置环境变量 PGDATABASE,以及可选的 PGHOST、PGPORT、PGUSER 等,如果它们不符合 libpq 的默认值。您可能还需要对手动执行的表执行 VACUUM FULL,以删除由表更新引起的膨胀。

    限制:表必须有一个主键,它用于在大型对象导入后更新 Oid 列时设置 WHERE 子句。使用此第二种方法(--lo_import)导入 BLOB 非常慢,因此应仅保留给 BLOB > 1GB 的行,对于所有其他行,请使用 --blob_to_lo 选项。要过滤行,您可以使用 ora2pg.conf 中的 WHERE 配置指令。

  • 新的命令行选项 --cdc_ready,用于在导出数据时使用每个表的当前 SCN,并将它们记录在一个名为 TABLES_SCN.log 的文件中。这可用于变更数据捕获 (CDC) 工具。

有关更改的完整列表,请参阅 https://github.com/darold/ora2pg/blob/master/changelog

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

链接与致谢

我想感谢所有提交补丁的用户以及报告 bug 和功能请求的用户,他们都在 ChangeLog 文件中被提及。

Ora2Pg 是一个开放项目。任何为构建更好的工具做出的贡献都受到欢迎。您只需通过 GitHub 工具或直接发送您的想法、功能请求或补丁至 ora2pg@darold.net。

链接


关于 Ora2Pg :

Ora2Pg 是一个简单可靠的工具,用于从 Oracle 迁移到 PostgreSQL。它自 2001 年开始开发,可以导出大部分 Oracle 对象为 PostgreSQL 兼容代码。

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

文档、下载和支持请访问 http://www.ora2pg.com/