这篇文章是一个由三部分组成的系列文章的一部分,探索如何使用Debezium使用Oracle LogMiner开云体育官方注册网址从Oracle数据库中摄取更改。开云体育电动老虎机在本系列文章中,我们将研究为Debezium for Oracle建立概念验证(POC)部署的所有步骤。开云体育官方注册网址我们将讨论设置和配置以及多租户的细微差别。我们还将深入了解您可能需要了解的任何已知陷阱和关注点,以及如何调试特定的问题。最后,我们将讨论维护健康连接器部署所需的性能和监视。

在整个练习过程中,我们希望向您展示为Oracle部署Debezium是多么简单。开云体育官方注册网址本系列的安装和设置部分可能看起来相当复杂,但其中许多步骤可能已经存在于预先存在的环境中。我们将深入研究每一个步骤,解释使用容器映像部署的必要性。

所以,不要再拖延了,让我们开始吧!

甲骨文是什么?

这个问题看起来很讽刺,有些人可能不知道Oracle数据库是什么。开云体育电动老虎机Oracle数据库是开云体育电动老虎机一个关系数据库管理系统(RBDMS),该数据库存储并提供对通常相关的数据点的访问。该数据库开云体育电动老虎机由Oracle公司开发和销售,是市场上最受信任和广泛使用的关系数据库引擎之一,提供可扩展的关系数据库架构。

Oracle数据库由开云体育电动老虎机一组模式组成,这些模式表示数据或模式对象的逻辑结构的集合。模式对象可以是触发器、视图、表、数据类型、序列、过程、函数等等。此外,Oracle 12引入了多租户架构,允许单个数据库实例充当多租户容器数据库(CDB),其中包含零、一个或多个客户创建的可插拔数据库(pdb)。开云体育电动老虎机

目标是安装一个Oracle数据库,将Debezium连接开云体育电动老虎机到Oracle,并将输入的更改转换为开云体育官方注册网址存储在Apache Kafka中的更改事件。

安装Oracle

首先,我们需要一个正在运行的Oracle数据库环境。开云体育电动老虎机最简单的方法之一就是使用码头工人通过部署一个运行Oracle数据库的容器。开云体育电动老虎机Oracle已经在他们的容器注册表,允许任何人运行数据库并测试它。开云体育电动老虎机如果您打算从现有的Oracle数据库中摄取更改,可以跳过本节。开云体育电动老虎机

Oracle容器映像都是使用多租户Oracle预构建的。这意味着我们将根据多租户体系结构进行设置。如果您使用的安装不使用多租户,则可能需要进行一些小的调整。

在这个练习中,我们将使用这个容器图像.使用码头工人拉,在使用Oracle容器注册表进行身份验证后,使用以下命令拉出映像:

Docker拉container-registry.oracle.com/datab开云体育电动老虎机ase/enterprise:latest

要启动容器,请使用码头工人运行命令。由于数据库容器映像必须首先安装Oracle数据库,因此需要一些环境变量,例如数据库SI开云体育电动老虎机D、可插入数据库名称和密码。

docker运行-d \——name dbz_oracle21 \ -p 1521:1521 \ -e ORACLE_SID=ORCLCDB \ -e ORACLE_PDB=ORCLPDB1 \ -e ORACLE_PWD=oraclepw \ container-registry.oracle.com/data开云体育电动老虎机base/enterprise:latest

ORACLE_SID指用于识别数据库的系统/服务ID。开云体育电动老虎机因为我们正在使用多租户,所以我们将使用名称ORCLCDB表示容器的数据库开云体育电动老虎机或国开行。在Oracle的多租户体系结构中ORACLE_PDB指用于识别的系统/服务ID可插入数据库开云体育电动老虎机或PDB。最后,ORACLE_PWD帐户使用的密码SYS而且系统用户,我们稍后会用到。

容器将数据持久化到容器文件系统上的数据库文件中。开云体育电动老虎机删除容器时,数据将丢失。要在容器外持久化数据,请参考Oracle注册表的README以了解如何在容器上设置卷码头工人运行命令。

我们显式地将docker容器作为后台进程启动。如果希望查看容器内发生的事情,可以使用该命令-f dbz_oracle21 . Docker日志跟踪容器的数据库日志。开云体育电动老虎机

在接下来的几分钟里,数据库将在容器中进行配置和安装,这是在启开云体育电动老虎机动一个新容器且不存在初始配置和数据库时发生的。通过在日志中查找类似于下面的横幅,您将知道安装是否成功:

