6.4. 设置 Oracle 以使用 Debezium
设置 Oracle 以用于 Debezium Oracle 连接器需要以下步骤。这些步骤假定将多租户配置与容器数据库和至少一个可插拔数据库一起使用。如果您不打算使用多租户配置,则可能需要调整以下步骤。
有关设置 Oracle 以用于 Debezium 连接器的详情,请查看以下部分:
6.4.1. Debezium Oracle 连接器与 Oracle 安装类型的兼容性
Oracle 数据库可以作为独立实例安装,也可以使用 Oracle Real Application Cluster (RAC)安装。Debezium Oracle 连接器与两种类型的安装兼容。
6.4.2. 在捕获更改事件时 Debezium Oracle 连接器排除的模式
当 Debezium Oracle 连接器捕获表时,它会自动排除以下模式的表:
-
appqossys
-
audsys
-
ctxsys
-
dvsys
-
dbsfwuser
-
dbsnmp
-
qsmadmin_internal
-
lbacsys
-
mdsys
-
ojvmsys
-
olapsys
-
orddata
-
ordsys
-
outln
-
sys
-
system
-
wmsys
-
xdb
要启用连接器从表中捕获更改,表必须使用没有在上列表中命名的模式。
6.4.3. 在捕获更改事件时 Debezium Oracle 连接器排除的表
当 Debezium Oracle 连接器捕获表时,它会自动排除与以下规则匹配的表:
-
压缩与模式
CMP[3|4\":\"[0-9]+
匹配的 Advisor 表。 -
与
SYS_IOT_OVER_%
模式匹配的索引组织表。 -
spatial 表与模式
MDRT_%
、MDRS_%
或MDXT_%
匹配。 - 嵌套表
要启用连接器捕获带有与上述规则匹配的名称的表,您必须重命名表。
6.4.4. 准备 Oracle 数据库以用于 Debezium
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;
6.4.5. 调整 Oracle redo 日志的大小,以适应数据字典
根据数据库配置,红色日志的大小和数量可能不足以达到可接受的性能。设置 Debezium Oracle 连接器前,请确保 redo 日志的容量足以支持数据库。
数据库的红色日志的容量必须足够,才能存储其数据字典。通常,数据字典的大小随着数据库中表和列的数量而增加。如果 redo 日志没有足够的容量,数据库和 Debezium 连接器可能会遇到性能问题。
请咨询您的数据库管理员,评估数据库是否需要提高日志容量。
6.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 exit;
项 | 角色名称 | 描述 |
---|---|---|
1 | 创建会话 | 启用连接器连接到 Oracle。 |
2 | 设置容器 | 启用连接器在可插拔数据库间切换。这只有在 Oracle 安装启用了容器数据库支持(CDB)时才需要。 |
3 | SELECT ON V_$DATABASE |
启用连接器读取 |
4 | FLASHBACK ANY TABLE | 启用连接器来执行闪存查询,这是连接器如何执行数据的初始快照。 |
5 | 选择任何表 | 启用连接器读取任何表。 |
6 | SELECT_CATALOG_ROLE | 启用连接器读取 Oracle LogMiner 会话所需的数据字典。 |
7 | EXECUTE_CATALOG_ROLE | 启用连接器将数据字典写入 Oracle redo 日志,该日志需要跟踪架构更改。 |
8 | 选择任何事务 |
启用快照进程对任何事务执行闪存快照查询。当授予 |
9 | LOGMINING | 这个角色被添加到较新的 Oracle 版本中,以授予 Oracle LogMiner 及其软件包的完整访问权限。在没有此角色的旧版本 Oracle 中,您可以忽略此授权。 |
10 | 创建表 | 启用连接器在其默认表空间中创建其冲刷表。flush 表允许连接器明确控制将 LGWR 内部缓冲刷新到磁盘。 |
11 | 锁定任何表 | 启用连接器在模式快照过程中锁定表。如果通过配置显式禁用快照锁定,则可以安全地忽略此授权。 |
12 | 创建序列 | 启用连接器在其默认表空间中创建序列。 |
13 | EXECUTE ON DBMS_LOGMNR |
启用连接器在 |
14 | EXECUTE ON DBMS_LOGMNR_D |
启用连接器在 |
15 到 23 | SELECT ON V_$…. | 启用连接器读取这些表。连接器必须能够读取 Oracle redo 和 archive 日志的信息,以及当前事务状态,以准备 Oracle LogMiner 会话。如果没有这些授予,连接器就无法操作。 |
6.4.7. 支持 Oracle 备用数据库
Debezium Oracle 连接器不能用于 Oracle 物理或者逻辑备用数据库。