马达加斯加塔那那利佛 - 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 选项来使用 Oracle 闪回功能,通过指定时间戳表达式来代替 SCN。例如:
`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,只需在 ora2pg 命令中添加 --blob_to_lo 选项。这将使用 Oid 数据类型创建目标列,并使用 lo_from_bytea() 函数将 BLOB 保存为大对象。lo_from_bytea() 返回的 Oid 将被插入到目标列中替代 bytea。此选项仅可用于 SHOW_COLUMN、TABLE 和 INSERT 操作,不支持 COPY 操作。如果你想使用 COPY 或有超大的 BLOB(> 1GB)无法通过 lo_from_bytea() 导入,可以在 ora2pg 命令中添加 --lo_import 选项。这将允许分两步导入数据:
-
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 以清除表更新产生的膨胀。
限制:表必须有主键,用于设置更新 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 (https://github.com/darold/ora2pg/blob/master/changelog)
感谢所有贡献者,他们都在 changelog 文件中被提及。
链接与致谢
我要感谢所有提交补丁、报告缺陷和提出功能需求的用户,他们都在 ChangeLog 文件中被提及。
Ora2Pg 是一个开放项目。欢迎任何有助于打造更好工具的贡献。你可以通过 GitHub 工具或直接发送邮件至 ora2pg@darold.net 来分享你的想法、功能需求或补丁。
链接:
网站:https://www.ora2pg.com/ (https://www.ora2pg.com/)
下载1:https://github.com/darold/ora2pg/releases (https://github.com/darold/ora2pg/releases)
下载2:https://sourceforge.net/projects/ora2pg/ (https://sourceforge.net/projects/ora2pg/)
开发:https://github.com/darold/ora2pg (https://github.com/darold/ora2pg)
变更日志:https://github.com/darold/ora2pg/blob/master/changelog (https://github.com/darold/ora2pg/blob/master/changelog)
文档:https://github.com/darold/ora2pg/blob/master/README (https://github.com/darold/ora2pg/blob/master/README)
关于 Ora2Pg:
Ora2Pg 是一款简便可靠的 Oracle 到 PostgreSQL 迁移工具。自 2001 年开始开发,可以将大多数 Oracle 对象导出为 PostgreSQL 兼容的代码。
Ora2Pg 可在任何平台运行,采用 GPL v3 许可证发布。
文档、下载和支持请访问 http://www.ora2pg.com/ (http://www.ora2pg.com/)