Ora2Pg v23.1 发布

发布于 2022-02-14 由 MigOps
相关开源

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

Ora2Pg

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

此版本修复了过去四个月报告的一些问题,并添加了一些新的主要功能和改进。

  • 在需要像 Oracle 一样在 NULL 输入时返回 NULL 时,添加了对新版本 Orafce 中的 greatest() / least() 函数的使用。
  • 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 数据类型创建目标列,并将 BLOB 保存为使用 lo_from_bytea() 函数的大对象。调用 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) 在设置环境变量 PGDATABASE 以及可选的 PGHOST、PGPORT、PGUSER 等(如果它们与 libpq 的默认值不对应)后,执行所有脚本 lo_import-TABLENAME.sh。您还可以手动对表执行 VACUUM FULL,以删除表更新创建的膨胀。

    限制:表必须具有主键,它用于设置 WHERE 子句以在大对象导入后更新 Oid 列。使用第二种方法(--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 文件中被提及。

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

链接


关于 Ora2Pg :

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

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

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