为RDI准备Oracle和Oracle RAC

准备Oracle和Oracle RAC数据库以与RDI一起工作

Oracle Debezium 连接器使用 Oracle LogMiner 从提交日志中获取数据到数据库内的视图。按照以下步骤配置 LogMiner 并准备您的数据库以与 RDI 一起使用。

1. 配置Oracle LogMiner

以下示例显示了Oracle LogMiner的配置。

注意:
Amazon RDS for Oracle 不允许你执行下面示例中的命令,也不允许你以sysdba身份登录。请参阅下面的单独示例以配置Amazon RDS for Oracle
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;
-- You should now see "Database log mode: Archive Mode"
archive log list

exit;

配置适用于Oracle的Amazon RDS

AWS 提供了自己的一组命令来配置 LogMiner。

注意:
在执行这些命令之前, 您必须在您的Oracle AWS RDS实例上启用备份。

使用以下命令检查Oracle是否启用了备份:

SQL> SELECT LOG_MODE FROM V$DATABASE;

LOG_MODE
------------
ARCHIVELOG

LOG_MODE 应设置为 ARCHIVELOG。如果不是,则应重新启动您的 Oracle AWS RDS 实例。

一旦LOG_MODE正确设置为ARCHIVELOG,执行以下命令以完成LogMiner配置。第一个命令启用归档日志记录,第二个命令添加补充日志记录

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

2. 启用补充日志

您必须为要捕获的表或整个数据库启用补充日志记录。这使Debezium能够在更改发生前后捕获数据库行的状态。

以下示例展示了如何为名为 inventory.customers 的单个表中的所有列配置补充日志记录:

ALTER TABLE inventory.customers ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
注意:
如果您为所有表列启用补充日志记录,您可能会看到Oracle重做日志的大小急剧增加。仅在需要时使用补充日志记录以避免这种情况。

您还必须使用以下命令在数据库级别启用最小补充日志记录:

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

3. 检查重做日志的大小

在使用Debezium连接器之前,您应该与数据库管理员确认是否有足够的重做日志以及足够的容量来存储数据库的数据字典。通常,数据字典的大小会随着数据库中表和列的数量增加而增加。如果日志容量不足,您可能会遇到数据库和Debezium连接器的性能问题。

4. 设置归档日志目的地

您可以配置多达31个不同的归档日志目的地(您必须具有管理员权限才能执行此操作)。您可以为每个目的地设置参数以指定其用途,例如用于物理备机的日志传送,或用于扩展日志保留的外部存储。Oracle在V$ARCHIVE_DEST_STATUS视图中报告有关归档日志目的地的详细信息。

Debezium Oracle 连接器仅使用状态为 VALID 且类型为 LOCAL 的目标。如果您只有一个具有这些设置的目标,那么 Debezium 将自动使用它。如果您有多个具有这些设置的目标,那么您应该咨询您的数据库管理员,以确定选择哪一个用于 Debezium。

在连接器配置中使用log.mining.archive.destination.name属性为Debezium选择归档日志目的地。

例如,假设你有两个归档目的地,LOG_ARCHIVE_DEST_2LOG_ARCHIVE_DEST_3,它们的状态都设置为 VALID,类型设置为 LOCAL。Debezium 可以使用这些目的地中的任何一个,因此你必须在配置中明确选择其中一个。要选择 LOG_ARCHIVE_DEST_3,你可以使用以下设置:

{
    "log.mining.archive.destination.name": "LOG_ARCHIVE_DEST_3"
}

5. 为连接器创建一个用户

Debezium Oracle 连接器必须以具有特定权限的 Oracle LogMiner 用户身份运行。以下示例展示了一些 SQL,这些 SQL 在多租户数据库模型中为连接器创建了一个 Oracle 用户账户:

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; 
GRANT SET CONTAINER TO c##dbzuser CONTAINER=ALL; 
GRANT SELECT ON V_$DATABASE to c##dbzuser CONTAINER=ALL; 
GRANT FLASHBACK ANY TABLE TO c##dbzuser CONTAINER=ALL; 
GRANT SELECT ANY TABLE TO c##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; 
GRANT SELECT ON V_$TRANSACTION TO c##dbzuser CONTAINER=ALL; 

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

exit;

6. 配置完成

一旦您按照上述步骤操作,您的Oracle数据库就可以供Debezium使用了。

RATE THIS PAGE
Back to top ↑