Oracle DML 中对对象和操作的支持详细信息
下面列出了 Oracle GoldenGate 支持的用于捕获和复制 DML 操作的 Oracle 对象和操作。
多租户容器数据库
Oracle GoldenGate 从多租户容器数据库捕获并交付给多租户容器数据库。请参见 Configure a Multitenant Container Database 。
Oracle GoldenGate 不支持应用程序容器根 - 子端到端复制
表、视图和实体化视图
常规表、按索引组织的表、群集表和实体化视图支持以下 DML 操作:
-
INSERT -
UPDATE -
DELETE -
关联的事务处理控制操作
从 Oracle GoldenGate 23ai 开始,表具有以下功能:
-
行大小小于 4 MB 的表中的 4K 列
-
区块链和不可变表
有关详细信息,请参见 Limitations of Support for Blockchain and Immutable Tables 。
提示:
可以使用 DBA_GOLDENGATE_SUPPORT_MODE 数据字典视图显示有关数据库中表的 Oracle GoldenGate 捕获进程支持级别的信息。DBA_GOLDENGATE_SUPPORT_MODE 的 PLSQL 值表示表是本机支持的,但需要过程补充日志记录。有关更多信息,请参见 DBA_GOLDENGATE_SUPPORT_MODE 。如果需要显示所有没有主索引和没有非空唯一索引的表,可以使用 DBA_GOLDENGATE_NOT_UNIQUE。有关更多信息,请参见 DBA_GOLDENGATE_NOT_UNIQUE 。
对常规表的支持限制
这些限制适用于提取。
-
Oracle GoldenGate 支持包含任意行数的表。
-
一行的长度最多为 4 MB。如果将 Oracle GoldenGate 配置为在处理范围内同时包括列的前后映像,则最大长度为 4 MB,适用于映像前完整的总长度加上后映像的长度。例如,如果正在用作行标识符的列上存在
UPDATE操作,则会处理之前和之后的映像,并且总计不能超过 4 MB。对于不是行标识符但用作冲突检测和解决 (Conflict Detection and Resolution,CDR) 中的比较列的列,还需要图像之前和之后。字符列允许超过 4 KB 的数据(例如CLOB)在行中仅存储前 4 KB 的数据,并构成 4MB 的最大行长度。允许超过 4kb 数据的二进制列,例如BLOB,前 8 KB 的数据存储在行中,有助于达到 4MB 的最大行长度。 -
Oracle GoldenGate 支持数据库支持的每个表的最大列数。
-
Oracle GoldenGate 支持数据库支持的最大列大小。
-
Oracle GoldenGate 支持仅包含一列的表,但该列包含以下数据类型之一时除外:
-
LOB -
LONG -
LONG VARCHAR -
Nested table -
用户定义类型 (UDT)
-
VARRAY -
XMLType
-
-
在复制具有未使用列的表之前,请先设置
DBOPTIONS ALLOWUNUSEDCOLUMN。 -
Oracle GoldenGate 支持具有以下分区属性的表:
-
范围划分
-
散列分区间隔分区
-
组合分段
-
基于虚拟列的分区
-
引用分区
-
列表分区
-
-
Oracle GoldenGate 支持具有虚拟列的表,但不捕获这些列的更改数据或向这些列应用更改数据:数据库不会将虚拟列写入事务处理日志,并且 Oracle AI Database 不允许对虚拟列执行 DML。出于同样的原因,初始加载数据不能应用于虚拟列。可以将数据从虚拟列映射到非虚拟目标列。
-
Oracle GoldenGate 不会考虑使用具有虚拟列的唯一/索引。
-
Oracle GoldenGate 支持从 Oracle Exadata 进行复制。要支持 Exadata Hybrid Columnar Compression,源数据库兼容性必须设置为 11.2.0.0.0 或更高版本。
-
Oracle GoldenGate 支持透明数据加密 (Transparent Data Encryption,TDE)。
-
Oracle GoldenGate 支持
TRUNCATE语句作为其 DDL 复制支持的一部分,或作为独立于 DDL 支持的独立功能。 -
Oracle GoldenGate 支持捕获直接加载
INSERT,但 XML 二进制和 XML 对象关系中的 SQL*Loader 直接路径插入除外。必须启用补充日志记录,并且数据库必须处于归档日志模式。支持以下直接加载方法。-
/*+ APPEND */提示 -
/*+ PARALLEL */提示 -
SQLLDR与DIRECT=TRUE
-
-
Oracle GoldenGate 完全支持从用于提取的压缩对象进行捕获。
-
Oracle GoldenGate 支持 XA 和 PDML 分布式事务处理。
-
Oracle GoldenGate 支持对启用了
FLASHBACK ARCHIVE的表执行 DML 操作。但是,Oracle GoldenGate 不支持使用FLASHBACK ARCHIVE子句创建表的 DDL,也不支持使用 DDL 创建、更改或删除闪回数据归档本身的 DDL。
视图支持的限制
这些限制适用于提取。
-
提取处于初始加载模式时,Oracle GoldenGate 支持从视图捕获(直接从源视图捕获,而不是从重做日志捕获)。
-
Oracle GoldenGate 不会从视图中捕获更改数据,但支持从视图的底层表中捕获。
支持实体化视图的限制
“提取”支持实体化视图,但存在以下限制。
-
不支持创建的实体化视图
WITH ROWID。 -
可以创建实体化视图日志
WITH ROWID。 -
源表必须有一个主键。
-
不支持截断实体化视图。您可以使用
DELETE FROM语句。 -
支持对实体化视图进行完全刷新时的 DML(但不支持 DDL)。如果需要对此功能提供 DDL 支持,请打开 Oracle GoldenGate 支持案例。
-
对于复制,
Create MV命令必须包括FOR UPDATE子句 -
可以复制实体化视图或基础基表,但不能同时复制两者。
对区块链和不可变表的支持限制
从 Oracle AI Database 26ai 开始,支持不可变表和区块链表。以下是该功能支持的操作:
支持单向复制
-
区块链表版本 v1(在 Oracle Database 19.10 中引入)和 v2(在 Oracle AI Database 26ai 中引入)以及不可变表版本 v1(在 Oracle Database 19.11 中引入)和 v2(在 Oracle AI Database 26ai 中引入)都支持所有复制,但协调复制除外。
-
类型和版本之间的互操作性:
-
支持将源中任何版本的区块链和不可变表复制到目标中的常规表。
-
不支持将源端的传统表复制到目标端的任何区块链和任何版本的不可变表。
-
-
必须启用 DML、DDL 和过程复制。对于过程复制,必须附加区块链表。
-
不会复制过期行的删除操作。到期由每个数据库系统单独管理。
支持双向(主动 - 主动)复制
-
仅支持版本 v2。
-
仅支持集成模式下的并行复制和集成复制。
-
必须配置 ACDR。区块链和不可变表的 ACDR 包含以下解析方法:
-
最晚时间戳
-
最早时间戳注:不支持其他解析方法(例如列组或增量解析)。不支持手动 CDR。
-
-
区块链或不可变表最多可以具有一个主键或唯一约束条件,并且不能具有唯一索引。
-
ACDR 的区块链表或不可变表上的主键或唯一键约束条件使用非唯一索引。
-
ACDR 仅管理 INSERT-INSERT 冲突,因为区块链表和不可变表是仅 INSERT 表。ACDR 为时间戳 (
CDRTS$ROW) 和可见性 (ORABCTAB_INVISIBLE$) 添加了两个隐藏列。
这些隐藏列的工作方式如下:
ACDR 将解决冲突并保留行的两个副本。它将通过将隐藏列
ORABCTAB_INVISIBLE$设置为 1 来标记冲突的 INSERT,该 INSERT 通常会被丢弃或覆盖为 logically invalid 。因此,可能有多个具有相同键值的行,但每个键最多 1 行将是有效的,并且ORABCTAB_INVISIBLE$设置为 0。 -
DML 自动捕获
Oracle GoldenGate 支持以下自动捕获模式的 DML 操作:
-
支持
TABLEEXCLUSION参数。 -
支持
TABLE参数。 -
提取会将数据库提供的用于自动捕获的表 DML 记录写入到线索文件中。
系统分段
系统分区是 Oracle AI Database 的一项功能,它允许使用指定的分区创建表。数据库未维护系统分区表。每个 DML 必须指定行所在的分区。Replicat 的提取和所有模式都支持系统分区。与系统分区表相关的每个线索文件记录标头都包含分区名称。从 Oracle GoldenGate 21c 开始,如果分区名称记录 (PNR) 包含在 PARTITION 参数中,则会为系统分区表生成该记录。
请参阅《 Parameters and Functions Reference for Oracle GoldenGate 》中的 PARTITION \| PARTITIONEXCLUDE 。
序列和标识列
-
从 Oracle 数据库 18c 开始支持身份列,需要提取、在集成模式下并行复制或集成复制。
注:不支持为“身份”列复制系统生成的序列。
-
Oracle GoldenGate 支持在单向和主动 - 被动高可用性配置中复制序列值和身份列。
-
Oracle GoldenGate 可确保目标序列值始终高于源序列值(如果高速缓存为零,则等于它们)。
对序列的支持限制
这些限制适用于提取。
-
Oracle GoldenGate 不支持在主动 - 主动双向配置中复制序列值。
-
源序列和目标序列的高速缓存大小和增量间隔必须相同。高速缓存可以是任何大小,包括 0 (
NOCACHE)。 -
可以将序列设置为循环或不循环,但必须以相同的方式设置源数据库和目标数据库。
-
从提取的复制中排除具有默认序列列的表。
Oracle DML 中不受支持的对象和操作
以下是提取不支持的其他 Oracle 对象或操作:
-
为与 Oracle Database 12。2 及更高版本兼容,本机支持
REF,但不支持基于主键的REFs(PKREFs) -
主动 - 主动双向配置中的序列值
-
数据库重放
-
创建为
EXTERNAL的表