一、配置Oracle
要从 Oracle 数据库获取更改,需要多种数据库配置。主要是下面的步骤:
需要进行以下配置:
存档日志
重做日志
补充日志记录
CDB 和 PDB 中的用户和表空间/模式
连接设置日志归档
1)切换到oralce用户,su - oracle;
2)创建数据需要的目录,需要提前创建,否则启用日志归档会报错目录不存在;
mkdir /home/oracle/oracle-data
3)以DBA身份连接到数据库,后续操作都是终端操作;
sqlplus /nolog
conn /as sysdba
4)启用日志归档,(这里的db_recovery_file_dest归档文件夹必须存在);
alter system set db_recovery_file_dest_size = 50G;
alter system set db_recovery_file_dest = '/home/oracle/oracle-data' scope=spfile;
shutdown immediate;
startup mount;
alter database archivelog;
alter database open;
5)检查日志归档是否开启,"Database log mode: Archive Mode" ;
archive log list;
6)设置数据库启用补充日志记录;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
二、配置 Oracle:重做日志
Oracle 的事务日志称为重做日志。这些日志至关重要,因为它们在数据库崩溃或介质故障时用于恢复到检查点。不幸的是,Oracle 容器镜像通常使用对 Debezium 没有用的重做日志配置。
Debezium 的 Oracle 连接器有两种日志挖掘策略。该策略控制连接器如何与 Oracle LogMiner 交互以及连接器如何接收架构和表更改。
重做日志目录:数据字典将定期写入重做日志,从而随着时间的推移生成更高的归档日志。此设置可以跟踪 DDL 更改,因此如果表的架构发生更改,这将是实现该目的的理想策略。
当使用 redo_log_catalog 模式(默认)时,重做日志大小对于降低日志切换频率至关重要。当发生日志切换时,LogMiner 会话将重新启动,并在重做日志中重建数据字典。该字典由 LogMiner 读回,并用于在会话重新启动时跟踪 DDL 更改,这可能会导致在填充字典表时出现轻微的初始会话延迟。总体而言,当重做日志足够大以将数据字典写入单个日志文件时,您将获得更好的性能。
Oracle 容器注册表映像配置有 200MB 的重做日志大小。使用默认挖掘策略时,此默认大小太小,因此我们将对此进行调整,使日志使用 400MB 的大小。
当使用没有多租户安装的 Oracle 时,使用 400MB 可能仍然稍小,因为在启用多租户时,根数据库中存在大量基表,但可插拔数据库中不存在这些基表。如果您要从至少没有多租户的 Oracle 环境中提取更改,请改用 500MB。
无论多租户如何,这些值在您的生产环境中都应该更加重要。您的 DBA 将能够使用 Oracle 的规模调整指南根据日志切换频率和系统负载确定最佳值。
在运行 SQL*Plus 的终端中,执行以下命令:
ALTER DATABASE CLEAR LOGFILE GROUP 1;
ALTER DATABASE DROP LOGFILE GROUP 1;
ALTER DATABASE ADD LOGFILE GROUP 1 ('/opt/oracle/oradata/ORCLCDB/redo01.log') size 400M REUSE;
ALTER SYSTEM SWITCH LOGFILE;
三、配置 Oracle:补充日志记录
Oracle 重做日志主要用于实例和介质恢复,因为这些操作所需的数据会自动记录。默认情况下无法使用 LogMiner,因为 Oracle 不提供任何开箱即用的补充日志数据。由于 Debezium 依赖 LogMiner,因此必须至少启用补充日志记录,Debezium 才能为 Oracle 执行任何更改数据捕获。
可以使用两种不同的策略来设置补充日志记录:
数据库补充日志记录
表补充日志记录
为了让 Debezium 与 LogMiner 交互并使用链接行和各种存储安排,必须在最低级别启用数据库补充日志记录。要启用此级别,请在当前 SQL*Plus 终端中执行以下 SQL:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
四、配置 Oracle:用户设置
1)创建表空间;
CREATE TABLESPACE logminer_tbs DATAFILE '/home/oracle/logminer_tbs.dbf' SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
2)创建用户$UserName(这里是用户名)绑定表空间LOGMINER_TBS,$PassWord(这里是用户名的密码);
PS:接下来要对需要日志归档所有的用户重复8-10的指令操作,$UserName为用户变量名称,设置时需要替换其真实用户名称。权限设置的时候需要一条条的执行,查看是否权限设置成功。
CREATE USER $UserName IDENTIFIED BY $PassWord DEFAULT TABLESPACE LOGMINER_TBS QUOTA UNLIMITED ON LOGMINER_TBS;
3)授予$UserName用户dba的权限;
GRANT CONNECT,RESOURCE,DBA TO $UserName;
10)授予其他相关权限;
GRANT CREATE SESSION TO $UserName;
GRANT SELECT ON V_$DATABASE to $UserName;
GRANT FLASHBACK ANY TABLE TO $UserName;
GRANT SELECT ANY TABLE TO $UserName;
GRANT SELECT_CATALOG_ROLE TO $UserName;
GRANT EXECUTE_CATALOG_ROLE TO $UserName;
GRANT SELECT ANY TRANSACTION TO $UserName;
GRANT EXECUTE ON SYS.DBMS_LOGMNR TO $UserName;
GRANT SELECT ON V_$LOGMNR_CONTENTS TO $UserName;
GRANT CREATE TABLE TO $UserName;
GRANT LOCK ANY TABLE TO $UserName;
GRANT ALTER ANY TABLE TO $UserName;
GRANT CREATE SEQUENCE TO $UserName;
GRANT EXECUTE ON DBMS_LOGMNR TO $UserName;
GRANT EXECUTE ON DBMS_LOGMNR_D TO $UserName;
GRANT SELECT ON V_$LOG TO $UserName;
GRANT SELECT ON V_$LOG_HISTORY TO $UserName;
GRANT SELECT ON V_$LOGMNR_LOGS TO $UserName;
GRANT SELECT ON V_$LOGMNR_CONTENTS TO $UserName;
GRANT SELECT ON V_$LOGMNR_PARAMETERS TO $UserName;
GRANT SELECT ON V_$LOGFILE TO $UserName;
GRANT SELECT ON V_$ARCHIVED_LOG TO $UserName;
GRANT SELECT ON V_$ARCHIVE_DEST_STATUS TO $UserName;