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

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

概述

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

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

开云体育官方注册网址Debezium通过使用本地LogMiner数据库包或开云体育电动老虎机XStream API.虽然该连接器可能适用于各种Oracle版本和版本,但只有Oracle EE 12和19经过了测试。

Oracle连接器如何工作

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

快照

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

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

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

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

  1. 确定要捕获的表

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

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

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

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

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

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

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

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

最初的

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

schema_only

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

Ad hoc快照

该功能目前处于孵化状态,即准确的语义,配置选项等可能会根据我们收到的反馈在未来的版本中改变。请让我们知道,如果你遇到任何问题,而使用这个扩展。

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

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

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

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

  • 数据损坏是由于配置错误或其他问题造成的。

您可以对先前捕获快照的表重新运行快照,方法是启动所谓的特别的快照.临时快照需要使用信号表.通过向Debezium信令表发送信号请求,可以启动一个临时快照。开云体育官方注册网址

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

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

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

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

类型

增量

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

数据收集

N/A

包含要快照的表的全限定名称的数组。
名称的格式与signal.data.collection配置选项。

触发临时快照

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

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

增量快照

该特性目前处于孵化状态。确切的语义、配置选项等等将根据我们收到的反馈在未来的版本中进行更改。请让我们知道,如果你遇到任何问题,而使用这个扩展。

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

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

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

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

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

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

增量快照流程

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

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

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

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

快照窗口

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

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

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

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

触发增量快照

目前,创建增量快照的唯一方式是发送自组织快照信号到源数据库上的信令表。开云体育电动老虎机将信号作为SQL提交给表插入查询。在Debez开云体育官方注册网址ium检测到信号表中的变化后,它读取信号,并运行所请求的快照操作。

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

若要指定要包含在快照中的表,请提供数据收集数组,例如,
{“数据收集”:["。MyFirstTable”、“公众。MySecondTable ")}

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

先决条件
  • 启用信令

    • 源数据库上存在一个信令数据集合,并且连接器被配置为捕获它。开云体育电动老虎机

    • 信令数据采集在signal.data.collection财产。

过程
  1. 发送一个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

快照

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

2

人事处

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

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的分区数:

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

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

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

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

表结构发生变化后,必须遵循模式演化过程

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

下面的示例显示了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}]}}}}}}}}}}}}
表4。发送到模式更改主题的消息中的字段的描述
字段名 描述

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何时接收事务元开云体育官方注册网址数据的限制

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

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

状态

开始结束

id

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

event_count(结束事件)

事务发出的事件总数。

data_collections(结束事件)

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

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

示例:Oracle连接器事务边界事件
{"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中的每个事件都是自包含的。每个消息键和值都有两部分模式而且有效载荷.模式描述有效负载的结构,而有效负载包含实际数据。

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

更改事件键

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

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

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

的值<开云体育电动老虎机 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.ValueKafka Connect模式,其中server1对象中的所有行使用连接器inventory.customers表格

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

一个必须包含描述事件源元数据结构的字段,在Oracle中包含以下字段:Debezium版本、连接器名称、事件是否是正在进行的快照的一部分、事务id(不是在快照时)、更改的SCN和表示源数据库中记录更改的时间点的时间戳(在快照期间,这是快照的时间点)。开云体育官方注册网址开云体育电动老虎机

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。开云体育官方注册网址价值", "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连接器并在所有事件中重用)。

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

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

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

默认情况下,事件的JSON表示要比它们描述的行大得多。这是正确的,因为JSON表示必须包含模式有效载荷部分信息。您可以使用Avro转换器以显著减少连接器写入Kafka主题的消息的大小。

更新事件

的值更新该表上的更改事件具有相同的含义模式随着创建事件。有效负载使用相同的结构,但它持有不同的值。这里有一个例子:

