开云体育官方注册网址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
连接器配置属性。默认情况下,连接器的快照模式设置为最初的
.
当快照模式为默认时,连接器将完成以下任务来创建快照:
确定要捕获的表
获得一个
行共享模式
锁定每个被监视的表,以防止在创建快照期间发生结构更改。开云体育官方注册网址Debezium只能在很短的时间内保存锁。从服务器的重做日志中读取当前的系统变更号(SCN)位置。
捕获所有相关表的结构。
释放步骤2中获取的锁。
扫描在第3步中读取的SCN位置上有效的所有相关数据库开云体育电动老虎机表和模式(
从scn123开始选择*
),生成一个读
事件,然后将事件记录写入特定于表的Kafka主题。在连接器偏移量中记录快照的成功完成。
快照进程开始后,如果由于连接器故障、rebalance等原因导致快照进程中断,快照进程会在连接器重新启动后重新启动。在连接器完成初始快照之后,它继续从它在步骤3中读取的位置进行流处理,这样它就不会错过任何更新。如果连接器由于任何原因再次停止,在它重新启动后,它将从之前停止的地方恢复流更改。
设置 | 描述 |
---|---|
|
连接器执行数据库快照,如开云体育电动老虎机创建初始快照的默认工作流.快照完成后,连接器开始为后续数据库更改传输事件记录。开云体育电动老虎机 |
|
连接器捕获所有相关表的结构,执行中描述的所有步骤默认快照工作流,除了它不创造 |
Ad hoc快照
该功能目前处于孵化状态,即准确的语义,配置选项等可能会根据我们收到的反馈在未来的版本中改变。请让我们知道,如果你遇到任何问题,而使用这个扩展。 |
默认情况下,连接器仅在第一次启动后运行初始快照操作。在初始快照之后,在正常情况下,连接器不会重复快照过程。连接器捕获的任何未来更改事件数据都只通过流处理传入。
但是,在某些情况下,连接器在初始快照期间获得的数据可能会过时、丢失或不完整。为了提供一种重新捕获表数据的机制,Debezium包含了一个执行临时快照的选项。开云体育官方注册网址数据库中的以下更改可能会导致执行临时快照:开云体育电动老虎机
连接器配置被修改以捕获一组不同的表。
Kafka主题被删除,必须重新构建。
数据损坏是由于配置错误或其他问题造成的。
您可以对先前捕获快照的表重新运行快照,方法是启动所谓的特别的快照.临时快照需要使用信号表.通过向Debezium信令表发送信号请求,可以启动一个临时快照。开云体育官方注册网址
当您初始化现有表的临时快照时,连接器将内容追加到已存在的表主题。如果先前存在的主题被删除,Debezium可以自动创建一个主题开云体育官方注册网址自动创建主题启用。
临时快照信号指定要包含在快照中的表。快照可以捕获数据库的全部内容,也可以仅捕获数据库中表的一个子集。开云体育电动老虎机
指定要捕获的表execute-snapshot
发送到信令表的消息。属性的类型execute-snapshot
信号增量
,并提供要包含在快照中的表的名称,如下表所示:
场 | 默认的 | 价值 |
---|---|---|
|
|
指定要运行的快照类型。 |
|
N/A |
包含要快照的表的全限定名称的数组。 |
属性添加项来初始化临时快照execute-snapshot
发送到信令表的信号类型。连接器处理消息后,开始快照操作。快照进程读取第一个和最后一个主键值,并使用这些值作为每个表的起点和终点。根据表中条目的数量和配置的块大小,Debezium将表划分为块,然后依次对每个块进行快照,每次快照一个。开云体育官方注册网址
增量快照
该特性目前处于孵化状态。确切的语义、配置选项等等将根据我们收到的反馈在未来的版本中进行更改。请让我们知道,如果你遇到任何问题,而使用这个扩展。 |
为了提供管理快照的灵活性,Debezium包含了一个补充的快照机制,称为开云体育官方注册网址增量快照.增量快照依赖于Debezium机制开云体育官方注册网址发送信号到Debezium连接器开云体育官方注册网址.增量快照基于DDD-3设计文档。
在增量快照中,Debezium不像在初始快照中那样一次性捕获数据库的全部状态,而是在一系列可配置的块中分阶段捕获每个表。开云体育官方注册网址开云体育电动老虎机可以指定希望快照捕获的表和每个块的大小.块大小决定了快照在数据库上的每次获取操作期间收集的行数。开云体育电动老虎机增量快照的默认chunk大小为1kb。
随着增量快照的进行,Debezium使用水印来跟踪进度,维护它捕获的每个表开云体育官方注册网址行的记录。与标准的初始快照过程相比,这种分阶段捕获数据的方法具有以下优点:
您可以在流数据捕获的同时并行运行增量快照,而不是将流数据延迟到快照完成。在整个快照过程中,连接器继续从更改日志中捕获接近实时的事件,并且两个操作都不会阻塞另一个操作。
当增量快照进程中断时,可以恢复增量快照,不会丢失数据。进程恢复后,快照将从它停止的位置开始,而不是从开始重新捕获表。
您可以在任何时候按需运行增量快照,并根据需要重复该过程以适应数据库更新。开云体育电动老虎机例如,在修改连接器配置以向其添加表之后,可以重新运行快照
table.include.list
财产。
运行增量快照时,Debezium根据主键对每个表进行排序,然后根据主键将表分开云体育官方注册网址成块配置的块大小.它逐个块工作,然后捕获块中的每个表行。对于它捕获的每一行,快照都会发出一个读
事件。该事件表示块快照开始时行的值。
随着快照的进行,其他进程可能会继续访问数据库,可能会修改表记录。开云体育电动老虎机为了反映这些变化,插入
,更新
,或删除
操作像往常一样提交到事务日志中。类似地,正在进行的Debezium流处理继续检开云体育官方注册网址测这些更改事件,并向Kafka发出相应的更改事件记录。
在某些情况下,更新
或删除
流流程发出的事件按顺序接收。也就是说,流处理过程可能在快照捕获包含表行的块之前发出修改表行的事件读
事件。当快照最终发出相应的读
事件时,其值已被取代。为了确保按正确的逻辑顺序处理不按顺序到达的增量快照事件,Debezium采用了一种缓冲方案来解决冲突。开云体育官方注册网址只有在快照事件和流事件之间的冲突被解决之后,Debezium才会向Kafka发送事件记录。开云体育官方注册网址
协助解决晚到车辆之间的碰撞读
事件和流事件修改同一表行,Debezium采用了所谓的开云体育官方注册网址快照窗口.快照窗口定义了增量快照为指定表块捕获数据的时间间隔。在块的快照窗口打开之前,Debezium遵循其通常的行为,从事务日志中直接向下游的目标Kaf开云体育官方注册网址ka主题发送事件。但是从特定块的快照打开的那一刻起,直到它关闭,Debezium执行重复数据删除步骤来解决具有相同主键的事件之间的冲突。开云体育官方注册网址
对于每个数据收集,Debezium会发出两种类型的事件,并将开云体育官方注册网址它们的记录存储在一个目的地Kafka主题中。它直接从表捕获的快照记录发出为读
操作。同时,随着用户继续更新数据收集中的记录,事务日志被更新以反映每次提交,Debezium就会发出开云体育官方注册网址更新
或删除
每个更改的操作。
当快照窗口打开时,Debezium开始处理快照块,它将快照记录传递到开云体育官方注册网址内存缓冲区。的主键在快照窗口期间读
缓冲区中的事件与传入流事件的主键进行比较。如果没有匹配到,流事件记录将直接发送到Kafka。如果D开云体育官方注册网址ebezium检测到匹配,它将丢弃缓冲读
事件,并将流记录写入目标主题,因为流事件在逻辑上取代静态快照事件。块的快照窗口关闭后,缓冲区仅包含读
不存在相关事务日志事件的事件。开云体育官方注册网址Debezium释放这些剩余的读
事件到表的Kafka主题。
连接器对每个快照块重复该过程。
目前,创建增量快照的唯一方式是发送自组织快照信号到源数据库上的信令表。开云体育电动老虎机将信号作为SQL提交给表插入
查询。在Debez开云体育官方注册网址ium检测到信号表中的变化后,它读取信号,并运行所请求的快照操作。
提交的查询指定要包含在快照中的表,还可以指定快照操作的类型。目前,快照操作的唯一有效选项是默认值,增量
.
若要指定要包含在快照中的表,请提供数据收集
数组,例如,{“数据收集”:["。MyFirstTable”、“公众。MySecondTable ")}
的数据收集
增量快照信号阵列没有默认值。如果数据收集
数组为空时,Debezium检测开云体育官方注册网址到不需要任何操作,因此不执行快照。
启用信令.
源数据库上存在一个信令数据集合,并且连接器被配置为捕获它。开云体育电动老虎机
信令数据采集在
signal.data.collection
财产。
发送一个SQL查询,将临时增量快照请求添加到信令表:
插入_ < signalTable > _ (id、类型、数据)值(_ < id > _, _的< snapshotType >”_,“{“数据收集”:[_ <表名> _,_ <表名> _”),“类型”:“_ < snapshotType > _“}”);
例如,
INSERT INTO myschema.开云体育官方注册网址debezium_signal (id, type, data) VALUES('ad-hoc-1', 'execute-snapshot', '{"data-collections": ["schema1. data ", ' "data-collections": ["schema1. data ")表”、“schema2.table2”),“类型”:“增量"});
的值
id
,类型
,数据
命令中的参数对应信令表字段.参数说明如下表所示:
表3。向信令表发送增量快照信号的SQL命令字段说明 价值 描述 myschema.开云体育官方注册网址debezium_signal
指定源数据库上信令表的全限定名开云体育电动老虎机
ad-hoc-1
的
id
参数指定分配为id
信号请求的标识符。
使用此字符串标识信令表中条目的日志消息。开云体育官方注册网址Debezium不使用这个字符串。相反,在快照期间,Debezium生成自己的快照开云体育官方注册网址id
字符串作为水印信号。execute-snapshot
指定
类型
参数指定信号要触发的操作。数据收集
的必需组件
数据
信号的字段,该字段指定要包含在快照中的表名数组。
数组按表的全限定名列出表,使用的格式与指定连接器的信令表的名称相同signal.data.collection
配置属性。增量
一个可选的
类型
组成部分数据
信号的字段,指定要运行的快照操作的类型。
目前,唯一有效的选项是默认值,增量
.
指定一个类型
您提交给信令表的SQL查询中的值是可选的。
如果不指定值,连接器将运行增量快照。
下面的示例显示了连接器捕获的增量快照事件的JSON。
{“前”:零,“后”:{“pk”:“1”,“价值”:“新数据”},“源”:{…“快照”:“增量”(1)},“人事处”:“r”,(2)"ts_ms":"1620393591654", "transaction":null}
项 | 字段名 | 描述 |
---|---|---|
1 |
|
指定要运行的快照操作的类型。 |
2 |
|
事件类型。 |
Orac开云体育官方注册网址le的Debezium连接器在运行增量快照时不支持模式更改。 |
主题名称
默认情况下,Oracle连接器为所有人写入更改事件插入
,更新
,删除
对特定于该表的单个Apache Kafka主题的表中发生的操作。连接器使用以下约定来命名更改事件主题:
serverName.schemaName.tableName
下面的列表提供了默认名称组件的定义:
- serverName
-
属性所指定的服务器的逻辑名称
开云体育电动老虎机database.server.name
连接器配置属性。 - schemaName
-
发生操作的模式的名称。
- 的表
-
发生操作的表的名称。
例如,如果实现
是服务器名,库存
是模式名,数据库包含有名称的表吗开云体育电动老虎机订单
,客户
,产品
, Debe开云体育官方注册网址zium Oracle连接器向以下Kafka主题发出事件,对应数据库中的每个表:开云体育电动老虎机
履行。库存。订单履行。库存。客户履行。库存。产品
如果默认的主题名称不满足您的需求,您可以配置自定义的主题名称。要配置自定义主题名称,需要在逻辑主题路由SMT中指定正则表达式。有关使用逻辑主题路由SMT自定义主题命名的详细信息,请参见主题的路由.
架构更改主题
您可以配置Debezium Oracle开云体育官方注册网址连接器,以生成描述应用于数据库中捕获的表的模式更改的模式更改事件。开云体育电动老虎机连接器将模式更改事件写入名为< serverName >
,在那里serverName
中指定的逻辑服务器名是否为开云体育电动老虎机database.server.name
配置属性。
开云体育官方注册网址每当Debezium从一个新表流数据时,它都会向这个主题发出一条新消息。
连接器发送到模式更改主题的消息包含有效负载,并且还可选地包含更改事件消息的模式。架构更改事件消息的有效负载包括以下元素:
-
ddl
-
提供SQL
创建
,改变
,或下降
语句,该语句将导致架构更改。 -
开云体育电动老虎机数据库名
-
语句应用到的数据库的名称。开云体育电动老虎机的价值
开云体育电动老虎机数据库名
作为消息键。 -
tableChanges
-
模式更改后的整个表模式的结构化表示。的
tableChanges
字段包含一个数组,其中包含表中每列的条目。由于结构化表示以JSON或Avro格式表示数据,消费者可以轻松读取消息,而无需首先通过DDL解析器处理它们。
当连接器被配置为捕获表时,它不仅在模式更改主题中存储表的模式更改历史,而且在内部数据库历史主题中存储。开云体育电动老虎机内部数据库历史记录主题仅供开云体育电动老虎机连接器使用,不打算由消费应用程序直接使用。确保需要模式更改通知的应用程序只使用来自模式更改主题的信息。 |
不要对数据库历史主题进行分区。开云体育电动老虎机为了使数据库历史开云体育电动老虎机主题正确地工作,它必须维护连接器发出给它的事件记录的一致的全局顺序。 为了确保topic不被分区分割,可以通过以下方法设置topic的分区数:
|
架构更改主题消息格式处于酝酿状态,可能会在不另行通知的情况下更改。 |
开云体育官方注册网址每当Debezium从一个新表传输数据时,或者当表的结构发生改变时,它都会向这个主题发出一条新消息。
表结构发生变化后,必须遵循模式演化过程. |
下面的示例显示了JSON格式的典型模式更改消息。该消息包含表模式的逻辑表示。
{"schema":{…}, "payload": {"source": {"version": "1.7.2. "Final", "connector": "oracle", "name": "server1", "ts_ms": 1588252618953, "snapshot": "true", "db": "ORCLPDB1", "schema": "开云体育官方注册网址DEBEZIUM", "table": "CUSTOMERS", "txId": null, "scn": "1513734", "commit_scn": "1513734", "lcr_position": nu开云体育电动老虎机ll}, "databaseName": "ORCLPDB1",(1)"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\" ",(2)“tableChanges”:((3){"type": "CREATE",(4)“id”:“\”ORCLPDB1 \”,\“开云体育官方注册网址DEBEZIUM \“\”,\“客户,(5)"表":{(6)"defaultCharsetName": null, "primaryKeyColumnNames": [(7)"ID"], "columns": [(8){"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, " autoincreted ": false, "generated": false}, {"name": "EMAIL", "jdbcType": 12, "nativeType": null, "typeName": "VARCHAR2", "typeExpression": "VARCHAR2", "charsetName": null, "length": 255, "scale": null, "position": 4, "optional": false, " autoincreted ": false, "generated": false}]}}}}}}}}}}}}
项 | 字段名 | 描述 |
---|---|---|
1 |
|
标识包含更改的数据库和模式。开云体育电动老虎机 |
2 |
|
该字段包含负责模式更改的DDL。 |
3. |
|
包含DDL命令生成的模式更改的一个或多个项的数组。 |
4 |
|
描述变化的类型。取值为:
|
5 |
|
创建、修改或删除的表的完整标识符。对于表重命名,此标识符是的连接 |
6 |
|
表示应用更改后的表元数据。 |
7 |
|
组成表主键的列列表。 |
8 |
|
已更改表中每列的元数据。 |
在连接器发送到模式更改主题的消息中,消息键是包含模式更改的数据库的名称。开云体育电动老虎机在下面的示例中,使用有效载荷
字段包含键:
{"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
-
唯一事务标识符的字符串表示形式。
-
event_count
(结束
事件) -
事务发出的事件总数。
-
data_collections
(结束
事件) -
对的数组
data_collection
而且event_count
元素,指示连接器为源自数据集合的更改发出的事件数。
下面的例子显示了一个典型的事务边界消息:
{"status": "BEGIN", "id": "5.6.641", "event_count": null, "data_collections": null} {"status": "END", "id": "5.6.641", "event_count": 2, "data_collections": [{"data_collection": "ORCLPDB1.DEBEZ开云体育官方注册网址IUM. debezium . "CUSTOMER", "event_count": 1}, {"data_collection": "ORCLPDB1.DE开云体育官方注册网址BEZIUM。ORDER", "event_count": 1}]}
连接器将事务事件发出到<开云体育电动老虎机 database.server.name >
.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
可以使用配置附加缓冲区类型infinispan
.还可以将缓冲区类型设置为infinispan
让连接器在嵌入式模式下使用Infinispan来缓存缓冲的事件。使用Infinispan作为缓冲区类型允许将缓存持久化到磁盘。如果你使用infinispan
选项中,还必须设置log.mining.buffer.location
属性指定连接器将持久缓存文件写入的位置。
Infinispan缓冲类型被认为是正在孵化的;缓存格式可能会在不同版本之间发生变化,并且可能需要重新快照。迁移说明将指出是否需要这样做。 此外,当删除使用Infinispan缓冲区的Debezium开云体育官方注册网址 Oracle连接器时,持久化缓存文件不会自动从磁盘中删除。如果新连接器部署将使用相同的缓冲区位置,则应该在部署新连接器之前手动删除这些文件。 |
SCN间隙检测
当Debezium开云体育官方注册网址 Oracle连接器配置为使用LogMiner时,它通过使用基于系统更改号(scn)的开始和结束范围从Oracle收集更改事件。连接器自动管理此范围,根据连接器是否能够近乎实时地处理更改,或者必须处理数据库中由于大型或批量事务而导致的积压,增加或减少该范围。开云体育电动老虎机
在某些情况下,Oracle数据库将系统更改数提前了一个异常高的量,而不是以恒定的开云体育电动老虎机速率增加。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间隙时,Debezium连接器自动使用当前S开云体育官方注册网址CN作为当前挖掘会话范围的端点。这允许连接器快速赶上实时事件,而不需要挖掘中间较小的范围,因为SCN值意外地增加了很多,因此不会返回任何变化。此外,只有在这种情况发生时,连接器才会忽略此迭代的挖掘最大批大小。
SCN间隙检测仅在连接器运行和处理接近实时事件时发生较大SCN增量时可用。 |
数据变更事件
Oracle连接器发出的每个数据更改事件都有一个键和一个值。键和值的结构取决于产生更改事件的表。有关Debezium如何构造主题名称的信息,请参见开云体育官方注册网址主题名称).
Debe开云体育官方注册网址zium Oracle连接器确保所有Kafka连接模式名是有效的Avro模式名.这意味着逻辑服务器名必须以字母字符或下划线([a-z, a-z, _])开头,逻辑服务器名中的其余字符以及模式名和表名中的所有字符必须是字母数字字符或下划线([a-z, a-z, 0-9,\_])。连接器自动将无效字符替换为下划线字符。 当多个逻辑服务器名、模式名或表名之间唯一的区分字符不是有效字符,并且这些字符被下划线替换时,可能会导致意外的命名冲突。 |
开云体育官方注册网址Debezium和Kafka Connect就是围绕这个设计的连续的事件消息流.但是,这些事件的结构可能会随着时间的推移而改变,这对于主题使用者来说可能很难处理。为了方便可变事件结构的处理,Kafka Connect中的每个事件都是自包含的。每个消息键和值都有两部分模式而且有效载荷.模式描述有效负载的结构,而有效负载包含实际数据。
属性执行的更改 |
更改事件键
对于每个更改的表,更改事件键的结构是这样的:在创建事件时,表的主键(或唯一键约束)中的每一列都存在一个字段。
例如,客户
属性中定义的库存
开云体育电动老虎机数据库模式,可能有以下更改事件键:
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);
的值<开云体育电动老虎机 database.server.name >
.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
.
更改事件值
与消息键一样,更改事件消息的值具有模式节和有效载荷部分。Oracle连接器产生的每个更改事件值的有效负载部分都有一个信封结构,使用以下字段:
-
人事处
-
一个包含描述操作类型的字符串值的必填字段。Oracle连接器的值为
c
对于创建(或插入),u
对于更新,d
对于删除,和r
用于读取(在快照的情况下)。 -
之前
-
一个可选字段,如果存在,则包含行状态之前事件发生了。的结构描述
server1.INVENTORY.CUSTOMERS.Value
Kafka Connect模式,其中server1
对象中的所有行使用连接器inventory.customers
表格
-
后
-
一个可选字段,如果存在则包含行状态后事件发生了。结构的描述是相同的
server1.INVENTORY.CUSTOMERS.Value
中使用的Kafka Connect模式之前
. -
源
-
一个必须包含描述事件源元数据结构的字段,在Oracle中包含以下字段:Debezium版本、连接器名称、事件是否是正在进行的快照的一部分、事务id(不是在快照时)、更改的SCN和表示源数据库中记录更改的时间点的时间戳(在快照期间,这是快照的时间点)。开云体育官方注册网址开云体育电动老虎机
的 |
-
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": "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": "1.7.2.Final", "name": "server1", "ts_ms": 1520085154000, "txId": "6.28.807", "scn": "2122185", "commit_scn": "2122185", "snapshot": false }, "op": "c", "ts_ms": 1532592105975 } }
检查模式
前事件的一部分价值,我们可以看到下面的模式是如何定义的:
的信封
的
源
结构(特定于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”},“源”:{“版本”:“是1.7.2。Final", "name": "server1", "ts_ms": 1520085811000, "txId": "6.9.809", "scn": "2125544", "commit_scn": "2125544", "snapshot": false}, "op": "u", "ts_ms": 1532592713485}}
的值进行比较更新事件的创建(插入)事件,请注意以下差异有效载荷
部分:
的
人事处
字段值现在是u
,表示该行因更新而更改的
之前
字段现在拥有数据库提交前包含值的行状态开云体育电动老虎机的
后
字段现在已经更新了行状态,这里可以看到电子邮件
价值就是现在anne@example.com
.的
源
字段结构具有与以前相同的字段,但值不同,因为此事件来自重做日志中的不同位置。的
ts_ms
显示了Debezium处理此事件的时间戳。开云体育官方注册网址
的有效载荷
部分揭示了其他一些有用的信息。例如,通过比较之前
而且后
结构时,我们可以确定作为提交结果的行是如何更改的。的源
结构提供了关于Oracle记录此更改的信息,提供可跟踪性。它还让我们深入了解这个事件发生的时间与本主题和其他主题中其他事件的关系。它是发生在另一个事件之前,之后,还是作为同一提交的一部分?
当一行的主键/唯一键的列被更新时,行键的值也会发生变化。结果,Debezium发射开云体育官方注册网址三个更新后的事件:
|
删除事件
到目前为止,我们已经看到了样本创建而且更新事件。现在,我们来看看a的值删除事件。就像……一样创建而且更新事件,一个删除
事件,模式
部分值完全相同:
{"schema":{…},“有效载荷”:{“前”:{" ID ": 1004年,“FIRST_NAME”:“安妮”,“LAST_NAME”:“Kretchmar”、“电子邮件”:“anne@example.com”},“后”:空,“源”:{“版本”:“是1.7.2。Final", "name": "server1", "ts_ms": 1520085153000, "txId": "6.28.807", "scn": "2122184", "commit_scn": "2122184", "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
.
数据类型映射
为了表示表行中发生的更改,Debezium Oracle连接器发出结构类似于行所在表的更改事件。开云体育官方注册网址该事件为每个列值包含一个字段。列值根据列的Oracle数据类型表示。下面几节描述连接器如何将oracle数据类型映射到文字类型和一个语义类型在事件字段中。
- 文字类型
-
描述如何使用Kafka Connect模式类型逐字表示值:
INT8
,INT16
,INT32
,INT64
,FLOAT32
,FLOAT64
,布尔
,字符串
,字节
,数组
,地图
,结构体
. - 语义类型
-
描述Kafka Connect模式如何捕获意义该字段使用Kafka Connect模式的名称。
后续版本计划支持更多的数据类型。请提交JIRA问题任何可能缺失的特定类型。
字符类型
下表描述连接器如何映射基本字符类型。
Oracle数据类型 | 文字类型(模式类型) | 语义类型(模式名)和Notes |
---|---|---|
|
|
N/A |
|
|
N/A |
|
|
N/A |
|
|
N/A |
|
|
N/A |
二进制和字符LOB类型
对这些数据类型的支持目前处于孵化状态,也就是说,根据我们收到的反馈,准确的语义、配置选项等可能会在未来的版本中改变。如果您在使用这些数据类型时遇到任何问题,请告诉我们。 |
下表描述连接器如何映射二进制和字符大对象(LOB)数据类型。
Oracle数据类型 | 文字类型(模式类型) | 语义类型(模式名)和Notes |
---|---|---|
|
|
原始字节。 |
|
|
N/A |
|
N/A |
不支持此数据类型。 |
|
N/A |
不支持此数据类型。 |
|
|
N/A |
|
N/A |
不支持此数据类型。 |
Oracle只提供列值 如果a的值 |
数值类型
下表描述了连接器如何映射数字类型。
Oracle数据类型 | 文字类型(模式类型) | 语义类型(模式名)和Notes |
---|---|---|
|
|
N/A |
|
|
N/A |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
布尔类型
Oracle本身不支持布尔
数据类型;但是,通常使用具有特定语义的其他数据类型来模拟逻辑的概念布尔
数据类型。
操作员可以配置开箱即用NumberOneToBooleanConverter
自定义转换器,可以映射所有数量(1)
列到布尔
或者如果选择器
参数,则可以使用逗号分隔的正则表达式列表枚举列的子集。
配置示例如下:
converters=boolean boolean.type=io.开云体育官方注册网址 debezu .connector.oracle.converters. numberonetobooleanconverter boolean.selector=.*MYTABLE.FLAG,.*. is_archived
十进制类型
Oracle连接器配置属性的设置,decimal.handling.mode
确定连接器如何映射十进制类型。
当decimal.handling.mode
属性设置为精确的
,连接器使用Kafka Connectorg.apache.kafka.connect.data.Decimal
所有的逻辑类型小数
而且数字
列。这是默认模式。
然而,当decimal.handling.mode
属性设置为双
,连接器将这些值表示为具有模式类型的Java双精度值FLOAT64
.
您还可以设置decimal.handling.mode
属性来使用字符串
选择。属性设置为时字符串
,连接器表示小数
而且数字
值作为具有模式类型的格式化字符串表示形式字符串
.
时间类型
除了甲骨文时间间隔
,带时区的时间戳
而且带有本地时区的时间戳
类型的值,其他时态类型取决于time.precision.mode
配置属性。
当time.precision.mode
配置属性设置为自适应
(默认值),然后连接器根据列的数据类型定义确定时态类型的文字和语义类型,以便事件完全表示数据库中的值:开云体育电动老虎机
Oracle数据类型 | 文字类型(模式类型) | 语义类型(模式名)和Notes |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
当time.precision.mode
配置属性设置为连接
,那么连接器使用预定义的Kafka Connect逻辑类型。当用户只知道内置的Kafka Connect逻辑类型,而无法处理可变精度的时间值时,这是非常有用的。因为Oracle支持的精度级别超过了Kafka Connect中逻辑类型支持的级别,如果您设置time.precision.mode
来连接
,精确度的损失当分数秒精度数据库列大于3:开云体育电动老虎机
Oracle数据类型 | 文字类型(模式类型) | 语义类型(模式名)和Notes |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
安装Oracle
为了与Debezium Oracle连接器一起使用,必须设置Oracle,以下步骤是必需的。开云体育官方注册网址这些步骤假设使用具有容器数据库和至少一个可插拔数据库的多租户配置。开云体育电动老虎机如果不打算使用多租户配置,可能需要调整以下步骤。
有关使用Vagrant在虚拟机中设置Oracle的信息,请参见开云体育官方注册网址Debezium Vagrant Box f开云体育电动老虎机or Oracle数据库GitHub库。
准备数据库开云体育电动老虎机
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重做日志中捕获的信息量的理想选择。
更改表库存。客户一个DD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
必须在数据库级别启用最小补充日志记录,并可以按以下方式配置。开云体育电动老虎机
修改数据库添开云体育电动老虎机加补充日志数据;
重做日志大小
根据数据库配置的不同,重做日志的大开云体育电动老虎机小和数量可能不足以达到可接受的性能。在设置Debezium Oracle连接器之开云体育官方注册网址前,请确保重做日志的容量足以支持数据库。开云体育电动老虎机
数据库重做日志的容量必须足以存储数据库的数据字典。开云体育电动老虎机通常,数据字典的大小会随着数据库中表和列的数量而增加。开云体育电动老虎机如果重做日志缺乏足够的容量,数据库和Debezium连接器都可能遇到性能问题。开云体育官方注册网址开云体育电动老虎机
咨询数据库管理员,以评估数据库是否需开云体育电动老虎机要增加日志容量。
为连接器创建用户
为了让Debez开云体育官方注册网址ium Oracle连接器捕获变更事件,它必须作为具有特定权限的Oracle LogMiner用户运行。下面的示例展示了在多租户数据库模型中为连接器创建Oracle用户帐户的SQL。开云体育电动老虎机
连接器捕获由它自己的Oracle用户帐户所做的开云体育电动老虎机数据库更改。方法所做的更改 |
/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创建会话授予c##dbzuser CONTAINER=ALL;dbzuser CONTAINER=A开云体育电动老虎机LL给c##dbzuser CONTAINER=ALL回闪任意表;dbzuser CONTAINER=ALL; GRANT SELECT_CATALOG_ROLE TO c##dbzuser CONTAINER=ALL; GRANT EXECUTE_CATALOG_ROLE TO c##dbzuser CONTAINER=ALL; GRANT SELECT ANY TRANSACTION TO c##dbzuser CONTAINER=ALL; GRANT LOGMINING TO c##dbzuser CONTAINER=ALL; GRANT CREATE TABLE TO c##dbzuser CONTAINER=ALL; GRANT LOCK ANY TABLE TO c##dbzuser CONTAINER=ALL; GRANT CREATE SEQUENCE TO c##dbzuser CONTAINER=ALL; GRANT EXECUTE ON DBMS_LOGMNR TO c##dbzuser CONTAINER=ALL; GRANT EXECUTE ON DBMS_LOGMNR_D TO c##dbzuser CONTAINER=ALL; GRANT SELECT ON V_$LOG TO c##dbzuser CONTAINER=ALL; GRANT SELECT ON V_$LOG_HISTORY TO c##dbzuser CONTAINER=ALL; GRANT SELECT ON V_$LOGMNR_LOGS TO c##dbzuser CONTAINER=ALL; GRANT SELECT ON V_$LOGMNR_CONTENTS TO c##dbzuser CONTAINER=ALL; GRANT SELECT ON V_$LOGMNR_PARAMETERS TO c##dbzuser CONTAINER=ALL; GRANT SELECT ON V_$LOGFILE TO c##dbzuser CONTAINER=ALL; GRANT SELECT ON V_$ARCHIVED_LOG TO c##dbzuser CONTAINER=ALL; GRANT SELECT ON V_$ARCHIVE_DEST_STATUS TO c##dbzuser CONTAINER=ALL; exit;
部署
要部署Debezium 开云体育官方注册网址Oracle连接器,您需要安装Debezium Oracle连接器存档,配置连接器,并通过将其配置添加到Kafka Connect来启动连接器。
已安装Orac开云体育电动老虎机le数据库,为配置为与Debezium连接器一起工作开云体育官方注册网址.
您拥有Oracle JDBC驱动程序和XStream API JAR的副本。
由于许可要求,Debezium Oracle连接器不附带Oracle 开云体育官方注册网址JDBC驱动程序或XStream API文件。您必须直接从Oracle下载这些文件,并将它们添加到您的环境中。有关更多信息,请参见获取Oracle JDBC驱动程序和XStream API文件.
下载Debezium开云体育官方注册网址Oracle连接器插件存档.
将文件解压缩到Kafka Connect环境中。
将包含JAR文件的目录添加到卡夫卡连接的
plugin.path
.重新启动Kafka Connect进程以获取新的JAR文件。
获取Oracle JDBC驱动程序和XStream API文件
Debe开云体育官方注册网址zium Oracle连接器需要Oracle JDBC驱动程序(ojdbc8.jar
)连接到Oracle数据库。开云体育电动老虎机如果连接器使用XStream访问数据库,则还必须具有XStream API (开云体育电动老虎机xstreams.jar
).许可要求禁止Debezium在Oracle连接器存档中包含这些文开云体育官方注册网址件。但是,所需的文件可以作为Oracle Instant Client的一部分免费下载。以下步骤介绍如何下载Oracle Instant客户端并解压所需文件。
从浏览器下载Oracle即时客户端包适用于您的操作系统。
解压缩存档,然后打开
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
复制
ojdbc8.jar
而且xstreams.jar
文件,并将它们添加到< kafka_home >/ libs
例如目录,卡夫卡/ libs
.在使用Oracle LogMiner实现的环境中,只复制
ojdbc8.jar
文件。的xstreams.jar
只有在使用Oracle XStreams实现的环境中才需要这个文件。如果您正在使用XStreams实现,请创建一个环境变量,
LD_LIBRARY_PATH
,并将其值设置为“即时客户端”目录的路径,例如:LD_LIBRARY_PATH = /道路/ / instant_client /
的
LD_LIBRARY_PATH
如果您运行Oracle LogMiner实现,则不需要使用environment变量。
开云体育官方注册网址Debezium Oracle连接器配置
通常,通过提交指定连接器配置属性的JSON请求来注册开云体育官方注册网址Debezium Oracle连接器。下面的示例显示了一个JSON请求,用于用逻辑名注册Debezium Oracle连接器的实例开云体育官方注册网址server1
端口1521:
您可以选择为数据库中的模式和表的子集生成事件。开云体育电动老虎机可选地,您可以忽略、屏蔽或截断包含敏感数据的列、大于指定大小的列或不需要的列。
{"name": "inventory-connector",(1)"config": {"connector.class": "io.de开云体育官方注册网址bezium.connector.oracle.OracleConnector",(2)“开云体育电动老虎机数据库。hostname": "",(3)“开云体育电动老虎机数据库。端口:“1521”,(4)“开云体育电动老虎机数据库。使用r" : "c##dbzuser",(5)“开云体育电动老虎机数据库。密码:“dbz”,(6)“开云体育电动老虎机数据库。dbname" : "ORCLCDB",(7)d开云体育电动老虎机atabase.server.name: "server1",(8)”任务。Max ": "1",(9)d开云体育电动老虎机atabase.pdb.name: ORCLPDB1,(10)“开云体育电动老虎机database.history.kafka.bootstrap。服务器:"kafka:9092",(11)“开云体育电动老虎机database.history.kafka。主题:“模式变化。库存"(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连接到数据库。开云体育电动老虎机
{"name": "inventory-connector", "config": {"connector.class": "io.deb开云体育官方注册网址ezium.connector.oracle.OracleConnector", "tasks. debezium.connector.oracle. oracleconnector ", "Max ": "1", "开云体育电动老虎机database.server.name": "server1", "database. name"。用户":"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", "database.history.kafka.bootstrap.servers" : "kafka:9092", "database.history.kafka.topic": "schema-changes.inventory" } }
可插数据库与不可插数据库开云体育电动老虎机
Oracle数开云体育电动老虎机据库支持以下部署类型:
- 容器数据库(CDB)开云体育电动老虎机
-
可以开云体育电动老虎机包含多个可插拔数据库(pdb)的数据库。开云体育电动老虎机数据库客户端连接到每个PDB,就像连接一个标准的非cdb数据库一样。
- 非容器数据库(非cdb)开云体育电动老虎机
-
一个标准的Oracle数据库,不支持开云体育电动老虎机创建可插拔数据库。
{"config": {"connector.class": "io.deb开云体育官方注册网址ezium.connector.oracle.OracleConnector", "任务。Max ": "1", "开云体育电动老虎机database.server.name": "server1", "database. name"。Hostname ": "", "开云体育电动老虎机数据库。端口":"1521","数据库。开云体育电动老虎机dbzuser: ##dbzuser“开云体育电动老虎机数据库。密码:“dbz”,“database.”开云体育电动老虎机dbname": "ORCLCDB",d开云体育电动老虎机atabase.pdb.name: ORCLPDB1,“开云体育电动老虎机database.history.kafka.bootstrap。服务器:"kafka:9092",“开云体育电动老虎机database.history.kafka。主题:“模式变化。库存"}}
在配置与Oracle CDB一起使用的De开云体育官方注册网址bezium Oracle连接器时,必须为该属性指定一个值 |
{"config": {"connector.class": "io.deb开云体育官方注册网址ezium.connector.oracle.OracleConnector", "任务。Max ": "1", "开云体育电动老虎机database.server.name": "server1", "database. name"。Hostname ": "", "开云体育电动老虎机数据库。端口":"1521","数据库。开云体育电动老虎机dbzuser: ##dbzuser“开云体育电动老虎机数据库。密码:“dbz”,“database.”开云体育电动老虎机dbname": "ORCLCDB",“开云体育电动老虎机database.history.kafka.bootstrap。服务器:"kafka:9092",“开云体育电动老虎机database.history.kafka。主题:“模式变化。库存"}}
有关可以为Debezium Oracle连接器设置的配置属性的完整列表,请参见开云体育官方注册网址Oracle连接器属性.
您可以使用帖子
命令到正在运行的Kafka Connect服务。服务记录配置并启动连接器任务,执行以下操作:
连接Oracle数据库。开云体育电动老虎机
读取重做日志。
记录Kafka主题的更改事件。
添加连接器配置
要开始运行Debezium Oracl开云体育官方注册网址e连接器,请创建一个连接器配置,并将该配置添加到Kafka Connect集群。
已安装D开云体育官方注册网址ebezium Oracle连接器。
创建一个配置用于Oracle连接器。
使用Kafka连接REST API将该连接器配置添加到Kafka Connect集群中。
连接器启动后,它将执行一致性快照配置连接器的Oracle数据开云体育电动老虎机库。然后连接器开始为行级操作生成数据更改事件,并将更改事件记录流式传输到Kafka主题。
连接器属性
Debe开云体育官方注册网址zium Oracle连接器有许多配置属性,您可以使用这些属性为您的应用程序实现正确的连接器行为。许多属性都有默认值。属性信息组织如下:
开云体育电动老虎机数据库历史连接器配置属性控制Debezium如何处理从数据开云体育官方注册网址库历史主题中读取的事件。开云体育电动老虎机
传递数据库驱动程序属性开云体育电动老虎机控制数据库驱动程序的行为。开云体育电动老虎机
必需的Debezi开云体育官方注册网址um Oracle连接器配置属性
以下配置属性为要求除非有默认值可用。
财产 |
默认的 |
描述 |
没有默认的 |
连接器的唯一名称。尝试使用相同的名称再次注册将失败。(所有Kafka Connect连接器都需要这个属性。) |
|
没有默认的 |
连接器的Java类的名称。始终使用值 |
|
|
应该为此连接器创建的最大任务数。Oracle连接器总是使用单个任务,因此不使用这个值,所以默认值总是可以接受的。 |
|
没有默认的 |
Oracle数据库服务器的IP地址或主机名。开云体育电动老虎机 |
|
没有默认的 |
Oracle数据库服务器的整数端口号。开云体育电动老虎机 |
|
没有默认的 |
连接器连接Oracle数据库服务器时使用的Oracle用户帐户名。开云体育电动老虎机 |
|
没有默认的 |
连接Oracle数据库时使用的密码。开云体育电动老虎机 |
|
没有默认的 |
要连接的数据库的名称。开云体育电动老虎机当使用CDB + PDB模型时,必须是CDB名称。 |
|
没有默认的 |
指定原始数据库JDBC URL。开云体育电动老虎机使用此属性可提供定义数据库连接的灵活性。开云体育电动老虎机有效值包括原始TNS名称和RAC连接字符串。 |
|
没有默认的 |
要连接的Oracle可插拔数据库的名称。开云体育电动老虎机此属性仅用于容器数据库(CDB)安装。开云体育电动老虎机 |
|
没有默认的 |
为Oracle数据库服务器标识并提供名称空间的逻辑名称,连接器从该名称空间捕获更改。开云体育电动老虎机您设置的值将用作连接器发出的所有Kafka主题名称的前缀。指定一个在Debezium环境中所有连接器中惟一的逻辑名称。开云体育官方注册网址只能输入字母数字、连字符、点和下划线。 |
|
|
连接器在传输数据库更改时使用的适配器实现。开云体育电动老虎机您可以设置以下值:
|
|
最初的 |
指定连接器用于捕获表的快照的模式。您可以设置以下值:
快照完成后,连接器继续从数据库的重做日志中读取更改事件。开云体育电动老虎机 有关更多信息,请参见表 |
|
共享 |
控制连接器是否持有表锁以及持有表锁的时间。表锁防止连接器在执行快照时发生某些类型的更改表操作。您可以设置以下值:
|
|
中指定的所有表 |
匹配完全限定名称的可选、逗号分隔的正则表达式列表( 此属性不影响增量快照的行为。 |
|
没有默认的 |
指定要包含在快照中的表行。如果希望快照仅包含表中行的子集,请使用此属性。此属性仅影响快照。它不适用于连接器从日志中读取的事件。 属性包含表单中以逗号分隔的全限定表名列表 从一个 “snapshot.select.statement。覆盖”:“客户。订单", "snapshot.select.statement.overrides.customer.orders": "SELECT * FROM [customers].[orders] WHERE delete_flag = 0 ORDER BY id DESC" 在生成的快照中,连接器仅包括其记录 |
|
没有默认的 |
一个可选的、以逗号分隔的正则表达式列表,该列表与您要使用的模式名称匹配想要捕获变更。中未包含的任何模式名称 |
|
没有默认的 |
一个可选的、以逗号分隔的正则表达式列表,该列表与您要使用的模式名称匹配不想要捕捉变化。中未包含其名称的模式 |
|
没有默认的 |
一个以逗号分隔的可选正则表达式列表,它与要监视的表的完全限定表标识符匹配。未包含在包含列表中的表将被排除在监视之外。每个表标识符使用以下格式: |
|
没有默认的 |
一个以逗号分隔的可选正则表达式列表,它与要排除在监视之外的表的完全限定表标识符匹配。连接器从排除列表中未指定的任何表捕获更改事件。使用以下格式为每个表指定标识符: 不要将此属性与 |
|
没有默认的 |
一个以逗号分隔的可选正则表达式列表,它与要包含在更改事件消息值中的列的完全限定名称匹配。列的完全限定名使用以下格式: |
|
没有默认的 |
一个以逗号分隔的可选正则表达式列表,它与要从更改事件消息值中排除的列的完全限定名称匹配。完全限定列名使用以下格式: |
|
没有默认的 |
一个可选的、以逗号分隔的正则表达式列表,它与基于字符的列的完全限定名匹配。列的完全限定名的格式为 假名由应用指定的参数产生的散列值组成hashAlgorithm而且盐.根据所使用的散列函数,将维护引用完整性,而列值将被假名替换。中描述了支持的哈希函数MessageDigest节Java密码体系结构标准算法名称文档。 column.mask.hash.sha with.salt——256.。CzQMA0cB5K =库存。订单。customerName, inventory.shipment.customerName 必要时,笔名会自动缩短为列的长度。连接器配置可以包括多个属性,这些属性指定不同的哈希算法和盐。 |
|
|
指定连接器应如何处理的浮点值
|
|
|
指定连接器在事件处理期间应如何对异常作出反应。您可以设置以下选项之一:
|
|
|
指定阻塞队列的最大大小的正整数值。从数据库日志中读取的更改事件在写入Kafka之前被放置在开云体育电动老虎机阻塞队列中。例如,当写入Kafka很慢,或者Kafka不可用时,这个队列可以为binlog阅读器提供反压力。出现在队列中的事件不包括在连接器定期记录的偏移量中。属性指定的最大批处理大小始终大于 |
|
|
一个正整数值,指定在此连接器的每次迭代期间要处理的每批事件的最大大小。 |
|
|
阻塞队列最大大小(以字节为单位)的长值。要激活该特性,请将值设置为正的长数据类型。 |
|
|
正整数值,指定连接器在每次迭代期间等待新更改事件出现的毫秒数。 |
|
|
控制是否删除事件之后是一个墓碑事件。可能取值为:
当一个源记录被删除后,一个墓碑事件(默认行为)使Kafka能够完全删除主题中所有共享已删除行键的事件日志压实启用。 |
|
没有默认的 |
一个表达式列表,用于指定连接器用来为发布到指定表的Kafka主题的更改事件记录形成自定义消息键的列。 默认情况下,Debezi开云体育官方注册网址um使用表的主键列作为它发出的记录的消息键。为了代替默认值,或者为缺少主键的表指定一个键,您可以基于一个或多个列配置自定义消息键。 |
|
没有默认的 |
一个以逗号分隔的可选正则表达式列表,如果更改事件消息中基于字符的列的长度超过指定的字符数,则该正则表达式与要截断的列的完全限定名匹配。长度指定为正整数。一个配置可以包含多个指定不同长度的属性。使用以下格式为列指定完全限定名: |
|
没有默认的 |
可选的以逗号分隔的正则表达式列表,用于通过用星号替换字符来屏蔽更改事件消息中的列名( |
|
没有默认的 |
一个以逗号分隔的可选正则表达式列表,它与列的完全限定名称相匹配,这些列的原始类型和长度应该作为参数添加到发出的更改消息中的相应字段模式中。模式参数 |
|
没有默认的 |
一个以逗号分隔的可选正则表达式列表,它与特定于数据库的数据类型名称相匹配,这些列的原始类型和长度应该作为参数添加到发出的更改消息中的相应字段模开云体育电动老虎机式中。模式参数 |
|
|
以毫秒为单位指定连接器向心跳主题发送消息的频率。 |
|
|
指定连接器向其发送心跳消息的主题名称的前缀字符串。 |
|
没有默认的 |
指定连接器在启动后等待快照的间隔(以毫秒为单位)。 |
|
|
指定在进行快照时应一次性从每个表读取的最大行数。连接器以指定大小的多个批次读取表内容。 |
|
|
指定字段名是否被规范化以符合Avro命名要求。有关更多信息,请参见Avro命名. |
|
|
将属性设置为 看到事务的元数据更多细节。 |
|
|
指定挖掘策略,控制Oracle LogMiner如何构建并使用给定的数据字典将表和列的id解析为名称。 |
|
|
缓冲区类型控制连接器如何管理缓冲事务数据。 |
|
没有默认的 |
指定连接器用于读取和写入缓冲区缓存的目录的位置。指定Kafka集群中的每个节点都可以访问的目录,并且该目录对于连接器部署是唯一的。 |
|
|
指定在连接器以正常、预期的方式停止后是否删除缓冲区状态。 |
|
|
连接器试图从重做/归档日志中读取的最小SCN间隔大小。活动批处理大小也按此数量增加/减少,以便在需要时调优连接器吞吐量。 |
|
|
此连接器从重做/归档日志中读取时使用的最大SCN间隔大小。 |
|
|
连接器用于从重做/归档日志中读取数据的起始SCN间隔大小。 |
|
|
连接器从重做/归档日志中读取数据后和再次开始读取数据之前的最小睡眠时间。Value以毫秒为单位。 |
|
|
连接器从重做/归档日志中读取数据后,在再次开始读取数据之前的最大睡眠时间。Value以毫秒为单位。 |
|
|
连接器从重做/归档日志中读取数据后和再次开始读取数据之前的起始睡眠时间。Value以毫秒为单位。 |
|
|
在从logminer读取数据时,连接器用于调优最佳睡眠时间的最大打开或关闭时间。Value以毫秒为单位。 |
|
|
连接器从LogMiner内容视图中获取的内容记录的数量。 |
|
|
从SYSDATE到挖掘归档日志的过去的小时数。当默认设置( |
|
|
控制连接器是否只挖掘归档日志,还是在线重做日志和归档日志的组合(默认值)。 |
|
|
连接器将在轮询之间休眠的毫秒数,以确定开始的系统更改号是否在存档日志中。如果 |
|
|
正整数值,指定重做日志交换机之间保持长时间运行事务的小时数。当设置为 LogMiner适配器维护所有正在运行的事务的内存缓冲区。因为在检测到提交或回滚之前,作为事务一部分的所有DML操作都是缓冲的,因此应该避免长时间运行的事务,以免溢出该缓冲区。任何超过此配置值的事务都将被完全丢弃,连接器不会为作为事务一部分的操作发出任何消息。虽然这个选项允许在个案基础上配置行为,但我们计划在未来的版本中通过添加可伸缩的事务缓冲区来增强此行为,(参见dbz - 3123). |
|
没有默认的 |
指定使用LogMiner挖掘归档日志时使用的已配置的Oracle存档目的地。 |
|
没有默认的 |
要从LogMin开云体育电动老虎机er查询中排除的数据库用户列表。如果希望捕获过程始终排除特定用户所做的更改,则设置此属性可能很有用。 |
|
|
指定连接器将当前SCN值与先前SCN值之间的差值进行比较的值,以确定是否存在SCN间隙。如果SCN值之间的差值大于设定值,且时间差值小于 |
|
|
指定一个值(以毫秒为单位),连接器将该值与当前和以前SCN时间戳之间的差值进行比较,以确定SCN间隙是否存在。如果时间戳之间的差异小于指定的值,而SCN增量大于 |
|
|
控制在更改事件中是否发出大对象(CLOB或BLOB)列值。 |
|
|
指定连接器提供的常量,以指示原始值不变,而不是由数据库提供。开云体育电动老虎机 |
|
没有默认的 |
一个以逗号分隔的Oracle真实应用程序集群(RAC)节点主机名或地址列表。该字段用于启用Oracle RAC支持。使用以下方法之一指定RAC节点列表:
方法为数据库提供原始JDBC URL开云体育电动老虎机 |
|
没有默认的 |
以逗号分隔的操作类型列表,您希望连接器在流处理期间跳过这些操作类型。您可以配置连接器跳过以下操作:
缺省情况下,不跳过任何操作。 |
|
无默认值 |
用于发送的数据集合的完全限定名称信号到连接器。 |
|
|
在增量快照块期间连接器获取并读入内存的最大行数。增加块大小可以提供更高的效率,因为快照运行更少的大大小快照查询。但是,较大的块大小也需要更多内存来缓冲快照数据。将块大小调整为在您的环境中提供最佳性能的值。 |
开云体育官方注册网址Debezium Oracle连开云体育电动老虎机接器数据库历史配置属性
开云体育官方注册网址Debezium提供了一组开云体育电动老虎机database.history。*
属性,这些属性控制连接器如何与模式历史主题交互。
下表描述了开云体育电动老虎机database.history
属性用于配置Debezium连接器。开云体育官方注册网址
财产 | 默认的 | 描述 |
---|---|---|
连接器存储数据库模式历史的Kafka主题的全称。开云体育电动老虎机 |
||
连接器用来建立到Kafka集群的初始连接的主机/端口对列表。此连接用于检索以前由连接器存储的数据库模式历史,并用于写入从源数据库读取的每个DDL语开云体育电动老虎机句。每一对都应该指向Kafka Connect进程使用的相同的Kafka集群。 |
||
|
一个整数值,指定连接器在启动/恢复期间轮询持久数据时应等待的最大毫秒数。默认值是100ms。 |
|
|
在连接器恢复失败并发生错误之前,连接器应尝试读取持久历史数据的最大次数。接收不到数据后等待的最大时间为 |
|
|
一个布尔值,指定连接器是否应该忽略格式错误或未知的数据库语句,还是停止处理以便人工修复问题。开云体育电动老虎机安全默认值为 |
|
|
一个布尔值,指定连接器是否应该记录所有DDL语句
安全默认值为 |
|
|
一个布尔值,指定连接器是否应该记录所有DDL语句
安全默认值为 |
开云体育官方注册网址Debezium依赖于Kafka生成器将模式更改写入数据库历史主题。开云体育电动老虎机类似地,当连接器启动时,它依赖于Kafka消费者从数据库历史主题中读取。开云体育电动老虎机为Kafka生产者和消费者客户端定义配置,方法是将值赋给一组以开云体育电动老虎机database.history.producer。*
而且开云体育电动老虎机database.history.consumer。*
前缀。直通的生产者和消费者数据库历史属性控制了一系列行为,比如这些客户端如何保护与K开云体育电动老虎机afka代理的连接,如下例所示:
开云体育电动老虎机database.history.producer.security。协议SSL databas开云体育电动老虎机e.history.producer.ssl.keystore.location = = / var /私人/ SSL / kafka.server.keystore。jks 开云体育电动老虎机database.history.producer.ssl.keystore。密码= test1234 datab开云体育电动老虎机ase.history.producer.ssl.truststore.location = / var /私人/ ssl / kafka.server.truststore。jks 开云体育电动老虎机database.history.producer.ssl.truststore。密码= test1234 datab开云体育电动老虎机ase.history.producer.ssl.key。密码= test1234 datab开云体育电动老虎机ase.history.consumer.security。协议SSL databas开云体育电动老虎机e.history.consumer.ssl.keystore.location = = / var /私人/ SSL / kafka.server.keystore。jks 开云体育电动老虎机database.history.consumer.ssl.keystore。密码= test1234 datab开云体育电动老虎机ase.history.consumer.ssl.truststore.location = / var /私人/ ssl / kafka.server.truststore。jks 开云体育电动老虎机database.history.consumer.ssl.truststore。密码= test1234 datab开云体育电动老虎机ase.history.consumer.ssl.key.password = test1234
开云体育官方注册网址Debezium在将属性传递给Kafka客户端之前,会从属性名中去掉前缀。
更多细节请参阅Kafka文档Kafka生产者配置属性而且Kafka消费者配置属性.
开云体育官方注册网址Debezium Oracle连接器直通数据库驱动程序配置属性开云体育电动老虎机
Debe开云体育官方注册网址zium连接器提供数据库驱动程序的直通配置。开云体育电动老虎机传递数据库属性以前缀开始开云体育电动老虎机开云体育电动老虎机数据库。*
.例如,连接器传递的属性为开云体育电动老虎机database.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 Connect循环之间传递事件的队列长度。 |
|
|
用于在快照和主Kafka Connect循环之间传递事件的队列的空闲容量。 |
|
|
快照中包含的表的总数。 |
|
|
快照尚未复制的表数。 |
|
|
快照是否启动。 |
|
|
快照是否中止。 |
|
|
快照是否完成。 |
|
|
快照到目前为止所花费的总秒数,即使没有完成。 |
|
|
映射,其中包含为快照中的每个表扫描的行数。在处理期间将表增量地添加到Map中。每扫描10,000行并在完成一个表时更新一次。 |
|
|
队列的最大缓冲区,以字节为单位。如果 |
|
|
队列中记录的当前数据,以字节为单位。 |
在执行增量快照时,连接器还提供了以下额外的快照度量:
属性 | 类型 | 描述 |
---|---|---|
|
当前快照块的标识符。 |
|
|
定义当前块的主键集的下界。 |
|
|
定义当前块的主键集的上界。 |
|
|
当前快照表的主键集的下界。 |
|
|
当前快照表的主键集的上限。 |
流指标
的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语句时停止。你可以使用Debeziu开云体育官方注册网址m信号从这样的DDL语句触发数据库模式的更新。开云体育电动老虎机
模式更新操作的类型为模式变化
.该操作更新信号参数中列举的所有表的模式。该消息不包含对模式的更新。相反,它包含了完整的新模式结构。
的名字 | 描述 |
---|---|
|
Oracle数据库的名称。开云体育电动老虎机 |
|
应用更改的模式的名称。 |
|
包含所请求的架构更新的数组。 |
|
通常是模式更改的类型 |
|
表的完全限定名 |
|
表的完全限定名 |
|
如果与数据库默认值不同,则用于表的字符集名称开云体育电动老虎机 |
|
数组中包含组成主键的列的名称 |
|
数组的列元数据 |
|
列的名称 |
|
处定义的列的JDBC类型JDBC API |
|
列类型的名称 |
|
完整的列类型定义 |
|
列字符集与默认值不同 |
|
列的长度/大小限制 |
|
数字列的比例 |
|
列在表中的位置 |
|
布尔 |
|
布尔 |
|
布尔 |
后模式变化
信号插入后,连接器必须使用更改后的配置重新启动,其中包括指定开云体育电动老虎机database.history.skip.unparseable.ddl
选择真正的
.在连接器的提交SCN进展超过DDL更改之后,为了防止不可解析的DDL语句被意外跳过,请将连接器配置返回到以前的状态。
列 | 价值 |
---|---|
id |
|
类型 |
|
数据 |
|
xstream支持
Debe开云体育官方注册网址zium 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 = 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连接器要求使用特定的权限设置用户帐户,以便连接器可以捕获更改事件。下面将使用多租户数据库模型简要描述这些用户配置。开云体育电动老虎机
/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');结束;/退出;
/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出站服务器
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出站服务器以从可插拔数据库捕获更改时,将开云体育电动老虎机 |
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", "开云体育电动老虎机database.server.name": "server1", "database. name"。Hostname ": "", "开云体育电动老虎机数据库。端口":"1521","数据库。开云体育电动老虎机dbzuser: ##dbzuser“开云体育电动老虎机数据库。密码:“dbz”,“database.”开云体育电动老虎机dbname": "ORCLCDB",d开云体育电动老虎机atabase.pdb.name: ORCLPDB1,“开云体育电动老虎机database.history.kafka.bootstrap。服务器:"kafka:9092",“开云体育电动老虎机database.history.kafka。主题:“模式变化。库存", "database.connection.adapter": "xstream", "database.out.server.name" : "dbzxout" } }
出现问题时的行为
开云体育官方注册网址Debezium是一个分布式系统,可以捕获多个上游数据库中的所有更改;开云体育电动老虎机它从不错过或丢失任何事件。当系统正常运行或被仔细管理时,Debezium提供开云体育官方注册网址只有一天交付每个变更事件记录。
如果发生故障,Debezium不会丢失开云体育官方注册网址任何事件。然而,当它从错误中恢复时,它可能会重复一些更改事件。在这些不正常的情况下,Debezium就像Kafka一样提供开云体育官方注册网址了帮助至少一次变更事件的交付。
本节的其余部分将描述Debezium如何处理各种错误和问题。开云体育官方注册网址
ORA-25191 -不能引用索引组织表的溢出表
Oracle在快照阶段遇到索引组织表(IOT)时可能会发出此错误。此错误意味着连接器试图执行必须对包含指定溢出表的父索引组织的表执行的操作。
要解决这个问题,SQL操作中使用的IOT名称应该替换为父索引组织的表名。要确定父索引组织的表名,使用下面的SQL:
SELECT IOT_NAME FROM DBA_TABLES WHERE OWNER='' AND TABLE_NAME='< lot -table-name-that-failed>'
连接器的table.include.list
或table.exclude.list
然后应该调整配置选项,以显式地包括或排除适当的表,以避免连接器试图从子索引组织的表中捕获更改。