开云体育官方注册网址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
连接器配置属性。默认情况下,连接器的快照模式设置为最初的
。
当快照模式设置为默认模式时,连接器将完成以下任务来创建快照:
确定要捕获的表。
获得一个
行共享模式
锁定每个捕获的表,以防止在创建快照期间发生结构更改。开云体育官方注册网址Debezium只能维持很短的时间。从服务器的重做日志中读取当前系统更改号(SCN)位置。
捕获所有相关表的结构。
释放在步骤2中获得的锁。
扫描所有相关的数据库表和模式,使其在步骤3 (开云体育电动老虎机
在SCN 123中选择* from
),生成读
事件,然后将事件记录写入特定于表的Kafka主题。在连接器偏移量中记录快照的成功完成。
快照进程启动后,如果由于连接器故障、再平衡或其他原因导致进程中断,则在连接器重启后重新启动该进程。连接器完成初始快照后,将继续从步骤3中读取的位置进行流处理,这样就不会错过任何更新。如果连接器因任何原因再次停止,在重新启动后,它将从先前停止的位置恢复流更改。
设置 | 描述 |
---|---|
|
对每个连接器启动执行快照。快照完成后,连接器开始对事件记录进行流处理,以用于后续的数据库更改。开云体育电动老虎机 |
|
中所描述的连接器执行数据库快照开云体育电动老虎机创建初始快照的默认工作流。快照完成后,连接器开始对事件记录进行流处理,以用于后续的数据库更改。开云体育电动老虎机 |
|
连接器执行数据库快照,并在流式传输任何更改事件记录开云体育电动老虎机之前停止,不允许捕获任何后续更改事件。 |
|
连接器捕获所有相关表的结构,执行中描述的所有步骤默认快照工作流,除了它不创造 |
|
设置此选项可恢复丢失或损坏的数据库模式历史主题。开云体育电动老虎机重新启动后,连接器运行一个快照,从源表重新构建主题。还可以将该属性设置为定期修剪经历意外增长的数据库模式历史主题。开云体育电动老虎机 |
有关更多信息,请参见snapshot.mode
在连接器配置属性表中。
临时快照
默认情况下,连接器仅在第一次启动后才运行初始快照操作。在此初始快照之后,在正常情况下,连接器不会重复快照过程。连接器捕获的任何未来的更改事件数据都只能通过流处理进入。
但是,在某些情况下,连接器在初始快照期间获得的数据可能会过时、丢失或不完整。为了提供一种重新捕获表数据的机制,Debezium包含了一个执行临时快照的选项。开云体育官方注册网址数据库中的以下更改可能会导致执行临时快照:开云体育电动老虎机
修改连接器配置以捕获一组不同的表。
Kafka主题被删除,必须重建。
由于配置错误或其他问题导致数据损坏。
您可以通过初始化所谓的特别的快照。临时快照需要使用信号表。通过向Debezium信令表发送信号请求来初始化临时快照。开云体育官方注册网址
当您启动现有表的临时快照时,连接器会将内容附加到该表已经存在的主题中。如果先前存在的主题被删除,Debezium可以自动创建一个主题开云体育官方注册网址自动创建主题启用。
临时快照信号指定要包含在快照中的表。快照可以捕获数据库的整个内容,也可以只捕获数据库中表的一个子集。开云体育电动老虎机此外,快照可以捕获数据库中表内容的一个子集。开云体育电动老虎机
指定要捕获的表execute-snapshot
给信令表的消息。设置的类型execute-snapshot
信号增量
,并提供要包含在快照中的表的名称,如下表所示:
场 | 默认的 | 价值 |
---|---|---|
|
|
指定要运行的快照类型。 |
|
N/A |
一个数组,其中包含与要快照的表的完全限定名称匹配的正则表达式。 |
|
N/A |
一个可选字符串,它根据表的列指定一个条件,以捕获表内容的一个子集。 |
的项来初始化一个临时快照execute-snapshot
信令表的信号类型。连接器处理消息后,将开始快照操作。快照进程读取第一个和最后一个主键值,并将这些值用作每个表的起点和终点。根据表中的条目数和配置的块大小,Debezium将表划分为块,然后连续地对每个块进行快照,每次一个。开云体育官方注册网址
增量快照
为了提供管理快照的灵活性,Debezium包括一个补充快照机制,称为开云体育官方注册网址增量快照。增量快照依赖于Debezium机制开云体育官方注册网址向Debezium连接器发送信号开云体育官方注册网址。增量快照是基于DDD-3设计文档。
在增量快照中,Debezium不像在初始快照中那样一次捕获数据库的全部状态,而是在一系列可配置的块中分阶段捕获每个表。开云体育官方注册网址开云体育电动老虎机您可以指定希望快照捕获的表和每个块的大小。块大小决定了快照在每次数据库取操作期间收集的行数。开云体育电动老虎机增量快照的默认块大小为1kb。
随着增量快照的进行,Debezium使用水印来跟踪其进度,维护它捕获的每一开云体育官方注册网址行表的记录。与标准的初始快照过程相比,这种分阶段捕获数据的方法具有以下优点:
您可以与流数据捕获并行运行增量快照,而不是将流延迟到快照完成。连接器在整个快照过程中继续从更改日志中捕获接近实时的事件,两个操作都不会阻塞另一个操作。
当增量快照的进度中断时,可以在不丢失数据的情况下恢复增量快照。在进程恢复之后,快照从它停止的位置开始,而不是从开始重新捕获表。
您可以随时按需运行增量快照,并根据需要重复该过程以适应数据库更新。开云体育电动老虎机例如,在修改连接器配置以向其添加表之后,可以重新运行快照
table.include.list
财产。
当运行增量快照时,Debezium按主键对每个表进行排序,然后根据属性将表划开云体育官方注册网址分为块配置的块大小。一个块一个块地工作,然后捕获一个块中的每个表行。对于它捕获的每一行,快照都会发出一个读
事件。该事件表示块的快照开始时的行值。
随着快照的进行,其他进程可能会继续访问数据库,可能会修改表记录。开云体育电动老虎机为了反映这些变化,插入
,更新
,或删除
操作像往常一样提交到事务日志中。同样,正在进行的Debezium流进程继续检测开云体育官方注册网址这些更改事件,并向Kafka发送相应的更改事件记录。
在某些情况下,更新
或删除
接收流进程发出的事件时没有顺序。也就是说,流处理可能会在快照捕获包含数据的块之前发出修改表行的事件读
事件。当快照最终发出相应的读
事件时,其值已被替换。为了确保以正确的逻辑顺序处理按顺序到达的增量快照事件,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检测到不需要任何操作并且不执行快照。
如果要在快照中包含的表的名称包含点( |
使能信令。
源数据库上存在信令数据采集。开云体育电动老虎机
信令数据收集在
signal.data.collection
财产。
发送一个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 |
|
指定要运行的快照操作的类型。 |
2 |
|
事件类型。 |
停止增量快照
还可以通过向源数据库上的表发送信号来停止增量快照。开云体育电动老虎机通过发送SQL向表提交停止快照信号插入
查询Debezi开云体育官方注册网址um检测到信令表中的变化后,将读取信号,如果正在进行增量快照操作,则停止该操作。
提交的查询指定了快照操作增量
,以及要删除的当前运行快照的表(可选)。
使能信令。
源数据库上存在信令数据采集。开云体育电动老虎机
信令数据收集在
signal.data.collection
财产。
发送一个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解析器处理它们。
默认情况下,连接器使用 您可以修改设置,以便模式历史记录主题存储表的不同子集。使用以下方法之一更改主题存储的表集:
|
当将连接器配置为捕获表时,它不仅将表的模式更改历史存储在模式更改主题中,而且还存储在内部数据库模式历史主题中。开云体育电动老虎机内部数据库模式历史主题仅供开云体育电动老虎机连接器使用,不打算供消费应用程序直接使用。确保需要关于模式更改通知的应用程序仅使用来自模式更改主题的信息。 |
永远不要对数据库模式历史主题进行分区。开云体育电动老虎机为了使数据库模式开云体育电动老虎机历史主题正确工作,它必须维护连接器发送给它的事件记录的一致的全局顺序。 为了确保该主题不会在多个分区之间分裂,请使用以下方法之一设置该主题的分区计数:
|
模式更改主题消息格式处于酝酿状态,可能会在不通知的情况下更改。 |
开云体育官方注册网址Debezium每当从新表中传输数据时,或者当表的结构发生变化时,都会向此主题发出一条新消息。
更改表结构后,必须遵循图式演化过程)。 |
下面的示例显示了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"}]}}]}}
项 | 字段名 | 描述 |
---|---|---|
1 |
|
可选字段,显示连接器处理事件的时间。该时间基于运行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 |
|
标识包含更改的数据库和模式。开云体育电动老虎机 |
3. |
|
该字段包含负责模式更改的DDL。 |
4 |
|
包含由DDL命令生成的模式更改的一个或多个项的数组。 |
5 |
|
描述变化的类型。的
|
6 |
|
被创建、修改或删除的表的完整标识符。在表重命名的情况下,此标识符是的连接 |
7 |
|
表示应用更改后的表元数据。 |
8 |
|
组成表主键的列列表。 |
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_collection
和event_count
元素,指示连接器为源自数据集合的更改发出的事件数。
下面的例子显示了一个典型的事务边界消息:
{"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_embedded
或infinispan_remote
。
为了允许Infinispan缓存配置的灵活性,连接器希望在使用Infinispan缓冲事件数据时提供一系列缓存配置属性。看到配置属性在log.mining.buffer.infinispan.cache
名称空间。这些配置属性的内容取决于连接器是要与远程Infinispan集群集成还是要使用嵌入式引擎。
例如,以下示例说明了在嵌入式模式下使用Infinispan时事务缓存属性的嵌入式配置:
< persistent passivation="false">
深入查看配置,缓存被配置为持久化。所有缓存都应该以这种方式配置,以避免在事务正在进行时跨连接器重启丢失事务事件。控件定义了保存缓存的位置路径
属性,这应该是一个可以访问所有可能的运行时环境的共享位置。
当将XML配置作为JSON连接器属性值提供时,必须省略换行符或用 |
另一个例子,下面展示了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检测表更改并为它们发出更改事件,确保偏移量保持同步,即使在处理更改不频繁的可插拔数据库中也是如此。开云体育电动老虎机
为连接器使用 |
数据变更事件
Oracle连接器发出的每个数据更改事件都有一个键和一个值。键和值的结构取决于更改事件产生的表。有关Debezium如何构造主题名称的信息,请参见开云体育官方注册网址主题名称。
Debe开云体育官方注册网址zium Oracle连接器确保所有Kafka连接模式名是有效的Avro模式名称。这意味着逻辑服务器名必须以字母字符或下划线([a-z, a-z, _])开头,逻辑服务器名中的其余字符以及模式和表名中的所有字符必须是字母数字字符或下划线([a-z, a-z, 0-9,\_])。连接器将自动用下划线字符替换无效字符。 当多个逻辑服务器名、模式名或表名之间唯一的区别字符不是有效字符,并且这些字符被下划线替换时,可能会导致意外的命名冲突。 |
开云体育官方注册网址Debezium和Kafka Connect是围绕这一点设计的连续的事件消息流。但是,这些事件的结构可能会随着时间的推移而改变,这对于主题使用者来说可能很难处理。为了便于处理可变事件结构,Kafka Connect中的每个事件都是自包含的。每个消息键和值由两部分组成模式和有效载荷。模式描述有效负载的结构,而有效负载包含实际数据。
执行的更改 |
更改事件键
对于每个已更改的表,更改事件键的结构使得在创建事件时,表的主键(或唯一键约束)中的每个列都存在一个字段。
例如,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.Value
Kafka Connect模式,其中server1
类中的所有行使用的连接器inventory.customers
表格
-
后
-
一个可选字段,如果存在,则包含一行的状态后发生了变化。用相同的方法描述结构
server1.INVENTORY.CUSTOMERS.Value
Kafka 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连接器并在所有事件中重用的)。的特定于表的模式
之前
和后
字段。
的模式名称 |
的有效载荷
这个事件的一部分价值,提供有关事件的信息。它描述了创建了一行(op = c
),并表明后
字段值包含插入到控件中的值ID
,FIRST_NAME
,LAST_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}}
项 | 字段名 | 描述 |
---|---|---|
1 |
|
描述事件源元数据的必选字段。在一个截断事件值,则
|
2 |
|
返回string描述操作类型。的 |
3. |
|
可选字段,显示连接器处理事件的时间。该时间基于运行Kafka Connect任务的JVM中的系统时钟。 在 |
因为截断事件表示对整个表所做的更改,并且没有消息键,在具有多个分区的主题中,不能保证消费者收到截断事件和变更事件(创建,更新等)按顺序放到一张桌子上。例如,当使用者从不同分区读取事件时,它可能会收到一个更新事件后用于表截断事件用于同一表。只有当主题使用单个分区时,才能保证排序。
如果你不想捕获截断事件时,使用skipped.operations
选项将它们过滤掉。
数据类型映射
当Debezium开云体育官方注册网址 Oracle连接器检测到表行值的更改时,它会发出表示该更改的更改事件。每个更改事件记录的结构与原始表相同,事件记录包含每个列值的字段。表列的数据类型决定了连接器如何在更改事件字段中表示列的值,如下部分中的表所示。
对于表中的每一列,Debezium将源数据类型映射到开云体育官方注册网址文字类型在某些情况下,a语义类型,在相应的事件字段中。
- 文字类型
-
使用以下Kafka Connect模式类型之一描述值的字面表示方式:
INT8
,INT16
,INT32
,INT64
,FLOAT32
,FLOAT64
,布尔
,字符串
,字节
,数组
,地图
,结构体
。 - 语义类型
-
描述Kafka Connect模式如何捕获意义通过使用该字段的Kafka Connect模式的名称来获取该字段。
如果默认数据类型转换不能满足您的需要,则可以创建自定义转换器对于连接器。
对于某些Oracle大型对象(CLOB、NCLOB和BLOB)和数字数据类型,您可以通过更改默认配置属性设置来操作连接器执行类型映射的方式。有关Debezium属性如何控制这些数据类型的映射的详细信息,开云体育官方注册网址请参见二进制和字符LOB类型和数值类型。
计划在后续版本中支持更多的数据类型。请提交JIRA问题对于任何可能缺失的特定类型。
字符类型
下表描述了连接器如何映射基本字符类型。
Oracle数据类型 | 文字类型(模式类型) | 语义类型(模式名)和Notes |
---|---|---|
|
|
N/A |
|
|
N/A |
|
|
N/A |
|
|
N/A |
|
|
N/A |
二进制和字符LOB类型
支持 |
下表描述了连接器如何映射二进制和字符大对象(LOB)数据类型。
Oracle数据类型 | 文字类型(模式类型) | 语义类型(模式名)和Notes |
---|---|---|
|
N/A |
不支持此数据类型 |
|
|
的原始字节(默认值)、base64编码的字符串、base64-url安全编码的字符串或十六进制编码的字符串 |
|
|
N/A |
|
N/A |
不支持此数据类型。 |
|
N/A |
不支持此数据类型。 |
|
|
N/A |
|
N/A |
不支持此数据类型。 |
Oracle只提供列值 如果a的值 |
数值类型
下表描述了Debezium Oracle连接器如何映射数字类型。开云体育官方注册网址
您可以修改连接器映射Oracle的方式 |
Oracle数据类型 | 文字类型(模式类型) | 语义类型(模式名)和Notes |
---|---|---|
|
|
N/A |
|
|
N/A |
|
|
当 当 |
|
|
|
|
|
|
|
|
|
|
|
当 当 |
|
|
当 当 |
|
|
|
|
|
当 当 |
|
|
|
|
|
当 当 |
如上所述,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 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
当time.precision.mode
属性设置为连接
,然后连接器使用预定义的Kafka Connect逻辑类型。当消费者只知道内置的Kafka Connect逻辑类型并且无法处理可变精度的时间值时,这是有用的。因为Oracle支持的精度级别超过了Kafka Connect中逻辑类型支持的级别,如果你设置time.precision.mode
来连接
,精度的丧失结果为分数秒精度数据库列的值大于3:开云体育电动老虎机
Oracle数据类型 | 文字类型(模式类型) | 语义类型(模式名)和Notes |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ROWID类型
下表描述了连接器如何映射ROWID(行地址)数据类型。
Oracle数据类型 | 文字类型(模式类型) | 语义类型(模式名)和Notes |
---|---|---|
|
|
使用Oracle XStream时不支持此数据类型。 |
|
N/A |
不支持此数据类型。 |
用户定义的类型
Oracle允许您定义自定义数据类型,以便在内置数据类型不能满足您的需求时提供灵活性。有几种用户定义的类型,如对象类型、REF数据类型、varray和嵌套表。此时,您不能将Debezium Oracle连接器与任何这些用户定开云体育官方注册网址义类型一起使用。
Oracle-supplied类型
Oracle提供了基于sql的接口,当内置或ansi支持的类型不足时,您可以使用这些接口来定义新的类型。Oracle提供了几种常用的数据类型来服务于广泛的用途,例如任何,XML,或空间类型。此时,您不能对这些数据类型中的任何一种使用Debezium Ora开云体育官方注册网址cle连接器。
默认值
如果为数据库模式中的列指定了默认值,Oracle连接器将尝试将该值传播到相应Kafka记录字段的模式中。开云体育电动老虎机支持大多数常见的数据类型,包括:
字符类型(
字符
,NCHAR
,VARCHAR
,VARCHAR2
,NVARCHAR
,NVARCHAR2
)数字类型(
整数
,数字
等)。时间类型(
日期
,时间戳
,时间间隔
等)。
如果临时类型使用函数调用,例如TO_TIMESTAMP
或TO_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_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实例。
从v $ database中选择log_mode开云体育电动老虎机Log_mode ------------ archivelog . log
将LOG_MODE设置为ARCHIVELOG后,执行命令完成LogMiner的配置。第一个命令将数据库设置为archivelogs,第二开云体育电动老虎机个命令添加补充日志记录。
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用户帐户所做的开云体育电动老虎机数据库更改。但是,它不捕获控件所做的更改 |
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)退出;
项 | 角色名 | 描述 |
---|---|---|
1 |
创建会话 |
使连接器连接到Oracle。 |
2 |
设置容器 |
使连接器能够在可插拔数据库之间切换。开云体育电动老虎机只有当Oracle安装启用了容器数据库支持(CDB)时才需要这样做。开云体育电动老虎机 |
3. |
在v_ $ databas开云体育电动老虎机e上选择 |
使连接器能够读取 |
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上执行 |
控件中的方法 |
14 |
在dbms_logmnr_d上执行 |
控件中的方法 |
15至23岁 |
选择v_ $.... |
允许连接器读取这些表。连接器必须能够读取有关Oracle重做和归档日志的信息,以及当前事务状态,以准备Oracle LogMiner会话。没有这些授权,连接器将无法运行。 |
备用数据库开云体育电动老虎机
可以将Oracle数开云体育电动老虎机据库配置为物理或逻辑备用环境,以便在生产失败后进行恢复。此时,Debezium Oracle开云体育官方注册网址连接器不能使用物理或逻辑备用数据库作为更改事件源。开云体育电动老虎机有一个开放的Jira问题调查这种支持。
故障恢复数据库开云体育电动老虎机
在Oracle生产故障的情况下,通常存在逻辑或物理备用。当发生故障并将备用实例提升到生产时,在Debezium Oracle连接器连接到数据库之前,必须为读/写事务打开数据库。开云体育官方注册网址开云体育电动老虎机
在物理备用情况下,备用是生产的精确副本,这意味着SCN值是相同的。在使用物理备用服务器时,一旦数据库打开,重新配置Debezium Oracle连接器以使用备用服务器的主机名就足够了。开云体育官方注册网址开云体育电动老虎机
在逻辑备用的情况下,备用数据库不是生产数据库的精确副本,因此备用数据库中的SCN偏移量与生产数据库中的不同。开云体育电动老虎机如果使用逻辑备用,为了确保Debezium不会错过任何更改事件,在打开数据库之后,配置一个新的连接器开云体育官方注册网址并执行一个新的数据库快照。开云体育电动老虎机
部署
要部署Debezium 开云体育官方注册网址Oracle连接器,您需要安装Debezium Oracle连接器归档文件,配置连接器,并通过将其配置添加到Kafka Connect来启动连接器。
已安装Orac开云体育电动老虎机le数据库配置为与Debezium连接器一起工作开云体育官方注册网址。
下载Debezium开云体育官方注册网址Oracle连接器插件归档。
将文件解压缩到Kafka Connect环境中。
下载Oracle JDBC驱动程序并将下载的驱动程序文件解压缩到包含Debezium Oracle连接器JAR文件的目录中。开云体育官方注册网址
添加包含JAR文件的目录卡夫卡连接的
plugin.path
。重新启动Kafka Connect进程以获取新的JAR文件。
开云体育官方注册网址Debezium Oracle连接器配置
通常,通过提交指定连接器配置属性的JSON请求来注册开云体育官方注册网址Debezium Oracle连接器。下面的示例显示了一个JSON请求,用于注册具有逻辑名称的Debezium Oracle连接器的实例开云体育官方注册网址server1
在端口1521:
您可以选择为数据库中的模式和表的子集生成事件。开云体育电动老虎机您还可以选择忽略、屏蔽或截断包含敏感数据、大于指定大小或不需要的列。
{"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连接到数据库。开云体育电动老虎机
{"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集群。
已安装D开云体育官方注册网址ebezium Oracle连接器。
创建一个配置用于Oracle连接器。
使用Kafka Connect REST API将连接器配置添加到Kafka Connect集群。
连接器启动后,它执行一致性快照连接器所配置的Oracle数开云体育电动老虎机据库。然后连接器开始为行级操作生成数据更改事件,并将更改事件记录流式传输到Kafka主题。
可插拔与不可插拔数据库开云体育电动老虎机
Oracle数开云体育电动老虎机据库支持以下部署类型:
- 容器数据库(CDB)开云体育电动老虎机
-
可以开云体育电动老虎机包含多个可插拔数据库(pdb)的数据库。开云体育电动老虎机数据库客户机连接到每个PDB,就像它是一个标准的非cdb数据库一样。
- 非容器数据库(non-CDB开云体育电动老虎机)
-
一个标准的Oracle数据库,不支持开云体育电动老虎机创建可插拔的数据库。
{"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一起使用时,必须为该属性指定一个值 |
{"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连接器具有许多配置属性,您可以使用这些属性为应用程序实现正确的连接器行为。许多属性都有默认值。有关属性的信息组织如下:
开云体育电动老虎机数据库模式历史连接器配置属性控制Debezium如何处理从数据开云体育官方注册网址库模式历史主题中读取的事件。开云体育电动老虎机
传递数据库驱动程序属性开云体育电动老虎机它们控制数据库驱动程序的行为。开云体育电动老虎机
必需的Debezi开云体育官方注册网址um Oracle连接器配置属性
以下配置属性是要求除非有默认值可用。
财产 |
默认的 |
描述 |
||
没有默认的 |
连接器的唯一名称。尝试用相同的名称再次注册将失败。(所有Kafka Connect连接器都需要此属性。) |
|||
没有默认的 |
连接器的Java类的名称。总是使用的值 |
|||
没有默认的 |
控件的符号名称的列表,以逗号分隔自定义转换器连接器可以使用的实例。 对于为连接器配置的每个转换器,还必须添加一个
例如, 布尔。类型:io.debezium.connector.oracle.converters.NumberOneToBooleanConverter 如果希望进一步控制已配置转换器的行为,可以添加一个或多个配置参数,以便将值传递给转换器。若要将任何其他配置参数与转换器关联,请在参数名称前加上转换器的符号名称。 布尔。选择器:。*MYTABLE.FLAG,.*.IS_ARCHIVED |
|||
|
要为此连接器创建的最大任务数。Oracle连接器始终使用单个任务,因此不使用此值,因此默认值始终是可接受的。 |
|||
没有默认的 |
Oracle数据库服务器的IP地址或主机名。开云体育电动老虎机 |
|||
没有默认的 |
Oracle数据库服务器的整型端口号。开云体育电动老虎机 |
|||
没有默认的 |
连接器用于连接到Oracle数据库服务器的Oracle用户帐户名。开云体育电动老虎机 |
|||
没有默认的 |
连接Oracle数据库服务器时使用的密码。开云体育电动老虎机 |
|||
没有默认的 |
要连接的数据库的名称。开云体育电动老虎机使用CDB + PDB模型时,必须为CDB名称。 |
|||
没有默认的 |
指定原始数据库JDBC URL。开云体育电动老虎机使用此属性可以在定义该数据库连接时提供灵活性。开云体育电动老虎机有效值包括原始TNS名称和RAC连接字符串。 |
|||
没有默认的 |
要连接的Oracle可插拔数据库的名称。开云体育电动老虎机仅在容器数据库(CDB)安装中使用此属性。开云体育电动老虎机 |
|||
没有默认的 |
Topic前缀,该前缀为连接器从中捕获更改的Oracle数据库服务器提供名称空间。开云体育电动老虎机您设置的值用作连接器发出的所有Kafka主题名称的前缀。指定在Debezium环境中所有连接器中唯一的主题前缀。开云体育官方注册网址支持以下字符:字母、数字、“-”、“。”和“_”。
|
|||
|
连接器在处理数据库更改时使用的适配器实现。开云体育电动老虎机可设置的值如下: |
|||
最初的 |
指定连接器用于捕获表的快照的模式。可设置的值如下:
快照完成后,连接器继续从数据库的重做日志中读取更改事件,除非以下情况开云体育电动老虎机 有关更多信息,请参见表 |
|||
共享 |
控制连接器是否持有表锁以及持有多长时间。表锁防止在连接器执行快照时发生某些类型的更改表操作。可设置的值如下:
|
|||
中指定的所有表 |
一个可选的、逗号分隔的正则表达式列表,它匹配全限定名称( 要匹配表的名称,Debezium应用指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与表的整个名称字符串匹配;它不匹配可能出现在表名中的子字符串。 |
|||
没有默认的 |
指定要包含在快照中的表行。如果希望快照仅包含表中行的子集,请使用该属性。此属性仅影响快照。它不适用于连接器从日志中读取的事件。 该属性包含表单中以逗号分隔的全限定表名列表 从一个 “snapshot.select.statement。覆盖”:“客户。订单", "snapshot.select.statement.overrides.customer.orders": "SELECT * FROM [customers].[orders] WHERE delete_flag = 0 ORDER BY id DESC" 在生成的快照中,连接器仅包含以下记录 |
|||
没有默认的 |
一个可选的、以逗号分隔的正则表达式列表,该列表与您要使用的模式名称匹配想要捕获更改。在使用LogMiner实现的环境中,只能使用POSIX正则表达式。中未包含的任何模式名称 要匹配模式的名称,Debezium应用指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与模式的整个名称字符串匹配;它不匹配可能出现在模式名称中的子字符串。 |
|||
|
布尔值,指定连接器是否应该解析和发布元数据对象上的表和列注释。启用该选项将对内存使用产生影响。逻辑模式对象的数量和大小在很大程度上影响Debezium连接器消耗的内存量,并且向每个连接器添加可能较大的字符串数据可能非常昂贵。开云体育官方注册网址 |
|||
没有默认的 |
一个可选的、以逗号分隔的正则表达式列表,该列表与您要使用的模式名称匹配不想要捕获更改。在使用LogMiner实现的环境中,只能使用POSIX正则表达式。 要匹配模式的名称,Debezium应用指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与模式的整个名称字符串匹配;它不匹配可能出现在模式名称中的子字符串。 |
|||
没有默认的 |
一个可选的逗号分隔的正则表达式列表,用于匹配要捕获的表的完全限定表标识符。如果您使用LogMiner实现,则只能使用带有此属性的POSIX正则表达式。设置此属性后,连接器仅从指定的表捕获更改。每个表标识符使用以下格式: 要匹配表的名称,Debezium应用指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与表的整个名称字符串匹配;它不匹配可能出现在表名中的子字符串。 |
|||
没有默认的 |
一个可选的以逗号分隔的正则表达式列表,该列表与要从监视中排除的表的完全限定表标识符匹配。如果您使用LogMiner实现,则只能使用带有此属性的POSIX正则表达式。连接器从排除列表中未指定的任何表捕获更改事件。使用以下格式指定每个表的标识符: 要匹配表的名称,Debezium应用指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与表的整个名称字符串匹配;它不匹配可能出现在表名中的子字符串。 |
|||
没有默认的 |
一个可选的、以逗号分隔的正则表达式列表,它与希望包含在更改事件消息值中的列的完全限定名相匹配。在使用LogMiner实现的环境中,只能使用POSIX正则表达式。列的全限定名使用以下格式: 要匹配列的名称,Debezium应用指定为开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式是针对列的整个名称字符串进行匹配的,它不匹配列名中可能出现的子字符串。 |
|||
没有默认的 |
一个可选的、以逗号分隔的正则表达式列表,该列表与要从更改事件消息值中排除的列的完全限定名称相匹配。在使用LogMiner实现的环境中,只能使用POSIX正则表达式。全限定列名使用以下格式: 要匹配列的名称,Debezium应用指定为开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式是针对列的整个名称字符串进行匹配的,它不匹配列名中可能出现的子字符串。 |
|||
N/A |
一个可选的、以逗号分隔的正则表达式列表,用于匹配基于字符的列的完全限定名。列的完全限定名属于表单 的散列值组成的假名hashAlgorithm和盐。基于所使用的散列函数,将维护引用完整性,同时用假名替换列值。支持的散列函数在MessageDigest节Java加密体系结构标准算法名称文档。 column.mask.hash.sha with.salt——256.。CzQMA0cB5K =库存。订单。customerName, inventory.shipment.customerName 如有必要,假名会自动缩短为该列的长度。连接器配置可以包含指定不同散列算法和盐的多个属性。 |
|||
字节 |
指定二进制( |
|||
没有一个 |
指定如何调整模式名称以与连接器使用的消息转换器兼容。可能的设置:
|
|||
|
指定连接器应如何处理的浮点值
|
|||
|
指定连接器应如何处理的值 |
|||
|
指定连接器在处理事件期间应如何对异常作出反应。您可以设置以下选项之一:
|
|||
|
一个正整数值,指定在此连接器的每次迭代期间要处理的每批事件的最大大小。 |
|||
|
指定阻塞队列可容纳的最大记录数的正整数值。当Debe开云体育官方注册网址zium从数据库读取事件流时,它将事件放在阻塞队列中,然后将开云体育电动老虎机它们写入Kafka。当连接器接收消息的速度比写入Kafka的速度快,或者Kafka不可用时,阻塞队列可以为从数据库中读取更改事件提供回压。开云体育电动老虎机当连接器定期记录偏移量时,将忽略队列中保存的事件。的值 |
|||
|
一个长整数值,以字节为单位指定阻塞队列的最大容量。默认情况下,没有为阻塞队列指定卷限制。若要指定队列可以使用的字节数,请将此属性设置为正长值。 |
|||
|
指定连接器在每次迭代期间等待新更改事件出现的毫秒数的正整数值。 |
|||
|
控制是否删除事件后跟一个墓碑事件。可能取值如下:
在一个源记录被删除后,一个墓碑事件(默认行为)使Kafka能够完全删除所有共享被删除行密钥的事件日志压实启用。 |
|||
没有默认的 |
一个表达式列表,指定连接器用来为更改事件记录形成自定义消息键的列,它将更改事件记录发布到指定表的Kafka主题。 默认情况下,Debezi开云体育官方注册网址um使用表的主键列作为它发出的记录的消息键。为了代替默认值,或者为缺少主键的表指定键,您可以基于一个或多个列配置自定义消息键。 |
|||
没有默认的 |
一个可选的、以逗号分隔的正则表达式列表,用于匹配基于字符的列的完全限定名。如果您希望连接器屏蔽一组列的值,例如,如果它们包含敏感数据,请设置此属性。集 列的全限定名遵循以下格式: 您可以在单个配置中指定具有不同长度的多个属性。 |
|||
没有默认的 |
一个可选的以逗号分隔的正则表达式列表,用于通过用星号替换字符来屏蔽更改事件消息中的列名( |
|||
没有默认的 |
一个可选的、逗号分隔的正则表达式列表,它与您希望连接器为其发出表示列元数据的额外参数的列的完全限定名相匹配。设置此属性后,连接器将以下字段添加到事件记录的模式中:
这些参数分别传播列的原始类型名称和长度(对于可变宽度类型)。 列的全限定名遵循以下格式之一: |
|||
没有默认的 |
一个可选的、逗号分隔的正则表达式列表,它指定为数据库中的列定义的数据类型的完全限定名称。开云体育电动老虎机设置此属性后,对于具有匹配数据类型的列,连接器将发出事件记录,这些记录在其模式中包含以下额外字段:
这些参数分别传播列的原始类型名称和长度(对于可变宽度类型)。 列的全限定名遵循以下格式之一: 有关oracle特定数据类型名称的列表,请参见Oracle数据类型映射。 |
|||
|
以毫秒为单位指定连接器向心跳主题发送消息的频率。 |
|||
没有默认的 |
指定当连接器发送心跳消息时连接器在源数据库上执行的查询。开云体育电动老虎机 设置此属性并创建心跳表以接收心跳消息,以解决以下情况开云体育官方注册网址Debezium无法同步与高流量数据库位于同一主机上的低流量数据库的偏移量开云体育电动老虎机。在连接器将记录插入到配置的表中之后,它能够接收来自低流量数据库的更改,并确认数据库中的SCN更改,以便与代理同步偏移量。开云体育电动老虎机 |
|||
没有默认的 |
指定连接器在启动后获取快照之前等待的间隔(以毫秒为单位)。 |
|||
|
指定在创建快照时应一次从每个表中读取的最大行数。连接器以指定大小的多个批次读取表内容。 |
|||
没有默认的 |
指定给定查询的每次数据库往返将获取的行数。开云体育电动老虎机默认为JDBC驱动程序的默认获取大小。 |
|||
|
指定字段名称是否规范化以符合Avro命名要求。有关更多信息,请参见Avro命名。 |
|||
|
将属性设置为 看到事务的元数据有关更多详情。 |
|||
|
指定挖掘策略,该策略控制Oracle LogMiner如何构建和使用给定的数据字典来将表和列id解析为名称。 |
|||
|
缓冲区类型控制连接器如何管理缓冲事务数据。 + |
|||
|
事务缓冲区中事务能够拥有的最大事件数。事件计数超过此阈值的事务不会发出,并将被放弃。默认行为是没有事务事件阈值。 |
|||
没有默认的 |
Infinispan事务缓存的XML配置。有关更多信息,请参见Infinispan事件缓冲。 |
|||
没有默认的 |
Infinispan事件缓存的XML配置。有关更多信息,请参见Infinispan事件缓冲。 |
|||
没有默认的 |
Infinispan处理事务缓存的XML配置。有关更多信息,请参见Infinispan事件缓冲。 |
|||
没有默认的 |
Infinispan模式的XML配置更改缓存。 |
|||
|
指定在连接器以预期的优雅方式停止后是否删除缓冲状态。 |
|||
|
在使用新会话之前,LogMiner会话可以激活的最大毫秒数。 |
|||
|
此连接器尝试从重做/归档日志中读取的最小SCN间隔大小。活动批大小也会根据需要增加/减少这个数量,以便在需要时调优连接器吞吐量。 |
|||
|
该连接器在读取重做/归档日志时使用的最大SCN间隔大小。 |
|||
|
连接器用于从重做/归档日志中读取数据的起始SCN间隔大小。 |
|||
|
连接器从重做/归档日志中读取数据后和再次开始读取数据之前的最小休眠时间。单位为毫秒。 |
|||
|
连接器在从重做/归档日志中读取数据之后和再次开始读取数据之前休眠的最大时间。单位为毫秒。 |
|||
|
连接器从重做/归档日志中读取数据后和再次开始读取数据之前的休眠起始时间。单位为毫秒。 |
|||
|
当从logminer读取数据时,连接器用于调优最佳睡眠时间的最大上下时间。单位为毫秒。 |
|||
|
过去从SYSDATE到挖掘归档日志的小时数。当默认设置( |
|||
|
控制连接器是否仅从归档日志或在线重做日志和归档日志的组合中挖掘更改(默认值)。 |
|||
|
连接器在轮询之间休眠的毫秒数,以确定启动系统更改号是否在存档日志中。如果 |
|||
|
正整数值,指定在重做日志切换之间保留长时间运行事务的小时数。当设置为 LogMiner适配器维护所有正在运行的事务的内存缓冲区。因为在检测到提交或回滚之前,作为事务一部分的所有DML操作都会被缓冲,所以应该避免长时间运行的事务,以免溢出缓冲区。任何超过此配置值的事务都将被完全丢弃,并且连接器不会为作为该事务一部分的操作发出任何消息。虽然此选项允许根据具体情况配置该行为,但我们计划在未来的版本中通过添加可伸缩的事务缓冲区来增强该行为,(请参阅dbz - 3123)。 |
|||
没有默认的 |
指定使用LogMiner挖掘归档日志时配置的Oracle归档目的地。 |
|||
没有默认的 |
要从LogMin开云体育电动老虎机er查询中排除的数据库用户列表。如果您希望捕获过程始终排除特定用户所做的更改,则设置此属性可能会很有用。 |
|||
|
指定一个值,连接器将该值与当前和以前的SCN值之间的差进行比较,以确定是否存在SCN间隙。如果SCN值相差大于规定值,且时间差小于 |
|||
|
指定一个值(以毫秒为单位),连接器将该值与当前和以前的SCN时间戳之间的差进行比较,以确定是否存在SCN间隙。如果时间戳之间的差异小于指定值,并且SCN增量大于 |
|||
|
控制是否在更改事件中发出大对象(CLOB或BLOB)列值。 |
|||
|
指定连接器提供的常量,以指示原始值未改变,并且不是由数据库提供的。开云体育电动老虎机 |
|||
没有默认的 |
Oracle RAC (Real Application Clusters)节点主机名或地址的逗号分隔列表。为了与Oracle RAC部署兼容,需要这个字段。 使用以下方法之一指定RAC节点列表:
方法为数据库提供原始JDBC URL开云体育电动老虎机 |
|||
|
希望连接器在流式传输期间跳过的操作类型的逗号分隔列表。您可以配置连接器跳过以下类型的操作:
默认情况下,只跳过截断操作。 |
|||
无默认值 |
用于发送的数据集合的全限定名称信号到连接器。当您对Oracle可插拔数据库(PDB)使用此属性时,请将其值设置为根数据库的名称。开云体育电动老虎机 |
|||
|
连接器在增量快照块期间取出并读入内存的最大行数。增加块大小可以提供更高的效率,因为快照运行的快照查询更少,而大小更大。但是,更大的块大小也需要更多的内存来缓冲快照数据。将块大小调整为在您的环境中提供最佳性能的值。 |
|||
|
TopicNamingStrategy类的名称应用于确定数据更改、模式更改、事务、心跳事件等的主题名称,默认为 |
|||
|
指定主题名称的分隔符,默认为 |
|||
|
用于在有界并发散列映射中保存主题名称的大小。此缓存将有助于确定与给定数据集合对应的主题名称。 |
|||
|
控制连接器向其发送心跳消息的主题的名称。主题名称具有以下模式: |
|||
|
控制连接器向其发送事务元数据消息的主题的名称。主题名称具有以下模式: |
开云体育官方注册网址Debezium Oracle连开云体育电动老虎机接器数据库模式历史配置属性
开云体育官方注册网址Debezium提供了一套schema.history.internal。*
控制连接器如何与模式历史主题交互的属性。
下表描述了schema.history.internal
属性,用于配置Debezium连接器。开云体育官方注册网址
财产 | 默认的 | 描述 |
---|---|---|
没有默认的 |
连接器存储数据库模式历史的Kafka主题的全称。开云体育电动老虎机 |
|
没有默认的 |
连接器用于建立到Kafka集群的初始连接的主机/端口对列表。该连接用于检索连接器先前存储的数据库模式历史,并用于写入从源数据库读取的每个DDL语句开云体育电动老虎机。每一对都应该指向Kafka Connect进程使用的同一个Kafka集群。 |
|
|
一个整数值,指定连接器在启动/恢复期间轮询持久数据时应等待的最大毫秒数。默认值是100ms。 |
|
|
一个整数值,指定连接器在使用Kafka管理客户端获取集群信息时应该等待的最大毫秒数。 |
|
|
一个整数值,指定了当使用kafka管理客户端创建kafka历史主题时连接器应该等待的最大毫秒数。 |
|
|
在连接器恢复失败并出现错误之前,连接器应该尝试读取持久历史数据的最大次数。未接收到数据后等待的最长时间为 |
|
|
一个布尔值,指定连接器是应该忽略格式错误或未知的数据库语句,还是应该停止处理,以便人工修复问题。开云体育电动老虎机安全默认值为 |
|
|
一个布尔值,指定连接器是否应该记录所有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 >
。
除非快照操作处于活动状态,或者自上次连接器启动以来发生了快照,否则不会公开快照指标。
下表列出了可用的快照指标。
属性 | 类型 | 描述 |
---|---|---|
|
连接器读取的最后一个快照事件。 |
|
|
自连接器读取并处理最近事件以来的毫秒数。 |
|
|
自上次启动或重置以来,此连接器所看到的事件总数。 |
|
|
已被连接器上配置的包含/排除列表过滤规则过滤的事件数。 |
|
|
连接器捕获的表列表。 |
|
|
用于在快照和主Kafka连接循环之间传递事件的队列长度。 |
|
|
用于在快照和主Kafka Connect循环之间传递事件的队列的空闲容量。 |
|
|
快照中包含的表的总数。 |
|
|
快照尚未复制的表的数量。 |
|
|
快照是否启动。 |
|
|
快照是否暂停。 |
|
|
快照是否中止。 |
|
|
快照是否完成。 |
|
|
快照到目前为止所花费的总秒数,即使快照尚未完成。还包括快照暂停的时间。 |
|
|
快照暂停的总秒数。如果快照暂停多次,则暂停时间加起来。 |
|
|
包含快照中为每个表扫描的行数的Map。在处理过程中,表被增量地添加到Map中。每扫描1万行并完成一个表时更新一次。 |
|
|
队列的最大缓冲区,以字节为单位。这个度量是可用的,如果 |
|
|
队列中记录的当前容量(以字节为单位)。 |
当执行增量快照时,连接器还提供以下额外的快照指标:
属性 | 类型 | 描述 |
---|---|---|
|
当前快照块的标识符。 |
|
|
定义当前块的主键集的下界。 |
|
|
定义当前块的主键集的上界。 |
|
|
当前快照表的主键集的下界。 |
|
|
当前快照表的主键集的上限。 |
流指标
的MBean是开云体育官方注册网址debezium.oracle: type = connector-metrics、上下文=流媒体服务器=< oracle.server.name >
。
下表列出了可用的流度量。
属性 | 类型 | 描述 |
---|---|---|
|
连接器读取的最后一个流事件。 |
|
|
自连接器读取并处理最近事件以来的毫秒数。 |
|
|
自上次启动或指标重置以来,此连接器所看到的事件总数。 |
|
|
自上次启动或指标重置以来,此连接器所看到的创建事件总数。 |
|
|
自上次启动或指标重置以来,此连接器所看到的更新事件总数。 |
|
|
自上次启动或指标重置以来,此连接器所看到的删除事件总数。 |
|
|
已被连接器上配置的包含/排除列表过滤规则过滤的事件数。 |
|
|
连接器捕获的表列表。 |
|
|
用于在streamer和主Kafka Connect循环之间传递事件的队列长度。 |
|
|
用于在streamer和主Kafka Connect循环之间传递事件的队列的空闲容量。 |
|
|
表示连接器当前是否连接到数据库服务器的标志。开云体育电动老虎机 |
|
|
上次更改事件的时间戳与处理该事件的连接器之间的毫秒数。这些值将包含运行数据库服务器和连接器的机器上的时钟之间的任何差异。开云体育电动老虎机 |
|
|
已提交的已处理事务的数量。 |
|
|
最后接收到的事件的坐标。 |
|
|
最后处理的事务的事务标识符。 |
|
|
队列的最大缓冲区,以字节为单位。这个度量是可用的,如果 |
|
|
队列中记录的当前容量(以字节为单位)。 |
Debe开云体育官方注册网址zium Oracle连接器还提供了以下额外的流度量:
属性 | 类型 | 描述 |
---|---|---|
|
最近处理过的系统变更号。 |
|
|
事务缓冲区中最早的系统更改号。 |
|
|
事务缓冲区中最后提交的系统更改号。 |
|
|
当前写入连接器偏移量的系统更改号。 |
|
|
当前挖掘的日志文件的数组。 |
|
|
为任何LogMiner会话指定的最小日志数。 |
|
|
为任何LogMiner会话指定的最大日志数。 |
|
|
每个已挖掘日志文件的当前状态的数组,格式为 |
|
|
数据库在最近一天执行日志切换的次数。开云体育电动老虎机 |
|
|
在最后一次LogMiner会话查询中观察到的DML操作的数量。 |
|
|
在处理单个LogMiner会话查询时观察到的DML操作的最大数量。 |
|
|
观察到的DML操作的总数。 |
|
|
执行的LogMiner会话查询的总数(也称为批次)。 |
|
|
最后一次LogMiner会话查询获取的持续时间(以毫秒为单位)。 |
|
|
LogMiner会话查询获取的最大持续时间(以毫秒为单位)。 |
|
|
处理最后一批LogMiner查询的持续时间以毫秒为单位。 |
|
|
解析DML事件SQL语句所花费的时间(以毫秒为单位)。 |
|
|
以毫秒为单位启动最后一个LogMiner会话的持续时间。 |
|
|
启动LogMiner会话的最长时间(以毫秒为单位)。 |
|
|
连接器启动LogMiner会话的总持续时间(以毫秒为单位)。 |
|
|
单个LogMiner会话处理结果的最小持续时间(以毫秒为单位)。 |
|
|
单个LogMiner会话处理结果的最大持续时间(以毫秒为单位)。 |
|
|
LogMiner会话处理结果的总持续时间(以毫秒为单位)。 |
|
|
JDBC驱动程序从日志挖掘视图获取要处理的下一行所花费的总持续时间(以毫秒为单位)。 |
|
|
跨所有会话从日志挖掘视图处理的行总数。 |
|
|
日志挖掘查询每次数据库往返获取的条目数。开云体育电动老虎机 |
|
|
连接器在从日志挖掘视图中获取另一批结果之前休眠的毫秒数。 |
|
|
从日志挖掘视图处理的最大行数/秒。 |
|
|
从日志挖掘中处理的平均行数/秒。 |
|
|
从日志挖掘视图中处理的最后一批的平均行数/秒。 |
|
|
检测到的连接问题的数量。 |
|
|
在丢弃之前,连接器的内存缓冲区保留事务而不提交或回滚的小时数。看到 |
|
|
事务缓冲区中当前活动事务的数量。 |
|
|
事务缓冲区中提交的事务数。 |
|
|
由于超出事务大小而被丢弃的事务数 |
|
|
事务缓冲区中回滚的事务数。 |
|
|
事务缓冲区中每秒提交的事务的平均数量。 |
|
|
事务缓冲区中注册的DML操作的数量。 |
|
|
事务日志中发生更改与将更改添加到事务缓冲区之间的时间差(以毫秒为单位)。 |
|
|
事务日志中发生更改与将更改添加到事务缓冲区之间的最大时间差(以毫秒为单位)。 |
|
|
在事务日志中发生更改和将更改添加到事务缓冲区之间的最小时间差(以毫秒为单位)。 |
|
|
最近放弃的事务标识符的数组,由于它们的年龄而从事务缓冲区中删除。看到 |
|
|
已在事务缓冲区中挖掘并回滚的最新事务标识符的数组。 |
|
|
上一次事务缓冲区提交操作的持续时间(以毫秒为单位)。 |
|
|
最长事务缓冲区提交操作的持续时间(以毫秒为单位)。 |
|
|
检测到的错误数。 |
|
|
检测到的警告数量。 |
|
|
系统变更号被检查进度并保持不变的次数。高值可能表示长时间运行的事务正在进行中,并且正在阻止连接器将最近处理的系统更改号刷新到连接器的偏移量。当条件最优时,该值应接近或等于 |
|
|
已检测到但DDL解析器无法解析的DDL记录的数目。这应该一直是 |
|
|
当前挖掘会话的用户全局区域(UGA)内存消耗(以字节为单位)。 |
|
|
所有挖掘会话中最大挖掘会话的用户全局区域(UGA)内存消耗(以字节为单位)。 |
|
|
当前挖掘会话的进程全局区域(PGA)内存消耗(以字节为单位)。 |
|
|
所有挖掘会话的最大挖掘会话进程全局区域(PGA)内存消耗(以字节为单位)。 |
模式历史度量
的MBean是开云体育官方注册网址debezium.oracle: type = connector-metrics、上下文= schema-history服务器=< oracle.server.name >
。
下表列出了可用的模式历史指标。
属性 | 类型 | 描述 |
---|---|---|
|
之一 |
|
|
恢复开始的时间(以epoch秒为单位)。 |
|
|
在恢复阶段读取的更改数量。 |
|
|
在恢复和运行时期间应用的模式更改的总数。 |
|
|
自上次更改从历史存储中恢复以来所经过的毫秒数。 |
|
|
自应用上次更改以来经过的毫秒数。 |
|
|
从历史存储区恢复的最后一次更改的字符串表示形式。 |
|
|
最后应用的更改的字符串表示形式。 |
代理模式演化
Oracle连接器通过解析重做日志中的DDL自动跟踪和应用表模式更改。如果DDL解析器遇到不兼容的语句(如果需要),连接器将提供另一种方法来应用模式更改。
默认情况下,连接器在遇到无法解析的DDL语句时停止。你可以用Debezium开云体育官方注册网址信号从这样的DDL语句触发数据库模式的更新。开云体育电动老虎机
模式更新操作的类型为模式变化
。此操作更新信号参数中枚举的所有表的模式。该消息不包含对架构的更新。相反,它包含完整的新模式结构。
名字 | 描述 |
---|---|
|
Oracle数据库的名称。开云体育电动老虎机 |
|
应用更改的模式的名称。 |
|
包含所请求的架构更新的数组。 |
|
通常是模式更改的类型 |
|
表的全限定名 |
|
表的全限定名 |
|
表使用的字符集名称如果与数据库默认值不同开云体育电动老虎机 |
|
具有组成主键的列名称的数组 |
|
包含列元数据的数组 |
|
列的名称 |
|
定义的列的JDBC类型JDBC API |
|
列类型的名称 |
|
完整的列类型定义 |
|
列字符集与默认值不同 |
|
列的长度/大小约束 |
|
数值列的刻度 |
|
以开头的列在表中的位置 |
|
布尔 |
|
布尔 |
|
布尔 |
后模式变化
信号插入后,必须重新启动连接器,并更改配置,其中包括指定schema.history.internal.skip.unparseable.ddl
选择真正的
。在连接器的提交SCN超越DDL更改之后,为了防止意外跳过不可解析的DDL语句,应将连接器配置返回到以前的状态。
列 | 价值 |
---|---|
id |
|
类型 |
|
数据 |
|
xstream支持
默认情况开云体育官方注册网址下,Debezium Oracle连接器使用本地Oracle LogMiner获取更改。连接器可以切换为使用Oracle XStream。要配置连接器以使用Oracle XStream,必须应用与LogMiner不同的特定数据库和连接器配置。开云体育电动老虎机
要使用XStream API,您必须拥有GoldenGate产品的许可证。不需要安装GoldenGate。
准备数据库开云体育电动老虎机
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连接器要求为用户帐户设置特定的权限,以便连接器可以捕获更改事件。下面简要介绍使用多租户数据库模型的这些用户配置。开云体育电动老虎机
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');结束;/退出;
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):
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出站服务器以从可插拔数据库捕获更改时开云体育电动老虎机 |
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并解压缩所需的文件。
从浏览器中下载Oracle即时客户端包对于您的操作系统。
提取存档文件,然后打开
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
复制
ojdbc8.jar
和xstreams.jar
文件,并将它们添加到< kafka_home >/ libs
目录,例如,卡夫卡/ libs
。创建一个环境变量,
LD_LIBRARY_PATH
,并设置为即时客户端目录的路径,例如:LD_LIBRARY_PATH = /道路/ / instant_client /
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
。的视交叉上核
字段是一个字符串,表示连接器在捕获更改时使用的低水位起始位置。找出包含连接器偏移量的主题的名称。的值进行配置
offset.storage.topic
配置属性。找出连接器的最后一个偏移量、存储该连接器的键,并确定用于存储该偏移量的分区。可以使用
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
最后一个偏移量是键后面的内容。要移动回之前的偏移量,连接器应该停止,并且必须发出以下命令:
echo '["库存-连接器",{"server":"server1"}]|{"scn":"3245675000","commit_scn":"324567500"}' | \ kafkacat -P -b localhost -t my_connect_offsets -K \| -P
这将写入分区
11
的my_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用户或超级用户执行以下任务:开云体育官方注册网址
在终端上执行如下命令:
Sysctl -w net.ipv4.tcp_keepalive_time=60
编辑
/etc/sysctl.conf
并将以下变量的值设置为:net.ipv4.tcp_keepalive_time = 60
重新配置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.mode
来schema_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配置选项,以防止连接器访问此类表。