开云体育官方注册网址Debezium连接器用于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位置上有效的所有相关数据库开云体育电动老虎机表和模式(从scn123开始选择*),生成一个事件,然后将事件记录写入特定于表的Kafka主题。

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

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

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

总是

在每个连接器启动时执行快照。快照完成后,连接器开始为后续数据库更改传输事件记录。开云体育电动老虎机

最初的

连接器执行数据库快照,如开云体育电动老虎机创建初始快照的默认工作流.快照完成后,连接器开始为后续数据库更改传输事件记录。开云体育电动老虎机

initial_only

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

schema_only

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

schema_only_recovery

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

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

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

Ad hoc快照

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

但是,在某些情况下,连接器在初始快照期间获得的数据可能会过时、丢失或不完整。为了提供一种重新捕获表数据的机制,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不像在初始快照中那样一次性捕获数据库的全部状态,而是在一系列可配置的块中分阶段捕获每个表。开云体育官方注册网址开云体育电动老虎机可以指定希望快照捕获的表和每个块的大小.块大小决定了快照在数据库上的每次获取操作期间收集的行数。开云体育电动老虎机增量快照的默认chunk大小为1kb。

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

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

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

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

增量快照流程

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

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

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

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

快照窗口

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

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

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

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

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

触发增量快照

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

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

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

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

数据收集增量快照信号阵列没有默认值。如果数据收集数组为空时,Debezium检测开云体育官方注册网址到不需要任何操作,因此不执行快照。

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

类中存在的表公共Schema,它有名字我的。表格,请使用以下格式:“公共”。“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<表>....

通过添加附加条件参数,则追加一个在哪里输入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": ["schema1. data ", ' "data-collections": ["schema1. data ")产品”),“类型”:“增量”、“附加条件”:“颜色=蓝色"});

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

