本部分包含有关以下内容的信息:
- Datastream 如何处理从来源 Oracle 数据库中拉取的数据的行为
- Datastream 支持的 Oracle 数据库版本
- 如何设置来源 Oracle 数据库以便将数据从该数据库流式传输到目标位置的概述
- 将 Oracle 数据库用作来源的已知限制
行为
Datastream 支持通过两种方法从在线重做日志文件中提取数据更改:Oracle 二进制日志读取器(预览版)和 Oracle LogMiner。
使用二进制日志读取器方法(预览版)时,会观察到以下行为:
如果从在线日志文件中提取更改时存在读取延迟,Datastream 会从归档日志文件中提取更改。
Datastream 仅将已提交的更改复制到目标位置。未提交或已回滚的事务不会复制。
二进制读取器支持复制长度超过 4000 个字符的 Oracle
VARCHAR2
列。
Datastream 还支持 Oracle LogMiner 功能来公开数据变更。该方法具有以下行为:
- 可以选择给定数据库中的所有架构或特定架构,以及架构或特定表中的所有表。
- 复制所有历史数据。
- 复制所有数据操纵语言 (DML) 变更,例如从指定数据库和表插入、更新和删除。
- Datastream 将已提交和(在某些情况下)未提交的变更复制到目标位置。Datastream 读取未提交的变更。如果回滚,则 Datastream 输出记录还包括相反的操作。例如,如果存在回滚的
INSERT
操作,则输出记录也将包含相应的DELETE
操作。在这种情况下,该事件将显示为仅包含ROWID
的DELETE
事件。
基于 ROWID
的回填
在 Oracle 中,ROWID
是一个伪列,用于存储表中行的唯一标识符。Datastream 会将 ROWID
值用于回填操作。因此,我们建议您在回填操作完成之前,不要执行任何可能会更改源 Oracle 数据库中的 ROWID
值的操作。
可以更改 ROWID
值的操作包括:
行实际移动:
- 导出和导入操作:如果您导出表格,然后再将其导入回来,行的位置可能会发生变化,从而导致新的
ROWID
值。 ALTER TABLE (...) MOVE
命令:将表移至其他表空间可能会更改物理存储空间并导致ROWID
更改。ALTER TABLE (...) SHRINK SPACE
命令:此命令会压缩表,可能会移动行并影响其ROWID
值。- 分区操作:拆分、合并或移动分区可能会更改行及其
ROWID
值的实际位置。
- 导出和导入操作:如果您导出表格,然后再将其导入回来,行的位置可能会发生变化,从而导致新的
回闪操作:
FLASHBACK TABLE
命令:将表恢复到之前的状态涉及删除和重新插入行,从而创建新的ROWID
值。FLASHBACK_TRANSACTION_QUERY
:类似于FLASHBACK TABLE
。如果事务中删除或更新了行,则回滚事务可能会导致ROWID
发生更改。
版本
Datastream 支持以下版本的 Oracle 数据库:
- Oracle 11g,11.2.0.4 版(仅支持 Logminer CDC 方法)
- Oracle 12c,12.1.0.2 版
- Oracle 12c,12.2.0.1 版
- Oracle 18c
- Oracle 19c
- Oracle 21c
Datastream 支持以下类型的 Oracle 数据库:
- 本地或任何云服务提供商处的自托管服务器
- Amazon RDS for Oracle
- Oracle Cloud
- Oracle Exadata
- Oracle RAC
- Oracle Active Data Guard 备用数据库
设置
若要设置来源 Oracle 数据库,以便将来自该数据库的数据流式传输到目标位置,您必须配置数据库以授予访问权限、设置日志记录和定义保留政策。
请参阅配置来源 Oracle 数据库,了解如何配置此数据库,以便 Datastream 能够从该数据库将数据拉取到目标位置。
已知限制
将 Oracle 数据库用作来源的已知限制包括:
- 数据流的上限为 10,000 个表。如果数据流包含超过 10,000 个表,则可能会遇到错误。
- Datastream 支持 Oracle 多租户架构 (CDB/PDB),但您只能在一个数据流中复制单个可插入数据库。
- 不支持 Oracle 自治数据库。
- 对于没有主键的表,Datastream 会使用行中的
ROWID
在使用方执行合并操作。请注意,ROWID
可能不是唯一的。例如,如果您使用 Oracle 的导出/导入实用程序删除并重新插入某行,则该行的ROWID
可能会发生变化。如果您删除某个行,Oracle 可以将其ROWID
重新分配给稍后插入的新行。 - 不支持索引整理表 (IOT)。
- 不支持临时表。
- 不支持
ANYDATA
、BFILE
、INTERVAL DAY TO SECOND
、INTERVAL YEAR TO MONTH
、LONG/LONG RAW
、SDO_GEOMETRY
、UDT
、UROWID
、XMLTYPE
数据类型的列,这些列会替换为NULL
值。 - 如需流式传输大型对象数据类型(例如二进制大型对象 [
BLOB
]、字符大型对象 [CLOB
] 和民族字符大型对象 [NCLOB
])的列,您需要在流式传输配置中添加streamLargeObjects
标志。如果您未添加该标志,Datastream 不会流式传输此类列,并且这些列会在目标位置替换为NULL
值。如需了解详情,请参阅为 Oracle 来源启用大型对象流式传输。 - 对于 Oracle 11g,不支持列的数据类型为
ANYDATA
或UDT
的表,并且不会复制整个表。 - 不复制 Oracle 标签安全 (OLS)。
- Datastream 在处理事件时定期从来源提取最新的架构。如果架构发生更改,则在仍然应用旧架构时,系统可能会读取新架构中的某些事件。在这种情况下,Datastream 会检测架构更改、触发架构提取并重新处理失败的事件。
- 并非所有对源架构的更改都可以自动检测到,在这种情况下可能会发生数据损坏。以下架构更改可能会导致数据损坏或无法处理下游事件:
- 删除列
- 在表中间添加列
- 更改列的数据类型
- 对列重新排序
- 删除表(如果同一表被重新创建并添加了新的数据,则与此相关)
- 截断表
- Datastream 不支持复制视图。
- Datastream 支持具体化视图。但是,在数据流运行期间创建的新视图不会自动回填。
- 使用 Oracle LogMiner 方法时,不支持
SAVEPOINT
语句,并且在发生回滚时可能会导致数据差异。 - Datastream 支持以下 Oracle 数据库字符集编码:
AL16UTF16
AL32UTF8
IN8ISCII
JA16SJIS
JA16SJISTILDE
US7ASCII
UTF8
WE8ISO8859P1
WE8ISO8859P9
WE8ISO8859P15
WE8MSWIN1252
ZHT16BIG5
- Datastream 不支持复制零日期值。此类日期会替换为
NULL
值。 - 生成非常大的日志文件可能会导致 Datastream 超时,进而导致数据流失败。建议的 redo 日志文件大小小于 1 GB。
- Datastream 不支持在 Oracle Real Application Clusters (RAC) 环境中使用单个客户端访问名称 (SCAN) 功能直接连接到数据库。如需了解可能的解决方案,请参阅 Oracle 来源行为和限制。
- 如果来源是 Oracle Active Data Guard 备用数据库,Datastream 不支持复制加密数据。
使用二进制读取器时的其他限制
二进制读取器不支持以下功能:
- 透明数据库加密 (TDE)
- 混合列压缩
- 安全文件
- 二进制读取器 CDC 方法不支持流恢复。
- Amazon RDS 来源不支持 ASM。
- 二进制读取器 CDC 方法不支持 Oracle 11g 及更低版本。
后续步骤
- 了解如何配置 Oracle 来源以便与 Datastream 搭配使用。