您正在查看过时的Debezium版本的文档。开云体育官方注册网址
如果您想查看本页最新的稳定版本,请前往在这里

开云体育官方注册网址Debezium连接器用于Oracle

该连接器目前处于孵化状态,即准确的语义,配置选项等可能会根据我们收到的反馈在未来的修订中改变。如果您遇到任何问题,请告诉我们。

开云体育官方注册网址Debezium的Oracle Connector可以监视和记录Oracle服务器上数据库中的所有行级更改。开云体育电动老虎机最值得注意的是,连接器还不支持更改捕获表的结构(例如。ALTER TABLE……)在初始快照完成后(请参阅dbz - 718).不过,它支持在连接器运行时捕获新添加的表(前提是新表的名称与连接器的筛选器配置匹配)。

概述

开云体育官方注册网址Debezium从Oracle中使用XStream API或直接通过LogMiner。为了使用XStream API,您需要拥有GoldenGate产品的许可证(尽管并不要求安装GoldenGate本身)。

Oracle连接器如何工作

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

快照

大多数Oracle服务器都被配置为不在重做日志中保留数据库的完整历史,因此Debezium Oracle连接器将无法通过简单地读取日志来查看数据库的完整历开云体育电动老虎机史。开云体育官方注册网址因此,连接器第一次启动时执行初始化一致的快照数据库的。开云体育电动老虎机执行快照的默认行为包括以下步骤。属性可以更改此行为snapshot.mode属性的值最初的

  1. 确定要捕获的表

  2. 获得一个独占模式锁定每个被监视的表,以确保任何表都不会发生结构更改。

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

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

  5. 释放在第2步中获得的锁,即锁只被持有一小段时间。

  6. 扫描所有相关的数据库表和模式,使其在步骤3中读取的开云体育电动老虎机SCN位置有效(从scn123开始选择*),并生成一个事件,并将该事件写入相应的特定于表的Kafka主题。

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

如果连接器失败,重新平衡,或者在步骤1开始后但在步骤7完成之前停止,重新启动连接器将开始一个新的快照。在连接器完成初始快照之后,Debezium连接器继续从它在第3步中读取的位置进行流处理。开云体育官方注册网址这确保连接器不会错过任何更新。如果连接器由于任何原因再次停止,在重新启动时,连接器将继续从之前停止的地方传输更改。

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

最初的

连接器执行一个数据库快照,之后它将转换到流更改。开云体育电动老虎机

schema_only

连接器捕获所有相关表的结构,执行上面描述的所有步骤,只是它不创建任何表表示连接器启动时的数据集的事件。

主题名称

架构更改主题

Debe开云体育官方注册网址zium Oracle连接器在数据库历史主题中存储模式更改的历史。开云体育电动老虎机这个主题反映了一个内部连接器状态,您不应该直接使用它。需要模式更改通知的应用程序应该从公共模式更改主题获取信息。连接器将所有这些事件写入一个名为< serverName >,在那里serverName中指定的连接器的名称是否为开云体育电动老虎机database.server.name配置属性。

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

开云体育官方注册网址每当一个新表从这个主题流出来,或者当表的结构被改变时,Debezium就会向这个主题发出一条新消息(必须遵循模式演化过程).该消息包含表模式的逻辑表示。

该消息的示例是:

{"schema":{…}, "payload": {"source": {"version": "1.4.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 DE开云体育官方注册网址BEZIUM”,(1)创建表"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}]}}}}}}}}}}}}
表2。发送到模式更改主题的消息中的字段的描述
字段名 描述

1

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

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

2

ddl

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

3.

tableChanges

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

4

类型

描述变化的类型。取值为:

  • 创建-表已创建

  • 改变-表格修改

  • 下降-删除表

5

id

创建、修改或删除的表的完整标识符。

6

表格

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

7

primaryKeyColumnNames

组成表主键的列列表。

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为每个事务生成事件开始而且结束.每个事件包含

  • 状态-开始结束

  • 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连接器产生的所有数据更改事件都有一个键和一个值,尽管键和值的结构依赖于产生更改事件的表(参见主题名称).

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属性的值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.如果你看键的值有效载荷字段,你可以看到它确实是一个结构(在JSON中只是一个对象)id字段,值为1004

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

更改事件值

与消息键一样,更改事件消息的值具有模式节和有效载荷部分。Oracle连接器产生的每个更改事件值的有效负载部分都有一个信封结构,使用以下字段:

  • 人事处必选字段,包含描述操作类型的字符串值。Oracle连接器的值为c对于创建(或插入),u对于更新,d对于删除,和r用于读取(在快照的情况下)。

  • 之前是否是可选字段,如果存在则包含行状态之前事件发生了。该结构将由server1.INVENTORY.CUSTOMERS.ValueKafka Connect模式,其中server1对象中的所有行使用连接器inventory.customers表格