######################### 开云体育电动老虎机数据库已经可以使用了!#########################

至此,安装已经完成,可以安全地转向下一节了。

配置Oracle

从Oracle数开云体育电动老虎机据库中摄取更改需要几个数据库配置。如果使用的是预先存在的环境,则可以跳过其中一些步骤。

需要进行以下配置:

配置Oracle:归档日志

Oracle将填满的重做日志(数据库事务日志)保存到一个或多个离线目的地,统称为归档重做日开云体育电动老虎机志或归档日志。使用归档日志将主数据库中的主要更改复制到逻辑或物理备开云体育电动老虎机用环境。

日志切换发生在重做日志填满并存档时。开云体育官方注册网址Debezium通过重做日志和归档日志接收更改。开云体育官方注册网址当重做日志被归档时,Debezium需要访问归档日志来完成对重做条目的处理。

中使用的Oracle容器注册表映像安装Oracle节没有启用归档日志记录。如果使用另一个映像或预先存在的环境,则必须检查是否启用了归档日志记录。要检查状态,请使用SYS的用户和在安装过程中定义的密码ORACLE_PWD连接到ORCLCDB开云体育电动老虎机数据库,执行以下查询:

从v $ database中选择log_mod开云体育电动老虎机e

如果列包含ARCHIVELOG,则启用归档日志记录。如果列中包含该值NOARCHIVELOG,存档日志记录未启用,需要进一步配置。

在设置Oracle归档日志时,我们不仅需要启用日志功能,还需要在磁盘上指定一个位置来存储日志。如果您使用的是预先存在的环境,则需要就此与数据库管理员协商。开云体育电动老虎机大多数数据开云体育电动老虎机库服务器使用特殊路径存储归档日志文件,您需要知道是否使用了Oracle自动存储管理(ASM),或者数据库服务器上哪个卷有足够的空间。

让我们打开Oracle数据库容器的终端。开云体育电动老虎机我们希望使用SQL*Plus连接到数据库容器,以使用开云体育电动老虎机允许轻松卸载和重新启动数据库的客户端。所以在一个新的终端中,执行:

docker exec -it dbz_oracle21 -e ORACLE_SID=ORCLCDB sqlplus sys as sysdba . exe

如果连接到现有的Oracle环境,也可以这样做ssh到数据库服务器开云体育电动老虎机的shell中运行SQL*Plus。

上面的命令将启动Oracle的SQL*Plus,一个命令行Oracle SQL客户端。客户端将询问您的密码,该密码将与ORACLE_PWD环境变量或oraclepw如果您正在使用Oracle注册表容器。利用你的环境SYS连接到现有Oracle环境时的用户密码。

我们需要设置两个数据库参数:开云体育电动老虎机

db_recovery_file_dest_size

可用来存储归档日志的字节数。

假设现有归档日志和下一个要归档的日志的大小超过了这个配置值。在这种情况下,Oracle数据库归档进程将阻塞。开云体育电动老虎机如果所有重做日志都需要存档,并且存档进程被阻塞,数据库将阻止更改,直到存档进程解除阻塞。开云体育电动老虎机删除旧的归档日志RMAN实用程序解锁存档程序进程,允许存档任何挂起的重做日志。因此,根据数据库保留策略选择合适的大小通常是个好主意。开云体育电动老虎机

db_recovery_file_dest

存储归档日志的磁盘位置。

这个位置必须是Oracle数据库用户(通常称为数据库用户)可读可写的开云体育电动老虎机甲骨文用户。

要设置这些值,我们将在SQL*Plus终端窗口中执行以下SQL命令,在这个窗口中我们已经连接到数据库开云体育电动老虎机SYS用户。同样,如果要连接到已存在的环境,请在继续此处操作之前咨询数据库管理员。开云体育电动老虎机

改变系统db_recovery_file_dest_size =10G;改变系统db_recovery_file_dest =/ opt / oracle / oradata / ORCLCDB范围= spfile;关闭立即启动安装改变开云体育电动老虎机ARCHIVELOG;改变开云体育电动老虎机开放;归档日志列表;

上面的改变语句调整数据库参数,指定存档日志的保留最大为开云体育电动老虎机10GB/ opt / oracle / oradata / ORCLCDB是存储日志的地方。

SQL*Plus的最终输出应该显示如下:

SQL>数开云体育电动老虎机据库日志模式归档模式自动归档启用归档目的USE_DB_RECOVERY_FILE_DEST最古老的在线日志序列1下一个归档的日志序列3当前日志序列3

