本部分包含有关以下内容的信息:
- 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 来源以搭配 Datastream 使用的建议最佳实践。
二进制读取器的大小写敏感度
使用二进制读取器 CDC 方法配置 Oracle 来源并为重做日志和归档日志指定目录名称时,请注意这些名称区分大小写。请确保您在 Datastream 连接配置文件中提供的目录名称与 Oracle 数据库中的目录名称的大小写完全一致。
CDC 并发
为尽可能减少复制延迟,请确保 Datastream 可以像 Oracle 源创建重做日志一样快速地处理这些日志。使用二进制读取器 CDC 方法时,Datastream 并发性处于重做日志文件级别:由 maxConcurrentCdcTasks 定义的每个任务一次处理一个文件。
我们建议您使用以下方法:
- 调整 Datastream 中的并发性:确定业务高峰时段的平均重做日志切换次数,并相应地配置
maxConcurrentCdcTasks参数。如需了解详情,请参阅CDC 任务数量上限。 - 配置 Oracle 日志切换:将 Oracle 配置为频繁切换日志,例如每 10-20 分钟切换一次。这样可以创建稳定的较小工作单元流,从而使 Datastream 并发任务能够有效地并行工作。
我们建议您优化设置,以便 Datastream 中有足够的并发任务来处理 Oracle 频繁创建的较小重做日志。如需了解详情,请参阅流并发控制。
已知限制
将 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语句,如果发生回滚,可能会导致数据不一致。 - 使用 Oracle LogMiner 方法时,Datastream 不支持复制名称超过 30 个字符的表和列。
- Datastream 支持以下 Oracle 数据库字符集编码:
AL16UTF16AL32UTF8IN8ISCIIIW8ISO8859P8JA16SJISJA16SJISTILDEKO16MSWIN949US7ASCIIUTF8WE8ISO8859P1WE8ISO8859P9WE8ISO8859P15WE8MSWIN1252ZHT16BIG5
- Datastream 不支持复制零日期值。此类日期会被替换为
NULL值。 - Datastream 不支持在 Oracle Real Application Clusters (RAC) 环境中使用单个客户端访问名称 (SCAN) 功能直接连接到数据库。如需了解可能的解决方案,请参阅 Oracle 来源行为和限制。
- 如果来源是 Oracle Active Data Guard 备用数据库,Datastream 不支持复制加密数据。
使用二进制读取器时的其他限制
二进制读取器不支持以下功能:
- 透明数据库加密 (TDE)
- 混合列压缩
- 保障文件安全
- ASM 不支持 Amazon RDS 来源。
- 二进制读取器 CDC 方法不支持 Oracle 11g 及更低版本。
后续步骤
- 了解如何配置 Oracle 源以供 Datastream 使用。