开云体育官方注册网址Debezium Connector for Oracle

概述

开云体育官方注册网址Debezium的Oracle连接器捕获并记录Oracle服务器上数据库中发生的行级更改,包括在连接器运行时添加的表。开云体育电动老虎机您可以配置连接器,为模式和表的特定子集发出更改事件,或者忽略、屏蔽或截断特定列中的值。

有关与此连接器兼容的Oracle数据库版本的信息,请参阅开云体育电动老虎机开云体育官方注册网址Debezium释放概述

开云体育官方注册网址Debezium通过使用本地LogMiner数据库包或开云体育电动老虎机XStream API。虽然连接器可以与各种Oracle版本和版本一起工作,但只测试了Oracle EE 12和19。

Oracle连接器是如何工作的

为了优化配置和运行Debezium Oracle连接器,了解连接器开云体育官方注册网址如何执行快照、流更改事件、确定Kafka主题名称、使用元数据和实现事件缓冲是有帮助的。

快照

通常,Oracle服务器上的重做日志被配置为不保留数据库的完整历史记录。开云体育电动老虎机因此,Debezium Oracl开云体育官方注册网址e连接器无法从日志中检索数据库的整个历史记录。开云体育电动老虎机为了使连接器能够为数据库的当前状态建立基线,在连接器第一次启动时,它执行初始化操作开云体育电动老虎机一致的快照数据库的。开云体育电动老虎机

的值来自定义连接器创建快照的方式snapshot.mode连接器配置属性。默认情况下,连接器的快照模式设置为最初的

用于创建初始快照的默认连接器工作流

当快照模式设置为默认模式时,连接器将完成以下任务来创建快照:

  1. 确定要捕获的表。

  2. 获得一个行共享模式锁定每个捕获的表,以防止在创建快照期间发生结构更改。开云体育官方注册网址Debezium只能维持很短的时间。

  3. 从服务器的重做日志中读取当前系统更改号(SCN)位置。

  4. 捕获所有相关表的结构。

  5. 释放在步骤2中获得的锁。

  6. 扫描所有相关的数据库表和模式,使其在步骤3 (开云体育电动老虎机在SCN 123中选择* from),生成事件,然后将事件记录写入特定于表的Kafka主题。

  7. 在连接器偏移量中记录快照的成功完成。

快照进程启动后,如果由于连接器故障、再平衡或其他原因导致进程中断,则在连接器重启后重新启动该进程。连接器完成初始快照后,将继续从步骤3中读取的位置进行流处理,这样就不会错过任何更新。如果连接器因任何原因再次停止,在重新启动后,它将从先前停止的位置恢复流更改。

表1。设置snapshot.mode连接器配置属性
设置 描述

总是

对每个连接器启动执行快照。快照完成后,连接器开始对事件记录进行流处理,以用于后续的数据库更改。开云体育电动老虎机

最初的

中所描述的连接器执行数据库快照开云体育电动老虎机创建初始快照的默认工作流。快照完成后,连接器开始对事件记录进行流处理,以用于后续的数据库更改。开云体育电动老虎机

initial_only

连接器执行数据库快照,并在流式传输任何更改事件记录开云体育电动老虎机之前停止,不允许捕获任何后续更改事件。

schema_only

连接器捕获所有相关表的结构,执行中描述的所有步骤默认快照工作流,除了它不创造事件来表示连接器启动时的数据集(步骤6)。

schema_only_recovery

设置此选项可恢复丢失或损坏的数据库模式历史主题。开云体育电动老虎机重新启动后,连接器运行一个快照,从源表重新构建主题。还可以将该属性设置为定期修剪经历意外增长的数据库模式历史主题。开云体育电动老虎机

警告:如果在上次连接器关闭后将模式更改提交到数据库,请不要使用此模式执行快照。开云体育电动老虎机

有关更多信息,请参见snapshot.mode在连接器配置属性表中。

临时快照

默认情况下,连接器仅在第一次启动后才运行初始快照操作。在此初始快照之后,在正常情况下,连接器不会重复快照过程。连接器捕获的任何未来的更改事件数据都只能通过流处理进入。

但是,在某些情况下,连接器在初始快照期间获得的数据可能会过时、丢失或不完整。为了提供一种重新捕获表数据的机制,Debezium包含了一个执行临时快照的选项。开云体育官方注册网址数据库中的以下更改可能会导致执行临时快照:开云体育电动老虎机

  • 修改连接器配置以捕获一组不同的表。

  • Kafka主题被删除,必须重建。

  • 由于配置错误或其他问题导致数据损坏。

您可以通过初始化所谓的特别的快照。临时快照需要使用信号表。通过向Debezium信令表发送信号请求来初始化临时快照。开云体育官方注册网址

当您启动现有表的临时快照时,连接器会将内容附加到该表已经存在的主题中。如果先前存在的主题被删除,Debezium可以自动创建一个主题开云体育官方注册网址自动创建主题启用。

临时快照信号指定要包含在快照中的表。快照可以捕获数据库的整个内容,也可以只捕获数据库中表的一个子集。开云体育电动老虎机此外,快照可以捕获数据库中表内容的一个子集。开云体育电动老虎机

指定要捕获的表execute-snapshot给信令表的消息。设置的类型execute-snapshot信号增量,并提供要包含在快照中的表的名称,如下表所示:

表2。ad hoc的例子execute-snapshot信号记录
默认的 价值

类型

增量

指定要运行的快照类型。
可选设置类型。目前,您只能请求增量快照。

数据收集

N/A

一个数组,其中包含与要快照的表的完全限定名称匹配的正则表达式。
名称的格式与signal.data.collection配置选项。

附加条件

N/A

一个可选字符串,它根据表的列指定一个条件,以捕获表内容的一个子集。

触发临时快照

的项来初始化一个临时快照execute-snapshot信令表的信号类型。连接器处理消息后,将开始快照操作。快照进程读取第一个和最后一个主键值,并将这些值用作每个表的起点和终点。根据表中的条目数和配置的块大小,Debezium将表划分为块,然后连续地对每个块进行快照,每次一个。开云体育官方注册网址

目前,execute-snapshot动作类型触发器增量快照只有。有关更多信息,请参见增量快照

增量快照

为了提供管理快照的灵活性,Debezium包括一个补充快照机制,称为开云体育官方注册网址增量快照。增量快照依赖于Debezium机制开云体育官方注册网址向Debezium连接器发送信号开云体育官方注册网址。增量快照是基于DDD-3设计文档。

在增量快照中,Debezium不像在初始快照中那样一次捕获数据库的全部状态,而是在一系列可配置的块中分阶段捕获每个表。开云体育官方注册网址开云体育电动老虎机您可以指定希望快照捕获的表和每个块的大小。块大小决定了快照在每次数据库取操作期间收集的行数。开云体育电动老虎机增量快照的默认块大小为1kb。

随着增量快照的进行,Debezium使用水印来跟踪其进度,维护它捕获的每一开云体育官方注册网址行表的记录。与标准的初始快照过程相比,这种分阶段捕获数据的方法具有以下优点:

  • 您可以与流数据捕获并行运行增量快照,而不是将流延迟到快照完成。连接器在整个快照过程中继续从更改日志中捕获接近实时的事件,两个操作都不会阻塞另一个操作。

  • 当增量快照的进度中断时,可以在不丢失数据的情况下恢复增量快照。在进程恢复之后,快照从它停止的位置开始,而不是从开始重新捕获表。

  • 您可以随时按需运行增量快照,并根据需要重复该过程以适应数据库更新。开云体育电动老虎机例如,在修改连接器配置以向其添加表之后,可以重新运行快照table.include.list财产。

增量快照流程

当运行增量快照时,Debezium按主键对每个表进行排序,然后根据属性将表划开云体育官方注册网址分为块配置的块大小。一个块一个块地工作,然后捕获一个块中的每个表行。对于它捕获的每一行,快照都会发出一个事件。该事件表示块的快照开始时的行值。

随着快照的进行,其他进程可能会继续访问数据库,可能会修改表记录。开云体育电动老虎机为了反映这些变化,插入更新,或删除操作像往常一样提交到事务日志中。同样,正在进行的Debezium流进程继续检测开云体育官方注册网址这些更改事件,并向Kafka发送相应的更改事件记录。

Debe开云体育官方注册网址zium如何解决具有相同主键的记录之间的冲突

在某些情况下,更新删除接收流进程发出的事件时没有顺序。也就是说,流处理可能会在快照捕获包含数据的块之前发出修改表行的事件事件。当快照最终发出相应的事件时,其值已被替换。为了确保以正确的逻辑顺序处理按顺序到达的增量快照事件,Debezium采用缓冲方案来解决冲突。开云体育官方注册网址只有在解决了快照事件和流事件之间的冲突之后,Debezium才会向Kafka发送事件记录。开云体育官方注册网址

快照窗口

协助解决迟到员工之间的冲突事件和流事件修改同一表行,Debezium采用所谓的开云体育官方注册网址快照窗口。快照窗口界定了增量快照捕获指定表块数据的时间间隔。在块的快照窗口打开之前,Debezium遵循其通常的行为,并从事务日志中直接向下游的目标Ka开云体育官方注册网址fka主题发送事件。但是从特定块的快照打开的那一刻起,直到它关闭,Debezium执行重复数据删除步骤来解决具有相同主键的事件之间的冲突。开云体育官方注册网址

对于每个数据收集,Debezium发出两种类型的事件,并将它开云体育官方注册网址们的记录存储在单个目标Kafka主题中。直接从表中捕获的快照记录作为操作。同时,当用户继续更新数据集合中的记录,并且事务日志被更新以反映每次提交时,Debezium发出开云体育官方注册网址更新删除每个变更的操作。

当快照窗口打开时,Debezium开始处理快照块,它将快照记录传递到开云体育官方注册网址内存缓冲区。的主键缓冲区中的事件与传入流事件的主键进行比较。如果没有找到匹配,流事件记录被直接发送到Kafka。如果D开云体育官方注册网址ebezium检测到匹配,它将丢弃缓存事件,并将流记录写入目标主题,因为流事件在逻辑上取代了静态快照事件。块的快照窗口关闭后,缓冲区中只包含不存在相关事务日志事件的事件。开云体育官方注册网址Debezium释放这些残留物事件到表的Kafka主题。

连接器为每个快照块重复该过程。

Orac开云体育官方注册网址le的Debezium连接器在运行增量快照时不支持模式更改。

触发增量快照

目前,启动增量快照的唯一方法是发送自适应快照信号到源数据库上的信令表。开云体育电动老虎机将一个信号作为SQL提交到信令表插入查询。

Debezi开云体育官方注册网址um检测到信令表中的变化后,读取信号,并运行请求的快照操作。

您提交的查询指定要包含在快照中的表,并且(可选地)指定快照操作的类型。目前,快照操作唯一有效的选项是默认值,增量

要指定要包含在快照中的表,请提供数据收集列出表的数组或用于匹配表的正则表达式数组,例如,
{“数据收集”:["。MyFirstTable”、“公众。MySecondTable ")}

数据收集增量快照信号所在阵列无默认值。如果数据收集array为空时,Debeziu开云体育官方注册网址m检测到不需要任何操作并且不执行快照。

如果要在快照中包含的表的名称包含点(),将表添加到开云体育电动老虎机数据收集数组中,必须用双引号转义名称的每个部分。

控件中存在的表公共模式,它有名字我的。表格,请使用以下格式:“公共”。“My.Table”

