来源 Oracle 数据库

本部分包含有关以下内容的信息:

  • Datastream 如何处理从来源 Oracle 数据库中拉取的数据的行为
  • Datastream 支持的 Oracle 数据库版本
  • 如何设置来源 Oracle 数据库以便将数据从该数据库流式传输到目标位置的概述
  • 将 Oracle 数据库用作来源的已知限制

行为

来源 Oracle 数据库依靠其 Oracle Logminer 功能来公开数据变更。

  • 可以选择给定数据库中的所有架构或特定架构,以及架构或特定表中的所有表。
  • 复制所有历史数据。
  • 系统会复制所有数据操纵语言 (DML) 更改,例如对指定数据库和表中的插入、更新和删除。
  • Datastream 将已提交和(在某些情况下)未提交的变更复制到目标位置。Datastream 读取未提交的变更。如果回滚,则 Datastream 输出记录还包括相反的操作。例如,如果存在回滚的 INSERT 操作,则输出记录也将包含相应的 DELETE 操作。在这种情况下,该事件将显示为仅包含 ROWIDDELETE 事件。

基于 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
  • 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 个表。如果数据流包含的表超过 1 万个,则可能会遇到错误。
  • Datastream 支持 Oracle 多租户架构 (CDB/PDB),但是,您只能在流中复制单个可插入数据库。
  • 不支持 Oracle 自治数据库。
  • 对于没有主键的表,Datastream 会使用行的 ROWID 在使用方端执行合并操作。请注意,ROWID 可能不是唯一的。例如,如果您使用 Oracle 的导出/导入实用程序删除并重新插入一行,该行的 ROWID 可能会发生变化。如果您删除一行,则 Oracle 可以将其 ROWID 重新分配给稍后插入的新行。
  • 不支持索引整理表 (IOT)。
  • 不支持临时表。
  • 对于类型为 BFILE 的列,系统只会复制文件的路径。系统不会复制该文件的内容。
  • 不支持数据类型为 ANYDATAINTERVAL DAY TO SECONDINTERVAL YEAR TO MONTHLONG/LONG RAWSDO_GEOMETRYUDTUROWIDXMLTYPE 的列,这些列已替换为 NULL 值。
  • 如需流式传输大型对象数据类型的列,例如二进制大型对象 (BLOB)、字符大型对象 (CLOB) 和国家字符大型对象 (NCLOB),您需要在数据流配置中添加 streamLargeObjects 标记。如果您未添加该标志,Datastream 不会流式传输此类列,并且会在目标位置中将此类列替换为 NULL 值。如需了解详情,请参阅为 Oracle 来源启用大型对象流式传输
  • 对于 Oracle 11g,不支持列的数据类型为 ANYDATAUDT 的表,并且不会复制整个表。
  • 不复制 Oracle 标签安全 (OLS)。
  • Datastream 在处理事件时定期从来源提取最新的架构。如果架构发生变化,系统可能会读取新架构中的某些事件,而旧架构仍然适用。在这种情况下,Datastream 会检测架构更改,触发架构提取,并重新处理失败的事件。
  • 并非所有对源架构的更改都可以自动检测到,在这种情况下可能会发生数据损坏。以下架构更改可能会导致数据损坏或无法处理下游事件:
    • 删除列
    • 在表中间添加列
    • 更改列的数据类型
    • 对列重新排序
    • 删除表(如果同一表被重新创建并添加了新的数据,则与此相关)
    • 截断表
  • Datastream 不支持复制视图。
  • Datastream 支持具体化视图。不过,系统不会自动回填在数据流运行期间创建的新视图。
  • SAVEPOINT 语句不受支持,并且在回滚时可能会导致数据差异。
  • 对于 Oracle 数据库,Datastream 支持以下字符集编码:
    • AL16UTF16
    • AL32UTF8
    • IN8ISCII
    • JA16SJIS
    • JA16SJISTILDE
    • US7ASCII
    • UTF8
    • WE8ISO8859P1
    • WE8ISO8859P9
    • WE8ISO8859P15
    • WE8MSWIN1252
    • ZHT16BIG5
  • Datastream 不支持复制零日期值。此类日期会被替换为 NULL 值。
  • 生成非常大的日志文件可能会导致 Datastream 超时,进而可能导致数据流失败。建议的重做日志文件大小小于 1GB。
  • 在 Oracle 真实应用集群 (RAC) 环境中,Datastream 不支持使用单客户端访问名称 (SCAN) 功能直接连接到数据库。如需了解潜在解决方案,请参阅 Oracle 来源行为和限制
  • 如果源是 Oracle Active Data Guard 备用数据库,Datastream 不支持复制加密数据。