归档日志的配置已经完成,当数据库日志发生切换时,Oracle ARCH进程会将重做日志转换为存储在磁盘指定位置的归档日志。开云体育电动老虎机

Oracle支持多个归档日志目的地的概念,允许在不同的文件位置存储重做日志。当使用Oracle DataGuard将归档日志副本传输到辅助服务器进行灾难恢复或业务智能时,通常会有多个存储位置。在这篇博客文章中,我们不会介绍如何配置它,但值得注意的是,它的功能是存在的,而且可能很有帮助。

配置Oracle:重做日志

Oracle的事务日志被称为重做日志。这些日志非常重要,因为它们在数据库崩溃或媒体故障时用于恢复到检查点。开云体育电动老虎机不幸的是,Oracle容器映像经常使用重做日志配置,这对Debezium来说并不有用。开云体育官方注册网址

有两个日志挖掘策略Debe开云体育官方注册网址zium的Oracle连接器。该策略控制连接器如何与Oracle LogMiner交互,以及连接器如何摄取模式和表更改。

redo_log_catalog

数据字典会周期性地写入重做日志,随着时间的推移,会产生更多的归档日志。此设置支持跟踪DDL更改,因此如果表的模式更改,这将是实现此目的的理想策略。

online_catalog

数据字典不会周期性地写入重做日志,使生成的归档日志与当前行为保持一致。Oracle LogMiner将更快地挖掘变化;然而,这种性能是以跟踪DDL的变化。如果表的模式保持不变,这将是实现这一目的的理想策略。

当使用online_catalog模式下,您可以安全地完全跳过此步骤。

当使用redo_log_catalog模式下(默认),重做日志大小对于减少日志切换频率至关重要。日志切换时,LogMiner会话重新启动,重做日志中的数据字典重新建立。当会话重新启动时,LogMiner将读回字典,并用于跟踪DDL的更改,这可能导致在填充字典表时轻微的初始会话延迟。总的来说,当重做日志足够大,可以将数据字典写入单个日志文件时,您可以获得更好的性能。

Oracle容器注册表映像配置了重做日志大小200 mb.在使用默认挖掘策略时,这个默认大小太小,因此我们将对此进行调整,使日志使用的大小为400 mb

在没有多租户的情况下安装Oracle时,使用400 mb由于在启用多租户时,根数据库中存在大量基表,但在可插拔数据库中不存在,因此可能仍然略小。开云体育电动老虎机请使用500 mb相反,如果您正在从至少没有多租户的Oracle环境中摄取更改。

不管是否存在多租户,这些值在您的生产环境中应该更加重要。您的DBA将能够使用Oracle的大小指南,根据日志开关频率和系统负载确定最佳值。

在进行任何更改之前,必须检查环境的当前状态。在启用归档日志记录的同一终端上,执行以下SQL以确定当前日志大小。

Select group #, bytes /1024/1024 size_mb, status from v $ log

Oracle容器注册表映像将返回以下输出:

组# SIZE_MB状态  ---------- ---------- ---------------- 200 200活动2 200活动3电流

这个输出告诉我们有3个日志组,每个组消耗200 mb每个日志的空间。此外,与每个组相关联的状态也很重要,因为它代表了日志的当前状态。

详细描述如下:

不活跃的

这意味着Oracle已经初始化了日志,并且当前没有在使用。

活跃的

这意味着Oracle已经初始化了日志,并且当前正在使用。重做日志是必需的,在发生故障时使用,这样数据库就可以安全恢复。开云体育电动老虎机

当前的

这意味着Oracle当前正在写入该日志。在使用Oracle Real Application Clusters (RAC)时,可以将多个日志标记为current,表示每个集群节点的一条日志。

未使用的

这意味着Oracle没有初始化日志并且没有在使用。

现在,使用相同的终端窗口,执行以下SQL来确定重做日志的文件名和位置。

Select group #, member from v $ logfile

Oracle容器注册表映像将返回以下输出:

组#成员  ---------- --------------------------------------------------- 1 / opt / oracle / oradata / ORCLCDB / redo01.log 2 / opt / oracle / oradata ORCLCDB / redo02.log 3 / opt / oracle / oradata / ORCLCDB / redo03.log

我们可以从中了解到,每个日志组由一个重做日志组成。Oracle支持每组多个日志的概念,允许所谓的多路复用。您通常只会在生产环境中看到这种情况,偶尔也会在测试环境中看到,但在开发或容器环境中很少看到这种情况。