该字段及其元素是否可用在很大程度上取决于补充日志应用于表的配置。

  • 是否是可选字段,如果存在则包含行状态事件发生了。结构的描述是相同的server1.INVENTORY.CUSTOMERS.Value中使用的Kafka Connect模式之前

  • 是一个强制性的字段,其中包含一个结构描述元数据来源,在甲骨文中包含这些字段:Debezium版本,连接器名称、事件是否进行的一个快照,事务id(不是在快照),视交叉上核的变化,和一个时间戳,表示时间点记录改变时在源数据库(在快照,这是快照的时间点)。开云体育官方注册网址开云体育电动老虎机

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

  • ts_ms是可选的,如果存在,则包含连接器处理事件的时间(使用运行Kafka Connect任务的JVM中的系统时钟)。

当然,还有模式事件消息值的一部分包含描述此信封结构及其内嵌套字段的模式。

创建事件

我们来看看a创建事件值可能看起来像客户表:

{"模式":{“类型”:“结构”、“字段”:[{“类型”:“结构”、“字段”:[{“类型”:“int32”、“可选”:假的,“场”:“ID”},{“类型”:“弦”、“可选”:假的,“场”:“FIRST_NAME”},{“类型”:“弦”、“可选”:假的,“场”:“LAST_NAME”},{“类型”:“弦”、“可选”:假的,“场”:“电子邮件”}],“可选”:真的,“名字”:“server1.DEBEZIUM.CUSTOMERS。开云体育官方注册网址值","field": "before"}, {"type": "int32", "optional": false, "field": "ID"}, {"type": "string", "optional": false, "field": "FIRST_NAME"}, {"type": "string", "optional": false, "field": "LAST_NAME"}, {"type": "string", "optional": false, "field": "EMAIL"}], "optional": true, "name": "server1. debezum . customers。开云体育官方注册网址值”、“场”:“后”},{“类型”:“结构”、“字段”:[{“类型”:“弦”、“可选”:真的,“场”:“版本”},{“类型”:“弦”、“可选”:假的,“场”:“name”},{“类型”:“int64”、“可选”:真的,“场”:“ts_ms”},{“类型”:“弦”、“可选”:真的,“场”:“txId”},{“类型”:“int64”、“可选”:真的,“场”:“scn”},{“类型”:“int64”、“可选”:真的,“场”:“commit_scn”},{“类型”:“布尔”、“可选”:真的,“场”:“快照”}],“可选”:假的,“名字”:"io.开云体育官方注册网址 debezum .connector.oracle. source", "field": "source"}, {"type": "string", "optional": false, "field": "op"}, {"type": "int64", "optional": true, "field": "ts_ms"}], "optional": false, "name": "server1. debezum . customers . "信封”},“有效载荷”:{“前”:空,“后”:{" ID ": 1004年,“FIRST_NAME”:“安妮”,“LAST_NAME”:“Kretchmar”、“电子邮件”:“annek@noanswer.org”},“源”:{“版本”:“0.9.0。Alpha1", "name": "server1", "ts_ms": 1520085154000, "txId": "6.28.807", "scn": 2122185, "commit_scn": 2122185, "snapshot": false}, "op": "c", "ts_ms": 1532592105975}}

如果我们看模式事件的一部分价值的模式信封的模式结构(特定于Oracle连接器并在所有事件中重用),以及表特定的模式之前而且字段。

的模式名称之前而且字段的格式为logicalNameschemaName的表. value,因此完全独立于所有其他表的所有其他模式。这意味着当使用Avro转换器,得到的Avro方案每个表在每一个逻辑源有自己的演变和历史。

如果我们看有效载荷事件的一部分价值,我们可以看到事件中的信息,即它正在描述创建的行(sinceop = c),以及字段值包含新插入行的'IDFIRST_NAMELAST_NAME,电子邮件列。

事件的JSON表示形式似乎比它们描述的行要大得多。这是正确的,因为JSON表示必须包含模式有效载荷部分信息。这是可能的,甚至建议使用Avro转换器以大幅减少写入Kafka主题的实际消息的大小。

更新事件

的值更新这个表上的Change事件实际上会有完全相同的结果模式,其有效负载的结构相同,但将持有不同的值。这里有一个例子:

{"schema":{…},“有效载荷”:{“前”:{" ID ": 1004年,“FIRST_NAME”:“安妮”,“LAST_NAME”:“Kretchmar”、“电子邮件”:“annek@noanswer.org”},“后”:{" ID ": 1004年,“FIRST_NAME”:“安妮”,“LAST_NAME”:“Kretchmar”、“电子邮件”:“anne@example.com”},“源”:{“版本”:“0.9.0。Alpha1", "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关于这个变化记录的信息(提供可跟踪性),但更重要的是,我们可以将这个信息与这个和其他主题中的其他事件进行比较,以了解这个事件是在之前发生的,之后发生的,还是作为其他事件的一部分发生在同一个Oracle提交中。

当一行的主键/唯一键的列更新时,行键的值也发生了变化,因此Debezium将输出开云体育官方注册网址三个事件:删除事件和墓碑上的事件使用旧的行键,后面跟着插入事件,使用该行的新键。

删除事件

到目前为止,我们已经看到了样本创建而且更新事件。现在,我们来看看a的值删除事件。再一次,模式的部分值将与创建而且更新事件:

{"schema":{…},“有效载荷”:{“前”:{" ID ": 1004年,“FIRST_NAME”:“安妮”,“LAST_NAME”:“Kretchmar”、“电子邮件”:“anne@example.com”},“后”:空,“源”:{“版本”:“0.9.0。Alpha1", "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键的事件价值。

数据类型映射

Oracle连接器用事件表示对行的更改,事件的结构类似于行所在的表。该事件为每个列值包含一个字段。该值在事件中如何表示取决于列的Oracle数据类型。下面几节描述连接器如何将oracle数据类型映射到litearl类型和一个语义类型在事件字段中。

  • litearl类型描述了如何使用Kafka Connect模式类型逐字表示值:INT8INT16INT32INT64FLOAT32FLOAT64布尔字符串字节数组地图,结构体

  • 语义类型描述了Kafka Connect模式如何捕获意义该字段使用Kafka Connect模式的名称。

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

字符类型

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

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

CHAR ((M))

字符串

N/A

NCHAR ((M))

字符串

N/A

NVARCHAR2 ((M))

字符串

N/A

VARCHAR ((M))

字符串

N/A

VARCHAR2 ((M))

字符串

N/A

数值类型

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

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

BINARY_FLOAT

FLOAT32

N/A

BINARY_DOUBLE

FLOAT64

N/A

小数((P, S))

字节/INT8/INT16/INT32/INT64

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

处理等效于数量(注意S默认为0小数).

双精度

结构体

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

包含两个字段的结构:规模类型的INT32其中包含传输值的刻度和价值类型的字节以未缩放的形式包含原始值。

浮动((P))

结构体

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

包含两个字段的结构:规模类型的INT32其中包含传输值的刻度和价值类型的字节以未缩放的形式包含原始值。

整数INT

字节

org.apache.kafka.connect.data.Decimal

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

INT64

N/A

号(1,0)

布尔

N/A

数量((P [*]))

结构体

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

包含两个字段的结构:规模类型的INT32其中包含传输值的刻度和价值类型的字节以未缩放的形式包含原始值。

Number (p, s > 0)

字节

org.apache.kafka.connect.data.Decimal

数字(p, s⇐0)

INT8/INT16/INT32/INT64

数量以0为刻度的列表示整数;在Oracle中,负刻度表示舍入,例如-2的刻度将导致舍入到数百。

根据精度和比例,将选择匹配的Kafka Connect整数类型:

  • P - s < 3,INT8

  • P - s < 5,INT16

  • P - s < 10,INT32

  • P - s < 19,INT64

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

数字[(P, S)]

字节/INT8/INT16/INT32/INT64

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

处理等效于数量(注意S默认为0数字).

短整型

字节

org.apache.kafka.connect.data.Decimal

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

真正的

结构体

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

包含两个字段的结构:规模类型的INT32其中包含传输值的刻度和价值类型的字节以未缩放的形式包含原始值。

十进制类型

Oracle连接器配置属性的设置,decimal.handling.mode确定连接器如何映射十进制类型。

decimal.handling.mode属性设置为精确的,连接器使用Kafka Connectorg.apache.kafka.connect.data.Decimal所有的逻辑类型小数而且数字列。这是默认模式。

然而,当decimal.handling.mode属性设置为,连接器将这些值表示为具有模式类型的Java双精度值FLOAT64

的最后一种可能设置decimal.handling.mode配置属性为字符串.在本例中,连接器表示小数而且数字值作为具有模式类型的格式化字符串表示形式字符串

时间类型

下表描述了连接器如何映射时态类型。

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

日期

INT64

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

表示过去纪元的毫秒数,不包括时区信息。

间隔天[(m)]到秒

FLOAT64

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

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

间隔年[(m)]到月

FLOAT64

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

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

时间戳(0 - 3)

INT64

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

表示过去纪元的毫秒数,不包括时区信息。

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

INT64

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

表示经过epoch的微秒数,不包括时区信息。

时间戳(7 ~ 9)

INT64

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

表示过去纪元的纳秒数,不包括时区信息。

带时区的时间戳

字符串

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

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

带有本地时区的时间戳

字符串

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

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

安装Oracle

要使用Debezium Or开云体育电动老虎机acle连接器,必须执行以下数据库设置步骤。开云体育官方注册网址这些步骤假设使用一个容器数据库和至少一个可插拔数据库的多租户配置。开云体育电动老虎机如果您打算使用非多租户配置,则可能需要调整以下步骤。

你可以在目录中找到在虚拟机中设置Oracle的模板(通过Vagrant)oracle-vagrant-box /存储库。

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

Oracle XStream需要配置
ORACLE_SID=ORCLCDB dbz_oracle sqlplus /nolog CONNECT sys/top_secret AS SYSDBA alter system set db_recovery_file_dest_size = 5G;修改system set db_recovery_file_dest = '/opt/oracle/oradata/recovery_area' scope=spfile;Alter system set enable_goldengate_replication=true;立即关闭数据库启动;开云体育电动老虎机打开数据库开云体育电动老虎机——应该显示“数据库日志模式:存开云体育电动老虎机档模式”存档日志列表退出;
Oracle LogMiner需要配置
ORACLE_SID=ORACLCDB dbz_oracle sqlplus /nolog CONNECT sys/top_secret AS SYSDBA alter system set db_recovery_file_dest_size = 10G;修改system set db_recovery_file_dest = '/opt/oracle/oradta/recovery_area' scope=spfile;立即关闭数据库启动;开云体育电动老虎机打开数据库开云体育电动老虎机现在“数据库日志模式:存档模式开云体育电动老虎机”存档日志列表退出了吗

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

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

为连接器创建用户

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

创建XStream Administrator用户
/opt/oracle/oradata/ORCLCDB/xstream_adm_tbs. sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE TABLESPACE xstream_adm_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/xstream_adm_tbs. sqldbf的大小25M重用自动扩展MAXSIZE无限制;退出;/opt/oracle/oradata/ORCLCDB/ORCLPDB1/xstream_adm_tbs DATAFILE . sqlplus sys/top_secret@//localhost:1521/ORCLPDB1 as sysdba CREATE TABLESPACE xstream_adm_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/xstream_adm_tbs. sqldbf的大小25M重用自动扩展MAXSIZE无限制;退出;sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE USER c##xstrmadmin IDENTIFIED BY xsa DEFAULT TABLESPACE xstream_adm_tbs QUOTA UNLIMITED ON xstream_adm_tbs CONTAINER=ALL;授权创建会话,设置容器为c##xstrmadmin CONTAINER=ALL;DBMS_XSTREAM_AUTH开始。GRANT_ADMIN_PRIVILEGE(grantee => 'c##xstrmadmin', privilege_type => 'CAPTURE', grant_select_privileges => TRUE, container => 'ALL');结束;/退出;
创建连接器的XStream用户
/opt/oracle/oradata/ORCLCDB/xstream_tbs. sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE TABLESPACE xstream_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/xstream_tbs. sqldbf的大小25M重用自动扩展MAXSIZE无限制;退出;/opt/oracle/oradata/ORCLCDB/ORCLPDB1/xstream_tbs DATAFILE . sqlplus sys/ top_secrets @//localhost:1521/ORCLPDB1 as sysdba CREATE TABLESPACE xstream_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/xstream_tbs. sqldbf的大小25M重用自动扩展MAXSIZE无限制;退出;sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE USER c##xstrm IDENTIFIED BY xs DEFAULT TABLESPACE xstream_tbs QUOTA UNLIMITED ON xstream_tbs CONTAINER=ALL;授予c##xstrm CONTAINER=ALL创建会话权限;授予c##xstrm CONTAINER=ALL;授予V_$DATABASE的SELEC开云体育电动老虎机T权限给c##xstrm CONTAINER=ALL;给c##xstrm CONTAINER=ALL回闪任意表;授予c##xstrm CONTAINER=ALL; GRANT EXECUTE_CATALOG_ROLE TO c##xstrm CONTAINER=ALL; exit;
创建连接器的LogMiner用户
/opt/oracle/oradata/ORCLCDB/logminer_tbs. sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/logminer_tbs. sqldbf的大小25M重用自动扩展MAXSIZE无限制;退出;/opt/oracle/oradata/ORCLCDB/ORCLPDB1/logminer_tbs. sqlplus sys/top_secret@//localhost:1521/ORCLPDB1 as sysdba CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/logminer_tbs. sqlplus sys/top_secret@//localhost:1521/ORCLPDB1 as sysdba CREATE TABLESPACE logminer_tbs DATAFILE 'dbf的大小25M重用自动扩展MAXSIZE无限制;退出;sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE USER c##logminer IDENTIFIED BY lm DEFAULT TABLESPACE logminer_tbs QUOTA UNLIMITED ON logminer_tbs CONTAINER=ALL;给logminer CONTAINER创建会话GRANT SET CONTAINER TO c##logminer CONTAINER=ALL;logminer CONTAINER=开云体育电动老虎机ALLGRANT FLASHBACK任意表到c##logminer CONTAINER=ALL;logminer CONTAINER=ALL; GRANT SELECT_CATALOG_ROLE TO c##logminer CONTAINER=ALL; GRANT EXECUTE_CATALOG_ROLE TO c##logminer CONTAINER=ALL; GRANT SELECT ANY TRANSACTION TO c##logminer CONTAINER=ALL; GRANT LOGMINING TO c##logminer CONTAINER=ALL; GRANT CREATE TABLE TO c##logminer CONTAINER=ALL; GRANT LOCK ANY TABLE TO c##logminer CONTAINER=ALL; GRANT ALTER ANY TABLE TO c##logminer CONTAINER=ALL; GRANT CREATE SEQUENCE TO c##logminer CONTAINER=ALL; GRANT EXECUTE ON DBMS_LOGMNR TO c##logminer CONTAINER=ALL; GRANT EXECUTE ON DBMS_LOGMNR_D TO c##logminer CONTAINER=ALL; GRANT SELECT ON V_$LOG TO c##logminer CONTAINER=ALL; GRANT SELECT ON V_$LOG_HISTORY TO c##logminer CONTAINER=ALL; GRANT SELECT ON V_$LOGMNR_LOGS TO c##logminer CONTAINER=ALL; GRANT SELECT ON V_$LOGMNR_CONTENTS TO c##logminer CONTAINER=ALL; GRANT SELECT ON V_$LOGMNR_PARAMETERS TO c##logminer CONTAINER=ALL; GRANT SELECT ON V_$LOGFILE TO c##logminer CONTAINER=ALL; GRANT SELECT ON V_$ARCHIVED_LOG TO c##logminer CONTAINER=ALL; GRANT SELECT ON V_$ARCHIVE_DEST_STATUS TO c##logminer CONTAINER=ALL; exit;

创建一个XStream出站服务器

如果您正在使用LogMiner实现,则不需要此步骤。

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

创建一个XStream出站服务器
sqlplus c##xstrmadmin/xsa@//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用户帐户以连接到XStream出站服务器
sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba BEGIN DBMS_XSTREAM_ADM. sqlALTER_OUTBOUND(server_name => 'dbzxout', connect_user => 'c##xstrm');结束;/退出;

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

部署连接器

由于许可要求,Debezium Oracle连接器不附带Oracle 开云体育官方注册网址JDBC驱动程序和XStream API JAR。你可以下载Oracle即时客户端

解压缩存档并导航到Instant Client目录。复制ojdbc <版本> . jar而且xstreams.jar在卡夫卡的填词目录中。最后,创建一个环境变量,LD_LIBRARY_PATH,指向即时客户端目录,如下图所示:

LD_LIBRARY_PATH = /道路/ / instant_client /

示例配置

下面是一个注册Debezium Oracle连接器实例的JSON请求示例:开云体育官方注册网址

{"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","数据库。开云体育电动老虎机user" : "c##xstrm", "database.password" : "xs", "database.dbname" : "ORCLCDB", "database.pdb.name" : "ORCLPDB1", "database.out.server.name" : "dbzxout", "database.history.kafka.bootstrap.servers" : "kafka:9092", "database.history.kafka.topic": "schema-changes.inventory" } }

当使用更复杂的Oracle部署或需要使用TNS名称时,可以提供原始JDBC url,而不是单一的主机名-端口对。下面是一个类似的例子,但它只是传递原始的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##xstrm", "数据库。开云体育电动老虎机密码“:”xs“,”数据库。开云体育电动老虎机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.out.server.name" : "dbzxout", "database.history.kafka.bootstrap.servers" : "kafka:9092", "database.history.kafka.topic": "schema-changes.inventory" } }

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

Debe开云体育官方注册网址zium Oracle连接器同时支持可插拔数据库(CDB模式)和不可插拔数据库(非CDB模式)的部署实践。开云体育电动老虎机

使用非cdb(不可插拔数据库)安装的配置示例开云体育电动老虎机
{"config": {"connector.class": "io.deb开云体育官方注册网址ezium.connector.oracle.OracleConnector", "任务。Max ": "1", "开云体育电动老虎机database.server.name": "server1", "database. name"。Hostname ": "", "开云体育电动老虎机数据库。端口":"1521","数据库。开云体育电动老虎机user" : "c##xstrm", "database.password" : "xs", "database.dbname" : "ORCLCDB", "database.out.server.name" : "dbzxout", "database.history.kafka.bootstrap.servers" : "kafka:9092", "database.history.kafka.topic": "schema-changes.inventory" } }
使用CDB(可插拔数据库)安装的配置示例开云体育电动老虎机
{"config": {"connector.class": "io.deb开云体育官方注册网址ezium.connector.oracle.OracleConnector", "任务。Max ": "1", "开云体育电动老虎机database.server.name": "server1", "database. name"。Hostname ": "", "开云体育电动老虎机数据库。端口":"1521","数据库。开云体育电动老虎机user" : "c##xstrm", "database.password" : "xs", "database.dbname" : "ORCLCDB", "database.pdb.name" : "ORCLPDB1", "database.out.server.name" : "dbzxout", "database.history.kafka.bootstrap.servers" : "kafka:9092", "database.history.kafka.topic": "schema-changes.inventory" } }

当使用CDB安装时,指定开云体育电动老虎机database.pbd.name
当使用非cdb安装时,请这样做指定开云体育电动老虎机database.pdb.name

选择适配器

开云体育官方注册网址Debezium提供了多种从Oracle获取变更事件的方法。默认情况下,Debez开云体育官方注册网址ium使用XStream API,但这并不总是适用于每个安装。

下面的示例配置通过添加开云体育电动老虎机database.connection.adapter,连接器可以切换到使用LogMiner实现。

{"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","数据库。开云体育电动老虎机user" : "c##xstrm", "database.password" : "xs", "database.dbname" : "ORCLCDB", "database.pdb.name" : "ORCLPDB1", "database.out.server.name" : "dbzxout", "database.history.kafka.bootstrap.servers" : "kafka:9092", "database.history.kafka.topic": "schema-changes.inventory" "database.connection.adapter": "logminer" } }

我们鼓励使用LogMiner适配器进行测试和反馈,但我们还不建议将其用于生产,因为它仍在积极开发中。

连接器属性

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

财产

默认的

描述

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

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

1

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

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

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

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

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

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

原始数据开云体育电动老虎机库jdbc url。当需要更大的灵活性时,可以使用此属性,并且可以支持原始TNS名称或RAC连接字符串。

启用表名不区分大小写的支持;设置为真正的Oracle 11g。

12 +

指定如何解码Oracle SCN值。11当连接到Oracle 11数据库时,应该使用。开云体育电动老虎机12 +(默认值)连接到Oracle 12或更高版本的数据库时应该使用。开云体育电动老虎机此字段仅在使用Oracle XStreams连接器适配器时适用。

使用CDB + PDB模型时要连接的PDB的名称。

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

逻辑名称,用于标识并提供被监视的特定Oracle数据库服务器的名称空间。开云体育电动老虎机逻辑名在所有其他连接器中应该是唯一的,因为它被用作从该连接器发出的所有Kafka主题名的前缀。只能使用字母数字字符和下划线。

xstream

要使用的适配器实现。xstream使用Oracle XStreams API。logminer使用原生的Oracle LogMiner API。

以逗号分隔的RAC节点主机名或地址列表。该字段用于启用Oracle RAC支持。

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

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

最初的

一种对所捕获表的结构和可选数据进行初始快照的模式。支持的值为最初的(将捕获表的结构和数据的快照;如果主题应该用捕获表中的数据的完整表示来填充,则很有用)和schema_only(只对捕获的表的结构进行快照;有用的是,从现在开始发生的变化应该传播到主题)。快照完成后,连接器将继续从数据库的重做日志中读取更改事件。开云体育电动老虎机

一个可选的、以逗号分隔的正则表达式列表,该列表与您要使用的模式名称匹配想要捕获变更。中未包含的任何模式名称schema.include.list被排除在捕获其更改之外。默认情况下,捕获所有非系统模式的更改。不也定了吗schema.exclude.list财产。使用LogMiner时,只支持POSIX正则表达式。

一个可选的、以逗号分隔的正则表达式列表,该列表与您要使用的模式名称匹配想要捕捉变化。中未包含其名称的模式schema.exclude.list捕获其更改(系统模式除外)。不也定了吗schema.include.list财产。使用LogMiner时,只支持POSIX正则表达式。

空字符串

一个可选的逗号分隔的正则表达式列表,它匹配要监控的表的完全限定表标识符;任何未包含在包含列表中的表都将被排除在监视之外。每个标识符都是这样的schemaName的表.默认情况下,连接器将监视每个被监视数据库中的每个非系统表。开云体育电动老虎机不得与table.exclude.list.使用LogMiner时,只支持POSIX正则表达式。

空字符串

一个可选的逗号分隔的正则表达式列表,它与要排除在监视之外的表的完全限定表标识符匹配;任何不在排除列表中的表都将被监控。每个标识符都是这样的schemaName的表.不得与table.include.list.使用LogMiner时,只支持POSIX正则表达式。

空字符串

一个以逗号分隔的可选正则表达式列表,该列表与应包含在更改事件消息值中的列的完全限定名称匹配。列的完全限定名的格式为schemaName的表columnName.请注意,主键列总是包含在事件的键中,即使没有包含在值中。不也定了吗column.exclude.list财产。

空字符串

一个以逗号分隔的可选正则表达式列表,该列表与应从更改事件消息值中排除的列的完全限定名称匹配。列的完全限定名的格式为schemaName的表columnName.请注意,主键列总是包含在事件的键中,如果从值中排除也一样。不也定了吗column.include.list财产。

N/A

一个以逗号分隔的可选正则表达式列表,它匹配基于字符的列的完全限定名称,这些列的值应该是更改事件消息值中的假名,字段值由使用该算法的散列值组成hashAlgorithm和盐.基于所使用的哈希函数,在数据假名化的同时保持了引用完整性。中描述了支持的哈希函数MessageDigest节Java密码体系结构标准算法名称文档。哈希值自动缩短为列的长度。

1000

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

100000

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

20000

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

0

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

3000

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

1000

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

200

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

10000

将从日志挖掘器内容视图中获取的内容记录的数量。

可以在单个配置中使用具有不同长度的多个属性,尽管每个属性的长度必须为正整数或零。列的完全限定名的格式为pdbNameschemaName的表columnName

例子:

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

在哪里CzQMA0cB5K是随机选择的盐。

注:取决于hashAlgorithm使用,所选数据集与实际数据集相匹配,得到的屏蔽数据集可能不能完全匿名化。

精确的

指定连接器应如何处理的浮点值数量小数而且数字列:精确的(默认值)精确地表示它们使用java.math.BigDecimal变更事件中以二进制形式表示的值;或表示它们使用值,这可能会导致精度的损失,但将更容易使用。字符串选项将值编码为格式化的字符串,这很容易使用,但关于真实类型的语义信息会丢失。看到(十进位)

失败

指定连接器在事件处理期间应如何对异常作出反应。失败将传播异常(指示有问题事件的偏移量),导致连接器停止。
警告将导致跳过有问题的事件并记录有问题事件的偏移量。
跳过将导致跳过有问题的事件。

8192

正整数值,指定阻塞队列的最大大小,从数据库日志中读取的更改事件在写入Kafka之前被放置在其中。开云体育电动老虎机例如,当写入Kafka较慢或Kafka不可用时,该队列可以为binlog阅读器提供反压力。出现在队列中的事件不包括在此连接器定期记录的偏移量中。属性中指定的最大批处理大小,默认值为8192max.batch.size财产。

2048

正整数值,指定在此连接器的每次迭代期间应处理的每批事件的最大大小。默认为2048年。

0

阻塞队列最大大小(以字节为单位)的长值。默认情况下,该功能是禁用的,如果设置为正长值,则该功能将激活。

1000

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

真正的

控制是否在删除事件之后生成墓碑事件。
真正的删除操作由删除事件和后续的墓碑事件表示。当只发送一个删除事件。
触发墓碑事件(默认行为)允许Kafka在源记录被删除后完全删除与给定键相关的所有事件。

N/A

与完全限定的表和列匹配以映射主键的正则表达式的分号列表。
每个项(正则表达式)必须匹配<完全限定表>:<逗号分隔的列列表>表示自定义键。
完全限定表可以定义为pdbNameschemaName的表

N/A

一个以逗号分隔的可选正则表达式列表,它与基于字符的列的完全限定名匹配,如果字段值长于指定的字符数,则这些列的值应在更改事件消息值中被截断。可以在单个配置中使用具有不同长度的多个属性,尽管每个属性的长度必须为正整数。列的完全限定名的格式为pdbNameschemaName的表columnName

N/A

一个以逗号分隔的可选正则表达式列表,该列表与基于字符的列的完全限定名称匹配,这些列的值应在更改事件消息值中被替换为由指定数量的星号()字符。可以在单个配置中使用具有不同长度的多个属性,尽管每个属性的长度必须为正整数或零。列的完全限定名的格式为pdbNameschemaName的表columnName

N/A

一个以逗号分隔的可选正则表达式列表,它与列的完全限定名称相匹配,这些列的原始类型和长度应该作为参数添加到发出的更改消息中的相应字段模式中。模式参数__开云体育官方注册网址debezium.source.column.type__开云体育官方注册网址debezium.source.column.length而且__开云体育官方注册网址debezium.source.column.scale将分别用于传播原始类型名称和长度(对于变宽类型)。对于接收器数据库中相应列的适当大小很有用。开云体育电动老虎机列的完全限定名的格式为的表columnName,或schemaName的表columnName

N/A

一个以逗号分隔的可选正则表达式列表,它与特定于数据库的数据类型名称相匹配,这些列的原始类型和长度应该作为参数添加到发出的更改消息中的相应字段模开云体育电动老虎机式中。模式参数__开云体育官方注册网址debezium.source.column.type__开云体育官方注册网址debezium.source.column.length而且__开云体育官方注册网址debezium.source.column.scale将分别用于传播原始类型名称和长度(对于变宽类型)。对于接收器数据库中相应列的适当大小很有用。开云体育电动老虎机完全限定数据类型名称的格式为的表typeName,或schemaName的表typeName.看到特定于oracle的数据类型名称列表

0

控制心跳消息的发送频率。
此属性包含以毫秒为单位的间隔,该间隔定义连接器向心跳主题发送消息的频率。这可用于监视连接器是否仍在接收来自数据库的更改事件。开云体育电动老虎机在较长一段时间内只更改非捕获表中的记录的情况下,还应该利用心跳消息。在这种情况下,连接器会继续从数据库中读取日志,但不会向Kafka发出任何更改消息,这反过来意味着不会向Kafka提交偏移量更新。开云体育电动老虎机这将导致重做日志文件被数据库保留的时间超过所需的时间(因为连接器实际上已经处理了它们,但从未有机会将最新检索到的S开云体育电动老虎机CN刷新到数据库中),并且还可能导致在连接器重新启动后重新发送更多的更改事件。将此参数设置为0完全不发送心跳消息。
默认禁用。

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

控制要向其发送心跳消息的主题的命名。
主题根据模式命名< heartbeat.topics.prefix >。< server.name >

连接器启动后在快照之前应该等待的间隔(以毫秒为单位);
可用于在启动集群中的多个连接器时避免快照中断,这可能导致连接器的重新平衡。

2000

指定在进行快照时应一次性从每个表读取的最大行数。连接器将以这个大小的多个批次读取表内容。默认为2000。

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

是否对字段名进行消毒以符合Avro命名要求。看到Avro命名欲知详情。

当设置为真正的开云体育官方注册网址Debezium生成具有事务边界的事件,并使用事务元数据丰富数据事件信封。

看到事务的元数据更多细节。

的实现的完全限定类名HistoryReader在LogMining流期间使用。

0

从SYSDATE到挖掘归档日志的过去的小时数。使用默认值0将挖掘所有归档日志。

0

日志挖掘历史表中保留条目的小时数。当设置为0,日志挖掘历史记录是禁用的。

4

正整数值,指定重做日志交换机之间保持长时间运行事务的小时数。

LogMiner适配器维护所有正在运行的事务的内存缓冲区。由于作为事务一部分的所有DML操作都将被缓冲,直到检测到提交或回滚,因此应该避免长时间运行的事务,以免溢出该缓冲区。任何超过此配置值的事务都将被完全丢弃,并且不会为作为事务一部分的操作发出任何消息。

虽然这个选项允许在个案基础上配置行为,但我们计划在未来的版本中通过添加可伸缩的事务缓冲区来增强此行为,(参见dbz - 3123).

监控

除了Zo开云体育官方注册网址okeeper、Kafka和Kafka Connect内置的对JMX指标的支持外,Debezium Oracle连接器还有三种指标类型。

  • 快照指标;用于在执行快照时监控连接器

  • 流指标;用于在处理更改事件时监视连接器

  • logminer指标;使用LogMiner适配器处理更改事件时捕获的附加度量

  • 架构历史度量;用于监视连接器的模式历史记录的状态

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

快照指标

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

属性 类型 描述

字符串

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

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

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

已由连接器上配置的包含/排除列表筛选规则筛选的事件数。

string []

连接器监视的表的列表。

int

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

int

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

int

快照中包含的表的总数。

int

快照尚未复制的表数。

布尔

快照是否启动。

布尔

快照是否中止。

布尔

快照是否完成。

快照到目前为止所花费的总秒数,即使没有完成。

Map < String,长>

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

队列的最大缓冲区,以字节为单位。如果max.queue.size.in.bytes以一个正的长值传递。

队列中记录的当前数据,以字节为单位。

流指标

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

属性 类型 描述

字符串

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

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

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

已由连接器上配置的包含/排除列表筛选规则筛选的事件数。

string []

连接器监视的表的列表。

int

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

int

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

布尔

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

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

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

Map < String, String >

上次接收事件的坐标。

字符串

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

队列的最大缓冲区,以字节为单位。

队列中记录的当前数据,以字节为单位。

LogMiner指标

MBean开云体育官方注册网址debezium.oracle: type = connector-metrics、上下文= log-miner服务器=<开云体育电动老虎机 database.server.name >

属性 类型 描述

最近处理过的SCN。

string []

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

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

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

string []

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

int

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

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

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

观察到的DML操作总数。

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

上一次LogMiner会话查询获取的持续时间,单位为毫秒。

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

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

用于解析DML事件SQL事件的时间(以毫秒为单位)。

启动上一次LogMiner会话所需的时间(以毫秒为单位)。

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

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

最小的处理时间(以毫秒为单位)来自于单个LogMiner会话。

处理所花费的最大持续时间(以毫秒为单位)来自单个LogMiner会话。

处理所花费的总时间(以毫秒为单位)来自LogMiner会话。

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

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

int

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

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

日志挖掘视图中每秒处理的最大行数。

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

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

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

int

事务在被丢弃之前未提交或回滚的情况下,由连接器的内存缓冲区保留的小时数。看到log.mining.transaction.retention欲知详情。

布尔

标志,指示是否记录挖掘结果。看到log.mining.history.recorder.clas欲知详情。

架构历史指标

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

属性 类型 描述

字符串

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

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

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

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

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

自应用最后一次更改以来所经过的毫秒数。

字符串

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

字符串

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

出现问题时的行为

开云体育官方注册网址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.listtable.exclude.list然后应该调整配置选项,以显式地包括或排除适当的表,以避免连接器试图从子索引组织的表中捕获更改。

Baidu