使用基于版本的重新定义

Oracle GoldenGate 支持将基于版本的重新定义 (EBR) 与 Oracle 数据库结合使用,使您能够在应用使用时升级应用的数据库组件,从而最大限度地减少或消除停机时间。

Editions 是 Editioned 对象所属的非方案对象。可以将版本视为拥有版本的对象或名称空间。每个数据库都以一个名为 ORA$BASE 的版本开头;这包括升级的数据库。数据库中可以存在多个版本,每个版本只能有一个子版本。例如,如果连续创建三个版本 edition1、edition2、edition3,则 edition1 是 edition2 的父代,这是 edition3 的父代。这与创建用户或数据库会话无关,也与创建新会话时当前版本无关。创建版本时,它将继承其父版本的所有版本对象。要将版本与 Oracle GoldenGate 一起使用,必须创建它们。

如果对象是可版本化类型,则将其视为已版本化;使用 EDITIONABLE 属性创建该对象,并且该方案已启用该对象类型的版本化。创建、变更或删除版本对象时,重做日志将包含其所属版本的名称。在容器数据库中,版本属于容器,每个容器都有自己的默认版本。

将捕获所有提取配置的 CREATE | DROP EDITION DDL。它们属于 OTHER 类别,并分配了 OBJTYPE 选项值 EDITION。OBJTYPE 选项可用于过滤,例如:

DDL EXCLUDE OBJTYPE EDITION
DDL EXCLUDE OBJTYPE EDITION OPTYPE CREATE
DDL EXCLUDE OBJTYPE EDITION OPTYPE DROP
DDL EXCLUDE OBJTYPE EDITION OPTYPE DROP ALLOWEMPTYOWNER OBJNAME *edition_name*

您必须使用以下语法从 Extract 或 Replicat 中排除版本:

EXCLUDE OBJTYPE EDITION, ALLOWEMPTYOWNER OBJNAME *edition_name*

版本属于 OTHER 类别,因此不会对版本名称执行映射。应用 USE 权限后,会自动授予复制用户。如果原始创建用户存在于目标数据库上,复制也将对原始创建用户执行 grant use on edition name with grant option。由于版本不是可映射的操作,因此它们没有所有者,因此标准 EXCLUDE 语句不起作用。

用于创建或更改版本的 DDL 不会为用户启用版本,而是会为版本启用方案。这是一个重要的区别,因为这意味着不需要为版本启用复制用户,即可将 DDL 应用于版本对象。当 Replicat 应用 CREATE EDITION DDL 时,如果目标数据库上存在原始用户,它将向其授予原始创建用户权限 USE。对于任何未复制的 CREATE EDITION 语句,必须向 Replicat 用户发出 USE WITH GRANT OPTION 授权。

可编辑对象是否变为版本由其应用到的方案控制。如果版本名称属性存在于线索文件中且不为空,则 Replicat 将在应用 DDL 之前切换其当前会话版本。

Extract 和 Replicat 都支持容器数据库环境。不需要执行其他配置。如果复制用户的方案是公用用户,则无法为版本启用该方案。将 DDL 应用于其他方案中的版本对象时,不需要为版本启用 Replicat 用户的方案。

从 Oracle Database 23ai 开始,可以执行以前被阻止的联机 DDL 操作。这为使用基于版本的重新定义 (EBR) 完成的 Oracle 应用升级提供了额外的灵活性。有关详细信息,请参阅 Oracle AI Database Development Guide 中的 Using Edition-Based Redefinition 。

Oracle GoldenGate Extract 和 Replicat 还可以管理此类 DDL 操作的复制,以便正确复制 Oracle 应用程序升级中的更改。此外,您还可以从删除 ACDR 的表中联机删除未使用的列。