目标是调整字节中的列。V $日志表的值400 mb.不幸的是,进行此调整的唯一方法是删除并重新创建日志组,只有在状态组中的任意一个不活跃的未使用的.因为log group 1是不活跃的上面,我们将从它开始,但是您可以安全地以任何顺序对日志组执行此过程。

在运行SQL*Plus的终端中执行如下命令:

删除日志文件开云体育电动老虎机组删除日志文件开云体育电动老虎机组增加LOGF开云体育电动老虎机ILE GROUP ('/opt/oracle/oradata/ORCLCDB/redo01.log')

这将删除并重新创建大小为的日志组400 mb.中使用相同的日志文件名成员列中的VLOGFILE表格如果数据库使用开云体育电动老虎机多路复用,每个日志组有多个日志文件,则使用逗号分隔的文件名列表来注册每个日志文件。

对所有日志组继续执行上述步骤,并相应地更改日志组和文件名,直到all不活跃的未使用的组的大小为400 mb.一旦所有剩下要改变的就是那些已经改变的当前的,你可以在数据库上发布一个日志开关,使用下面的SQL来推进数据库到下一个开云体育电动老虎机重做日志:

修改系统开关日志文件

如果您重新检查日志的大小V $日志,你会看到输出如下所示:

Sql > select group #, bytes /1024/1024 size_mb, status from v $ log order by 1组# SIZE_MB状态  ---------- ---------- ---------------- 1 400电流2 400未使用的3 200活跃

现在我们需要等待数据库最终将日志组3的状态切换到开云体育电动老虎机不活跃的.切换可能需要几分钟,所以要耐心,并定期检查大小。一旦状态达到不活跃的,使用相同的步骤修改最终的日志组和文件名。

最后检查一下V $日志在最后一个日志组之后的表中,我们将看到所有内容看起来是按顺序排列的:

Sql > select group #, bytes /1024/1024 size_mb, status from v $ log order by 1组# SIZE_MB状态  ---------- ---------- ---------------- 1 400电流2 400未使用的400未使用

此时,我们已经修改了所有重做日志的大小,减少了Debezium执行数据字典构建步骤时日志切换的频率。开云体育官方注册网址

配置Oracle:补充日志记录

Oracle重做日志主要用于实例和媒体恢复,因为这些操作所需的数据会自动记录。LogMiner默认情况下不能使用,因为Oracle不提供任何补充的开箱即用的日志数据。由于Debe开云体育官方注册网址zium依赖于LogMiner,必须至少启用补充日志,以便Debezium为Oracle执行任何更改数据捕获。

可以使用两种不同的策略来设置补充日志:

  1. 开云体育电动老虎机数据库补充日志记录

  2. 表补充日志记录

为了使D开云体育官方注册网址ebezium能够与LogMiner连接并使用链接行和各种存储安排,必须在最低级别启用数据库补充日志记录。开云体育电动老虎机要启用该级别,请在当前SQL*Plus终端执行以下SQL:

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

我们将在后面讨论配置连接器时讨论基于表的补充日志记录。

配置Oracle:用户设置

为了让Debez开云体育官方注册网址ium连接器捕获变更事件,它必须建立到数据库的JDBC连接,并执行一系列LogMiner api。开云体育电动老虎机用户帐户需要特定的权限才能访问这些LogMiner api并从捕获的表中收集数据。

当使用多租户架构时,就像在Oracle容器注册表映像中发现的那样,我们实际上需要使用两个数据库,开云体育电动老虎机ORCLCDB(容器或根数据库)和开云体育电动老虎机ORCLPDB1(可插拔数据库)。开云体育电动老虎机所有捕获的表都将在PDB中创建和维护,但有时连接器需要访问根数据库来读取特定的系统表。开云体育电动老虎机

因此,在多租户架构中,我们必须首先设置用户帐户将使用的两个表空间。要创建这些表空间,在SQL*Plus终端中执行以下SQL:

连接sys / oraclepw@ORCLCDB作为sysdba;创建表空间logminer_tbs数据文件/ opt / oracle / oradata / ORCLCDB / logminer_tbs.dbf大小25M重用自动扩展最大容量无限;连接sys / oraclepw@ORCLPDB1作为sysdba;创建表空间logminer_tbs数据文件/ opt / oracle / oradata ORCLCDB / ORCLPDB1 / logminer_tbs.dbf大小25M重用自动扩展最大容量无限;

如果不是部署在启用多租户的Oracle数据库上,则在开云体育电动老虎机ORCLPDB1开云体育电动老虎机不需要数据库。此外,确保为表空间、凭据和数据库SID提供的路径都是正确的。开云体育电动老虎机您可能需要咨询DBA以正确创建表空间。

一旦表空间存在,现在就可以创建用户帐户本身了。如果您使用多租户环境,用户名必须使用普通用户前缀,以便Oracle在CDB根数据库和PDB可插拔数据库中创建该用户名;开云体育电动老虎机否则,用户名可以是任何东西。由于我们正在使用容器进行多租户数据库安装,因此我们将创建一个名为开云体育电动老虎机c # # dbzuser

连接sys / oraclepw@ORCLCDB作为sysdba;创建用户c##dbzuser IDENTIFIED BY dbz默认表空间LOGMINER_TBS配额限制LOGMINER_TBS容器=所有

用户帐户需要几个权限。在本文发表时,权限列表包括以下内容:

格兰特创建会话c# # = dbzuser容器;格兰特容器c# # = dbzuser容器;格兰特选择美元V开云体育电动老虎机_数据库c# # = dbzuser容器;格兰特闪回任何表格c# # = dbzuser容器;格兰特选择任何表格c# # = dbzuser容器;格兰特SELECT_CATALOG_ROLEc# # = dbzuser容器;格兰特EXECUTE_CATALOG_ROLEc# # = dbzuser容器;格兰特选择任何事务c# # = dbzuser容器;格兰特选择任何字典c# # = dbzuser容器;格兰特LOGMININGc# # = dbzuser容器;格兰特创建表格c# # = dbzuser容器;格兰特任何表格c# # = dbzuser容器;格兰特创建序列c# # = dbzuser容器;格兰特执行DBMS_LOGMNRc# # = dbzuser容器;格兰特执行DBMS_LOGMNR_Dc# # = dbzuser容器;格兰特选择美元V_日志c# # = dbzuser容器;格兰特选择V_ LOG_HISTORY美元c# # = dbzuser容器;格兰特选择V_ LOGMNR_LOGS美元c# # = dbzuser容器;格兰特选择V_ LOGMNR_CONTENTS美元c# # = dbzuser容器;格兰特选择V_ LOGMNR_PARAMETERS美元c# # = dbzuser容器;格兰特选择美元V_日志文件c# # = dbzuser容器;格兰特选择V_ ARCHIVED_LOG美元c# # = dbzuser容器;格兰特选择V_ ARCHIVE_DEST_STATUS美元c# # = dbzuser容器;格兰特选择V_美元交易c# # = dbzuser容器;

您可以参考最新的文档检讨所需拨款是否已更改。我们已经创建了将在配置中使用的连接器用户,并赋予该用户所有必要的数据库权限。开云体育电动老虎机

结论

在本系列的这一部分中,我们介绍了Oracle是什么以及为什么它如此受欢迎。我们还介绍了使用容器安装Oracle数据库和配置Oracle实例以允许Debez开云体育电动老虎机ium摄取更改。开云体育官方注册网址在下一个部分在本系列中,我们将深入研究在Apache Kafka Connect上部署Debezium开云体育官方注册网址 Oracle连接器。

克里斯克兰福德

克里斯是红帽公司的软件工程师。他以前是Hibernate ORM团队的成员,现在在Debezium工作。开云体育官方注册网址他住在北卡罗来纳州,距离红帽塔只有几个小时的路程。


关于Debe开云体育官方注册网址zium

开云体育官方注册网址Debezium是一个开源的分布式平台,它将现有数据库转换为事件流,因此应用程序几乎可以立即看到并响应数据库中提交的每一个行级更改。开云体育电动老虎机开云体育官方注册网址Debezium是建立在卡夫卡并提供卡夫卡连接监控特定数据库管理系统的兼容连接器。开云体育电动老虎机开云体育官方注册网址Debezium在Kafka日志中记录了数据更改的历史,所以你的应用程序可以在任何时候停止和重新启动,并且可以很容易地使用它没有运行时错过的所有事件,确保所有事件都被正确和完整地处理。开云体育官方注册网址Debezium是开源Apache许可证,版本2.0

参与

我们希望您觉得Debezium有趣开云体育官方注册网址且有用,并愿意尝试一下。在Twitter上关注我们@开云体育官方注册网址debezium在Zulip上和我们聊天,或加入我们的邮件列表与社区对话。所有的代码都是开源的GitHub上,因此在本地构建代码并帮助我们改进现有连接器并添加更多连接器。如果您发现了问题或对我们如何改进Debezium有想法,请告诉我们开云体育官方注册网址记录问题

Baidu
map