6.4. 设置 Oracle 以使用 Debezium


以下步骤设置用于 Debezium Oracle 连接器的 Oracle。这些步骤假定将多租户配置与容器数据库和至少一个可插拔数据库搭配使用。如果您不打算使用多租户配置,可能需要调整以下步骤。

有关设置用于 Debezium 连接器的 Oracle 的详情,请查看以下部分:

Oracle 数据库可以作为独立实例安装,也可以使用 Oracle Real Application Cluster (RAC)安装。Debezium Oracle 连接器与两种类型的安装兼容。

当 Debezium Oracle 连接器捕获表时,它会自动从以下模式中排除表:

  • appqossys
  • audsys
  • ctxsys
  • dvsys
  • dbsfwuser
  • dbsnmp
  • qsmadmin_internal
  • lbacsys
  • mdsys
  • ojvmsys
  • olapsys
  • orddata
  • ordsys
  • outln
  • sys
  • system
  • wmsys
  • xdb

要启用连接器来捕获表中的更改,表必须使用前面列表中未命名的 schema。

当 Debezium Oracle 连接器捕获表时,它会自动排除与以下规则匹配的表:

  • 压缩顾问表与模式 CMP[3|4 reporting[0-9]+ 匹配。
  • SYS_IOT_OVER_% 模式匹配的索引组织表。
  • MDRT_%MDRS_%MDXT_% 模式匹配的空间表。
  • 嵌套表

要让连接器捕获名称与上述任何规则匹配的表,您必须重命名表。

6.4.4. 准备用于 Debezium 的 Oracle 数据库

Oracle LogMiner 所需的配置

ORACLE_SID=ORACLCDB dbz_oracle sqlplus /nolog

CONNECT sys/top_secret AS SYSDBA
alter system set db_recovery_file_dest_size = 10G;
alter system set db_recovery_file_dest = '/opt/oracle/oradata/recovery_area' scope=spfile;
shutdown immediate
startup mount
alter database archivelog;
alter database open;
-- Should now "Database log mode: Archive Mode"
archive log list

exit;
Copy to Clipboard Toggle word wrap

Oracle AWS RDS 不允许执行上述命令,也不允许您以 sysdba 身份登录。AWS 提供了这些替代命令来配置 LogMiner。在执行这些命令前,请确保您的 Oracle AWS RDS 实例已启用了备份。

要确认 Oracle 启用了备份,请首先执行以下命令。LOG_MODE 应该称 ARCHIVELOG。如果没有,您可能需要重启 Oracle AWS RDS 实例。

Oracle AWS RDS LogMiner 所需的配置

SQL> SELECT LOG_MODE FROM V$DATABASE;

LOG_MODE
------------
ARCHIVELOG
Copy to Clipboard Toggle word wrap

当 LOG_MODE 设为 ARCHIVELOG 后,执行命令来完成 LogMiner 配置。第一个命令将数据库设置为 archivelogs,第二个添加了补充日志记录。

Oracle AWS RDS LogMiner 所需的配置

exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',24);

exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');
Copy to Clipboard Toggle word wrap

要让 Debezium 捕获更改数据库行之前的状态,还必须为捕获的表或整个数据库启用附件日志记录。以下示例演示了如何在单个 inventory.customers 表中为所有列配置补充日志记录。

ALTER TABLE inventory.customers ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
Copy to Clipboard Toggle word wrap

为所有表列启用附加日志记录会增加 Oracle redo 日志的卷。为防止日志大小过量增长,请选择性地应用前面的配置。

最少的附件日志记录必须在数据库级别启用,并可配置如下:

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
Copy to Clipboard Toggle word wrap

根据数据库配置,大小和红色日志的数量可能不足以达到可接受的性能。在设置 Debezium Oracle 连接器前,请确保 redo 日志的容量足以支持数据库。

数据库红色日志的容量必须足以存储其数据字典。通常,数据字典的大小会随着数据库中的表和列的数量增加。如果 redo 日志缺少足够容量,则数据库和 Debezium 连接器可能会遇到性能问题。

请参考您的数据库管理员来评估数据库是否可能需要增加日志容量。

Oracle 数据库管理员可以为归档日志配置最多 31 个不同的目的地。管理员可以为每个目的地设置参数,以为特定用途指定它,例如,用于物理待机的日志发送或外部存储以允许扩展日志保留。Oracle 在 V$ARCHIVE_DEST_STATUS 视图中报告有关归档日志目的地的详细信息。

Debezium Oracle 连接器只使用状态为 VALIDLOCAL 类型的目的地。如果您的 Oracle 环境包含多个满足该条件的目的地,请咨询您的 Oracle 管理员来确定应该使用哪个归档日志目的地 Debezium。

步骤

  • 要指定 Debezium 使用的存档日志目的地,请在连接器配置中设置 log.mining.archive.destination.name 属性。

    例如,在存档目的地 LOG_ARCHIVE_DEST_2LOG_ARCHIVE_DEST_3 的机构中,如果两个目的地都满足用于 Debezium 的条件(即,状态是 VALID类型为 LOCAL),以将连接器配置为使用 LOG_ARCHIVE_DEST_3,将 log.mining.archive.destination.name 属性的值设置为如下:
{
  "log.mining.archive.destination.name": "LOG_ARCHIVE_DEST_3"
}
Copy to Clipboard Toggle word wrap
警告

如果您的 Oracle 环境包含多个满足该条件的目的地,且您无法指定首选的目的地,Debezium Oracle 连接器会随机选择目标路径。因为为每个目的地配置的保留策略可能有所不同,所以如果连接器选择从中删除了请求日志数据的路径,这可能会导致错误。

6.4.7. 为 Debezium Oracle 连接器创建 Oracle 用户

要使 Debezium Oracle 连接器捕获更改事件,它必须以具有特定权限的 Oracle LogMiner 用户身份运行。以下示例显示了在多租户数据库模型中为连接器创建 Oracle 用户帐户的 SQL。

警告

连接器捕获由其自身 Oracle 用户帐户进行的数据库更改。但是,它不会捕获 SYSSYSTEM 用户帐户所做的更改。

创建连接器的 LogMiner 用户

sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba
  CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/logminer_tbs.dbf'
    SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
  exit;

sqlplus sys/top_secret@//localhost:1521/ORCLPDB1 as sysdba
  CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/logminer_tbs.dbf'
    SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
  exit;

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;

  GRANT CREATE SESSION TO c##dbzuser CONTAINER=ALL; 
1

  GRANT SET CONTAINER TO c##dbzuser CONTAINER=ALL; 
2

  GRANT SELECT ON V_$DATABASE to c##dbzuser CONTAINER=ALL; 
3

  GRANT FLASHBACK ANY TABLE TO c##dbzuser CONTAINER=ALL; 
4

  GRANT SELECT ANY TABLE TO c##dbzuser CONTAINER=ALL; 
5

  GRANT SELECT_CATALOG_ROLE TO c##dbzuser CONTAINER=ALL; 
6

  GRANT EXECUTE_CATALOG_ROLE TO c##dbzuser CONTAINER=ALL; 
7

  GRANT SELECT ANY TRANSACTION TO c##dbzuser CONTAINER=ALL; 
8

  GRANT LOGMINING TO c##dbzuser CONTAINER=ALL; 
9


  GRANT CREATE TABLE TO c##dbzuser CONTAINER=ALL; 
10

  GRANT LOCK ANY TABLE TO c##dbzuser CONTAINER=ALL; 
11

  GRANT CREATE SEQUENCE TO c##dbzuser CONTAINER=ALL; 
12


  GRANT EXECUTE ON DBMS_LOGMNR TO c##dbzuser CONTAINER=ALL; 
13

  GRANT EXECUTE ON DBMS_LOGMNR_D TO c##dbzuser CONTAINER=ALL; 
14


  GRANT SELECT ON V_$LOG TO c##dbzuser CONTAINER=ALL; 
15

  GRANT SELECT ON V_$LOG_HISTORY TO c##dbzuser CONTAINER=ALL; 
16

  GRANT SELECT ON V_$LOGMNR_LOGS TO c##dbzuser CONTAINER=ALL; 
17

  GRANT SELECT ON V_$LOGMNR_CONTENTS TO c##dbzuser CONTAINER=ALL; 
18

  GRANT SELECT ON V_$LOGMNR_PARAMETERS TO c##dbzuser CONTAINER=ALL; 
19

  GRANT SELECT ON V_$LOGFILE TO c##dbzuser CONTAINER=ALL; 
20

  GRANT SELECT ON V_$ARCHIVED_LOG TO c##dbzuser CONTAINER=ALL; 
21

  GRANT SELECT ON V_$ARCHIVE_DEST_STATUS TO c##dbzuser CONTAINER=ALL; 
22

  GRANT SELECT ON V_$TRANSACTION TO c##dbzuser CONTAINER=ALL; 
23


  GRANT SELECT ON V_$MYSTAT TO c##dbzuser CONTAINER=ALL; 
24

  GRANT SELECT ON V_$STATNAME TO c##dbzuser CONTAINER=ALL; 
25


  exit;
Copy to Clipboard Toggle word wrap

Expand
表 6.14. 权限/授予的描述
角色名称描述

1

创建会话

启用连接器连接到 Oracle。

2

设置容器

启用连接器在可插拔数据库间切换。只有在启用了容器数据库支持(CDB)时,才需要这样做。

3

SELECT ON V_$DATABASE

启用连接器读取 V$DATABASE 表。

4

FLASHBACK ANY 表

启用连接器来执行 Flashback 查询,这是连接器如何执行数据的初始快照。

5

选择任何表

启用连接器来读取任何表。

6

SELECT_CATALOG_ROLE

启用连接器读取 Oracle LogMiner 会话所需的数据字典。

7

EXECUTE_CATALOG_ROLE

启用连接器将数据字典写入 Oracle redo 日志,这是跟踪架构更改所需要的。

8

选择任何事务

启用快照过程对任何事务执行 Flashback 快照查询。当授予 FLASHBACK TABLE 时,也应授予这一操作。

9

LOGMINING

在较新版本的 Oracle 中添加了此角色,作为授予 Oracle LogMiner 及其软件包的完整访问权限的方法。在没有此角色的 Oracle 的旧版本中,您可以忽略这个授权。

10

创建表

启用连接器在默认表空间中创建其 flush 表。flush 表允许连接器将 LGWR 内部缓冲区的清除显式控制到磁盘。

11

锁定任何表

启用连接器在 schema 快照期间锁定表。如果通过配置明确禁用了快照锁定,可以安全地忽略此授权。

12

创建序列

启用连接器在默认表空间中创建序列。

13

EXECUTE ON DBMS_LOGMNR

启用连接器在 DBMS_LOGMNR 软件包中运行方法。这需要与 Oracle LogMiner 交互。在较新的 Oracle 版本中,这通过 LOGMINING 角色授予,但在旧版本中,必须明确授予这。

14

EXECUTE ON DBMS_LOGMNR_D

启用连接器在 DBMS_LOGMNR_D 软件包中运行方法。这需要与 Oracle LogMiner 交互。在较新的 Oracle 版本中,这通过 LOGMINING 角色授予,但在旧版本中,必须明确授予这。

15 到 25

SELECT ON V_$…​.

启用连接器来读取这些表。连接器必须能够读取 Oracle redo 和归档日志的信息,以及当前事务状态,以准备 Oracle LogMiner 会话。如果没有这些授权,连接器将无法操作。

6.4.8. 使用 Oracle 待机数据库运行连接器

备用数据库提供主实例的同步副本。如果出现主数据库故障,备用数据库提供连续可用性和灾难恢复。Oracle 同时使用物理和逻辑备用数据库。

物理待机是主生产数据库的确切块副本,其系统更改号(SCN)值与主数据库的值相同。Debezium Oracle 连接器无法直接从物理待机数据库捕获更改事件,因为物理待机不接受外部连接。仅在物理待机转换为主数据库后,连接器可以访问它来捕获事件,就像它来自任何其他主数据库一样。

逻辑待机包含与主数据相同的逻辑数据,但数据可能会以不同的物理方式存储。逻辑待机中的 SCN 偏移与主数据库中的偏移量不同。您可以将 Debezium Oracle 连接器配置为从逻辑待机数据库捕获更改

6.4.8.1. 从 Oracle 故障转移数据库捕获数据

当您设置故障转移数据库时,通常最好使用物理备用数据库而不是逻辑待机数据库。物理待机与主数据库保持一致状态,而不是逻辑待机。物理待机包含主数据的确切副本,并且待机系统的更改号(SCN)值与主数据的不同。在 Debezium 环境中,数据库故障转移到物理待机后,存在一致的 SCN 值可确保连接器可以找到最后处理的 SCN 值。

物理待机以只读模式锁定,运行受管恢复以维护同步。当数据库处于待机模式时,它不接受来自客户端的外部 JDBC 连接,并且外部应用无法访问它。

在失败事件后,要允许 Debezium 连接到以前的物理待机,DBA 必须执行几个操作来启用故障转移到待机,并将它提升为主数据库。以下列表标识了一些关键操作:

  • 在待机上取消受管恢复。
  • 完成活动的恢复过程。
  • 将待机转换为主要角色。
  • 打开客户端读写操作的新主要内容。

在以前的物理待机可用后,您可以将 Debezium Oracle 连接器配置为连接它。要让连接器从新的主设备捕获,请在连接器配置中编辑数据库主机名,将原始主的主机名替换为新主主机名。

当 Oracle 的 Debezium 连接器连接到主数据库时,它使用内部清除表来管理 Oracle Log Writer Buffer (LGWR)进程的清除周期。flush 进程要求用户帐户访问数据库具有创建和写入此清除表的权限。但是,逻辑独立数据库通常允许只读访问,从而导致连接器写入数据库。您可以修改连接器配置,使连接器可以从逻辑待机捕获事件,或者 DBA 可以创建一个新的可写表空间,连接器可以在其中存储 flush 表。

重要

Debezium Oracle 连接器从只读逻辑待机数据库进行最大更改的功能是开发者预览功能。红帽以任何方式支持开发人员预览功能,且功能不完整或生产就绪。对于生产环境或关键业务工作负载,不要使用开发人员预览软件。开发人员预览软件可提前访问即将发布的产品软件。客户可以使用此软件测试功能并在开发过程中提供反馈。此软件可能没有任何文档,可以随时更改或删除,并收到有限的测试。红帽可能会提供在没有关联的 SLA 的情况下提交开发人员预览软件反馈的方法。

有关 Red Hat Developer Preview 软件支持范围的更多信息,请参阅 开发人员预览支持范围

流程

  • 要启用 Debezium 从 Oracle 只读逻辑待机数据库中捕获事件,请在连接器配置中添加以下属性,以禁用清除表的创建和管理:

    internal.log.mining.read.only=true
    Copy to Clipboard Toggle word wrap

    上述设置可防止数据库创建和更新 LOG_MINING_FLUSH 表。您可以将 internal.log.mining.read.only 属性与 Oracle Standalone 数据库一起使用,或者与 Oracle RAC 安装一起使用。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat