7.4. 设置 Oracle 以使用 Debezium
以下步骤设置用于 Debezium Oracle 连接器的 Oracle。这些步骤假定将多租户配置与容器数据库和至少一个可插拔数据库搭配使用。如果您不打算使用多租户配置,可能需要调整以下步骤。
有关设置用于 Debezium 连接器的 Oracle 的详情,请查看以下部分:
7.4.1. Debezium Oracle 连接器与 Oracle 安装类型的兼容性
Oracle 数据库可以作为独立实例安装,也可以使用 Oracle Real Application Cluster (RAC)安装。Debezium Oracle 连接器与两种类型的安装兼容。
7.4.2. Debezium Oracle 连接器在捕获更改事件时排除的 schema
当 Debezium Oracle 连接器捕获表时,它会自动从以下模式中排除表:
-
appqossys
-
audsys
-
ctxsys
-
dvsys
-
dbsfwuser
-
dbsnmp
-
qsmadmin_internal
-
lbacsys
-
mdsys
-
ojvmsys
-
olapsys
-
orddata
-
ordsys
-
outln
-
sys
-
system
-
wmsys
-
xdb
要启用连接器来捕获表中的更改,表必须使用前面列表中未命名的 schema。
7.4.3. Debezium Oracle 连接器在捕获更改事件时排除的表
当 Debezium Oracle 连接器捕获表时,它会自动排除与以下规则匹配的表:
-
压缩顾问表与模式
CMP[3|4 reporting[0-9]+
匹配。 -
与
SYS_IOT_OVER_%
模式匹配的索引组织表。 -
与
MDRT_%
、MDRS_%
或MDXT_%
模式匹配的空间表。 - 嵌套表
要让连接器捕获名称与上述任何规则匹配的表,您必须重命名表。
7.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;
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
当 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');
要让 Debezium 捕获更改数据库行之前的状态,还必须为捕获的表或整个数据库启用附件日志记录。以下示例演示了如何在单个 inventory.customers
表中为所有列配置补充日志记录。
ALTER TABLE inventory.customers ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
为所有表列启用附加日志记录会增加 Oracle redo 日志的卷。为防止日志大小过量增长,请选择性地应用前面的配置。
最少的附件日志记录必须在数据库级别启用,并可配置如下:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
7.4.5. 重新定义 Oracle redo 日志大小以容纳数据字典
根据数据库配置,大小和红色日志的数量可能不足以达到可接受的性能。在设置 Debezium Oracle 连接器前,请确保 redo 日志的容量足以支持数据库。
数据库红色日志的容量必须足以存储其数据字典。通常,数据字典的大小会随着数据库中的表和列的数量增加。如果 redo 日志缺少足够容量,则数据库和 Debezium 连接器可能会遇到性能问题。
请参考您的数据库管理员来评估数据库是否可能需要增加日志容量。
7.4.6. 为 Debezium Oracle 连接器创建 Oracle 用户
要使 Debezium Oracle 连接器捕获更改事件,它必须以具有特定权限的 Oracle LogMiner 用户身份运行。以下示例显示了在多租户数据库模型中为连接器创建 Oracle 用户帐户的 SQL。
连接器捕获由其自身 Oracle 用户帐户进行的数据库更改。但是,它不会捕获 SYS
或 SYSTEM
用户帐户所做的更改。
创建连接器的 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;
项 | 角色名称 | 描述 |
---|---|---|
1 | 创建会话 | 启用连接器连接到 Oracle。 |
2 | 设置容器 | 启用连接器在可插拔数据库间切换。只有在启用了容器数据库支持(CDB)时,才需要这样做。 |
3 | SELECT ON V_$DATABASE |
启用连接器读取 |
4 | FLASHBACK ANY 表 | 启用连接器来执行 Flashback 查询,这是连接器如何执行数据的初始快照。 |
5 | 选择任何表 | 启用连接器来读取任何表。 |
6 | SELECT_CATALOG_ROLE | 启用连接器读取 Oracle LogMiner 会话所需的数据字典。 |
7 | EXECUTE_CATALOG_ROLE | 启用连接器将数据字典写入 Oracle redo 日志,这是跟踪架构更改所需要的。 |
8 | 选择任何事务 |
启用快照过程对任何事务执行 Flashback 快照查询。当授予 |
9 | LOGMINING | 在较新版本的 Oracle 中添加了此角色,作为授予 Oracle LogMiner 及其软件包的完整访问权限的方法。在没有此角色的 Oracle 的旧版本中,您可以忽略这个授权。 |
10 | 创建表 | 启用连接器在默认表空间中创建其 flush 表。flush 表允许连接器将 LGWR 内部缓冲区的清除显式控制到磁盘。 |
11 | 锁定任何表 | 启用连接器在 schema 快照期间锁定表。如果通过配置明确禁用了快照锁定,可以安全地忽略此授权。 |
12 | 创建序列 | 启用连接器在默认表空间中创建序列。 |
13 | EXECUTE ON DBMS_LOGMNR |
启用连接器在 |
14 | EXECUTE ON DBMS_LOGMNR_D |
启用连接器在 |
15 到 25 | SELECT ON V_$…. | 启用连接器来读取这些表。连接器必须能够读取 Oracle redo 和归档日志的信息,以及当前事务状态,以准备 Oracle LogMiner 会话。如果没有这些授权,连接器将无法操作。 |
7.4.7. 支持 Oracle 待机数据库
Debezium Oracle 连接器从只读逻辑待机数据库进行最大更改的功能是开发者预览功能。红帽以任何方式支持开发人员预览功能,且功能不完整或生产就绪。对于生产环境或关键业务工作负载,不要使用开发人员预览软件。开发人员预览软件可提前访问即将发布的产品软件。客户可以使用此软件测试功能并在开发过程中提供反馈。此软件可能没有任何文档,可以随时更改或删除,并收到有限的测试。红帽可能会提供在没有关联的 SLA 的情况下提交开发人员预览软件反馈的方法。
有关 Red Hat Developer Preview 软件支持范围的更多信息,请参阅 开发人员预览支持范围。