{"schema":{…},“有效载荷”:{“前”:{" ID ": 1004年,“FIRST_NAME”:“安妮”,“LAST_NAME”:“Kretchmar”、“电子邮件”:“annek@noanswer.org”},“后”:{" ID ": 1004年,“FIRST_NAME”:“安妮”,“LAST_NAME”:“Kretchmar”、“电子邮件”:“anne@example.com”},“源”:{“版本”:“是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模式类型逐字表示值:INT8INT16INT32INT64FLOAT32FLOAT64布尔字符串字节数组地图,结构体

语义类型

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

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

字符类型

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

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

CHAR ((M))

字符串

N/A

NCHAR ((M))

字符串

N/A

NVARCHAR2 ((M))

字符串

N/A

VARCHAR ((M))

字符串

N/A

VARCHAR2 ((M))

字符串

N/A

二进制和字符LOB类型

对这些数据类型的支持目前处于孵化状态,也就是说,根据我们收到的反馈,准确的语义、配置选项等可能会在未来的版本中改变。如果您在使用这些数据类型时遇到任何问题,请告诉我们。

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

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

字节

原始字节。

CLOB

字符串

N/A

N/A

不支持此数据类型。

长期生

N/A

不支持此数据类型。

NCLOB

字符串

N/A

N/A

不支持此数据类型。

Oracle只提供列值CLOBNCLOB,如果在SQL语句中显式设置或更改数据类型。这意味着更改事件永远不会包含未更改事件的值CLOBNCLOB,或列,而是一个由connector属性定义的占位符,unavailable.value.placeholder

如果a的值CLOBNCLOB,或列进行更新时,新值将包含在部分对应的更新更改事件,而不可用值占位符将用于之前部分。

数值类型

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

表7所示。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类型可以存储

数量((P [*]))

结构体

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

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

数值(p, s <= 0)

INT8/INT16/INT32/INT64

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

根据精度和比例,选择以下匹配的Kafka连接整数类型之一:

  • P - s < 3,INT8

  • P - s < 5,INT16

  • P - s < 10,INT32

  • P - s < 19,INT64

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

Number (p, s > 0)

字节

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本身不支持布尔数据类型;但是,通常使用具有特定语义的其他数据类型来模拟逻辑的概念布尔数据类型。

操作员可以配置开箱即用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

日期

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

以UTC标准表示时间戳的字符串。

time.precision.mode配置属性设置为连接,那么连接器使用预定义的Kafka Connect逻辑类型。当用户只知道内置的Kafka Connect逻辑类型,而无法处理可变精度的时间值时,这是非常有用的。因为Oracle支持的精度级别超过了Kafka Connect中逻辑类型支持的级别,如果您设置time.precision.mode连接精确度的损失分数秒精度数据库列大于3:开云体育电动老虎机

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

日期

INT32

org.apache.kafka.connect.data.Date

表示自纪元以来的天数。

间隔天[(m)]到秒

FLOAT64

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

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

间隔年[(m)]到月

FLOAT64

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

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

时间戳(0 - 3)

INT64

org.apache.kafka.connect.data.Timestamp

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

时间戳(4 ~ 6)

INT64

org.apache.kafka.connect.data.Timestamp

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

时间戳(7 ~ 9)

INT64

org.apache.kafka.connect.data.Timestamp

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

带时区的时间戳

字符串

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

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

带有本地时区的时间戳

字符串

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

以UTC标准表示时间戳的字符串。

安装Oracle

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

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

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

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

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

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

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

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

重做日志大小

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

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

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

为连接器创建用户

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

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

创建连接器的LogMiner用户
/opt/oracle/oradata/ORCLCDB/logminer_tbs. sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/logminer_tbs. sqldbf的大小25M重用自动扩展MAXSIZE无限制;退出;/opt/oracle/oradata/ORCLCDB/ORCLPDB1/logminer_tbs. sqlplus sys/top_secret@//localhost:1521/ORCLPDB1 as sysdba CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/logminer_tbs. sqlplus sys/top_secret@//localhost:1521/ORCLPDB1 as sysdba CREATE TABLESPACE logminer_tbs DATAFILE 'dbf的大小25M重用自动扩展MAXSIZE无限制;退出;sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE USER c##dbzuser IDENTIFIED BY dbz DEFAULT TABLESPACE logminer_tbs QUOTA UNLIMITED ON logminer_tbs CONTAINER=ALL;给c##dbzuser CONTAINER创建会话授予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来启动连接器。

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

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

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

  4. 配置连接器而且将配置添加到Kafka Connect集群中。

  5. 重新启动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客户端并解压所需文件。

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

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

    例如:

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

    在使用Oracle LogMiner实现的环境中,只复制ojdbc8.jar文件。的xstreams.jar只有在使用Oracle XStreams实现的环境中才需要这个文件。

  4. 如果您正在使用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:

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

示例:Debezi开云体育官方注册网址um Oracle连接器配置
{"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连接到数据库。开云体育电动老虎机

示例:Debezi开云体育官方注册网址um Oracle连接器配置,使用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数据库,不支持开云体育电动老虎机创建可插拔数据库。

示例:用于CDB部开云体育官方注册网址署的Debezium连接器配置
{"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连接器时,必须为该属性指定一个值开云体育电动老虎机database.pdb.name,它命名了希望连接器从中捕获更改的PDB。对于非cdb安装,请执行指定开云体育电动老虎机database.pdb.name财产。

示例:用于非cdb开云体育官方注册网址部署的Debezium 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集群。

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

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

结果

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

连接器属性

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

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

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

财产

默认的

描述

没有默认的

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

没有默认的

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

1

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

没有默认的

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

没有默认的

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

没有默认的

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

没有默认的

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

没有默认的

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

没有默认的

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

没有默认的

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

没有默认的

为Oracle数据库服务器标识并提供名称空间的逻辑名称,连接器从该名称空间捕获更改。开云体育电动老虎机您设置的值将用作连接器发出的所有Kafka主题名称的前缀。指定一个在Debezium环境中所有连接器中惟一的逻辑名称。开云体育官方注册网址只能输入字母数字、连字符、点和下划线。

logminer

连接器在传输数据库更改时使用的适配器实现。开云体育电动老虎机您可以设置以下值:

logminer(默认)

连接器使用原生的Oracle LogMiner API。

xstream

连接器使用Oracle XStreams API。

最初的

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

最初的

快照包括捕获的表的结构和数据。指定此值可使用捕获表中数据的完整表示来填充主题。

schema_only

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

快照完成后,连接器继续从数据库的重做日志中读取更改事件。开云体育电动老虎机

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

共享

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

共享

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

没有一个

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

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

匹配完全限定名称的可选、逗号分隔的正则表达式列表(< schemaName ><表>)中包含在快照中的表。指定的项必须在连接器的table.include.list财产。此属性仅在连接器为snapshot.mode属性的值设置为从来没有

此属性不影响增量快照的行为。

没有默认的

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

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

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

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

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

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

例子:

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

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

在生成的快照中,连接器仅包括其记录Delete_flag = 0

没有默认的

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

没有默认的

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

没有默认的

一个以逗号分隔的可选正则表达式列表,它与要监视的表的完全限定表标识符匹配。未包含在包含列表中的表将被排除在监视之外。每个表标识符使用以下格式:

< schema_name >。< table_name >

默认情况下,连接器监视每个被监视数据库中的每个非系统表。开云体育电动老虎机不要将此属性与table.exclude.list.如果使用LogMiner实现,此属性只使用POSIX正则表达式。

没有默认的

一个以逗号分隔的可选正则表达式列表,它与要排除在监视之外的表的完全限定表标识符匹配。连接器从排除列表中未指定的任何表捕获更改事件。使用以下格式为每个表指定标识符:

< schemaName >。<表>

不要将此属性与table.include.list.如果使用LogMiner实现,此属性只使用POSIX正则表达式。

没有默认的

一个以逗号分隔的可选正则表达式列表,它与要包含在更改事件消息值中的列的完全限定名称匹配。列的完全限定名使用以下格式:+
' < Schema_name >, < table_name >。< column_name >


主键列始终包含在事件的键中,即使您没有使用此属性显式地包含其值。如果在配置中包含此属性,则不要同时设置column.exclude.list财产。

没有默认的

一个以逗号分隔的可选正则表达式列表,它与要从更改事件消息值中排除的列的完全限定名称匹配。完全限定列名使用以下格式:

< schema_name >, < table_name >。< column_name >

主键列始终包含在事件的键中,即使使用此属性显式地排除其值。如果在配置中包含此属性,则不要设置column.include.list财产。

没有默认的

一个可选的、以逗号分隔的正则表达式列表,它与基于字符的列的完全限定名匹配。列的完全限定名的格式为< schemaName ><表>< columnName >

在产生的更改事件记录中,指定列的值将被假名替换。

假名由应用指定的参数产生的散列值组成hashAlgorithm而且.根据所使用的散列函数,将维护引用完整性,而列值将被假名替换。中描述了支持的哈希函数MessageDigest节Java密码体系结构标准算法名称文档。

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

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

必要时,笔名会自动缩短为列的长度。连接器配置可以包括多个属性,这些属性指定不同的哈希算法和盐。

取决于hashAlgorithm使用,选中的数据集与实际数据集相匹配时,得到的数据集可能不会被完全屏蔽。

精确的

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

精确的(默认)

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

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

字符串

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

失败

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

失败

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

警告

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

跳过

导致有问题的事件被跳过。

8192

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

2048

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

0(禁用)

阻塞队列最大大小(以字节为单位)的长值。要激活该特性,请将值设置为正的长数据类型。

1000(1秒)

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

真正的

控制是否删除事件之后是一个墓碑事件。可能取值为:

真正的

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

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

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

没有默认的

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

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

< fullyQualifiedTableName >< keyColumn >< keyColumn >

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

< schemaName ><表>

该属性可以包括多个表的条目。使用分号分隔列表中的表项。
下面的示例为表设置消息键inventory.customers而且purchase.orders

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

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

没有默认的

一个以逗号分隔的可选正则表达式列表,如果更改事件消息中基于字符的列的长度超过指定的字符数,则该正则表达式与要截断的列的完全限定名匹配。长度指定为正整数。一个配置可以包含多个指定不同长度的属性。使用以下格式为列指定完全限定名:< schemaName ><表>< columnName >

没有默认的

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

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

没有默认的

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

列的完全限定名的格式为<表>< columnName >,或< schemaName ><表>< columnName >

没有默认的

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

完全限定数据类型名称的格式为<表>< typeName >,或< schemaName ><表>< typeName >
看到特定于oracle的数据类型名称列表

0

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

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

指定连接器向其发送心跳消息的主题名称的前缀字符串。
主题根据模式命名< heartbeat.topics.prefix >。< serverName >

没有默认的

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

2000

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

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

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

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

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

redo_log_catalog

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

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

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

内存

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

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

infinispan-该选项使用嵌入式Infinispan缓存来缓冲事务数据并将其持久化到磁盘。如果希望连接器处理长时间运行或大型事务,则选择此选项。当此选项为活动时,缓冲区状态在重新启动时保持不变。重新启动后,不需要重新创建缓冲区。由于缓冲区状态在重新启动时保持不变,因此在重新启动时不需要重新创建缓冲区。infinispan选项要求指定缓存文件目录。使用log.mining.buffer.location属性定义存储缓存文件的位置。

没有默认的

指定连接器用于读取和写入缓冲区缓存的目录的位置。指定Kafka集群中的每个节点都可以访问的目录,并且该目录对于连接器部署是唯一的。

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

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

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

1000

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

100000

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

20000

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

0

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

3000

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

1000

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

200

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

10000

连接器从LogMiner内容视图中获取的内容记录的数量。

0

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

控制连接器是否只挖掘归档日志,还是在线重做日志和归档日志的组合(默认值)。

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

10000

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

0

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

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

没有默认的

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

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

没有默认的

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

1000000

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

20000

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

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

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

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

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

没有默认的

一个以逗号分隔的Oracle真实应用程序集群(RAC)节点主机名或地址列表。该字段用于启用Oracle RAC支持。使用以下方法之一指定RAC节点列表:

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

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

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

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

没有默认的

以逗号分隔的操作类型列表,您希望连接器在流处理期间跳过这些操作类型。您可以配置连接器跳过以下操作:

  • c(插入/创建)

  • u(更新)

  • d(删除)

缺省情况下,不跳过任何操作。

无默认值

用于发送的数据集合的完全限定名称信号到连接器。
使用以下格式指定集合名称:
<开云体育电动老虎机数据库名>< schemaName ><表>

1024

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

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

开云体育官方注册网址Debezium提供了一组开云体育电动老虎机database.history。*属性,这些属性控制连接器如何与模式历史主题交互。

下表描述了开云体育电动老虎机database.history属性用于配置Debezium连接器。开云体育官方注册网址

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

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

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

One hundred.

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

4

在连接器恢复失败并发生错误之前,连接器应尝试读取持久历史数据的最大次数。接收不到数据后等待的最大时间为recovery.attemptsxrecovery.poll.interval.ms

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

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

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

安全默认值为

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

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

安全默认值为

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


开云体育官方注册网址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 >

快照度量不会公开,除非快照操作是活动的,或者自上次连接器启动以来发生了快照。

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

属性 类型 描述

字符串

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

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

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

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

string []

连接器捕获的表列表。

int

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

int

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

int

快照中包含的表的总数。

int

快照尚未复制的表数。

布尔

快照是否启动。

布尔

快照是否中止。

布尔

快照是否完成。

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

Map < String,长>

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

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

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

在执行增量快照时,连接器还提供了以下额外的快照度量:

属性 类型 描述

字符串

当前快照块的标识符。

字符串

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

字符串

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

字符串

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

字符串

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

流指标

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

下表列出了可用的流媒体指标。

属性 类型 描述

字符串

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

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

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

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

string []

连接器捕获的表列表。

int

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

int

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

布尔

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

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

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

Map < String, String >

上次接收事件的坐标。

字符串

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

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

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

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

表9所示。附加流度量的描述
属性 类型 描述

字符串

已处理的最近的系统更改编号。

字符串

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

字符串

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

字符串

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

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欲知详情。

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

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

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

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

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

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

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

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

string []

从事务缓冲区中删除的废弃事务标识符数组。看到log.mining.transaction.retention.hours获取详细信息。

string []

在事务缓冲区中挖掘和回滚的事务标识符数组。

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

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

int

检测到的错误数。

int

检测到的警告数量。

int

检查系统更改编号的次数,并保持不变。这是一个指示器,表明长时间运行的事务正在进行,并防止连接器将最新处理的系统更改编号刷新到连接器的偏移量。在最佳操作下,这应该总是或保持接近0

int

已检测到但DDL解析器无法解析的DDL记录的数量。这应该总是0;但是,当允许跳过不可解析的DDL时,可以使用此度量来确定是否有任何警告已写入连接器日志。

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

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

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

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

架构历史指标

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

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

属性 类型 描述

字符串

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

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

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

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

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

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

字符串

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

字符串

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

替代模式进化

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

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

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

表10。操作参数
的名字 描述

开云体育电动老虎机

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

模式

应用更改的模式的名称。

变化

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

changes.type

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

changes.id

表的完全限定名

changes.table

表的完全限定名

changes.table.defaultCharsetName

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

changes.table.primaryKeyColumnNames

数组中包含组成主键的列的名称

changes.table.columns

数组的列元数据

columns.name…

列的名称

columns.jdbcType…

处定义的列的JDBC类型JDBC API

columns.typeName…

列类型的名称

columns.typeExpression…

完整的列类型定义

columns.charsetName…

列字符集与默认值不同

columns.length…

列的长度/大小限制

columns.scale…

数字列的比例

columns.position…

列在表中的位置1

columns.optional…

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

columns.autoIncremented…

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

columns.generated…

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

模式变化信号插入后,连接器必须使用更改后的配置重新启动,其中包括指定开云体育电动老虎机database.history.skip.unparseable.ddl选择真正的.在连接器的提交SCN进展超过DDL更改之后,为了防止不可解析的DDL语句被意外跳过,请将连接器配置返回到以前的状态。

表11所示。日志记录的示例
价值

id

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

类型

模式变化

数据

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

xstream支持

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

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

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

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

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

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

为连接器创建XStream用户

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

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

创建一个XStream出站服务器

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

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

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

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

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

配置XStream适配器

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

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

{"name": "inventory-connector", "config": {"connector.class": "io.deb开云体育官方注册网址ezium.connector.oracle.OracleConnector", "tasks. debezium.connector.oracle. oracleconnector ", "Max ": "1", "开云体育电动老虎机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" } }

XStream连接器属性

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

财产

默认的

描述

没有默认的

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

出现问题时的行为

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

LogMiner适配器不捕获SYS或SYSTEM所做的更改

Oracle使用SYS而且系统说明了很多内部更改,因此连接器自动过滤这些用户所做的更改时,从LogMiner获取更改。千万不要使用SYS系统Debezium Oracle连接器发出的更改的用户帐户。开云体育官方注册网址

Baidu