先决条件
过程
  1. 发送一个SQL查询,将临时增量快照请求添加到信令表:

    插入< signalTable >(id, type, data)' < id > '' < snapshotType >”, '{"data-collections": ["<表>”、“<表>“,”类型”:“< snapshotType >”、“附加条件”:“<附加条件>“}”);

    例如,

    INSERT INTO myschema.开云体育官方注册网址debezium_signal (id, type, data)(1)值(“ad-hoc-1”,(2)“execute-snapshot”,(3)”{代码基于schema1中“数据收集”:["。表1”、“schema2.table2”),(4)“类型”:“增量”},(5)“附加条件”:“颜色=蓝色“}”);(6)

    的值id类型,数据该命令中的参数对应于信令表字段

    示例中的参数说明如下表所示:

    表3。SQL命令中用于向信令表发送增量快照信号的字段说明
    价值 描述

    1

    myschema.开云体育官方注册网址debezium_signal

    指定源数据库上信令表的全限定名称。开云体育电动老虎机

    2

    ad-hoc-1

    id参数指定分配为id信号请求的标识符。
    使用此字符串标识发送到信令表项的日志消息。开云体育官方注册网址Debezium不使用此字符串。相反,在快照期间,Debezium会生成自己的快照开云体育官方注册网址id字符串作为水印信号。

    3.

    execute-snapshot

    指定类型参数指定信号打算触发的操作。

    4

    数据收集

    的必要组成部分数据一个信号的字段,该信号指定一个表名数组或正则表达式,以匹配要包含在快照中的表名。
    数组列出了与表匹配的正则表达式,这些正则表达式使用与指定连接器的信令表名称相同的格式signal.data.collection配置属性。

    5

    增量

    一个可选的类型的组成部分数据指定要运行的快照操作类型的信号的字段。
    目前,唯一有效的选项是默认值,增量
    如果未指定值,则连接器将运行增量快照。

    6

    附加条件

    一个可选字符串,它根据表的列指定一个条件,以捕获表内容的一个子集。有关的更多信息附加条件参数,看到的临时增量快照附加条件

的临时增量快照附加条件

如果您希望快照仅包含表中内容的子集,则可以通过附加一个附加条件参数表示快照信号。

典型快照的SQL查询采用以下形式:

Select * from<表>....

通过添加附加条件参数,则追加a在哪里条件加到SQL查询中,示例如下:

Select * from<表>在哪里<附加条件>....

下面的例子显示了一个SQL查询发送一个带有附加条件的临时增量快照请求到信令表:

插入< signalTable >(id, type, data)' < id > '' < snapshotType >”, '{"data-collections": ["<表>”、“<表>“,”类型”:“< snapshotType >”、“附加条件”:“<附加条件>“}”);

例如,假设你有一个产品表,包含以下列:

  • id(主键)

  • 颜色

  • 数量

的增量快照产品表中只包含以下数据项颜色=蓝色,可以使用以下SQL语句触发快照:

INSERT INTO myschema.开云体育官方注册网址debezium_signal (id, type, data) VALUES('ad-hoc-1', 'execute-snapshot', '{"data-collections": ["schema .debezium_signal ")产品”),“类型”:“增量”、“附加条件”:“颜色=蓝色"});

附加条件参数还使您能够传递基于多个列的条件。例如,使用产品表中,您可以提交一个查询,该查询触发一个增量快照,该快照仅包含那些项目的数据颜色=蓝色量> 10

INSERT INTO myschema.开云体育官方注册网址debezium_signal (id, type, data) VALUES('ad-hoc-1', 'execute-snapshot', '{"data-collections": ["schema .debezium_signal ")product "],"type":"incremental", "additional-condition":"color=blue AND quantity>10"}');

下面的示例显示了连接器捕获的增量快照事件的JSON。

示例:增量快照事件消息
{“前”:零,“后”:{“pk”:“1”,“价值”:“新数据”},“源”:{…“快照”:“增量”(1)},“人事处”:“r”,(2)"ts_ms":"1620393591654", "transaction":null}
字段名 描述

1

快照

指定要运行的快照操作的类型。
目前,唯一有效的选项是默认值,增量
指定一个类型提交给信令表的SQL查询中的值是可选的。
如果未指定值,则连接器将运行增量快照。

2

人事处

事件类型。
快照事件的值为r,表示操作。

停止增量快照

还可以通过向源数据库上的表发送信号来停止增量快照。开云体育电动老虎机通过发送SQL向表提交停止快照信号插入查询Debezi开云体育官方注册网址um检测到信令表中的变化后,将读取信号,如果正在进行增量快照操作,则停止该操作。

提交的查询指定了快照操作增量,以及要删除的当前运行快照的表(可选)。

先决条件
过程
  1. 发送一个SQL查询来停止临时增量快照到信令表:

    插入< signalTable >(id, type, data)值(' < id > ', 'stop-snapshot', '{"data-collections": ["<表>”、“<表>”,“类型”:“增量”}’);

    例如,

    INSERT INTO myschema.开云体育官方注册网址debezium_signal (id, type, data)(1)值(“ad-hoc-1”,(2)“stop-snapshot”,(3)”{代码基于schema1中“数据收集”:["。表1”、“schema2.table2”),(4)“类型”:“增量”}’);(5)

    的值id类型,数据signal命令中的参数对应于信令表字段

    示例中的参数说明如下表所示:

    表4。SQL命令中用于向信令表发送停止增量快照信号的字段说明
    价值 描述

    1

    myschema.开云体育官方注册网址debezium_signal

    指定源数据库上信令表的全限定名称。开云体育电动老虎机

    2

    ad-hoc-1

    id参数指定分配为id信号请求的标识符。
    使用此字符串标识发送到信令表项的日志消息。开云体育官方注册网址Debezium不使用此字符串。

    3.

    stop-snapshot

    指定类型参数指定信号打算触发的操作。

    4

    数据收集

    的可选组件数据一个信号的字段,该信号指定与要从快照中删除的表名匹配的表名数组或正则表达式。
    数组列出了与表匹配的正则表达式,这些正则表达式使用与指定连接器的信令表名称相同的格式signal.data.collection配置属性。如果这个分量数据字段省略时,该信号停止正在进行的整个增量快照。

    5

    增量

    的必要组成部分数据指定要停止的快照操作类型的信号字段。
    目前,唯一有效的选项是增量
    如果没有指定类型值,则停止增量快照失败。

主题名称

默认情况下,Oracle连接器为所有连接器编写更改事件插入更新,删除在表中发生的操作到特定于该表的单个Apache Kafka主题。连接器使用以下约定来命名更改事件主题:

topicPrefix.schemaName.tableName

以下列表提供了默认名称的组件的定义:

topicPrefix

属性指定的主题前缀topic.prefix连接器配置属性。

schemaName

发生操作的架构的名称。

的表

发生操作的表的名称。

例如,如果实现是服务器名,库存是模式名,并且数据库包含具有该名称的表开云体育电动老虎机订单客户,产品, Debe开云体育官方注册网址zium Oracle连接器向以下Kafka主题发出事件,数据库中的每个表一个事件:开云体育电动老虎机

履行。库存。订单。库存。客户。库存。产品

连接器应用类似的命名约定来标记其内部数据库模式历史主题。开云体育电动老虎机模式更改主题,事务元数据主题

如果默认的主题名称不能满足您的需求,您可以配置自定义的主题名称。要配置自定义主题名称,可以在逻辑主题路由SMT中指定正则表达式。有关使用逻辑主题路由SMT自定义主题命名的详细信息,请参见主题的路由

模式更改主题

您可以配置Debezium Oracle开云体育官方注册网址连接器来生成模式更改事件,这些事件描述应用于数据库中捕获的表的结构更改。开云体育电动老虎机连接器将模式更改事件写入Kafka主题< serverName >,在那里topicName中指定的名称空间是否为topic.prefix配置属性。

开云体育官方注册网址Debezium每当从新表中传输数据时,都会向此主题发出一条新消息。

连接器发送到模式更改主题的消息包含有效负载,并且(可选地)还包含更改事件消息的模式。模式更改事件消息的有效负载包括以下元素:

ddl

提供SQL创建改变,或下降语句,该语句导致模式更改。

开云体育电动老虎机数据库名

语句应用到的数据库的名称。开云体育电动老虎机的价值开云体育电动老虎机数据库名作为消息键。

tableChanges

模式更改后整个表模式的结构化表示。的tableChanges字段包含一个数组,其中包含表的每个列的条目。由于结构化表示以JSON或Avro格式表示数据,因此使用者可以轻松地读取消息,而无需首先通过DDL解析器处理它们。

默认情况下,连接器使用ALL_TABLES开云体育电动老虎机数据库视图,以标识要存储在模式历史主题中的表名。在该视图中,连接器只能访问用户帐户可用的表中的数据,它通过这些表连接到数据库。开云体育电动老虎机

您可以修改设置,以便模式历史记录主题存储表的不同子集。使用以下方法之一更改主题存储的表集:

  • 更改Debezium用于访问数据库的帐户的权限,以便在数据库中可以看到一组不同的表开云体育官方注册网址开云体育电动老虎机ALL_TABLES视图。

  • 设置连接器属性schema.history.internal.store.only.captured.tables.ddl真正的

当将连接器配置为捕获表时,它不仅将表的模式更改历史存储在模式更改主题中,而且还存储在内部数据库模式历史主题中。开云体育电动老虎机内部数据库模式历史主题仅供开云体育电动老虎机连接器使用,不打算供消费应用程序直接使用。确保需要关于模式更改通知的应用程序仅使用来自模式更改主题的信息。

永远不要对数据库模式历史主题进行分区。开云体育电动老虎机为了使数据库模式开云体育电动老虎机历史主题正确工作,它必须维护连接器发送给它的事件记录的一致的全局顺序。

为了确保该主题不会在多个分区之间分裂,请使用以下方法之一设置该主题的分区计数:

  • 如果手动创建数据库模式历史主题,请指开云体育电动老虎机定分区计数为1

  • 如果使用Apache Kafka代理自动创建数据库模式历史主题,则创建主题时,设置该值开云体育电动老虎机卡夫卡num.partitions配置选项1

模式更改主题消息格式处于酝酿状态,可能会在不通知的情况下更改。

开云体育官方注册网址Debezium每当从新表中传输数据时,或者当表的结构发生变化时,都会向此主题发出一条新消息。

更改表结构后,必须遵循图式演化过程)。

示例:发送到Oracle连接器模式更改主题的消息

下面的示例显示了JSON格式的典型模式更改消息。该消息包含表模式的逻辑表示。

{"schema":{…}, "payload": {"source": {"version": "2.1.2.} "Final", "connector": "oracle", "name": "server1", "ts_ms": 1588252618953, "snapshot": "true", "db": "ORCLPDB1", "schema": "开云体育官方注册网址DEBEZIUM", "table": "CUSTOMERS", "txId": null, "scn": "1513734", "commit_scn": "1513754", "lcr_position": null, "rs_id": "001234.00012345.0124", "ssn": 1, "redo_thread": 1, "user_name": "user"}, "ts_ms": 1588252618953,(1)“开云体育电动老虎机数据库名”:“ORCLPDB1”,(2)"schemaName": "开云体育官方注册网址DEBEZIUM", // "ddl": "CREATE TABLE \"DEBEZIUM\"。\“CUSTOMERS\”\n(\“ID\”NUMBER(9,0) NOT NULL ENABLE, \n \“FIRST_NAME\”VARCHAR2(255), \n \“LAST_NAME \”VARCHAR2(255), \n \“EMAIL\”VARCHAR2(255), \n PRIMARY KEY(\“ID\”)ENABLE,\n补充日志数据(所有)列\n)段创建立即\n PCTFREE 10 PCTUSED 40 initran 1 MAXTRANS 255 \n NOCOMPRESS日志\n存储(初始65536下一个1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n PCTINCREASE 0自由列表1自由列表组1\n BUFFER_POOL默认FLASH_CACHE默认CELL_FLASH_CACHE默认)\n表空间\"USERS\",(3)“tableChanges”:((4){"type": "CREATE",(5)“id”:“\”ORCLPDB1 \”,\“开云体育官方注册网址DEBEZIUM \“\”,\“客户,(6)"表":{(7)"defaultCharsetName": null, "primaryKeyColumnNames": [(8)"ID"], "columns": [(9){"name": "ID", "jdbcType": 2, "nativeType": null, "typeName": "NUMBER", "typeExpression": "NUMBER", "charsetName": null, "length": 9, "scale": 0, "position": 1, "optional": false, " autoincreated ": false, "generated": false}, {"name": "FIRST_NAME", "jdbcType": 12, "nativeType": null, "typeName": "VARCHAR2", "charsetName": null, "length": 255, "scale": null, "position": 2, "optional": false, " autoincreated ": false, "generated": false}, {"name":"LAST_NAME", "jdbcType": 12, "nativeType": null, "typeName": "VARCHAR2", "typeExpression": "VARCHAR2", "charsetName": null, "length": 255, "scale": null, "position": 3, "optional": false, " autoincreated ": false, "generated": false}, {"name": "EMAIL", "jdbcType": 12, "nativeType": null, "typeName": "VARCHAR2", "charsetName": null, "length": 255, "scale": null, "position": 4, "optional": false, " autoincreated ": false, "generated": false}], "attributes": [(10){"customAttribute": "attributeValue"}]}}]}}
表5所示。发送到架构更改主题的消息中字段的描述
字段名 描述

1

ts_ms

可选字段,显示连接器处理事件的时间。该时间基于运行Kafka Connect任务的JVM中的系统时钟。

在源对象中,ts_ms表示在数据库中进行更改的时间。开云体育电动老虎机通过比较payload.source的值。Ts_ms和payload的值。ts_ms,you can determine the lag between the source database update and Debezium.

2

开云体育电动老虎机数据库名
schemaName

标识包含更改的数据库和模式。开云体育电动老虎机

3.

ddl

该字段包含负责模式更改的DDL。

4

tableChanges

包含由DDL命令生成的模式更改的一个或多个项的数组。

5

类型

描述变化的类型。的类型可以设置为以下值之一:

创建

创建表。

改变

表修改。

下降

表删除。

6

id

被创建、修改或删除的表的完整标识符。在表重命名的情况下,此标识符是的连接<古><新>表名。

7

表格

表示应用更改后的表元数据。

8

primaryKeyColumnNames

组成表主键的列列表。

9

已更改表中每列的元数据。

10

属性

为每个表更改自定义属性元数据。

在连接器发送到模式更改主题的消息中,消息键是包含模式更改的数据库的名称。开云体育电动老虎机在下面的示例中,有效载荷字段包含开云体育电动老虎机数据库名关键:

{"schema": {"type": "struct", "fields": [{"type": "string", "optional": false, "field": "data开云体育电动老虎机baseName"}], "optional": false, "name": "io.debezi开云体育官方注册网址um.connector.oracle.SchemaChangeKey"}, "payload": {"databaseName": "ORCLPDB1"}}

事务的元数据

开云体育官方注册网址Debezium可以生成表示事务元数据边界的事件,并丰富数据更改事件消息。

限制Debezium何时接收事开云体育官方注册网址务元数据

开云体育官方注册网址Debezium仅为部署连接器后发生的事务注册和接收元数据。在部署连接器之前发生的事务的元数据不可用。

开云体育电动老虎机语句块表示数据库事务,该语句块包含在开始结束关键词。开云体育官方注册网址类生成事务边界事件开始结束每个事务中的分隔符。事务边界事件包含以下字段:

状态

开始结束

id

唯一事务标识符的字符串表示形式。

ts_ms

事务边界事件(开始结束事件)。如果数据源没有向Debezium提供事件时间,则该字段表示Debeziu开云体育官方注册网址m处理事件的时间。

event_count(结束事件)

事务发出的事件总数。

data_collections(结束事件)

的一对数组data_collectionevent_count元素,指示连接器为源自数据集合的更改发出的事件数。

下面的例子显示了一个典型的事务边界消息:

示例:Oracle连接器事务边界事件
{"status": "BEGIN", "id": "5.6.641", "ts_ms": 1486500577125, "event_count": null, "data_collections": null} {"status": "END", "id": "5.6.641", "ts_ms": 1486500577691, "event_count": 2, "data_collections": [{"data_collection": "ORCLPDB1.DEBEZ开云体育官方注册网址IUM. ORCLPDB1.DEBEZIUM. "{"data_collection": "ORCLPDB1.DEBEZIUM. ", "event_count": 1}, 开云体育官方注册网址"ORCLPDB1.DEBEZIUM. "ORDER", "event_count": 1}]}

除非通过topic.transaction选项,则连接器将事务事件发送到< topic.prefix >.transaction的话题。

更改数据事件充实

当启用事务元数据时,数据消息信封是充实了一个新的事务字段。该字段以字段的组合形式提供有关每个事件的信息:

id

唯一事务标识符的字符串表示形式。

total_order

事件在事务生成的所有事件中的绝对位置。

data_collection_order

事件在事务发出的所有事件中的每个数据收集位置。

下面的例子显示了一个典型的事务事件消息:

{“前”:零,“后”:{“pk”:“2”,“aa”:“1”},“源”:{…},“人事处”:“c”、“ts_ms”:“1580390884335”,“交易”:{" id ":“5.6.641”、“total_order”:“1”,“data_collection_order”:" 1 "}}

事件缓冲

Oracle将所有更改按照发生的顺序写入重做日志,包括在回滚过程中被丢弃的更改。因此,来自独立事务的并发更改是相互交织的。当连接器第一次读取更改流时,因为它不能立即确定哪些更改被提交或回滚,所以它将更改事件临时存储在内部缓冲区中。提交更改后,连接器将更改事件从缓冲区写入Kafka。连接器将删除回滚丢弃的更改事件。

您可以通过设置属性来配置连接器使用的缓冲机制log.mining.buffer.type

默认的缓冲区类型使用内存。在默认情况下内存设置时,连接器使用JVM进程的堆内存来分配和管理缓冲的事件记录。如果你使用内存缓冲区设置时,请确保分配给Java进程的内存量能够容纳环境中长时间运行的大型事务。

Infinispan

Debe开云体育官方注册网址zium Oracle连接器也可以配置为使用Infinispan作为其缓存提供者,支持本地嵌入模式或远程服务器集群上的缓存存储。为了使用Infinispanlog.mining.buffer.type必须使用infinispan_embeddedinfinispan_remote

为了允许Infinispan缓存配置的灵活性,连接器希望在使用Infinispan缓冲事件数据时提供一系列缓存配置属性。看到配置属性log.mining.buffer.infinispan.cache名称空间。这些配置属性的内容取决于连接器是要与远程Infinispan集群集成还是要使用嵌入式引擎。

例如,以下示例说明了在嵌入式模式下使用Infinispan时事务缓存属性的嵌入式配置:

 < persistent passivation="false">      

深入查看配置,缓存被配置为持久化。所有缓存都应该以这种方式配置,以避免在事务正在进行时跨连接器重启丢失事务事件。控件定义了保存缓存的位置路径属性,这应该是一个可以访问所有可能的运行时环境的共享位置。

当将XML配置作为JSON连接器属性值提供时,必须省略换行符或用\ n的性格。

另一个例子,下面展示了Infinispan集群配置的相同缓存:

        

就像前面示例中的嵌入式本地缓存配置一样,这个配置也被定义为持久化的。所有缓存都应该以这种方式配置,以避免在事务正在进行时跨连接器重启丢失事务事件。

然而,也有一些不同之处。首先,缓存被定义为分布式缓存,而不是本地缓存。其次,将缓存定义为使用应用程序/ x-protostream编码,这是所有Debezium缓存所必需的。开云体育官方注册网址最后,不路径属性在文件存储定义上是必需的,因为Infinispan集群将自动处理它。

Infinispan缓冲类型被认为是孵化的;缓存格式可能在不同版本之间发生变化,并且可能需要重新快照。迁移注释将指示是否需要这样做。

此外,在删除使用Infinispan缓冲区的Debezium开云体育官方注册网址 Oracle连接器时,不会自动从磁盘中删除持久缓存文件。如果新连接器部署将使用相同的缓冲区位置,则应该在部署新连接器之前手动删除这些文件。

Infinispan Hotrod客户端集成

Debe开云体育官方注册网址zium Oracle连接器利用Hotrod客户端与Infinispan集群通信。前缀为。的连接器属性log.mining.buffer.infinispan.client。将直接传递给Hotrod客户端infinispan.client。命名空间,允许完全自定义客户机如何与集群交互。

使用Infinspan模式时,必须提供至少一个必需的配置属性:

log.mining.buffer.infinispan.client.hotrod.server_list

指定Infinispan服务器主机名和端口组合的列表,使用<主机名>:<口>格式。

SCN间隙检测

当Debezium开云体育官方注册网址 Oracle连接器配置为使用LogMiner时,它通过使用基于系统更改号(scn)的开始和结束范围从Oracle收集更改事件。连接器自动管理这个范围,根据连接器是否能够近乎实时地流式处理更改,或者必须处理由于数据库中大量或批量事务而积压的更改,来增加或减少该范围。开云体育电动老虎机

在某些情况下,Oracle数据库会以异常高的数量增加SCN,而不是以恒定的速率增开云体育电动老虎机加SCN值。由于特定集成与数据库交互的方式,或者热备份等事件的结果,可能会出现SCN值的这种跳跃。开云体育电动老虎机

Debe开云体育官方注册网址zium Oracle连接器依赖以下配置属性来检测SCN间隙并调整挖掘范围。

log.mining.scn.gap.detection.gap.size.min

指定最小间隙大小。

log.mining.scn.gap.detection.time.interval.max.ms

指定最大时间间隔。

连接器首先比较当前SCN和当前挖掘范围内最高SCN之间变化数量的差异。如果当前SCN值与最高SCN值之间的差值大于最小间隙尺寸,则连接器可能检测到SCN间隙。为了确认是否存在间隙,连接器接下来比较当前SCN的时间戳和前一个挖掘范围结束时的SCN。如果时间戳之间的差异小于最大时间间隔,则确认存在SCN间隙。

当出现SCN间隙时,Debezium连接器自动使用当前S开云体育官方注册网址CN作为当前挖掘会话范围的终点。这使得连接器可以快速赶上实时事件,而无需挖掘中间较小的范围,因为SCN值增加了一个意外的大数字,因此不会返回任何更改。当连接器执行上述步骤以响应SCN间隙时,它会忽略由控件指定的值log.mining.batch.size.max财产。在连接器完成挖掘会话并捕捉到实时事件之后,它将恢复执行最大日志挖掘批大小。

只有当连接器运行和处理接近实时的事件时出现较大的SCN增量时,SCN间隙检测才可用。

低变化频率偏移管理

Debe开云体育官方注册网址zium Oracle连接器跟踪连接器偏移量中的系统更改数,以便当连接器重新启动时,它可以从停止的地方开始。这些偏移量是每个发出的变化事件的一部分;但是,当数据库更改的频率较低(每隔几个小时或几天)时,如果系统开云体育电动老虎机更改号在事务日志中不再可用,则偏移量可能会失效,并阻止连接器成功重新启动。

对于使用非cdb模式连接Oracle的连接器,可以启用heartbeat.interval.ms强制连接器定期发出心跳事件,以使偏移量保持同步。

对于使用CDB模式连接到Oracle的连接器,维护同步更为复杂。你不仅要设定heartbeat.interval.ms,但也有必要设置heartbeat.action.query。指定这两个属性是必需的,因为在CDB模式下,连接器只专门跟踪PDB内部的更改。需要一种补充机制来从可插拔数据库中触发更改事件。开云体育电动老虎机心跳操作查询每隔一段时间就会导致连接器插入新的表行,或者更新可插拔数据库中的现有行。开云体育电动老虎机开云体育官方注册网址Debezium检测表更改并为它们发出更改事件,确保偏移量保持同步,即使在处理更改不频繁的可插拔数据库中也是如此。开云体育电动老虎机

为连接器使用heartbeat.action.query对象所拥有的表连接器用户帐户时,必须授予连接器用户权限才能运行必要的插入更新对这些表的查询。

数据变更事件

Oracle连接器发出的每个数据更改事件都有一个键和一个值。键和值的结构取决于更改事件产生的表。有关Debezium如何构造主题名称的信息,请参见开云体育官方注册网址主题名称

Debe开云体育官方注册网址zium Oracle连接器确保所有Kafka连接模式名有效的Avro模式名称。这意味着逻辑服务器名必须以字母字符或下划线([a-z, a-z, _])开头,逻辑服务器名中的其余字符以及模式和表名中的所有字符必须是字母数字字符或下划线([a-z, a-z, 0-9,\_])。连接器将自动用下划线字符替换无效字符。

当多个逻辑服务器名、模式名或表名之间唯一的区别字符不是有效字符,并且这些字符被下划线替换时,可能会导致意外的命名冲突。

开云体育官方注册网址Debezium和Kafka Connect是围绕这一点设计的连续的事件消息流。但是,这些事件的结构可能会随着时间的推移而改变,这对于主题使用者来说可能很难处理。为了便于处理可变事件结构,Kafka Connect中的每个事件都是自包含的。每个消息键和值由两部分组成模式有效载荷。模式描述有效负载的结构,而有效负载包含实际数据。

执行的更改SYS系统连接器不会捕获用户帐户。

更改事件键

对于每个已更改的表,更改事件键的结构使得在创建事件时,表的主键(或唯一键约束)中的每个列都存在一个字段。

例如,a客户类中定义的表库存开云体育电动老虎机数据库模式,可能有以下更改事件键:

创建表customers (id NUMBER(9)),默认为NULL(以1001开头),first_name VARCHAR2(255)不为空,last_name VARCHAR2(255)不为空,email VARCHAR2(255)不为空;

的值< topic.prefix >.transaction属性设置为server1中发生的每个更改事件的JSON表示形式客户数据库中的表具有以下键结构开云体育电动老虎机:

{"schema": {"type": "struct", "fields": [{"type": "int32", "optional": false, "field": "ID"}], "optional": false, "name": "server1.INVENTORY.CUSTOMERS "。关键字"},"有效载荷":{"ID": 1004}}

模式key的部分包含一个Kafka Connect模式,该模式描述了key部分的内容。在上面的示例中,有效载荷值不是可选的,该结构由名为server1.开云体育官方注册网址DEBEZIUM.CUSTOMERS.Key,并且有一个名为id类型的int32。键的值有效载荷字段表明它确实是一个结构(在JSON中只是一个对象),具有单个id字段,其值为1004

因此,可以将此键解释为描述控件中的行inventory.customers表(来自连接器的输出)server1),其id主键列的值1004

更改事件值

方法的结构的镜像更改事件中的消息键在消息中,和同时包含a模式a节有效载荷部分。

变更事件值的有效负载

一个信封变更事件值的有效负载部分中的结构包含以下字段:

人事处

包含描述操作类型的字符串值的必填字段。的人事处字段中,Oracle连接器更改事件值包含以下值之一:c(创建或插入),u(更新),d(删除),或r(读,表示快照)。

之前

一个可选字段,如果存在,则描述行状态之前事件发生。结构由server1.INVENTORY.CUSTOMERS.ValueKafka Connect模式,其中server1类中的所有行使用的连接器inventory.customers表格

一个可选字段,如果存在,则包含一行的状态发生了变化。用相同的方法描述结构server1.INVENTORY.CUSTOMERS.ValueKafka Connect模式,用于之前字段。

一个必填字段,包含描述事件源元数据的结构。在Oracle连接器的情况下,该结构包括以下字段:

  • Debe开云体育官方注册网址zium版本。

  • 连接器名称。

  • 事件是否为正在进行的快照的一部分。

  • 事务id(不包括快照)。

  • 变化的SCN。

  • 指示源数据库中记录更改时间的时间戳(对于快照,时间戳指示快照发生的时间)。开云体育电动老虎机

  • 进行更改的用户名

    commit_scn字段是可选的,它描述了更改事件参与其中的事务提交的SCN。该字段仅在使用LogMiner连接适配器时出现。

    user_name字段仅在使用LogMiner连接适配器时填充。

ts_ms

一个可选字段,如果存在,则包含连接器处理事件的时间(基于运行Kafka Connect任务的JVM中的系统时钟)。

更改事件值的架构

模式事件消息值的一部分包含一个模式,该模式描述有效负载的信封结构和其中的嵌套字段。

创建事件

下面的示例显示了a的值创建事件值客户中描述的表更改事件键例子:

{"模式":{“类型”:“结构”、“字段”:[{“类型”:“结构”、“字段”:[{“类型”:“int32”、“可选”:假的,“场”:“ID”},{“类型”:“弦”、“可选”:假的,“场”:“FIRST_NAME”},{“类型”:“弦”、“可选”:假的,“场”:“LAST_NAME”},{“类型”:“弦”、“可选”:假的,“场”:“电子邮件”}],“可选”:真的,“名字”:“server1.DEBEZIUM.CUSTOMERS。开云体育官方注册网址Value", "field": "before"}, {"type": "struct", "fields": [{"type": "int32", "optional": false, "field": "ID"}, {"type": "string", "optional": false, "field": "FIRST_NAME"}, {"type": "string", "optional": false, "field": "LAST_NAME"}, {"type": "string", "optional": false, "field": "EMAIL"}], "type": "string", "optional": false, "field": "开云体育官方注册网址EMAIL"}], "name": true, "name": "server1. debeziem . customers "。价值", "field": "after" }, { "type": "struct", "fields": [ { "type": "string", "optional": true, "field": "version" }, { "type": "string", "optional": false, "field": "name" }, { "type": "int64", "optional": true, "field": "ts_ms" }, { "type": "string", "optional": true, "field": "txId" }, { "type": "string", "optional": true, "field": "scn" }, { "type": "string", "optional": true, "field": "commit_scn" }, { "type": "string", "optional": true, "field": "rs_id" }, { "type": "int32", "optional": true, "field": "ssn" }, { "type": "int32", "optional": true, "field": "redo_thread" }, { "type": "string", "optional": true, "field": "user_name" }, { "type": "boolean", "optional": true, "field": "snapshot" } ], "optional": false, "name": "io.debezium.connector.oracle.Source", "field": "source" }, { "type": "string", "optional": false, "field": "op" }, { "type": "int64", "optional": true, "field": "ts_ms" } ], "optional": false, "name": "server1.DEBEZIUM.CUSTOMERS.Envelope" }, "payload": { "before": null, "after": { "ID": 1004, "FIRST_NAME": "Anne", "LAST_NAME": "Kretchmar", "EMAIL": "annek@noanswer.org" }, "source": { "version": "2.1.2.Final", "name": "server1", "ts_ms": 1520085154000, "txId": "6.28.807", "scn": "2122185", "commit_scn": "2122185", "rs_id": "001234.00012345.0124", "ssn": 1, "redo_thread": 1, "user_name": "user", "snapshot": false }, "op": "c", "ts_ms": 1532592105975 } }

在前面的例子中,注意事件是如何定义以下模式的:

  • 信封server1.开云体育官方注册网址DEBEZIUM.CUSTOMERS.Envelope)。

  • 结构(io.开云体育官方注册网址debezium.connector.oracle.Source(这是特定于Oracle连接器并在所有事件中重用的)。

  • 的特定于表的模式之前字段。

的模式名称之前字段属于表单< logicalName >< schemaName ><表>value,因此完全独立于所有其他表的模式。因此,当您使用Avro转换器,每个逻辑源中的表的Avro模式都有自己的演变和历史。

有效载荷这个事件的一部分价值,提供有关事件的信息。它描述了创建了一行(op = c),并表明字段值包含插入到控件中的值IDFIRST_NAMELAST_NAME,电子邮件行中的列。

默认情况下,事件的JSON表示比它们所描述的行要大得多。较大的大小是由于JSON表示包括消息的模式和有效负载部分。你可以使用Avro转换器以减少连接器写入Kafka主题的消息大小。

更新事件

下面的示例显示了更新连接器从与前面相同的表中捕获的更改事件创建事件。

{"schema":{…},“有效载荷”:{“前”:{" ID ": 1004年,“FIRST_NAME”:“安妮”,“LAST_NAME”:“Kretchmar”、“电子邮件”:“annek@noanswer.org”},“后”:{" ID ": 1004年,“FIRST_NAME”:“安妮”,“LAST_NAME”:“Kretchmar”、“电子邮件”:“anne@example.com”},“源”:{“版本”:“2.1.2。最后”、“名称”:“server1”、“ts_ms”:1520085811000,“txId”:“6.9.809”、“视交叉上核”:“2125544”、“commit_scn”:“2125544”、“rs_id”:“001234.00012345.0124”、“ssn”:1、“redo_thread”:1、“user_name”:“用户”、“快照”:假},“人事处”:“u”、“ts_ms”:1532592713485}}

有效载荷与a的有效载荷具有相同的结构创建(insert)事件,但以下值不同:

  • 的值人事处字段是u,表示该行因更新而更改。

  • 之前字段显示该行的先前状态,其中包含在属性之前存在的值更新开云体育电动老虎机数据库提交。

  • 字段显示行的更新状态,并使用电子邮件值现在设置为anne@example.com

  • 的结构字段包含与以前相同的字段,但值不同,因为连接器从重做日志中的不同位置捕获事件。

  • ts_ms字段显示指示Debezium何时处理事件的时间戳。开云体育官方注册网址

有效载荷节揭示了其他一些有用的信息。例如,通过比较之前结构中,我们可以确定行作为提交的结果是如何更改的。的结构提供了关于Oracle的更改记录的信息,提供了可追溯性。它还让我们了解到该事件发生的时间与本主题和其他主题中其他事件的关系。它是发生在另一个事件之前,之后,还是作为同一提交的一部分?

当更新了一行的主键/唯一键的列时,该行键的值也会发生变化。结果,Debezium释放开云体育官方注册网址三个更新后的事件:

  • 一个删除事件。

  • 一个墓碑上的事件用那把旧钥匙。

  • 一个插入事件,该事件为行提供新键。

删除事件

下面的示例显示了a删除事件用于前面所示的表创建更新事件的例子。的模式部分删除事件与模式这些事件的部分。

{"schema":{…},“有效载荷”:{“前”:{" ID ": 1004年,“FIRST_NAME”:“安妮”,“LAST_NAME”:“Kretchmar”、“电子邮件”:“anne@example.com”},“后”:空,“源”:{“版本”:“2.1.2。Final", "name": "server1", "ts_ms": 1520085153000, "txId": "6.28.807", "scn": "2122184", "commit_scn": "2122184", "rs_id": "001234.00012345.0124", "ssn": 1, "redo_thread": 1, "user_name": "user", "snapshot": false}, "op": "d", "ts_ms": 1532592105960}}

有效载荷的有效负载相比,该事件的一部分显示出几个不同之处创建更新事件:

  • 的值人事处字段是d,表示该行已删除。

  • 之前字段显示随着数据库提交而被删除的行以前的状态。开云体育电动老虎机

  • 的值字段是,表示该行不再存在。

  • 的结构字段中存在的许多键创建更新事件,但值在ts_ms视交叉上核,txId领域是不同的。

  • ts_ms显示一个时间戳,指示Debezium何时处理此事件。开云体育官方注册网址

删除事件向消费者提供处理删除该行所需的信息。

Oracle连接器的事件被设计为使用Kafka日志压缩,只要至少保留每个密钥的最新消息,就可以删除一些较旧的消息。这允许Kafka回收存储空间,同时确保主题包含完整的数据集,并可用于重新加载基于键的状态。

删除一行时删除在前面的例子中显示的事件值仍然可以使用日志压缩,因为Kafka能够删除所有使用相同键的早期消息。消息值必须设置为指示卡夫卡移除所有消息它们共用同一个密钥。默认情况下,Debezium的Oracle连接器总是跟随开云体育官方注册网址删除特别活动墓碑上具有相同键but的事件价值。您可以通过设置连接器属性来更改默认行为tombstones.on.delete

截断事件

一个截断更改事件表示表已被截断。消息键是在这种情况下,消息值看起来像这样:

{"schema":{…},“有效载荷”:{“前”:空,“后”:空,“源”:{(1)“版本”:“2.1.2。Final", "connector": "oracle", "name": "oracle_server", "ts_ms": 1638974535000, "snapshot": "false", "db": "ORCLPDB1", "sequence": null, "schema": "开云体育官方注册网址DEBEZIUM", "table": "TEST_TABLE", "txId": "02000a0037030000", "scn": "13234397", "commit_scn": "13271102", "lcr_position": null, "rs_id": "001234.00012345.0124", "ssn": 1, "redo_thread": 1, "user_name": "user"}, "op": "t",(2)“ts_ms”:1638974558961,(3)"transaction": null}}
表6所示。的描述截断事件值字段
字段名 描述

1

描述事件源元数据的必选字段。在一个截断事件值,则字段结构与for相同创建更新,删除事件,提供以下元数据:

  • 开云体育官方注册网址Debezium版本

  • 连接器类型和名称

  • 开云体育电动老虎机包含新行的数据库和表

  • 模式名

  • 如果事件是快照的一部分(总是截断事件)

  • 执行操作的事务ID

  • 操作的SCN

  • 在数据库中进行更改的时间戳开云体育电动老虎机

  • 执行更改的用户名

2

人事处

返回string描述操作类型。的人事处字段值为t,表示该表被截断。

3.

ts_ms

可选字段,显示连接器处理事件的时间。该时间基于运行Kafka Connect任务的JVM中的系统时钟。

对象,ts_ms指示在数据库中进行更改的时间。开云体育电动老虎机通过比较的值payload.source.ts_ms值为payload.ts_ms,可以确定源数据库更新和Debezium之间的延迟。开云体育官方注册网址开云体育电动老虎机

因为截断事件表示对整个表所做的更改,并且没有消息键,在具有多个分区的主题中,不能保证消费者收到截断事件和变更事件(创建更新等)按顺序放到一张桌子上。例如,当使用者从不同分区读取事件时,它可能会收到一个更新事件后用于表截断事件用于同一表。只有当主题使用单个分区时,才能保证排序。

如果你不想捕获截断事件时,使用skipped.operations选项将它们过滤掉。

数据类型映射

当Debezium开云体育官方注册网址 Oracle连接器检测到表行值的更改时,它会发出表示该更改的更改事件。每个更改事件记录的结构与原始表相同,事件记录包含每个列值的字段。表列的数据类型决定了连接器如何在更改事件字段中表示列的值,如下部分中的表所示。

对于表中的每一列,Debezium将源数据类型映射到开云体育官方注册网址文字类型在某些情况下,a语义类型,在相应的事件字段中。

文字类型

使用以下Kafka Connect模式类型之一描述值的字面表示方式:INT8INT16INT32INT64FLOAT32FLOAT64布尔字符串字节数组地图,结构体

语义类型

描述Kafka Connect模式如何捕获意义通过使用该字段的Kafka Connect模式的名称来获取该字段。

如果默认数据类型转换不能满足您的需要,则可以创建自定义转换器对于连接器。

对于某些Oracle大型对象(CLOB、NCLOB和BLOB)和数字数据类型,您可以通过更改默认配置属性设置来操作连接器执行类型映射的方式。有关Debezium属性如何控制这些数据类型的映射的详细信息,开云体育官方注册网址请参见二进制和字符LOB类型数值类型

计划在后续版本中支持更多的数据类型。请提交JIRA问题对于任何可能缺失的特定类型。

字符类型

下表描述了连接器如何映射基本字符类型。

表7所示。Oracle基本字符类型的映射
Oracle数据类型 文字类型(模式类型) 语义类型(模式名)和Notes

CHAR ((M))

字符串

N/A

NCHAR ((M))

字符串

N/A

NVARCHAR2 ((M))

字符串

N/A

VARCHAR ((M))

字符串

N/A

VARCHAR2 ((M))

字符串

N/A

二进制和字符LOB类型

支持CLOB,NCLOB当前处于酝酿状态,也就是说,根据我们收到的反馈,精确的语义、配置选项等可能会在未来的修订中发生变化。如果您在使用这些数据类型时遇到任何问题,请告诉我们。

下表描述了连接器如何映射二进制和字符大对象(LOB)数据类型。

表8所示。Oracle二进制和字符LOB类型的映射
Oracle数据类型 文字类型(模式类型) 语义类型(模式名)和Notes

BFILE

N/A

不支持此数据类型

字节

的原始字节(默认值)、base64编码的字符串、base64-url安全编码的字符串或十六进制编码的字符串binary.handling.mode连接器配置属性设置。

CLOB

字符串

N/A

N/A

不支持此数据类型。

长期生

N/A

不支持此数据类型。

NCLOB

字符串

N/A

N/A

不支持此数据类型。

Oracle只提供列值CLOBNCLOB,数据类型,如果在SQL语句中显式设置或更改。因此,更改事件从不包含未更改的值CLOBNCLOB,或列。相反,它们包含由connector属性定义的占位符,unavailable.value.placeholder

如果a的值CLOBNCLOB,或列更新后,新值将放在元素的对应更新更改事件。的之前元素包含不可用的值占位符。

数值类型

下表描述了Debezium Oracle连接器如何映射数字类型。开云体育官方注册网址

您可以修改连接器映射Oracle的方式小数数量数字,真正的的值来更改数据类型decimal.handling.mode配置属性。属性设置为默认值时精确的,连接器将这些Oracle数据类型映射到Kafka Connectorg.apache.kafka.connect.data.Decimal逻辑类型,如表中所示。属性的值设置为字符串,连接器对某些Oracle数据类型使用备用映射。有关更多信息,请参见语义类型和注释列。

表9所示。Oracle数字数据类型的映射
Oracle数据类型 文字类型(模式类型) 语义类型(模式名)和Notes

BINARY_FLOAT

FLOAT32

N/A

BINARY_DOUBLE

FLOAT64

N/A

小数((P, S))

字节/INT8/INT16/INT32/INT64

org.apache.kafka.connect.data.Decimal如果使用字节

等价处理为数量(注意,S默认为0小数)。

decimal.handling.mode属性设置为,连接器表示小数值为Java具有模式类型的值FLOAT64

decimal.handling.mode属性设置为字符串,连接器将DECIMAL值表示为具有模式类型的格式化字符串表示形式字符串

双精度

结构体

io.开云体育官方注册网址debezium.data.VariableScaleDecimal

包含一个有两个字段的结构:规模类型的INT32其中包含转移值的规模和价值类型的字节以未缩放的形式包含原始值。

浮动((P))

结构体

io.开云体育官方注册网址debezium.data.VariableScaleDecimal

包含一个有两个字段的结构:规模类型的INT32其中包含转移值的规模和价值类型的字节以未缩放的形式包含原始值。

整数INT

字节

org.apache.kafka.connect.data.Decimal

整数在Oracle中映射为NUMBER(38,0),因此可以保存比任何一个INT类型可以存储

数量((P [*]))

结构体

io.开云体育官方注册网址debezium.data.VariableScaleDecimal

包含一个有两个字段的结构:规模类型的INT32其中包含转移值的规模和价值类型的字节以未缩放的形式包含原始值。

decimal.handling.mode属性设置为,连接器表示数量值为Java具有模式类型的值FLOAT64

decimal.handling.mode属性设置为字符串,连接器表示数量值作为其带模式类型的格式化字符串表示形式字符串

数(p, s <= 0)

INT8/INT16/INT32/INT64

数量比例为0的列表示整数。在Oracle中,负数表示舍入,例如,-2表示舍入到百位。

根据精度和规模,选择以下匹配Kafka Connect整数类型之一:

  • P - s < 3,INT8

  • P - s < 5,INT16

  • P - s < 10,INT32

  • P - s < 19,INT64

  • P - s >= 19,字节org.apache.kafka.connect.data.Decimal

decimal.handling.mode属性设置为,连接器表示数量值为Java具有模式类型的值FLOAT64

decimal.handling.mode属性设置为字符串,连接器表示数量值作为其带模式类型的格式化字符串表示形式字符串

数字(p, s >0 0)

字节

org.apache.kafka.connect.data.Decimal

数字[(P, S)]

字节/INT8/INT16/INT32/INT64

org.apache.kafka.connect.data.Decimal如果使用字节

等价处理为数量(注意,S默认为0数字)。

decimal.handling.mode属性设置为,连接器表示数字值为Java具有模式类型的值FLOAT64

decimal.handling.mode属性设置为字符串,连接器表示数字值作为其带模式类型的格式化字符串表示形式字符串

短整型

字节

org.apache.kafka.connect.data.Decimal

短整型在Oracle中映射为NUMBER(38,0),因此可以保存比任何一个INT类型可以存储

真正的

结构体

io.开云体育官方注册网址debezium.data.VariableScaleDecimal

包含一个有两个字段的结构:规模类型的INT32其中包含转移值的规模和价值类型的字节以未缩放的形式包含原始值。

decimal.handling.mode属性设置为,连接器表示真正的值为Java具有模式类型的值FLOAT64

decimal.handling.mode属性设置为字符串,连接器表示真正的值作为其带模式类型的格式化字符串表示形式字符串

如上所述,Oracle允许负尺度数量类型。当数字表示为Avro格式时,这可能会导致在转换到Avro格式时出现问题小数小数类型包括刻度信息,但是Avro规范只允许刻度的正值。根据所使用的模式注册表,它可能导致Avro序列化失败。为避免此问题,您可以使用NumberToZeroScaleConverter,它将具有负刻度的足够大的数(P - S >= 19)转换为小数用零刻度打字。可配置如下:

converters=zero_scale .type=io.debezium.c开云体育官方注册网址onnector.oracle.converters.NumberToZeroScaleConverter zero_scale.decimal.mode=precise

缺省情况下,号码转换为小数类型(zero_scale.decimal.mode =精确),但为了完整起见,保留了两种支持的类型(字符串)也是支持的。

布尔类型

Oracle不提供本地支持布尔数据类型。但是,通常的做法是使用具有特定语义的其他数据类型来模拟逻辑的概念布尔数据类型。

要使您能够将源列转换为布尔数据类型,Debezium提供了开云体育官方注册网址NumberOneToBooleanConverter自定义转换器你可以在以下方式中使用:

  • 映射所有数量(1)列到a布尔类型。

  • 通过使用逗号分隔的正则表达式列表枚举列的子集。
    要使用这种类型的转换,必须设置转换器配置属性选择器参数,示例如下:

    converters=boolean boolean.type=io.开云体育官方注册网址debezium.connector.oracle.converters.NumberOneToBooleanConverter boolean.selector=.*MYTABLE.FLAG,.*. is_archived

时间类型

除了神谕时间间隔带时区的时间戳,时间戳与当地时区类的值决定了连接器转换时态类型的方式time.precision.mode配置属性。

time.precision.mode属性设置为自适应(默认值),然后连接器根据列的数据类型定义确定时态类型的文字和语义类型,以便事件完全表示数据库中的值:开云体育电动老虎机

Oracle数据类型 文字类型(模式类型) 语义类型(模式名)和Notes

日期

INT64

io.开云体育官方注册网址debezium.time.Timestamp

表示自UNIX纪元以来的毫秒数,不包括时区信息。

间隔日[(m)]到秒

FLOAT64

io.开云体育官方注册网址debezium.time.MicroDuration

的时间间隔的微秒数365.25 / 12.0每月平均天数公式。

io.开云体育官方注册网址debezium.time.Interval(当interval.handling.mode设为字符串

遵循模式的间隔值的字符串表示形式P <年> Y <月> M > <天DT <时间> H <分钟> M <秒>例如,P1Y2M3DT4H5M6.78S

间隔年[(m)]到月

FLOAT64

io.开云体育官方注册网址debezium.time.MicroDuration

的时间间隔的微秒数365.25 / 12.0每月平均天数公式。

io.开云体育官方注册网址debezium.time.Interval(当interval.handling.mode设为字符串

遵循模式的间隔值的字符串表示形式P <年> Y <月> M > <天DT <时间> H <分钟> M <秒>例如,P1Y2M3DT4H5M6.78S

时间戳(0 - 3)

INT64

io.开云体育官方注册网址debezium.time.Timestamp

表示自UNIX纪元以来的毫秒数,不包括时区信息。

时间戳,时间戳(4 - 6)

INT64

io.开云体育官方注册网址debezium.time.MicroTimestamp

表示自UNIX纪元以来的微秒数,不包括时区信息。

时间戳(7 - 9)

INT64

io.开云体育官方注册网址debezium.time.NanoTimestamp

表示自UNIX纪元以来的纳秒数,不包括时区信息。

带时区的时间戳

字符串

io.开云体育官方注册网址debezium.time.ZonedTimestamp

带时区信息的时间戳的字符串表示形式。

时间戳与当地时区

字符串

io.开云体育官方注册网址debezium.time.ZonedTimestamp

UTC时间戳的字符串表示形式。

time.precision.mode属性设置为连接,然后连接器使用预定义的Kafka Connect逻辑类型。当消费者只知道内置的Kafka Connect逻辑类型并且无法处理可变精度的时间值时,这是有用的。因为Oracle支持的精度级别超过了Kafka Connect中逻辑类型支持的级别,如果你设置time.precision.mode连接精度的丧失结果为分数秒精度数据库列的值大于3:开云体育电动老虎机

Oracle数据类型 文字类型(模式类型) 语义类型(模式名)和Notes

日期

INT32

org.apache.kafka.connect.data.Date

表示自UNIX纪元以来的天数。

间隔日[(m)]到秒

FLOAT64

io.开云体育官方注册网址debezium.time.MicroDuration

的时间间隔的微秒数365.25 / 12.0每月平均天数公式。

io.开云体育官方注册网址debezium.time.Interval(当interval.handling.mode设为字符串

遵循模式的间隔值的字符串表示形式P <年> Y <月> M > <天DT <时间> H <分钟> M <秒>例如,P1Y2M3DT4H5M6.78S

间隔年[(m)]到月

FLOAT64

io.开云体育官方注册网址debezium.time.MicroDuration

的时间间隔的微秒数365.25 / 12.0每月平均天数公式。

io.开云体育官方注册网址debezium.time.Interval(当interval.handling.mode设为字符串

遵循模式的间隔值的字符串表示形式P <年> Y <月> M > <天DT <时间> H <分钟> M <秒>例如,P1Y2M3DT4H5M6.78S

时间戳(0 - 3)

INT64

org.apache.kafka.connect.data.Timestamp

表示自UNIX纪元以来的毫秒数,不包括时区信息。

时间戳(4 - 6)

INT64

org.apache.kafka.connect.data.Timestamp

表示自UNIX纪元以来的毫秒数,不包括时区信息。

时间戳(7 - 9)

INT64

org.apache.kafka.connect.data.Timestamp

表示自UNIX纪元以来的毫秒数,不包括时区信息。

带时区的时间戳

字符串

io.开云体育官方注册网址debezium.time.ZonedTimestamp

带时区信息的时间戳的字符串表示形式。

时间戳与当地时区

字符串

io.开云体育官方注册网址debezium.time.ZonedTimestamp

UTC时间戳的字符串表示形式。

ROWID类型

下表描述了连接器如何映射ROWID(行地址)数据类型。

表10。Oracle ROWID数据类型的映射
Oracle数据类型 文字类型(模式类型) 语义类型(模式名)和Notes

ROWID

字符串

使用Oracle XStream时不支持此数据类型。

UROWID

N/A

不支持此数据类型

用户定义的类型

Oracle允许您定义自定义数据类型,以便在内置数据类型不能满足您的需求时提供灵活性。有几种用户定义的类型,如对象类型、REF数据类型、varray和嵌套表。此时,您不能将Debezium Oracle连接器与任何这些用户定开云体育官方注册网址义类型一起使用。

Oracle-supplied类型

Oracle提供了基于sql的接口,当内置或ansi支持的类型不足时,您可以使用这些接口来定义新的类型。Oracle提供了几种常用的数据类型来服务于广泛的用途,例如任何XML,或空间类型。此时,您不能对这些数据类型中的任何一种使用Debezium Ora开云体育官方注册网址cle连接器。

默认值

如果为数据库模式中的列指定了默认值,Oracle连接器将尝试将该值传播到相应Kafka记录字段的模式中。开云体育电动老虎机支持大多数常见的数据类型,包括:

  • 字符类型(字符NCHARVARCHARVARCHAR2NVARCHARNVARCHAR2

  • 数字类型(整数数字等)。

  • 时间类型(日期时间戳时间间隔等)。

如果临时类型使用函数调用,例如TO_TIMESTAMPTO_DATE为了表示默认值,连接器将通过执行一个额外的数据库调用来解析默认值,以计算该函数。开云体育电动老虎机例如,如果a日期列的默认值为TO_DATE (' 2021-01-02 ', ' YYYY-MM-DD '),列的默认值将是自该日期或日期的UNIX纪元以来的天数18629在这种情况下。

如果临时类型使用SYSDATE常量来表示默认值,连接器将根据列是否定义为非空。如果列为空,则不设置默认值;但是,如果列不可为空,则默认值将被解析为两者之一0(日期时间戳(n)数据类型)或1970 - 01 - 01 - t00:00:00z(带时区的时间戳时间戳与当地时区数据类型)。默认值类型将是数字,除非列是带时区的时间戳时间戳与当地时区在这种情况下,它作为字符串发出。

设置Oracle

要将Oracle设置为与Debezium Oracle连接器一起使用,需要执行以下步骤。开云体育官方注册网址这些步骤假定使用具有容器数据库和至少一个可插拔数据库的多租户配置。开云体育电动老虎机如果不打算使用多租户配置,可能需要调整以下步骤。

有关使用Vagrant在虚拟机中设置Oracle的信息,请参阅开云体育官方注册网址Debezium Vagrant Box用于Oracle数据库开云体育电动老虎机GitHub库。

兼容Oracle安装类型

Oracle数据库既开云体育电动老虎机可以作为独立实例安装,也可以使用Oracle Real Application Cluster (RAC)安装。Debe开云体育官方注册网址zium Oracle连接器兼容这两种类型的安装。

从捕获中排除的模式

当Debezium开云体育官方注册网址 Oracle连接器捕获表时,它会自动从以下模式中排除表:

  • appqossys

  • audsys

  • ctxsys

  • dvsys

  • dbsfwuser

  • dbsnmp

  • qsmadmin_internal

  • lbacsys

  • mdsys

  • ojvmsys

  • olapsys

  • orddata

  • ordsys

  • outln

  • sys

  • 系统

  • wmsys

  • xdb

要使连接器能够从表中捕获更改,表必须使用未在前面列表中命名的模式。

从捕获中排除的表

当Debezium开云体育官方注册网址 Oracle连接器捕获表时,它会自动排除符合以下规则的表:

  • 压缩顾问表匹配的模式CMP[3 | 4][0 - 9] +美元

  • 匹配模式的索引组织表SYS_IOT_OVER_ %

  • 匹配模式的空间表MDRT_ %MDRS_ %,或MDXT_ %

  • 嵌套表

要使连接器能够捕获具有与上述任何规则匹配的名称的表,必须重命名表。

准备数据库开云体育电动老虎机

Oracle LogMiner所需的配置
ORACLE_SID= oracldbdbz_oracle sqlplus /nolog CONNECT sys/top_secret AS SYSDBA alter system set db_recovery_file_dest_size = 10G;Alter system set db_recovery_file_dest = '/opt/oracle/oradata/recovery_area' scope=spfile;挂载alter database archivelog;开云体育电动老虎机打开数据库开云体育电动老虎机-应该现在“数据库日志模式:存开云体育电动老虎机档模式”存档日志列表退出;

Oracle AWS RDS不允许您执行上述命令,也不允许您以sysdba身份登录。AWS提供了这些可选命令来配置LogMiner。在执行这些命令之前,请确保您的Oracle AWS RDS实例已启用备份。

要确认Oracle已启用备份,请先执行以下命令。LOG_MODE应该是ARCHIVELOG。如果没有,则可能需要重新启动Oracle AWS RDS实例。

Oracle AWS RDS LogMiner所需的配置
从v $ database中选择log_mode开云体育电动老虎机Log_mode ------------ archivelog . log

将LOG_MODE设置为ARCHIVELOG后,执行命令完成LogMiner的配置。第一个命令将数据库设置为archivelogs,第二开云体育电动老虎机个命令添加补充日志记录。

Oracle AWS RDS LogMiner所需的配置
exec rdsadmin.rdsadmin_util。Set_configuration ('archivelog retention hours',24);exec rdsadmin.rdsadmin_util.alter_supplemental_logging('添加');

使Debezium能开云体育官方注册网址够捕获之前状态时,还必须为捕获的表或整个数据开云体育电动老虎机库启用补充日志记录。下面的示例说明如何为单个文件中的所有列配置补充日志记录inventory.customers表格

修改表目录。客户一个DD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

为所有表列启用补充日志会增加Oracle重做日志的容量。为防止日志容量增长过快,请有选择地使用上述配置。

必须在数据库级别启用最小补充日志记录,并且可以按如下方式配置。开云体育电动老虎机

修改数据库添开云体育电动老虎机加补充日志数据;

重做日志分级

根据数据库配置,重做日志的大小和数开云体育电动老虎机量可能不足以达到可接受的性能。在设置Debezium Oracle连接器之开云体育官方注册网址前,请确保重做日志的容量足以支持数据库。开云体育电动老虎机

数据库重做日志的容量必须足以存储其数据字典。开云体育电动老虎机通常,数据字典的大小随着数据库中表和列的数量而增加。开云体育电动老虎机如果重做日志缺乏足够的容量,则数据库和Debezium连接器都可能遇到性能问题。开云体育官方注册网址开云体育电动老虎机

请咨询数据库管理员,以评估数据库是否开云体育电动老虎机需要增加日志容量。

为连接器创建用户

要使Debezi开云体育官方注册网址um Oracle连接器捕获更改事件,它必须以具有特定权限的Oracle LogMiner用户身份运行。下面的示例展示了在多租户数据库模型中为连接器创建Oracle用户帐户的SQL。开云体育电动老虎机

连接器捕获由其自己的Oracle用户帐户所做的开云体育电动老虎机数据库更改。但是,它不捕获控件所做的更改SYS系统用户帐户。

创建连接器的LogMiner用户
sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/logminer_tbs. sqldbf' SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;退出;sqlplus sys/top_secret@//localhost:1521/ORCLPDB1 as sysdba CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/logminer_tbs. sqlplus /top_secret@//localhost:1521/ORCLPDB1 as sysdbadbf' SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;退出;sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE USER c##dbzuser IDENTIFIED BY dbz默认表空间logminer_tbs配额无限制为dbzuser创建SESSION(1)dbzuser CONTAINER=ALL;(2)授权V_$DATABASE上的SELE开云体育电动老虎机CT权限(3)##dbzuser CONTAINER=ALL;(4)给c##dbzuser CONTAINER=ALL授予SELECT ANY表的权限(5)为c##dbzuser CONTAINER=ALL赋值(6)授权EXECUTE_CATALOG_ROLE给c##dbzuser CONTAINER=ALL;(7)GRANT SELECT ANY TRANSACTION TO c##dbzuser CONTAINER=ALL;(8)为c##dbzuser CONTAINER=ALL授予LOGMINING权限(9)为dbzuser创建表(10)为所有表授予锁(11)给c##dbzuser CONTAINER=ALL授予CREATE SEQUENCE权限(12)授权DBMS_LOGMNR上的EXECUTE权限(13)授予DBMS_LOGMNR_D上的EXECUTE权限(14)授权V_$LOG上的SELECT权限(15)授予V_$LOG_HISTORY上的SELECT权限(16)授权V_$LOGMNR_LOGS上的SELECT权限(17)授予V_$LOGMNR_CONTENTS上的SELECT权限(18)授权V_$LOGMNR_PARAMETERS上的SELECT权限(19)授权V_$LOGFILE上的SELECT权限(20)授权V_$ARCHIVED_LOG上的SELECT权限(21)授权V_$ARCHIVE_DEST_STATUS上的SELECT权限(22)授予V_$TRANSACTION上的SELECT权限(23)退出;
表11所示。权限/授予的描述
角色名 描述

1

创建会话

使连接器连接到Oracle。

2

设置容器

使连接器能够在可插拔数据库之间切换。开云体育电动老虎机只有当Oracle安装启用了容器数据库支持(CDB)时才需要这样做。开云体育电动老虎机

3.

在v_ $ databas开云体育电动老虎机e上选择

使连接器能够读取V 开云体育电动老虎机$数据库表格

4

倒叙任意表

使连接器能够执行Flashback查询,连接器就是这样执行数据的初始快照的。

5

选择任意表

允许连接器读取任何表。

6

SELECT_CATALOG_ROLE

允许连接器读取数据字典,这是Oracle LogMiner会话所需要的。

7

EXECUTE_CATALOG_ROLE

允许连接器将数据字典写入Oracle重做日志,这是跟踪模式更改所必需的。

8

选择任何事务

使快照进程能够对任何事务执行闪回快照查询。当倒叙任意表这是理所当然的,这也是理所当然的。

9

LOGMINING

这个角色是在Oracle的新版本中添加的,用于授予对Oracle LogMiner及其包的完全访问权限。在没有此角色的旧版本的Oracle上,您可以忽略此授权。

10

创建表

使连接器能够在其默认表空间中创建其刷新表。刷新表允许连接器显式控制将LGWR内部缓冲区刷新到磁盘。

11

锁定任意表

允许连接器在模式快照期间锁定表。如果通过配置显式禁用快照锁,则可以安全地忽略此授权。

12

创建序列

允许连接器在其默认表空间中创建序列。

13

在dbms_logmnr上执行

控件中的方法DBMS_LOGMNR包中。这是与Oracle LogMiner交互所需的。在较新版本的Oracle中,这是通过LOGMINING角色,但在旧版本上,必须显式授予。

14

在dbms_logmnr_d上执行

控件中的方法DBMS_LOGMNR_D包中。这是与Oracle LogMiner交互所需的。在较新版本的Oracle中,这是通过LOGMINING角色,但在旧版本上,必须显式授予。

15至23岁

选择v_ $....

允许连接器读取这些表。连接器必须能够读取有关Oracle重做和归档日志的信息,以及当前事务状态,以准备Oracle LogMiner会话。没有这些授权,连接器将无法运行。

备用数据库开云体育电动老虎机

可以将Oracle数开云体育电动老虎机据库配置为物理或逻辑备用环境,以便在生产失败后进行恢复。此时,Debezium Oracle开云体育官方注册网址连接器不能使用物理或逻辑备用数据库作为更改事件源。开云体育电动老虎机有一个开放的Jira问题调查这种支持。

故障恢复数据库开云体育电动老虎机

在Oracle生产故障的情况下,通常存在逻辑或物理备用。当发生故障并将备用实例提升到生产时,在Debezium Oracle连接器连接到数据库之前,必须为读/写事务打开数据库。开云体育官方注册网址开云体育电动老虎机

在物理备用情况下,备用是生产的精确副本,这意味着SCN值是相同的。在使用物理备用服务器时,一旦数据库打开,重新配置Debezium Oracle连接器以使用备用服务器的主机名就足够了。开云体育官方注册网址开云体育电动老虎机

在逻辑备用的情况下,备用数据库不是生产数据库的精确副本,因此备用数据库中的SCN偏移量与生产数据库中的不同。开云体育电动老虎机如果使用逻辑备用,为了确保Debezium不会错过任何更改事件,在打开数据库之后,配置一个新的连接器开云体育官方注册网址并执行一个新的数据库快照。开云体育电动老虎机

部署

要部署Debezium 开云体育官方注册网址Oracle连接器,您需要安装Debezium Oracle连接器归档文件,配置连接器,并通过将其配置添加到Kafka Connect来启动连接器。

先决条件
过程
  1. 下载Debezium开云体育官方注册网址Oracle连接器插件归档

  2. 将文件解压缩到Kafka Connect环境中。

  3. 下载Oracle JDBC驱动程序并将下载的驱动程序文件解压缩到包含Debezium Oracle连接器JAR文件的目录中。开云体育官方注册网址

  4. 添加包含JAR文件的目录卡夫卡连接的plugin.path

  5. 重新启动Kafka Connect进程以获取新的JAR文件。

开云体育官方注册网址Debezium Oracle连接器配置

通常,通过提交指定连接器配置属性的JSON请求来注册开云体育官方注册网址Debezium Oracle连接器。下面的示例显示了一个JSON请求,用于注册具有逻辑名称的Debezium Oracle连接器的实例开云体育官方注册网址server1在端口1521:

您可以选择为数据库中的模式和表的子集生成事件。开云体育电动老虎机您还可以选择忽略、屏蔽或截断包含敏感数据、大于指定大小或不需要的列。

示例:Debezi开云体育官方注册网址um Oracle连接器配置
{"name": "inventory-connector";(1)"config": {"connector.class": "io.de开云体育官方注册网址bezium.connector.oracle. oraclecconnector ",(2)“开云体育电动老虎机数据库。hostname": "",(3)“开云体育电动老虎机数据库。端口":"1521",(4)“开云体育电动老虎机数据库。user" : "c##dbzuser",(5)“开云体育电动老虎机数据库。密码:"dbz",(6)“开云体育电动老虎机数据库。dbname" : "ORCLCDB",(7)”的话题。前缀":"server1",(8)”任务。Max ": "1",(9)"开云体育电动老虎机database.pdb.name": "ORCLPDB1",(10)"schema.history.internal.kafka.bootstrap.servers": "kafka:9092",(11):“schema.history.internal.kafka.topic schema-changes.inventory”(12)}}
1 当你在Kafka Connect服务中注册连接器时分配给它的名称。
2 此Oracle连接器类的名称。
3. Oracle实例的地址。
4 Oracle实例的端口号。
5 Oracle用户名,在为连接器创建用户
6 Oracle用户的密码,在为连接器创建用户
7 要从中捕获更改的数据库的名称。开云体育电动老虎机
8 主题前缀,标识并为连接器从中捕获更改的Oracle数据库服务器提供名称空间。开云体育电动老虎机
9 要为此连接器创建的最大任务数。
10 连接器从中捕获更改的Oracle可插拔数据库的名称。开云体育电动老虎机仅在容器数据库(CDB)安装中使用。开云体育电动老虎机
11 这个连接器用来将DDL语句写入和恢复到数据库模式历史主题的Kafka代理列表。开云体育电动老虎机
12 连接器在其中写入和恢复DDL语句开云体育电动老虎机的数据库模式历史主题的名称。本主题仅供内部使用,不应由消费者使用。

在前面的示例中,开云体育电动老虎机database.hostname开云体育电动老虎机database.port属性用于定义到数据库主机的连接。开云体育电动老虎机但是,在更复杂的Oracle部署中,或者在使用透明网络基板(Transparent Network Substrate, TNS)名称的部署中,您可以使用指定JDBC URL的替代方法。

下面的JSON示例显示了与上一个示例相同的配置,不同之处是它使用JDBC URL连接到数据库。开云体育电动老虎机

示例:Debezi开云体育官方注册网址um Oracle连接器配置使用JDBC URL连接到数据库开云体育电动老虎机
{"name": "inventory-connector", "config": {"connector.class": "io.deb开云体育官方注册网址ezium.connector.oracle. oraclecconnector ", "tasks. "Max ": "1", "topic "。前缀":"server1", "databa开云体育电动老虎机se "。用户":"c##dbzuser",“开云体育电动老虎机数据库。密码:“dbz”,“database”。开云体育电动老虎机url": "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=OFF)(FAILOVER=ON)(ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=1521)))(CONNECT_DATA=SERVICE_NAME=)(SERVER=DEDICATED)))", "database.dbname" : "ORCLCDB", "database.pdb.name" : "ORCLPDB1", "schema.history.internal.kafka.bootstrap.servers" : "kafka:9092", "schema.history.internal.kafka.topic": "schema-changes.inventory" } }

有关可以为Debezium Oracle连接器设置的配置属性的完整列表,请参见开云体育官方注册网址Oracle连接器属性

您可以将此配置与帖子命令到正在运行的Kafka Connect服务。该服务记录配置并启动connector任务,该任务执行以下操作:

  • 连接Oracle数据库。开云体育电动老虎机

  • 读取重做日志。

  • 记录更改事件到Kafka主题。

添加连接器配置

要开始运行Debezium Oracl开云体育官方注册网址e连接器,需要创建一个连接器配置,并将该配置添加到Kafka Connect集群。

先决条件
过程
  1. 创建一个配置用于Oracle连接器。

  2. 使用Kafka Connect REST API将连接器配置添加到Kafka Connect集群。

结果

连接器启动后,它执行一致性快照连接器所配置的Oracle数开云体育电动老虎机据库。然后连接器开始为行级操作生成数据更改事件,并将更改事件记录流式传输到Kafka主题。

可插拔与不可插拔数据库开云体育电动老虎机

Oracle数开云体育电动老虎机据库支持以下部署类型:

容器数据库(CDB)开云体育电动老虎机

可以开云体育电动老虎机包含多个可插拔数据库(pdb)的数据库。开云体育电动老虎机数据库客户机连接到每个PDB,就像它是一个标准的非cdb数据库一样。

非容器数据库(non-CDB开云体育电动老虎机)

一个标准的Oracle数据库,不支持开云体育电动老虎机创建可插拔的数据库。

示例:用于CDB部开云体育官方注册网址署的Debezium连接器配置
{"config": {"connector.class": "io.deb开云体育官方注册网址ezium.connector.oracle. oraclecconnector ", "tasks. "Max ": "1", "topic "。前缀":"server1", "databa开云体育电动老虎机se "。主机名":"", "数据库。开云体育电动老虎机端口:“1521”,“数据库”。开云体育电动老虎机用户":"c##dbzuser",“开云体育电动老虎机数据库。密码:“dbz”,“database”。开云体育电动老虎机dbname": "ORCLCDB","开云体育电动老虎机database.pdb.name": "ORCLPDB1","schema.history.internal.kafka.bootstrap.servers": "kafka:9092",:“schema.history.internal.kafka.topic schema-changes.inventory”}}

配置Debezium Oracle连接器以开云体育官方注册网址与Oracle CDB一起使用时,必须为该属性指定一个值开云体育电动老虎机database.pdb.name,它命名了您希望连接器从中捕获更改的PDB。对于非cdb安装,请执行指定开云体育电动老虎机database.pdb.name财产。

示例:用于非cdb开云体育官方注册网址部署的Debezium Oracle连接器配置
{"config": {"connector.class": "io.deb开云体育官方注册网址ezium.connector.oracle. oraclecconnector ", "tasks. "Max ": "1", "topic "。前缀":"server1", "databa开云体育电动老虎机se "。主机名":"", "数据库。开云体育电动老虎机端口:“1521”,“数据库”。开云体育电动老虎机用户":"c##dbzuser",“开云体育电动老虎机数据库。密码:“dbz”,“database”。开云体育电动老虎机dbname": "ORCLCDB","schema.history.internal.kafka.bootstrap.servers": "kafka:9092",:“schema.history.internal.kafka.topic schema-changes.inventory”}}

连接器属性

Debe开云体育官方注册网址zium Oracle连接器具有许多配置属性,您可以使用这些属性为应用程序实现正确的连接器行为。许多属性都有默认值。有关属性的信息组织如下:

必需的Debezi开云体育官方注册网址um Oracle连接器配置属性

以下配置属性是要求除非有默认值可用。

财产

默认的

描述

没有默认的

连接器的唯一名称。尝试用相同的名称再次注册将失败。(所有Kafka Connect连接器都需要此属性。)

没有默认的

连接器的Java类的名称。总是使用的值io.开云体育官方注册网址debezium.connector.oracle.OracleConnector用于Oracle连接器。

没有默认的

控件的符号名称的列表,以逗号分隔自定义转换器连接器可以使用的实例。
例如,布尔
要使连接器能够使用自定义转换器,需要此属性。

对于为连接器配置的每个转换器,还必须添加一个.type属性,该属性指定实现转换器接口的类的完全限定名称。的.type属性使用以下格式:

< converterSymbolicName >.type

例如,

布尔。类型:io.debezium.connector.oracle.converters.NumberOneToBooleanConverter

如果希望进一步控制已配置转换器的行为,可以添加一个或多个配置参数,以便将值传递给转换器。若要将任何其他配置参数与转换器关联,请在参数名称前加上转换器的符号名称。

例如,要定义一个选择器属性所指定的列的子集布尔转换器进程,添加以下属性:

布尔。选择器:。*MYTABLE.FLAG,.*.IS_ARCHIVED

1

要为此连接器创建的最大任务数。Oracle连接器始终使用单个任务,因此不使用此值,因此默认值始终是可接受的。

没有默认的

Oracle数据库服务器的IP地址或主机名。开云体育电动老虎机

没有默认的

Oracle数据库服务器的整型端口号。开云体育电动老虎机

没有默认的

连接器用于连接到Oracle数据库服务器的Oracle用户帐户名。开云体育电动老虎机

没有默认的

连接Oracle数据库服务器时使用的密码。开云体育电动老虎机

没有默认的

要连接的数据库的名称。开云体育电动老虎机使用CDB + PDB模型时,必须为CDB名称。

没有默认的

指定原始数据库JDBC URL。开云体育电动老虎机使用此属性可以在定义该数据库连接时提供灵活性。开云体育电动老虎机有效值包括原始TNS名称和RAC连接字符串。

没有默认的

要连接的Oracle可插拔数据库的名称。开云体育电动老虎机仅在容器数据库(CDB)安装中使用此属性。开云体育电动老虎机

没有默认的

Topic前缀,该前缀为连接器从中捕获更改的Oracle数据库服务器提供名称空间。开云体育电动老虎机您设置的值用作连接器发出的所有Kafka主题名称的前缀。指定在Debezium环境中所有连接器中唯一的主题前缀。开云体育官方注册网址支持以下字符:字母、数字、“-”、“。”和“_”。

不要更改此属性的值。如果更改了name值,则在重新启动后,连接器不再继续向原始主题发出事件,而是向名称基于新值的主题发出后续事件。连接器也无法恢复其数据库模式历史主题。开云体育电动老虎机

logminer

连接器在处理数据库更改时使用的适配器实现。开云体育电动老虎机可设置的值如下:logminer(默认)::连接器使用本地Oracle LogMiner API。xstream连接器使用Oracle XStreams API。

最初的

指定连接器用于捕获表的快照的模式。可设置的值如下:

总是

快照包含捕获表的结构和数据。指定此值可以在每个连接器开始处使用捕获表的数据的完整表示填充主题。

最初的

快照包含捕获表的结构和数据。指定此值将用捕获表中数据的完整表示填充主题。如果快照成功完成,则在下一次连接器启动时不会再次执行快照。

initial_only

快照包含捕获表的结构和数据。连接器执行初始快照,然后停止,不处理任何后续更改。

schema_only

快照只包含捕获表的结构。如果希望连接器仅捕获快照之后发生的更改的数据,请指定此值。

schema_only_recovery

这是已经捕获更改的连接器的恢复设置。当您重新启动连接器时,此设置允许恢复损坏或丢失的数据库模式历史主题。开云体育电动老虎机您可以定期将其设置为“清理”意外增长的数据库模式历史主题。开云体育电动老虎机开云体育电动老虎机数据库模式历史主题需要无限保留。请注意,只有在保证从连接器关闭之前的时间点到拍摄快照的时间点之间没有发生任何模式更改的情况下,才可以安全使用此模式。

快照完成后,连接器继续从数据库的重做日志中读取更改事件,除非以下情况开云体育电动老虎机snapshot.mode配置为initial_only

有关更多信息,请参见snapshot.mode选项

共享

控制连接器是否持有表锁以及持有多长时间。表锁防止在连接器执行快照时发生某些类型的更改表操作。可设置的值如下:

共享

启用对表的并发访问,但阻止任何会话获取排他表锁。连接器获取一个行共享捕获表模式时锁定级别。

没有一个

防止连接器在快照期间获取任何表锁。只有在创建快照期间不会发生模式更改时才使用此设置。

中指定的所有表table.include.list

一个可选的、逗号分隔的正则表达式列表,它匹配全限定名称(< schemaName ><表>)要包含在快照中的表。在使用LogMiner实现的环境中,只能使用POSIX正则表达式。指定的项必须在连接器的table.include.list财产。此属性仅在连接器的snapshot.mode属性设置为其他值从来没有
此属性不影响增量快照的行为。

要匹配表的名称,Debezium应用指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与表的整个名称字符串匹配;它不匹配可能出现在表名中的子字符串。

没有默认的

指定要包含在快照中的表行。如果希望快照仅包含表中行的子集,请使用该属性。此属性仅影响快照。它不适用于连接器从日志中读取的事件。

该属性包含表单中以逗号分隔的全限定表名列表< schemaName >。<表>。例如,

“snapshot.select.statement。覆盖”:“inventory.products customers.orders”

对于列表中的每个表,添加一个配置属性,该属性指定选择语句,以便连接器在获取快照时在表上运行。指定的选择语句确定要包含在快照中的表行的子集。使用下面的格式来指定它的名称选择声明属性:

snapshot.select.statement.overrides。< schemaName ><表>

例如,snapshot.select.statement.overrides.customers.orders

例子:

从一个customers.orders包含软删除列的表delete_flag,如果您希望快照只包含未被软删除的记录,请添加以下属性:

“snapshot.select.statement。覆盖”:“客户。订单", "snapshot.select.statement.overrides.customer.orders": "SELECT * FROM [customers].[orders] WHERE delete_flag = 0 ORDER BY id DESC"

在生成的快照中,连接器仅包含以下记录Delete_flag = 0

没有默认的

一个可选的、以逗号分隔的正则表达式列表,该列表与您要使用的模式名称匹配想要捕获更改。在使用LogMiner实现的环境中,只能使用POSIX正则表达式。中未包含的任何模式名称schema.include.list被排除在捕获其更改之外。默认情况下,所有非系统模式的更改都会被捕获。

要匹配模式的名称,Debezium应用指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与模式的整个名称字符串匹配;它不匹配可能出现在模式名称中的子字符串。
如果在配置中包含此属性,则不要同时设置schema.exclude.list财产。

布尔值,指定连接器是否应该解析和发布元数据对象上的表和列注释。启用该选项将对内存使用产生影响。逻辑模式对象的数量和大小在很大程度上影响Debezium连接器消耗的内存量,并且向每个连接器添加可能较大的字符串数据可能非常昂贵。开云体育官方注册网址

没有默认的

一个可选的、以逗号分隔的正则表达式列表,该列表与您要使用的模式名称匹配想要捕获更改。在使用LogMiner实现的环境中,只能使用POSIX正则表达式。
中未包含其名称的任何模式schema.exclude.list已捕获其更改,但系统模式除外。

要匹配模式的名称,Debezium应用指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与模式的整个名称字符串匹配;它不匹配可能出现在模式名称中的子字符串。
如果在配置中包含此属性,则不要设置“schema.include”。的财产清单。

没有默认的

一个可选的逗号分隔的正则表达式列表,用于匹配要捕获的表的完全限定表标识符。如果您使用LogMiner实现,则只能使用带有此属性的POSIX正则表达式。设置此属性后,连接器仅从指定的表捕获更改。每个表标识符使用以下格式:

< schema_name >。< table_name >

默认情况下,连接器监视每个捕获的数据库中的每个非系统表。开云体育电动老虎机

要匹配表的名称,Debezium应用指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与表的整个名称字符串匹配;它不匹配可能出现在表名中的子字符串。
如果在配置中包含此属性,则不要同时设置table.exclude.list财产。

没有默认的

一个可选的以逗号分隔的正则表达式列表,该列表与要从监视中排除的表的完全限定表标识符匹配。如果您使用LogMiner实现,则只能使用带有此属性的POSIX正则表达式。连接器从排除列表中未指定的任何表捕获更改事件。使用以下格式指定每个表的标识符:

< schemaName >。<表>

要匹配表的名称,Debezium应用指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与表的整个名称字符串匹配;它不匹配可能出现在表名中的子字符串。
如果在配置中包含此属性,则不要同时设置table.include.list财产。

没有默认的

一个可选的、以逗号分隔的正则表达式列表,它与希望包含在更改事件消息值中的列的完全限定名相匹配。在使用LogMiner实现的环境中,只能使用POSIX正则表达式。列的全限定名使用以下格式:

< Schema_name >, < table_name >。< column_name >

主键列始终包含在事件的键中,即使不使用此属性显式包含其值也是如此。

要匹配列的名称,Debezium应用指定为开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式是针对列的整个名称字符串进行匹配的,它不匹配列名中可能出现的子字符串。
如果在配置中包含此属性,则不要同时设置column.exclude.list财产。

没有默认的

一个可选的、以逗号分隔的正则表达式列表,该列表与要从更改事件消息值中排除的列的完全限定名称相匹配。在使用LogMiner实现的环境中,只能使用POSIX正则表达式。全限定列名使用以下格式:

< schema_name >, < table_name >。< column_name >

主键列始终包含在事件的键中,即使使用此属性显式地排除其值也是如此。

要匹配列的名称,Debezium应用指定为开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式是针对列的整个名称字符串进行匹配的,它不匹配列名中可能出现的子字符串。
如果在配置中包含此属性,则不要设置column.include.list财产。

N/A

一个可选的、以逗号分隔的正则表达式列表,用于匹配基于字符的列的完全限定名。列的完全限定名属于表单< schemaName ><表>< columnName >
要匹配列的名称,Debezium应用指定为开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式将与列的整个名称字符串匹配;表达式不匹配列名中可能出现的子字符串。
在生成的更改事件记录中,指定列的值将替换为假名。

的散列值组成的假名hashAlgorithm。基于所使用的散列函数,将维护引用完整性,同时用假名替换列值。支持的散列函数在MessageDigest节Java加密体系结构标准算法名称文档。

在下面的例子中,CzQMA0cB5K是一种随机选择的盐。

column.mask.hash.sha with.salt——256.。CzQMA0cB5K =库存。订单。customerName, inventory.shipment.customerName

如有必要,假名会自动缩短为该列的长度。连接器配置可以包含指定不同散列算法和盐的多个属性。

取决于hashAlgorithm使用,选中的数据集和实际的数据集,产生的数据集可能不会被完全屏蔽。

如果值在不同的地方或系统中被散列,应该使用散列策略版本2来确保保真度。

字节

指定二进制()列应在变更事件中表示,包括:字节将二进制数据表示为字节数组(默认),base64表示二进制数据为base64编码的字符串,base64-url-safe将二进制数据表示为base64-url安全编码的String,十六进制将二进制数据表示为十六进制编码(base16)字符串

没有一个

指定如何调整模式名称以与连接器使用的消息转换器兼容。可能的设置:

  • 没有一个不适用任何调整。

  • avro用下划线替换Avro类型名称中不能使用的字符。

精确的

指定连接器应如何处理的浮点值数量小数数字列。您可以设置以下选项之一:

精确的(默认)

精确地表示值java.math.BigDecimal在变化事件中以二进制形式表示的值。

通过使用值。使用值更容易,但可能会导致精度的损失。

字符串

将值编码为格式化字符串。使用字符串选项更容易使用,但会导致丢失有关实际类型的语义信息。有关更多信息,请参见数值类型

数字

指定连接器应如何处理的值时间间隔列:

数字表示使用近似微秒数的间隔。

字符串使用字符串模式表示精确地表示间隔P <年> Y <月> M > <天DT <时间> H <分钟> M <秒>。例如:P1Y2M3DT4H5M6.78S

失败

指定连接器在处理事件期间应如何对异常作出反应。您可以设置以下选项之一:

失败

传播异常(指示有问题事件的偏移量),导致连接器停止。

警告

导致跳过有问题的事件。然后记录有问题事件的偏移量。

跳过

导致跳过有问题的事件。

2048

一个正整数值,指定在此连接器的每次迭代期间要处理的每批事件的最大大小。

8192

指定阻塞队列可容纳的最大记录数的正整数值。当Debe开云体育官方注册网址zium从数据库读取事件流时,它将事件放在阻塞队列中,然后将开云体育电动老虎机它们写入Kafka。当连接器接收消息的速度比写入Kafka的速度快,或者Kafka不可用时,阻塞队列可以为从数据库中读取更改事件提供回压。开云体育电动老虎机当连接器定期记录偏移量时,将忽略队列中保存的事件。的值max.queue.size大于…的值max.batch.size

0(禁用)

一个长整数值,以字节为单位指定阻塞队列的最大容量。默认情况下,没有为阻塞队列指定卷限制。若要指定队列可以使用的字节数,请将此属性设置为正长值。
如果max.queue.size,则当队列的大小达到任一属性指定的限制时,将阻止对队列的写入。例如,如果您设置max.queue.size = 1000,max.queue.size.in.bytes = 5000,当队列记录数达到1000条或队列记录容量达到5000字节时,阻塞对队列的写入。

500(0.5秒)

指定连接器在每次迭代期间等待新更改事件出现的毫秒数的正整数值。

真正的

控制是否删除事件后跟一个墓碑事件。可能取值如下:

真正的

对于每个删除操作,连接器发出一个删除事件和随后的墓碑事件。

对于每个删除操作,连接器只发出一个删除事件。

在一个源记录被删除后,一个墓碑事件(默认行为)使Kafka能够完全删除所有共享被删除行密钥的事件日志压实启用。

没有默认的

一个表达式列表,指定连接器用来为更改事件记录形成自定义消息键的列,它将更改事件记录发布到指定表的Kafka主题。

默认情况下,Debezi开云体育官方注册网址um使用表的主键列作为它发出的记录的消息键。为了代替默认值,或者为缺少主键的表指定键,您可以基于一个或多个列配置自定义消息键。
若要为表建立自定义消息键,请列出表,然后列出要用作消息键的列。每个列表条目采用以下格式:

< fullyQualifiedTableName >< keyColumn >< keyColumn >

若要基于多个列名创建表键,请在列名之间插入逗号。
每个全限定表名都是一个正则表达式,格式如下:

< schemaName ><表>

该属性可以包含多个表的项。使用分号分隔列表中的表项。
下面的示例为表设置消息键inventory.customerspurchase.orders

inventory.customers: pk1 pk2; (. *) .purchaseorders: pk3 pk4

餐桌上的inventory.customer,列pk1pk2指定为消息键。为任何模式中的表,列pk3pk4服务器作为消息键。
用于创建自定义消息键的列数没有限制。但是,最好使用指定唯一键所需的最小数量。

没有默认的

一个可选的、以逗号分隔的正则表达式列表,用于匹配基于字符的列的完全限定名。如果您希望连接器屏蔽一组列的值,例如,如果它们包含敏感数据,请设置此属性。集长度将指定列中的数据替换为星号(*属性指定的字符长度在属性名中。集长度0(零)将指定列中的数据替换为空字符串。

列的全限定名遵循以下格式:< schemaName ><表>< columnName >。要匹配列的名称,Debezium应用指定为开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式将与列的整个名称字符串匹配;表达式不匹配列名中可能出现的子字符串。

您可以在单个配置中指定具有不同长度的多个属性。

没有默认的

一个可选的以逗号分隔的正则表达式列表,用于通过用星号替换字符来屏蔽更改事件消息中的列名(*)。
指定要在属性名称中替换的字符数,例如:column.mask.with.8.chars
将长度指定为正整数或零。然后将正则表达式添加到要应用掩码的每个基于字符的列名的列表中。
使用以下格式指定完全限定的列名:< schemaName ><表>< columnName >

连接器配置可以包含指定不同长度的多个属性。

没有默认的

一个可选的、逗号分隔的正则表达式列表,它与您希望连接器为其发出表示列元数据的额外参数的列的完全限定名相匹配。设置此属性后,连接器将以下字段添加到事件记录的模式中:

  • __开云体育官方注册网址debezium.source.column.type

  • __开云体育官方注册网址debezium.source.column.length

  • __开云体育官方注册网址debezium.source.column.scale

这些参数分别传播列的原始类型名称和长度(对于可变宽度类型)。
允许连接器发出这些额外的数据可以帮助在接收数据库中适当调整特定的数字列或基于字符的列的大小。开云体育电动老虎机

列的全限定名遵循以下格式之一:<表>< columnName >,或< schemaName ><表>< columnName >
要匹配列的名称,Debezium应用指定为开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式将与列的整个名称字符串匹配;表达式不匹配列名中可能出现的子字符串。

没有默认的

一个可选的、逗号分隔的正则表达式列表,它指定为数据库中的列定义的数据类型的完全限定名称。开云体育电动老虎机设置此属性后,对于具有匹配数据类型的列,连接器将发出事件记录,这些记录在其模式中包含以下额外字段:

  • __开云体育官方注册网址debezium.source.column.type

  • __开云体育官方注册网址debezium.source.column.length

  • __开云体育官方注册网址debezium.source.column.scale

这些参数分别传播列的原始类型名称和长度(对于可变宽度类型)。
允许连接器发出这些额外的数据可以帮助在接收数据库中适当调整特定的数字列或基于字符的列的大小。开云体育电动老虎机

列的全限定名遵循以下格式之一:<表>< typeName >,或< schemaName ><表>< typeName >
要匹配数据类型的名称,Debezium将应用指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与数据类型的整个名称字符串匹配;表达式不匹配可能出现在类型名称中的子字符串。

有关oracle特定数据类型名称的列表,请参见Oracle数据类型映射

0

以毫秒为单位指定连接器向心跳主题发送消息的频率。
使用此属性确定连接器是否继续从源数据库接收更改事件。开云体育电动老虎机
在捕获的表在较长时间内没有发生更改事件的情况下,设置该属性也很有用。
在这种情况下,尽管连接器继续读取重做日志,但它不会发出更改事件消息,因此Kafka主题中的偏移量保持不变。由于连接器不刷新它从数据库中读取的最新系统更改号(SCN),因此数据库保留重做日志文件的时间可能超过了所需的时间。开云体育电动老虎机如果连接器重新启动,延长的保留期可能导致连接器冗余地发送一些更改事件。
的默认值。0防止连接器发送任何心跳消息。

没有默认的

指定当连接器发送心跳消息时连接器在源数据库上执行的查询。开云体育电动老虎机

例如:

INSERT INTO test_heartbeat_table (text) VALUES ('test_heartbeat')

之后,连接器将运行查询心跳消息

设置此属性并创建心跳表以接收心跳消息,以解决以下情况开云体育官方注册网址Debezium无法同步与高流量数据库位于同一主机上的低流量数据库的偏移量开云体育电动老虎机。在连接器将记录插入到配置的表中之后,它能够接收来自低流量数据库的更改,并确认数据库中的SCN更改,以便与代理同步偏移量。开云体育电动老虎机

没有默认的

指定连接器在启动后获取快照之前等待的间隔(以毫秒为单位)。
当启动集群中的多个连接器时,使用此属性可防止快照中断,这可能导致连接器重新平衡。

2000

指定在创建快照时应一次从每个表中读取的最大行数。连接器以指定大小的多个批次读取表内容。

没有默认的

指定给定查询的每次数据库往返将获取的行数。开云体育电动老虎机默认为JDBC驱动程序的默认获取大小。

真正的当连接器配置显式指定key.convertervalue.converter参数使用Avro,否则默认为

指定字段名称是否规范化以符合Avro命名要求。有关更多信息,请参见Avro命名

将属性设置为真正的如果您希望Debeziu开云体育官方注册网址m生成具有事务边界的事件,并使用事务元数据丰富数据事件信封。

看到事务的元数据有关更多详情。

redo_log_catalog

指定挖掘策略,该策略控制Oracle LogMiner如何构建和使用给定的数据字典来将表和列id解析为名称。

redo_log_catalog::将数据字典写入在线重做日志,导致随着时间的推移产生更多的归档日志。这样还可以根据捕获的表跟踪DDL更改,因此如果模式频繁更改,这是理想的选择。

online_catalog::使用数据库的当前数据开云体育电动老虎机字典来解析对象id,不向在线重做日志中写入任何额外的信息。这使得LogMiner的挖掘速度大大提高,但代价是无法跟踪DDL的变化。如果捕获的表模式很少或从不更改,那么这是理想的选择。

内存

缓冲区类型控制连接器如何管理缓冲事务数据。

内存-使用JVM进程堆来缓冲所有事务数据。如果您不希望连接器处理大量长时间运行的事务或大型事务,请选择此选项。当此选项处于活动状态时,缓冲区状态不会在重新启动时持久化。重新启动后,根据当前偏移量的SCN值重新创建缓冲区。

infinispan_embedded-该选项使用嵌入式Infinispan缓存来缓冲事务数据并将其持久化到磁盘。

+infinispan_remote-该选项使用远程Infinispan集群来缓冲事务数据并将其持久化到磁盘。

0

事务缓冲区中事务能够拥有的最大事件数。事件计数超过此阈值的事务不会发出,并将被放弃。默认行为是没有事务事件阈值。

没有默认的

Infinispan事务缓存的XML配置。有关更多信息,请参见Infinispan事件缓冲

没有默认的

Infinispan事件缓存的XML配置。有关更多信息,请参见Infinispan事件缓冲

没有默认的

Infinispan处理事务缓存的XML配置。有关更多信息,请参见Infinispan事件缓冲

没有默认的

Infinispan模式的XML配置更改缓存。

指定在连接器以预期的优雅方式停止后是否删除缓冲状态。

此设置仅影响跨重启保持状态的缓冲区实现,例如infinispan
默认行为是在重启之间始终保留缓冲状态。

设置为真正的仅在测试或开发环境中。

0

在使用新会话之前,LogMiner会话可以激活的最大毫秒数。

对于小容量系统,当长时间使用同一个LogMiner会话时,可能会占用过多的PGA内存。默认行为是仅在检测到日志开关时使用新的LogMiner会话。通过将此值设置为大于0,这指定LogMiner会话在停止并开始释放和重新分配PGA内存之前可以处于活动状态的最大毫秒数。

1000

此连接器尝试从重做/归档日志中读取的最小SCN间隔大小。活动批大小也会根据需要增加/减少这个数量,以便在需要时调优连接器吞吐量。

100000

该连接器在读取重做/归档日志时使用的最大SCN间隔大小。

20000

连接器用于从重做/归档日志中读取数据的起始SCN间隔大小。

0

连接器从重做/归档日志中读取数据后和再次开始读取数据之前的最小休眠时间。单位为毫秒。

3000

连接器在从重做/归档日志中读取数据之后和再次开始读取数据之前休眠的最大时间。单位为毫秒。

1000

连接器从重做/归档日志中读取数据后和再次开始读取数据之前的休眠起始时间。单位为毫秒。

200

当从logminer读取数据时,连接器用于调优最佳睡眠时间的最大上下时间。单位为毫秒。

0

过去从SYSDATE到挖掘归档日志的小时数。当默认设置(0)时,连接器将挖掘所有存档日志。

控制连接器是否仅从归档日志或在线重做日志和归档日志的组合中挖掘更改(默认值)。

重做日志使用一个循环缓冲区,可以在任何时候存档。在频繁归档在线重做日志的环境中,这可能导致LogMiner会话失败。与重做日志相反,归档日志保证是可靠的。将此选项设置为真正的强制连接器仅挖掘存档日志。在将连接器设置为仅挖掘归档日志之后,提交操作与发出关联更改事件的连接器之间的延迟可能会增加。延迟的程度取决于数据库配置为归档在线重做日志的频率。开云体育电动老虎机

10000

连接器在轮询之间休眠的毫秒数,以确定启动系统更改号是否在存档日志中。如果log.mining.archive.log.only.mode未启用,则不使用此设置。

0

正整数值,指定在重做日志切换之间保留长时间运行事务的小时数。当设置为0,事务将被保留,直到检测到提交或回滚。

LogMiner适配器维护所有正在运行的事务的内存缓冲区。因为在检测到提交或回滚之前,作为事务一部分的所有DML操作都会被缓冲,所以应该避免长时间运行的事务,以免溢出缓冲区。任何超过此配置值的事务都将被完全丢弃,并且连接器不会为作为该事务一部分的操作发出任何消息。虽然此选项允许根据具体情况配置该行为,但我们计划在未来的版本中通过添加可伸缩的事务缓冲区来增强该行为,(请参阅dbz - 3123)。

没有默认的

指定使用LogMiner挖掘归档日志时配置的Oracle归档目的地。

默认行为自动选择第一个有效的本地配置的目的地。但是,您可以通过提供目的地名称来使用特定的目的地,例如,LOG_ARCHIVE_DEST_5

没有默认的

要从LogMin开云体育电动老虎机er查询中排除的数据库用户列表。如果您希望捕获过程始终排除特定用户所做的更改,则设置此属性可能会很有用。

1000000

指定一个值,连接器将该值与当前和以前的SCN值之间的差进行比较,以确定是否存在SCN间隙。如果SCN值相差大于规定值,且时间差小于log.mining.scn.gap.detection.time.interval.max.ms然后检测到SCN间隙,连接器使用比配置的最大批处理更大的挖掘窗口。

20000

指定一个值(以毫秒为单位),连接器将该值与当前和以前的SCN时间戳之间的差进行比较,以确定是否存在SCN间隙。如果时间戳之间的差异小于指定值,并且SCN增量大于log.mining.scn.gap.detection.gap.size.min,则检测到SCN间隙,并且连接器使用比配置的最大批处理更大的挖掘窗口。

控制是否在更改事件中发出大对象(CLOB或BLOB)列值。

默认情况下,更改事件具有大型对象列,但这些列不包含值。在处理和管理大型对象列类型和有效负载方面有一定的开销。若要捕获大型对象值并在更改事件中序列化它们,请将此选项设置为真正的

__开云体育官方注册网址debezium_unavailable_value

指定连接器提供的常量,以指示原始值未改变,并且不是由数据库提供的。开云体育电动老虎机

没有默认的

Oracle RAC (Real Application Clusters)节点主机名或地址的逗号分隔列表。为了与Oracle RAC部署兼容,需要这个字段。

使用以下方法之一指定RAC节点列表:

  • 开云体育电动老虎机database.port中每个地址使用指定的端口值rac.nodes列表。例如:

    开云体育电动老虎机database.port=1521 rac.nodes=192.168.1.100,192.168.1.101
  • 开云体育电动老虎机database.port,并覆盖列表中一个或多个条目的默认端口。该列表可以包含使用默认值的条目开云体育电动老虎机database.port值,以及定义自己唯一端口值的项。例如:

    开云体育电动老虎机database.port=1521 rac.nodes=192.168.1.100,192.168.1.101:1522

方法为数据库提供原始JDBC URL开云体育电动老虎机开云体育电动老虎机database.url属性,而不是为开云体育电动老虎机database.port,每个RAC节点项必须显式指定一个端口值。

t

希望连接器在流式传输期间跳过的操作类型的逗号分隔列表。您可以配置连接器跳过以下类型的操作:

  • c(插入/创建)

  • u(更新)

  • d(删除)

  • t(截断)

默认情况下,只跳过截断操作。

无默认值

用于发送的数据集合的全限定名称信号到连接器。当您对Oracle可插拔数据库(PDB)使用此属性时,请将其值设置为根数据库的名称。开云体育电动老虎机
使用以下格式指定集合名称:
<开云体育电动老虎机数据库名>< schemaName ><表>

1024

连接器在增量快照块期间取出并读入内存的最大行数。增加块大小可以提供更高的效率,因为快照运行的快照查询更少,而大小更大。但是,更大的块大小也需要更多的内存来缓冲快照数据。将块大小调整为在您的环境中提供最佳性能的值。

io.开云体育官方注册网址debezium.schema.SchemaTopicNamingStrategy

TopicNamingStrategy类的名称应用于确定数据更改、模式更改、事务、心跳事件等的主题名称,默认为SchemaTopicNamingStrategy

指定主题名称的分隔符,默认为

10000

用于在有界并发散列映射中保存主题名称的大小。此缓存将有助于确定与给定数据集合对应的主题名称。

__开云体育官方注册网址debezium-heartbeat

控制连接器向其发送心跳消息的主题的名称。主题名称具有以下模式:

topic.heartbeat.prefixtopic.prefix

例如,如果主题前缀是实现,默认的主题名称为__开云体育官方注册网址debezium-heartbeat.fulfillment

事务

控制连接器向其发送事务元数据消息的主题的名称。主题名称具有以下模式:

topic.prefixtopic.transaction

例如,如果主题前缀是实现,默认的主题名称为fulfillment.transaction

开云体育官方注册网址Debezium Oracle连开云体育电动老虎机接器数据库模式历史配置属性

开云体育官方注册网址Debezium提供了一套schema.history.internal。*控制连接器如何与模式历史主题交互的属性。

下表描述了schema.history.internal属性,用于配置Debezium连接器。开云体育官方注册网址

表12。连接器数据库模式历史开云体育电动老虎机配置属性
财产 默认的 描述

没有默认的

连接器存储数据库模式历史的Kafka主题的全称。开云体育电动老虎机

没有默认的

连接器用于建立到Kafka集群的初始连接的主机/端口对列表。该连接用于检索连接器先前存储的数据库模式历史,并用于写入从源数据库读取的每个DDL语句开云体育电动老虎机。每一对都应该指向Kafka Connect进程使用的同一个Kafka集群。

One hundred.

一个整数值,指定连接器在启动/恢复期间轮询持久数据时应等待的最大毫秒数。默认值是100ms。

3000

一个整数值,指定连接器在使用Kafka管理客户端获取集群信息时应该等待的最大毫秒数。

30000

一个整数值,指定了当使用kafka管理客户端创建kafka历史主题时连接器应该等待的最大毫秒数。

One hundred.

在连接器恢复失败并出现错误之前,连接器应该尝试读取持久历史数据的最大次数。未接收到数据后等待的最长时间为recovery.attempts×recovery.poll.interval.ms

一个布尔值,指定连接器是应该忽略格式错误或未知的数据库语句,还是应该停止处理,以便人工修复问题。开云体育电动老虎机安全默认值为。跳绳应该谨慎使用,因为它可能导致数据丢失或在处理binlog时损坏。

一个布尔值,指定连接器是否应该记录所有DDL语句

真正的只记录那些与Debezium捕获的表相关的DDL语句。开云体育官方注册网址设置为真正的要小心,因为如果更改捕获了哪些表的更改,则可能需要丢失数据。

安全默认值为

用于配置生产者和消费者客户开云体育电动老虎机端的直通数据库模式历史属性


开云体育官方注册网址Debezium依赖于Kafka生产者将模式更改写入数据库模式历史主题。开云体育电动老虎机类似地,当连接器启动时,它依赖于Kafka消费者从数据库模式历史主题中读取数据。开云体育电动老虎机通过给一组以开头的传递配置属性赋值,可以定义Kafka生产者和消费者客户端的配置schema.history.internal.producer。*schema.history.internal.consumer。*前缀。传递生产者和消费者数据库模式历史属性控制一系列行为,例如这些客户端如何保护与K开云体育电动老虎机afka代理的连接,如下例所示:

SSL schema.history.internal.producer.ssl.keystore.location schema.history.internal.producer.security.protocol = = / var /私人/ SSL / kafka.server.keystore.jks schema.history.internal.producer.ssl.keystore.password = test1234 schema.history.internal.producer.ssl.truststore.location = / var /私人/ SSL / kafka.server.truststore.jks schema.history.internal.producer.ssl.truststore.password = test1234 schema.history.internal.producer.ssl.key.password = test1234 schema.history.internal.consumer.security.protocol = SSLschema.history.internal.consumer.ssl.truststore.location=/var/private/ssl/ kafka.server.keystore.jks schema.history.internal.consumer.ssl.truststore.location=/var/private/ssl/kafka.server.truststore.jks schema.history.internal.consumer.ssl.truststore.password=test1234 schema.history.internal.consumer.ssl.key.password=test1234

开云体育官方注册网址Debezium在将属性传递给Kafka客户端之前会从属性名中去掉前缀。

查看Kafka文档了解更多细节Kafka生产者配置属性Kafka消费者配置属性

开云体育官方注册网址Debezium Oracle连接器直通数据库驱动程序配置属性开云体育电动老虎机

Debe开云体育官方注册网址zium连接器提供了数据库驱动程序的直通配置。开云体育电动老虎机直通数据库属性以前缀开头开云体育电动老虎机司机。*。例如,连接器传递诸如driver.foobar = false到JDBC URL。

的情况也是如此数据库模式历史客户端的传递属性开云体育电动老虎机, 开云体育官方注册网址Debezium在将属性传递给数据库驱动程序之前会从属性中剥离前缀。开云体育电动老虎机

监控

Debe开云体育官方注册网址zium Oracle连接器除了内置支持Apache Zookeeper、Apache Kafka和Kafka Connect的JMX指标外,还提供了三种指标类型。

请参阅监控文档有关如何通过JMX公开这些指标的详细信息。

快照指标

MBean开云体育官方注册网址debezium.oracle: type = connector-metrics上下文=快照,server =< oracle.server.name >

除非快照操作处于活动状态,或者自上次连接器启动以来发生了快照,否则不会公开快照指标。

下表列出了可用的快照指标。

属性 类型 描述

字符串

连接器读取的最后一个快照事件。

自连接器读取并处理最近事件以来的毫秒数。

自上次启动或重置以来,此连接器所看到的事件总数。

已被连接器上配置的包含/排除列表过滤规则过滤的事件数。

string []

连接器捕获的表列表。

int

用于在快照和主Kafka连接循环之间传递事件的队列长度。

int

用于在快照和主Kafka Connect循环之间传递事件的队列的空闲容量。

int

快照中包含的表的总数。

int

快照尚未复制的表的数量。

布尔

快照是否启动。

布尔

快照是否暂停。

布尔

快照是否中止。

布尔

快照是否完成。

快照到目前为止所花费的总秒数,即使快照尚未完成。还包括快照暂停的时间。

快照暂停的总秒数。如果快照暂停多次,则暂停时间加起来。

Map < String,长>

包含快照中为每个表扫描的行数的Map。在处理过程中,表被增量地添加到Map中。每扫描1万行并完成一个表时更新一次。

队列的最大缓冲区,以字节为单位。这个度量是可用的,如果max.queue.size.in.bytes设置为一个正的长值。

队列中记录的当前容量(以字节为单位)。

当执行增量快照时,连接器还提供以下额外的快照指标:

属性 类型 描述

字符串

当前快照块的标识符。

字符串

定义当前块的主键集的下界。

字符串

定义当前块的主键集的上界。

字符串

当前快照表的主键集的下界。

字符串

当前快照表的主键集的上限。

流指标

MBean开云体育官方注册网址debezium.oracle: type = connector-metrics、上下文=流媒体服务器=< oracle.server.name >

下表列出了可用的流度量。

属性 类型 描述

字符串

连接器读取的最后一个流事件。

自连接器读取并处理最近事件以来的毫秒数。

自上次启动或指标重置以来,此连接器所看到的事件总数。

自上次启动或指标重置以来,此连接器所看到的创建事件总数。

自上次启动或指标重置以来,此连接器所看到的更新事件总数。

自上次启动或指标重置以来,此连接器所看到的删除事件总数。

已被连接器上配置的包含/排除列表过滤规则过滤的事件数。

string []

连接器捕获的表列表。

int

用于在streamer和主Kafka Connect循环之间传递事件的队列长度。

int

用于在streamer和主Kafka Connect循环之间传递事件的队列的空闲容量。

布尔

表示连接器当前是否连接到数据库服务器的标志。开云体育电动老虎机

上次更改事件的时间戳与处理该事件的连接器之间的毫秒数。这些值将包含运行数据库服务器和连接器的机器上的时钟之间的任何差异。开云体育电动老虎机

已提交的已处理事务的数量。

Map < String, String >

最后接收到的事件的坐标。

字符串

最后处理的事务的事务标识符。

队列的最大缓冲区,以字节为单位。这个度量是可用的,如果max.queue.size.in.bytes设置为一个正的长值。

队列中记录的当前容量(以字节为单位)。

Debe开云体育官方注册网址zium Oracle连接器还提供了以下额外的流度量:

表13。附加流度量的描述
属性 类型 描述

字符串

最近处理过的系统变更号。

字符串

事务缓冲区中最早的系统更改号。

字符串

事务缓冲区中最后提交的系统更改号。

字符串

当前写入连接器偏移量的系统更改号。

string []

当前挖掘的日志文件的数组。

为任何LogMiner会话指定的最小日志数。

为任何LogMiner会话指定的最大日志数。

string []

每个已挖掘日志文件的当前状态的数组,格式为文件名|状态

int

数据库在最近一天执行日志切换的次数。开云体育电动老虎机

在最后一次LogMiner会话查询中观察到的DML操作的数量。

在处理单个LogMiner会话查询时观察到的DML操作的最大数量。

观察到的DML操作的总数。

执行的LogMiner会话查询的总数(也称为批次)。

最后一次LogMiner会话查询获取的持续时间(以毫秒为单位)。

LogMiner会话查询获取的最大持续时间(以毫秒为单位)。

处理最后一批LogMiner查询的持续时间以毫秒为单位。

解析DML事件SQL语句所花费的时间(以毫秒为单位)。

以毫秒为单位启动最后一个LogMiner会话的持续时间。

启动LogMiner会话的最长时间(以毫秒为单位)。

连接器启动LogMiner会话的总持续时间(以毫秒为单位)。

单个LogMiner会话处理结果的最小持续时间(以毫秒为单位)。

单个LogMiner会话处理结果的最大持续时间(以毫秒为单位)。

LogMiner会话处理结果的总持续时间(以毫秒为单位)。

JDBC驱动程序从日志挖掘视图获取要处理的下一行所花费的总持续时间(以毫秒为单位)。

跨所有会话从日志挖掘视图处理的行总数。

int

日志挖掘查询每次数据库往返获取的条目数。开云体育电动老虎机

连接器在从日志挖掘视图中获取另一批结果之前休眠的毫秒数。

从日志挖掘视图处理的最大行数/秒。

从日志挖掘中处理的平均行数/秒。

从日志挖掘视图中处理的最后一批的平均行数/秒。

检测到的连接问题的数量。

int

在丢弃之前,连接器的内存缓冲区保留事务而不提交或回滚的小时数。看到log.mining.transaction.retention了解更多详情。

事务缓冲区中当前活动事务的数量。

事务缓冲区中提交的事务数。

由于超出事务大小而被丢弃的事务数log.mining.buffer.transaction.events.threshold

事务缓冲区中回滚的事务数。

事务缓冲区中每秒提交的事务的平均数量。

事务缓冲区中注册的DML操作的数量。

事务日志中发生更改与将更改添加到事务缓冲区之间的时间差(以毫秒为单位)。

事务日志中发生更改与将更改添加到事务缓冲区之间的最大时间差(以毫秒为单位)。

在事务日志中发生更改和将更改添加到事务缓冲区之间的最小时间差(以毫秒为单位)。

string []

最近放弃的事务标识符的数组,由于它们的年龄而从事务缓冲区中删除。看到log.mining.transaction.retention.hours获取详细信息。

string []

已在事务缓冲区中挖掘并回滚的最新事务标识符的数组。

上一次事务缓冲区提交操作的持续时间(以毫秒为单位)。

最长事务缓冲区提交操作的持续时间(以毫秒为单位)。

int

检测到的错误数。

int

检测到的警告数量。

int

系统变更号被检查进度并保持不变的次数。高值可能表示长时间运行的事务正在进行中,并且正在阻止连接器将最近处理的系统更改号刷新到连接器的偏移量。当条件最优时,该值应接近或等于0

int

已检测到但DDL解析器无法解析的DDL记录的数目。这应该一直是0;但是,当允许跳过不可解析的DDL时,该指标可用于确定是否已将任何警告写入连接器日志。

当前挖掘会话的用户全局区域(UGA)内存消耗(以字节为单位)。

所有挖掘会话中最大挖掘会话的用户全局区域(UGA)内存消耗(以字节为单位)。

当前挖掘会话的进程全局区域(PGA)内存消耗(以字节为单位)。

所有挖掘会话的最大挖掘会话进程全局区域(PGA)内存消耗(以字节为单位)。

模式历史度量

MBean开云体育官方注册网址debezium.oracle: type = connector-metrics、上下文= schema-history服务器=< oracle.server.name >

下表列出了可用的模式历史指标。

属性 类型 描述

字符串

之一停止恢复(从存储中恢复历史),运行描述数据库模式历史记录的状态。开云体育电动老虎机

恢复开始的时间(以epoch秒为单位)。

在恢复阶段读取的更改数量。

在恢复和运行时期间应用的模式更改的总数。

自上次更改从历史存储中恢复以来所经过的毫秒数。

自应用上次更改以来经过的毫秒数。

字符串

从历史存储区恢复的最后一次更改的字符串表示形式。

字符串

最后应用的更改的字符串表示形式。

代理模式演化

Oracle连接器通过解析重做日志中的DDL自动跟踪和应用表模式更改。如果DDL解析器遇到不兼容的语句(如果需要),连接器将提供另一种方法来应用模式更改。

默认情况下,连接器在遇到无法解析的DDL语句时停止。你可以用Debezium开云体育官方注册网址信号从这样的DDL语句触发数据库模式的更新。开云体育电动老虎机

模式更新操作的类型为模式变化。此操作更新信号参数中枚举的所有表的模式。该消息不包含对架构的更新。相反,它包含完整的新模式结构。

表14。操作参数
名字 描述

开云体育电动老虎机

Oracle数据库的名称。开云体育电动老虎机

模式

应用更改的模式的名称。

变化

包含所请求的架构更新的数组。

changes.type

通常是模式更改的类型改变

changes.id

表的全限定名

changes.table

表的全限定名

changes.table.defaultCharsetName

表使用的字符集名称如果与数据库默认值不同开云体育电动老虎机

changes.table.primaryKeyColumnNames

具有组成主键的列名称的数组

changes.table.columns

包含列元数据的数组

columns.name…

列的名称

columns.jdbcType…

定义的列的JDBC类型JDBC API

columns.typeName…

列类型的名称

columns.typeExpression…

完整的列类型定义

columns.charsetName…

列字符集与默认值不同

columns.length…

列的长度/大小约束

columns.scale…

数值列的刻度

columns.position…

以开头的列在表中的位置1

columns.optional…

布尔真正的如果列值不是强制性的

columns.autoIncremented…

布尔真正的如果列值是从序列自动计算的

columns.generated…

布尔真正的如果列值是自动计算的

模式变化信号插入后,必须重新启动连接器,并更改配置,其中包括指定schema.history.internal.skip.unparseable.ddl选择真正的。在连接器的提交SCN超越DDL更改之后,为了防止意外跳过不可解析的DDL语句,应将连接器配置返回到以前的状态。

表15。日志记录示例
价值

id

924 e3ff8 - 2245 - 43 - ca - ba77 af9af02fa07——2

类型

模式变化

数据

{“数开云体育电动老虎机据库”:“ORCLPDB1”、“模式”:“DEBEZIUM”、“开云体育官方注册网址变化”:[{“类型”:“改变”,“id”:“\”ORCLPDB1 \”,\“DEBEZIUM \”。\"CUSTOMER\"", "table":{"defaultCharsetName":null, "primaryKeyColumnNames":["ID", "NAME"], "columns":[{"NAME":"ID", "jdbcType":2, "typeName":"NUMBER", "typeExpression":"NUMBER", "charsetName":null, "length":9, "scale":0, "position":1, "optional": "NAME", " autoincrement ":false, "generated":false}, {"NAME":"NAME", "jdbcType":12, "typeName":"VARCHAR2", "typeExpression":"VARCHAR2", "charsetName":null, "length":1000, "position":2, "optional":true, " autoincrement ":false, "generated":false},{"name":"SCORE", "jdbcType":2, "typeName":"NUMBER", "typeExpression":"NUMBER", "charsetName":null, "length":6, "scale":2, "position":3, "optional": "REGISTERED", "jdbcType":93, "typeName":"TIMESTAMP(6)", "typeExpression":"TIMESTAMP(6)", "charsetName":null, "length":6, "position":4, "optional":true, " autoincrement ":false, "generated":false}]}}}]}

xstream支持

默认情况开云体育官方注册网址下,Debezium Oracle连接器使用本地Oracle LogMiner获取更改。连接器可以切换为使用Oracle XStream。要配置连接器以使用Oracle XStream,必须应用与LogMiner不同的特定数据库和连接器配置。开云体育电动老虎机

先决条件
  • 要使用XStream API,您必须拥有GoldenGate产品的许可证。不需要安装GoldenGate。

准备数据库开云体育电动老虎机

Oracle XStream所需的配置
ORACLE_SID=ORCLCDB dbz_oracle sqlplus /nolog CONNECT sys/top_secret AS SYSDBA alter system set db_recovery_file_dest_size = 5GAlter system set db_recovery_file_dest = '/opt/oracle/oradata/recovery_area' scope=spfile;设置enable_goldengate_replication=true;挂载alter database archivelog;开云体育电动老虎机打开数据库开云体育电动老虎机——应该显示“数据库日志模式:归开云体育电动老虎机档模式”归档日志列表退出;

此外,必须为捕获的表或数据库启用补充日志记录,以便数据更改能够捕获数据开云体育电动老虎机之前已更改数据库行的状态。开云体育电动老虎机下面演示了如何在一个特定的表上配置它,这是最小化Oracle重做日志中捕获的信息量的理想选择。

修改表目录。客户一个DD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

为连接器创建XStream用户

Debe开云体育官方注册网址zium Oracle连接器要求为用户帐户设置特定的权限,以便连接器可以捕获更改事件。下面简要介绍使用多租户数据库模型的这些用户配置。开云体育电动老虎机

创建XStream Administrator用户
sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE TABLESPACE xstream_adm_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/xstream_adm_tbs. sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdbadbf' SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;退出;sqlplus sys/top_secret@//localhost:1521/ORCLPDB1 as sysdba CREATE TABLESPACE xstream_adm_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/xstream_adm_tbs. sqldbf' SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;退出;sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE USER c##dbzadmin IDENTIFIED BY dbz默认表空间xstream_adm_tbs配额无限制授权创建会话,设置容器为c## #dbzadmin CONTAINER=ALL;DBMS_XSTREAM_AUTH开始。GRANT_ADMIN_PRIVILEGE(grantee => 'c##dbzadmin', privilege_type => 'CAPTURE', grant_select_privileges => TRUE, container => 'ALL');结束;/退出;
创建连接器的XStream用户
sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE TABLESPACE xstream_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/xstream_tbs. sqlplus /top_secret@//localhost:1521/ORCLCDB as sysdbadbf' SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;退出;sqlplus sys/top_secret@//localhost:1521/ORCLPDB1 as sysdba CREATE TABLESPACE xstream_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/xstream_tbs. sqldbf' SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;退出;sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE USER c##dbzuser IDENTIFIED BY dbz默认表空间xstream_tbs配额无限制为dbzuser创建SESSIONdbzuser CONTAINER=ALL;授权V_$DATABASE上的SELE开云体育电动老虎机CT权限##dbzuser CONTAINER=ALL;为c##dbzuser CONTAINER=ALL赋值 GRANT EXECUTE_CATALOG_ROLE TO c##dbzuser CONTAINER=ALL; exit;

创建一个XStream出站服务器

创建一个XStream出站服务器(如果有适当的权限,连接器可以自动完成此操作,请参阅dbz - 721):

创建一个XStream出站服务器
sqlplus c## #dbzadmin/dbz@//localhost:1521/ORCLCDB DECLARE tables DBMS_UTILITY.UNCL_ARRAY;模式DBMS_UTILITY.UNCL_ARRAY;BEGIN表(1):= NULL;schema (1):= 'd开云体育官方注册网址ebezium';DBMS_XSTREAM_ADM。创建_OUTBOUND( server_name => 'dbzxout', table_names => tables, schema_names => schemas); END; / exit;

设置XStream出站服务器以从可插拔数据库捕获更改时开云体育电动老虎机source_container_name参数,指定可插入的数据库名称。开云体育电动老虎机

配置XStream用户帐号,连接XStream出站服务器
sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba BEGIN DBMS_XSTREAM_ADM. sqlALTER_OUTBOUND(server_name => 'dbzxout', connect_user => 'c##dbzuser');结束;/退出;

单个XStream出站服务器不能由多个Debezium Oracle连接器共享。开云体育官方注册网址每个连接器都需要配置一个唯一的XStream出站连接器。

配置XStream适配器

默认情况下,Debezi开云体育官方注册网址um使用Oracle LogMiner从Oracle中摄取更改事件。您可以调整连接器配置,使连接器能够使用Oracle XStreams适配器。

下面的配置示例添加属性开云体育电动老虎机database.connection.adapter开云体育电动老虎机database.out.server.name使连接器能够使用XStream API实现。

{"name": "inventory-connector", "config": {"connector.class": "io.deb开云体育官方注册网址ezium.connector.oracle. oraclecconnector ", "tasks. "Max ": "1", "topic "。前缀":"server1", "databa开云体育电动老虎机se "。主机名":"", "数据库。开云体育电动老虎机端口:“1521”,“数据库”。开云体育电动老虎机用户":"c##dbzuser",“开云体育电动老虎机数据库。密码:“dbz”,“database”。开云体育电动老虎机dbname": "ORCLCDB","开云体育电动老虎机database.pdb.name": "ORCLPDB1","schema.history.internal.kafka.bootstrap.servers": "kafka:9092",:“schema.history.internal.kafka.topic schema-changes.inventory”,“开云体育电动老虎机数据库。连接ion.adapter": "xstream", "database.out.server.name" : "dbzxout" } }

获取Oracle JDBC驱动和XStream API文件

Debe开云体育官方注册网址zium Oracle连接器需要Oracle JDBC驱动程序(ojdbc8.jar)连接到Oracle数据库。开云体育电动老虎机如果连接器使用XStream访问数据库,还必须有XStream API (开云体育电动老虎机xstreams.jar)。许可要求禁止Debezium在Oracle连接器存档中包含这些文开云体育官方注册网址件。但是,所需的文件可以作为Oracle Instant Client的一部分免费下载。下面的步骤描述了如何下载Oracle Instant Client并解压缩所需的文件。

过程
  1. 从浏览器中下载Oracle即时客户端包对于您的操作系统。

  2. 提取存档文件,然后打开instantclient_ <版本>目录中。

    例如:

    instantclient_21_1/├──adrci├──BASIC_LITE_LICENSE├──BASIC_LITE_README├──genezi├──libclntshcore。ramm├──libclntshcore.so.12.1 -> libclntshcore.so.21.1…├──uidrvci├──xstreams.jar
  3. 复制ojdbc8.jarxstreams.jar文件,并将它们添加到< kafka_home >/ libs目录,例如,卡夫卡/ libs

  4. 创建一个环境变量,LD_LIBRARY_PATH,并设置为即时客户端目录的路径,例如:

    LD_LIBRARY_PATH = /道路/ / instant_client /

XStream连接器属性

以下配置属性是要求当使用XStreams时,除非有一个默认值可用。

财产

默认的

描述

没有默认的

数据库中配置的XStream出站服务器名称。开云体育电动老虎机

XStream和DBMS_LOB

Oracle提供了一个名为开云体育电动老虎机DBMS_LOB它由一组操作BLOB、CLOB和NCLOB列的程序组成。这些程序中的大多数总体上操作LOB列,然而,有一个程序,WRITEAPPEND,能够操作LOB数据缓冲区的一个子集。

当使用XStream时,WRITEAPPEND为程序的每次调用发出一个逻辑更改记录(LCR)事件。这些LCR事件不会像使用Oracle LogMiner适配器时那样组合成单个更改事件,因此主题的消费者应该准备好接收具有部分列值的事件。这种分化的行为被捕获在dbz - 4741并将在以后的版本中解决。

常见问题

支持Oracle 11g吗?

不支持Oracle 11g;然而,我们的目标是尽最大努力向后兼容Oracle 11g。我们依靠社区来沟通与Oracle 11g的兼容性问题,并在确定回归时提供错误修复。

Oracle LogMiner不被弃用吗?

不,Oracle只在Oracle 12c中弃用了Oracle LogMiner的连续挖掘选项,并从Oracle 19c开始删除了该选项。Debe开云体育官方注册网址zium Oracle连接器不依赖于此选项来运行,因此可以安全地与较新版本的Oracle一起使用,而不会受到任何影响。

如何改变偏移量中的位置?

Debe开云体育官方注册网址zium Oracle连接器在偏移量中维护两个临界值,一个名为视交叉上核另一个叫commit_scn。的视交叉上核字段是一个字符串,表示连接器在捕获更改时使用的低水位起始位置。

  1. 找出包含连接器偏移量的主题的名称。的值进行配置offset.storage.topic配置属性。

  2. 找出连接器的最后一个偏移量、存储该连接器的键,并确定用于存储该偏移量的分区。可以使用kafkacat由Kafka代理安装提供的实用程序脚本。一个例子可能是这样的:

    kafkacat -b localhost -C -t my_connect_offset -f 'Partition(%p) %k %s\n' Partition(11) [" directory -connector",{"server":"server1"}] {"scn":"324567897", "commit_scn":"324567897: 0x2832343233323:1"}

    的关键inventory-connector[" inventory-connector ",{“服务器”:“server1”}],分区为11最后一个偏移量是键后面的内容。

  3. 要移动回之前的偏移量,连接器应该停止,并且必须发出以下命令:

    echo '["库存-连接器",{"server":"server1"}]|{"scn":"3245675000","commit_scn":"324567500"}' | \ kafkacat -P -b localhost -t my_connect_offsets -K \| -P

    这将写入分区11my_connect_offsets将给定的键和偏移值命名为主题。在本例中,我们将连接器反转回SCN3245675000而不是324567897

如果连接器找不到具有给定偏移SCN的日志,会发生什么?

Debe开云体育官方注册网址zium连接器在连接器偏移量中保持低水位和高水位SCN值。低水位SCN表示开始位置,并且必须存在于可用的在线重做或归档日志中,以便连接器成功启动。当连接器报告它找不到这个偏移SCN时,这表明仍然可用的日志不包含SCN,因此连接器不能从它停止的地方挖掘更改。

当这种情况发生时,有两种选择。第一种方法是删除连接器的历史主题和偏移量,并重新启动连接器,按照建议获取新的快照。这将保证任何主题消费者都不会发生数据丢失。第二种方法是手动操作偏移量,将SCN推进到重做或归档日志中可用的位置。这将导致旧SCN值和新提供的SCN值之间发生的更改丢失,而不会写入主题。不建议这样做。

各种挖掘策略之间的区别是什么?

Debe开云体育官方注册网址zium Oracle连接器提供了两个选项log.mining.strategy

默认值为redo_in_catalog,这将指示连接器在每次检测到日志开关时将Oracle数据字典写入重做日志。这个数据字典是Oracle LogMiner在解析重做和归档日志时有效跟踪模式更改所必需的。此选项将生成比通常数量更多的归档日志,但允许实时操作被捕获的表,而不会对捕获的数据更改产生任何影响。此选项通常需要更多的Oracle数据库内存,并且会导致Oracle LogMiner会开云体育电动老虎机话和进程在每次日志切换后启动的时间稍长。

另一个选择是,online_catalog,不将数据字典写入重做日志。相反,Oracle LogMiner将始终使用包含表结构当前状态的在线数据字典。这也意味着,如果一个表的结构改变了,不再匹配在线数据字典,Oracle LogMiner将无法解析表或列名,如果表的结构改变了。如果要捕获的表经常受到模式更改的影响,则不应使用此挖掘策略选项。所有数据更改必须与模式更改同步,以便从表的日志中捕获所有更改、停止连接器、应用模式更改、重新启动连接器并恢复表上的数据更改。这个选项需要更少的Oracle数据库内存,并且Oracle Log开云体育电动老虎机Miner会话通常启动得更快,因为数据字典不需要由LogMiner进程加载或启动。

为什么没有捕获SYS或SYSTEM用户所做的更改?

Oracle数据库使用开云体育电动老虎机SYS系统用户帐户可以在重做日志中执行大量内部操作,这些操作对于更改数据捕获并不重要。当Debezium开云体育官方注册网址 Oracle连接器从Oracle LogMiner读取更改时,这两个用户帐户所做的更改将自动过滤掉。因此,如果您正在使用这两个用户帐户中的任何一个,而没有看到更改事件,这就是为什么这些用户所做的更改没有被捕获的原因。您应该使用指定的非系统用户帐户来执行您希望捕获的所有更改。

为什么连接器似乎停止在AWS上捕获更改?

由于修复了AWS网关负载均衡器350秒的空闲超时需要超过350秒才能完成的JDBC调用可能会无限期挂起。

在调用Oracle LogMiner API需要超过350秒才能完成的情况下,可能会触发超时,导致AWS网关负载均衡器挂起。例如,当处理大量数据的LogMiner会话与Oracle的定期检查点任务并发运行时,就会发生这种超时。

为了防止在AWS网关负载均衡器上发生超时,启用来自kafka Connect或Debezium Server环境的keep-alive数据包,通过在承载连接器的环境中以root用户或超级用户执行以下任务:开云体育官方注册网址

  1. 在终端上执行如下命令:

    Sysctl -w net.ipv4.tcp_keepalive_time=60
  2. 编辑/etc/sysctl.conf并将以下变量的值设置为:

    net.ipv4.tcp_keepalive_time = 60
  3. 重新配置Debezium for开云体育官方注册网址 Oracle连接器以使用开云体育电动老虎机database.url财产而不是开云体育电动老虎机database.hostname然后加上(使=坏了)Oracle连接字符串描述符,示例如下:

    开云体育电动老虎机database.url = jdbc: oracle:薄:用户名/密码! @(描述=(启用=破碎)(ADDRESS_LIST =(地址= =(协议TCP)(主机=主机名)(端口=端口)))(CONNECT_DATA = (SERVICE_NAME =名)))

以上步骤配置TCP网络堆栈每60秒发送一次保活报文。因此,当JDBC调用LogMiner API的时间超过350秒时,AWS网关负载均衡器不会超时,从而使连接器能够继续从数据库的事务日志中读取更改。开云体育电动老虎机

ORA-01555的原因是什么?如何处理?

Debe开云体育官方注册网址zium Oracle连接器在执行初始快照阶段时使用回闪查询。闪回查询是一种特殊类型的查询,它依赖于闪回区域,由数据库维护开云体育电动老虎机UNDO_RETENTION开云体育电动老虎机数据库参数,以根据表的内容在给定时间(在我们的示例中是给定SCN)的内容返回查询结果。默认情况下,Oracle通常只维护大约15分钟的撤销或闪回区域,除非数据库管理员增加或减少了这个时间。开云体育电动老虎机对于捕获大型表的配置,可能需要超过15分钟的时间UNDO_RETENTION执行初始快照,这将最终导致以下异常:

ORA-01555:快照太旧:回滚段号为12345,名称为“_SYSSMU11_1234567890$”太小

处理此异常的第一种方法是与数据库管理员合作,看看他们是否可以增加开云体育电动老虎机UNDO_RETENTION开云体育电动老虎机临时数据库参数。这不需要重新启动Oracle数据库,因此可以在不影响数据库可用性的情况下在线完成。开云体育电动老虎机但是,如果表空间没有足够的空间来存储必要的撤消数据,那么更改此设置仍然可能导致上述异常或“快照太旧”异常。

处理此异常的第二种方法是完全不依赖于初始快照,将snapshot.modeschema_only然后转而依赖增量快照。增量快照不依赖于闪回查询,因此不受ORA-01555异常的约束。

ORA-04036的原因是什么?如何处理?

当数据库开云体育官方注册网址不经常发生更改时,Debezium Oracle连接器可能会报告ORA-04036异常。开云体育电动老虎机Oracle LogMiner会话被启动并重用,直到检测到日志开关。会话被重用,因为它提供了Oracle LogMiner的最佳性能利用率,但如果长时间运行的挖掘会话发生,这可能导致过度的PGA内存使用,最终导致如下异常:

ORA-04036:实例使用的PGA内存超过PGA_AGGREGATE_LIMIT

可以通过指定Oracle切换重做日志的频率或Debezium Oracle连接器允许重用挖掘会话的时间来避免此异常。开云体育官方注册网址Debe开云体育官方注册网址zium Oracle连接器提供一个配置选项,log.mining.session.max.ms,它控制当前Oracle LogMiner会话在关闭和启动新会话之前可以重用多长时间。这允许在不超过数据库允许的PGA开云体育电动老虎机内存的情况下保持数据库资源处于检查状态。

ORA-01882的原因是什么?如何处理?

Debe开云体育官方注册网址zium Oracle连接器在连接Oracle数据库时可能会报告以下异常:开云体育电动老虎机

ORA-01882:没有找到时区

当JDBC驱动程序无法正确解析时区信息时,就会发生这种情况。为了解决这个与驱动程序相关的问题,需要告诉驱动程序不要使用区域来解析时区详细信息。这可以通过使用指定驱动程序通过属性来实现driver.oracle.jdbc.timezoneAsRegion = false

ORA-25191的原因是什么?如何处理?

Debe开云体育官方注册网址zium Oracle连接器自动忽略索引组织表(IOT),因为它们不受Oracle LogMiner的支持。但是,如果抛出ORA-25191异常,这可能是由于这种映射的独特情况,可能需要额外的规则来自动排除这些情况。ORA-25191异常的一个例子可能是这样的:

ORA-25191:不能引用索引组织表的溢出表

如果抛出ORA-25191异常,请抛出关于表及其映射的详细信息的Jira问题,与其他父表相关等。作为一种解决方案,可以调整include/exclude配置选项,以防止连接器访问此类表。