INSERT INTO myschema.开云体育官方注册网址debezium_signal (id, type, data) VALUES('ad-hoc-1', 'execute-snapshot', '{"data-collections": ["schema1. data ", ' "data-collections": ["schema1. data ")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向表提交停止快照信号插入查询在Debez开云体育官方注册网址ium检测到信号表中的变化后,它将读取信号,如果增量快照操作正在进行,则停止增量快照操作。

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

先决条件
过程
  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开云体育官方注册网址连接器,以生成描述应用于数据库中捕获的表的结构更改的架构更改事件。开云体育电动老虎机连接器将模式更改事件写入名为< 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真正的

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

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

为了确保topic不被分区分割,可以通过以下方法设置topic的分区数:

  • 如果手动创建数据库模式历史记录主题,开云体育电动老虎机请指定的分区计数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 "。\"客户" \n ("ID " NUMBER(9,0) NOT NULL ENABLE, \n "FIRST_NAME " VARCHAR2(255), \n "LAST_NAME" VARCHAR2(255), \n "EMAIL " VARCHAR2(255), \n主键("ID ") ENABLE,\n补充日志数据(ALL)列\n)段创建立即\n PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n NOCOMPRESS LOGGING\n STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\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", "typeExpression": "VARCHAR2", "charsetName": null, "length": 255, "scale": null, "position": 2, "optional": false, " autoincreated ": false, "generated": false}, {"name": "name": "length": 255, "scale": null, "position": "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, " autoincremental ": false, "generated": false}, {"name": "EMAIL", "jdbcType": 12, "nativeType": null, "typeName": "VARCHAR2", "typeExpression": "VARCHAR2", "charsetName": null, "length": 255, "scale": null, "position": 4, "optional": false, " autoincremental ": 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. debez开云体育官方注册网址um .connector.oracle. schemachangekey "}, "payload": {"databaseName": "ORCLPDB1"}}

事务的元数据

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

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

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

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

状态

开始结束

id

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

ts_ms

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

event_count(结束事件)

事务发出的事件总数。

data_collections(结束事件)

对的数组data_collection而且event_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. debezium . "CUSTOMER", "event_count": 1}, {"data_collection": "ORCLPDB1.DE开云体育官方注册网址BEZIUM。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作为其缓存提供者,支持本地嵌入式模式的缓存存储或服务器集群上的远程缓存存储。为了使用Infinispan,log.mining.buffer.type必须使用其中之一进行配置infinispan_embeddedinfinispan_remote

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

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

       

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

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

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

<分布式缓存名称="transactions" statistics="true">        

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

然而,有一些不同的注意。首先,缓存被定义为分布式缓存,而不是本地缓存。其次,缓存被定义为使用应用程序/ 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系统连接器不会捕获用户帐户。

更改事件键

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

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

CREATE TABLE customers (id NUMBER(9) GENERATED BY DEFAULT ON NULL AS IDENTITY (START WITH 1001) NOT NULL PRIMARY KEY, first_name VARCHAR2(255) NOT NULL, last_name VARCHAR2(255) NOT NULL, email VARCHAR2(255) NOT NULL UNIQUE);

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

{"schema": {"type": "struct", "fields": [{"type": "int32", "optional": false, "field": "ID"}], "optional": false, "name": "server1.INVENTORY.CUSTOMERS. "Key"}, "payload": {"ID": 1004}}

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

因此,可以将此键解释为描述inventory.customers表(从命名的连接器输出server1),其id主键列的值为1004

更改事件值

更改事件消息中值的结构反映了对象的结构更改事件中的消息键在消息中,并同时包含一个模式Section和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。开云体育官方注册网址值","field": "before"}, {"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"}], "optional": true, "name": "server1. debezum . 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

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

  • 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回收存储空间,同时确保主题包含一个完整的数据集,并可用于重新加载基于键的状态。

删除一行时,删除上面例子中显示的event值仍然适用于日志压缩,因为Kafka能够删除所有使用相同键的早期消息。消息值必须设置为指示卡夫卡移除所有消息它们共享相同的密钥。为了实现这一点,默认情况下,Debezium的Oracle连接器总是遵开云体育官方注册网址循删除特别活动墓碑上具有相同but键的事件价值。您可以通过设置connector属性更改默认行为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-safe编码的字符串,或十六进制编码的字符串,基于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连接整数类型之一:

  • 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属性设置为字符串,连接器表示数量值作为具有模式类型的格式化字符串表示形式字符串

Number (p, s > 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 =精确),但为了完整起见,保留两种受支持的类型(而且字符串)也得到支持。

布尔类型

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

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

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

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

    converters=boolean boolean.type=io.开云体育官方注册网址 debezu .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 Oracle连接器用于这些数据类型开云体育官方注册网址中的任何一种。

默认值

如果为数据库模式中的某列指定了默认值,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

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

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

Oracle安装类型的兼容性

Oracle数据库既开云体育电动老虎机可以作为独立实例安装,也可以使用RAC (Oracle Real Application Cluster)安装。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=ORACLCDB dbz_oracle sqlplus /nolog CONNECT sys/top_secret AS SYSDBA alter system set db_recovery_file_dest_size = 10G;修改system set db_recovery_file_dest = '/opt/oracle/oradata/recovery_area' scope=spfile;立即关闭数据库启动;开云体育电动老虎机打开数据库开云体育电动老虎机现在“数据库日志模式:存档模式开云体育电动老虎机”存档日志列表退出了吗

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

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

Oracle AWS RDS LogMiner需要配置
select log_mode from v $ dat开云体育电动老虎机abaseLog_mode ------------ archivelog

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

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连接器都可能遇到性能问题。开云体育官方注册网址开云体育电动老虎机

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

为连接器创建用户

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

连接器捕获由它自己的Oracle用户帐户所做的开云体育电动老虎机数据库更改。方法所做的更改SYS系统用户帐户。

创建连接器的LogMiner用户
/opt/oracle/oradata/ORCLCDB/logminer_tbs. sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/logminer_tbs. sqldbf的大小25M重用自动扩展MAXSIZE无限制;退出;/opt/oracle/oradata/ORCLCDB/ORCLPDB1/logminer_tbs. sqlplus sys/top_secret@//localhost:1521/ORCLPDB1 as sysdba CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/logminer_tbs. sqlplus sys/top_secret@//localhost:1521/ORCLPDB1 as sysdba CREATE TABLESPACE logminer_tbs DATAFILE 'dbf的大小25M重用自动扩展MAXSIZE无限制;退出;sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE USER c##dbzuser IDENTIFIED BY dbz DEFAULT TABLESPACE logminer_tbs QUOTA UNLIMITED ON logminer_tbs CONTAINER=ALL;给c##dbzuser CONTAINER创建会话(1)授予c##dbzuser CONTAINER=ALL;(2)dbzuser CONTAINER=A开云体育电动老虎机LL(3)给c##dbzuser CONTAINER=ALL回闪任意表;(4)dbzuser CONTAINER=ALL;(5)dbzuser CONTAINER=ALL;(6)授予EXECUTE_CATALOG_ROLE给c##dbzuser CONTAINER=ALL;(7)授予c##dbzuser CONTAINER=ALL;(8)dbzuser CONTAINER=ALL;(9)dbzuser CONTAINER=ALL(10)授予c##dbzuser CONTAINER=ALL任意表的锁(11)dbzuser CONTAINER=ALL(12)授予DBMS_LOGMNR容器执行权限:(13)GRANT EXECUTE ON DBMS_LOGMNR_D(14)在V_$LOG中创建数据库的容器(15)将V_$LOG_HISTORY权限授予c##dbzuser CONTAINER=ALL;(16)将V_$LOGMNR_LOGS权限授予dbzuser CONTAINER=ALL;(17)授予V_$LOGMNR_CONTENTS的SELECT权限给c##dbzuser CONTAINER=ALL;(18)dbzuser CONTAINER=ALL(19)dbzuser CONTAINER=ALL;(20)(3)授予V_$ARCHIVED_LOG的SELECT权限;(21)##dbzuser CONTAINER=ALL;(22)授予V_$TRANSACTION的SELECT权限给c##dbzuser CONTAINER=ALL;(23)退出;
表11所示。权限/授权的描述
角色名 描述

1

创建会话

使连接器连接到Oracle。

2

设置容器

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

3.

选择v_ $ databa开云体育电动老虎机se

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

4

倒叙任何表格

允许连接器执行闪回查询,这是连接器执行数据初始快照的方式。

5

选择任意表

允许连接器读取任何表。

6

SELECT_CATALOG_ROLE

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

7

EXECUTE_CATALOG_ROLE

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

8

选择任何事务

允许快照进程对任何事务执行闪回快照查询。当倒叙任何表格是理所当然的,这也应该理所当然。

9

LOGMINING

在Oracle的新版本中添加了此角色,作为授予对Oracle LogMiner及其包的完全访问权限的一种方式。在没有此角色的Oracle旧版本上,您可以忽略此授权。

10

创建表

允许连接器在其默认表空间中创建其flush表。刷新表允许连接器显式控制将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偏移量不同于生产数据库中的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.OracleConnector",(2)“开云体育电动老虎机数据库。hostname": "",(3)“开云体育电动老虎机数据库。端口:“1521”,(4)“开云体育电动老虎机数据库。user" : "c##dbzuser",(5)“开云体育电动老虎机数据库。密码:“dbz”,(6)“开云体育电动老虎机数据库。dbname" : "ORCLCDB",(7)”的话题。前缀“server1”,(8)”任务。Max ": "1",(9)d开云体育电动老虎机atabase.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部署中,或者在使用透明网络衬底(TNS)名称的部署中,可以使用指定JDBC URL的替代方法。

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

示例:Debezi开云体育官方注册网址um Oracle连接器配置,使用JDBC URL连接到数据库开云体育电动老虎机
{"name": "inventory-connector", "config": {"connector.class": "io.deb开云体育官方注册网址ezium.connector.oracle.OracleConnector", "tasks. debezium.connector.oracle. oracleconnector ", "Max ": "1", "topic。前缀":"server1", "databa开云体育电动老虎机se. "dbzuser: ##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服务。服务记录配置并启动连接器任务,执行以下操作:

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

  • 读取重做日志。

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

添加连接器配置

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

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

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

结果

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

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

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

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

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

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

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

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

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

示例:用于非cdb开云体育官方注册网址部署的Debezium Oracle连接器配置
{"config": {"connector.class": "io.deb开云体育官方注册网址ezium.connector.oracle.OracleConnector", "任务。Max ": "1", "topic。前缀":"server1", "databa开云体育电动老虎机se. "Hostname ": "", "开云体育电动老虎机数据库。端口":"1521","数据库。开云体育电动老虎机dbzuser: ##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

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

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

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

1

为该连接器创建的最大任务数。Oracle连接器总是使用单个任务,因此不使用这个值,所以默认值总是可以接受的。

没有默认的

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

没有默认的

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

没有默认的

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

没有默认的

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

没有默认的

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

没有默认的

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

没有默认的

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

没有默认的

主题前缀,为连接器从中捕获更改的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-safe-encoded 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.customers而且purchase.orders

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

对于桌子来说inventory.customer,列pk1而且pk2指定为消息键。为任何模式中的表,列pk3而且pk4服务器作为消息键。
用于创建自定义消息键的列的数量没有限制。但是,最好使用指定唯一键所需的最小数目。

没有默认的

一个可选的、以逗号分隔的正则表达式列表,它与基于字符的列的完全限定名匹配。如果希望连接器屏蔽一组列的值,请设置此属性,例如,如果这些列包含敏感数据。集长度为正整数,以将指定列中的数据替换为星号()指定的字符长度属性名。集长度0(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

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

3000

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

1000

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

200

在从logminer读取数据时,连接器用于调优最佳睡眠时间的最大打开或关闭时间。Value以毫秒为单位。

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间隙。如果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)节点主机名或地址列表。该字段用于启用与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语句

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

安全默认值为

用于配置生产者和使用者客户开云体育电动老虎机机的传递数据库模式历史属性


开云体育官方注册网址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.keystore.location =/var/private/ssl/kafka.server.keystore.jks Schema.history.internal.consumer.ssl.keystore.location =test1234 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.keystore.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 Connect循环之间传递事件的队列长度。

int

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

int

快照中包含的表的总数。

int

快照尚未复制的表数。

布尔

快照是否启动。

布尔

快照是否暂停。

布尔

快照是否中止。

布尔

快照是否完成。

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

快照暂停的总秒数。如果快照被暂停了多次,那么暂停的时间就会累积起来。

Map < String,长>

映射,其中包含为快照中的每个表扫描的行数。在处理期间将表增量地添加到Map中。每扫描10,000行并在完成一个表时更新一次。

队列的最大缓冲区,以字节为单位。该指标是可用的,如果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语句时停止。你可以使用Debeziu开云体育官方注册网址m信号从这样的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":false, " 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":true, " autoincreated ":false, "generated":false}, {"name":"REGISTERED", "jdbcType":93, "typeName":"TIMESTAMP(6)", "typeExpression":"TIMESTAMP(6)", "charsetName":null, "length":6, "position":4, "optional":true, " autoincreated ":false, "generated":false}]}}]}}]}

xstream支持

Debe开云体育官方注册网址zium 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 = 5G;修改system set db_recovery_file_dest = '/opt/oracle/oradata/recovery_area' scope=spfile;Alter system set enable_goldengate_replication=true;立即关闭数据库启动;开云体育电动老虎机打开数据库开云体育电动老虎机——应该显示“数据库日志模式:存开云体育电动老虎机档模式”存档日志列表退出;

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

更改表库存。客户一个DD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

为连接器创建XStream用户

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

创建XStream Administrator用户
/opt/oracle/oradata/ORCLCDB/xstream_adm_tbs. sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE TABLESPACE xstream_adm_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/xstream_adm_tbs. sqldbf的大小25M重用自动扩展MAXSIZE无限制;退出;/opt/oracle/oradata/ORCLCDB/ORCLPDB1/xstream_adm_tbs DATAFILE . sqlplus sys/top_secret@//localhost:1521/ORCLPDB1 as sysdba CREATE TABLESPACE xstream_adm_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/xstream_adm_tbs. sqldbf的大小25M重用自动扩展MAXSIZE无限制;退出;sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE USER c##dbzadmin IDENTIFIED BY dbz DEFAULT TABLESPACE xstream_adm_tbs QUOTA UNLIMITED ON xstream_adm_tbs CONTAINER=ALL;授权创建会话,设置容器为c##dbzadmin容器=ALL;DBMS_XSTREAM_AUTH开始。GRANT_ADMIN_PRIVILEGE(grantee => 'c##dbzadmin', privilege_type => 'CAPTURE', grant_select_privileges => TRUE, container => 'ALL');结束;/退出;
创建连接器的XStream用户
/opt/oracle/oradata/ORCLCDB/xstream_tbs. sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE TABLESPACE xstream_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/xstream_tbs. sqldbf的大小25M重用自动扩展MAXSIZE无限制;退出;/opt/oracle/oradata/ORCLCDB/ORCLPDB1/xstream_tbs DATAFILE . sqlplus sys/ top_secrets @//localhost:1521/ORCLPDB1 as sysdba CREATE TABLESPACE xstream_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/xstream_tbs. sqldbf的大小25M重用自动扩展MAXSIZE无限制;退出;sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE USER c##dbzuser IDENTIFIED BY dbz DEFAULT TABLESPACE xstream_tbs QUOTA UNLIMITED ON xstream_tbs CONTAINER=ALL;给c##dbzuser CONTAINER创建会话授予c##dbzuser CONTAINER=ALL;dbzuser CONTAINER=A开云体育电动老虎机LL给c##dbzuser CONTAINER=ALL回闪任意表;dbzuser CONTAINER=ALL; GRANT EXECUTE_CATALOG_ROLE TO c##dbzuser CONTAINER=ALL; exit;

创建一个XStream出站服务器

创建一个出站服务器(给定正确的特权,这可能由连接器自动完成,参见dbz - 721):

创建一个XStream出站服务器
sqlplus dbzadmin/dbz@//localhost:1521/ORCLCDB声明表dbms_utilities . uncl_array;模式DBMS_UTILITY.UNCL_ARRAY;开始表(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.OracleConnector", "tasks. debezium.connector.oracle. oracleconnector ", "Max ": "1", "topic。前缀":"server1", "databa开云体育电动老虎机se. "Hostname ": "", "开云体育电动老虎机数据库。端口":"1521","数据库。开云体育电动老虎机dbzuser: ##dbzuser“开云体育电动老虎机数据库。密码:“dbz”,“database.”开云体育电动老虎机dbname": "ORCLCDB",d开云体育电动老虎机atabase.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客户端并解压所需文件。

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

  2. 解压缩存档,然后打开instantclient_ <版本>目录中。

    例如:

    instantclient_21_1/├──adrci├──BASIC_LITE_LICENSE├──BASIC_LITE_README├──genezi├──libclntscore。So -> libclntshcore.so.21.1├──libclntshcore.so.12.1 -> libclntshcore.so.21.1…├──ojdbc8.jar├──ucp.jar├──uidrvci├─xstreaming .jar
  3. 复制ojdbc8.jar而且xstreams.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 LogMiner在Oracle 12c中的连续挖掘选项,并从Oracle 19c开始删除了该选项。Debe开云体育官方注册网址zium Oracle连接器不依赖于此选项来运行,因此可以安全地与更新版本的Oracle一起使用,而不会产生任何影响。

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

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

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

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

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

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

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

    echo '["inventory-connector",{"server":"server1"}]|{"scn":"3245675000","commit_scn":"324567500"}' | \ kafkacat -P -b localhost -t my_connect_offset -K \| -P 11 .执行以下命令

    这将写入分区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 Log开云体育电动老虎机Miner会话和进程启动时间稍长。

另一种选择,online_catalog,不会将数据字典写入重做日志。相反,Oracle LogMiner将始终使用在线数据字典,其中包含表结构的当前状态。这也意味着,如果一个表的结构改变了,不再匹配在线数据字典,如果表的结构改变了,Oracle LogMiner将无法解析表或列名。如果所捕获的表经常发生模式更改,则不应使用此挖掘策略选项。重要的是,所有数据更改都与模式更改同步,以便从表的日志中捕获所有更改,停止连接器,应用模式更改,重新启动连接器并恢复表上的数据更改。这个选项需要更少的Oracle数据库内存,Oracle LogMi开云体育电动老虎机ner会话通常启动得更快,因为数据字典不需要由LogMiner进程加载或启动。

为什么SYS或SYSTEM用户所做的更改没有被捕获?

Oracle数据库使用开云体育电动老虎机SYS而且系统在重做日志中执行大量内部操作的用户帐户,这些操作对于变更数据捕获并不重要。当Debezium开云体育官方注册网址 Oracle连接器从Oracle LogMiner读取更改时,这两个用户帐户所做的更改将被自动过滤掉。因此,如果您正在使用这两个用户帐户中的任何一个,并且没有看到更改事件,这就是为什么这些用户所做的更改不会被捕获的原因。您应该使用指定的非系统用户帐户来执行希望捕获的所有更改。

为什么连接器似乎停止捕获AWS上的更改?

由于修复了AWS网关负载均衡器350秒的空闲超时例如,需要350秒以上才能完成的JDBC调用可能无限期地挂起。

在对Oracle LogMiner API的调用需要超过350秒才能完成的情况下,可能会触发超时,导致AWS网关负载均衡器挂起。例如,当处理大量数据的LogMiner会话与Oracle的定期检查点任务同时运行时,可能会出现这种超时。

为了防止在AWS Gateway Load Balancer上发生超时,在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. 为Oracle连接器重新配置De开云体育官方注册网址bezium以使用开云体育电动老虎机database.url财产而不是开云体育电动老虎机database.hostname并添加(使=坏了)Oracle连接字符串描述符,示例如下:

    开云体育电动老虎机database.url = jdbc: oracle:薄:用户名/密码! @(描述=(启用=破碎)(ADDRESS_LIST =(地址= =(协议TCP)(主机=主机名)(端口=端口)))(CONNECT_DATA = (SERVICE_NAME =名)))

配置TCP网络栈每60秒发送一次keep-alive报文。因此,当JDBC调用LogMiner API的时间超过350秒时,AWS Gateway Load Balancer不会超时,从而使连接器能够继续从数据库的事务日志中读取更改。开云体育电动老虎机

ORA-01555的原因是什么,如何处理?

Debe开云体育官方注册网址zium Oracle连接器在初始快照阶段执行时使用闪回查询。闪回查询是一种特殊类型的查询,它依赖于闪回区域,由数据库维护开云体育电动老虎机UNDO_RETENTION开云体育电动老虎机database参数,根据给定时间(在我们的例子中是给定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会话在关闭和新会话开始之前可以被重用的时间。这样就可以在不超过数据库允许的P开云体育电动老虎机GA内存的情况下对数据库资源进行检查。

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配置选项以防止连接器访问此类表。