Oracle 数据源权限配置(Logminer)

Logminer 方式权限配置

CDC(Change Data Capture),即数据变更抓取,通过为源端数据源开启CDC,作业可实现数据源的实时数据同步。 本章节主要介绍如何为oracle数据库开启Logminer方式CDC功能。
本文以非CDB 数据库作为案例进行说明,需要注意的是如果数据库为CDB数据库时,在用户分配的命令可能存在差异,一般情况下,角色使用 C##角色名 即可

前提条件

Oracle 数据库为11g 以上版本
若Oracle数据库为主从模式,不支持使用Oracle从库。
更新LONG、CLOB、NCLOB类型字段 更新后该类型的字段丢失数据,目前logminer自身存在该bug

操作步骤

建议由数据库管理员对数据源配置进行操作
必须为Oracle数据库启用日志归档,并为Debezium Oracle连接器监视的所有数据库定义一个具有适当权限的Oracle用户。

  1. 使用DBA角色用户连接数据库
    sqlplus sys/password@host:port/SID AS SYSDBA
  2. 检测是否开启归档日志

    -- Should now "Database log mode: Archive Mode"
    archive log list;

    若回显打印“Database log mode: No Archive Mode”,说明日志归档未开启,继续执行下一步。
    若回显打印“Database log mode: Archive Mode”,说明日志归档已开启,直接退出数据库连接。

  3. 开启归档日志

    alter system set db_recovery_file_dest_size = 100G;
    alter system set db_recovery_file_dest = '/opt/oracle/oradata/recovery_area' scope=spfile;
    shutdown immediate;
    startup mount;
    alter database archivelog;
    alter database open;

    注意: 谨慎操作,开启归档日志需要重启数据库,归档日志将占用大量磁盘空间,需要考虑定期清理过期的日志
    其中:
    100G为日志文件存储空间的大小,请根据实际情况设置。
    /opt/oracle/oradata/recovery_area为日志存储路径,请根据实际规划设置,但须确保路径提前创建。

  4. 开启扩充日志
    必须为捕获的表或数据库启用补充日志记录,以便数据更改能够捕获已更改的数据库行之前的状态。下面将说明如何在表/数据库级别上配置它。 一般建议对库进行启用。
    在表启用

    -- Enable supplemental logging for a specific table:
    ALTER TABLE inventory.customers ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

    在数据库启用

    -- Enable supplemental logging for database
    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
  5. 执行第2步的命令检查归档日志是否开启

    -- Should now "Database log mode: Archive Mode"
    archive log list;

    若回显打印“Database log mode: Archive Mode”,说明日志归档已开启,直接退出数据库连接。

Logminer 工具安装
  1. 使用DBA角色用户连接数据库
    sqlplus sys/password@host:port/SID AS SYSDBA
  2. 执行以下命令,检查LogMiner工具是否已安装。

    desc DBMS_LOGMNR
    desc DBMS_LOGMNR_D

    若无打印信息返回,说明LogMiner工具未安装,继续执行下一步。
    若有打印信息返回,说明LogMiner工具已安装,直接跳到第4步。

  3. 执行以下命令,安装LogMiner工具。

    @$ORACLE_HOME/rdbms/admin/dbmslm.sql
    @$ORACLE_HOME/rdbms/admin/dbmslmd.sql
  4. 创建角色并授权

    create role cdc_logminer_privs;
    grant create session,
    execute_catalog_role,
    select any transaction,
    flashback any table,
    select any table,
    lock any table,
    select any dictionary to cdc_logminer_privs;
    grant select on SYSTEM.LOGMNR_COL$ to cdc_logminer_privs;
    grant select on SYSTEM.LOGMNR_OBJ$ to cdc_logminer_privs;
    grant select on SYSTEM.LOGMNR_USER$ to cdc_logminer_privs;
    grant select on SYSTEM.LOGMNR_UID$ to cdc_logminer_privs;
    grant select on V_$DATABASE to cdc_logminer_privs;
    grant select_catalog_role to cdc_logminer_privs;
    grant LOGMINING to cdc_logminer_privs;

    其中:
    cdc_logminer_privs为LogMiner用户角色名,请根据实际规划设置。
    “grant LOGMINING to cdc_logminer_privs;”仅当Oracle为12c版本时,才需要添加,否则删除此行内容

  5. 创建Logminer执行用户

    create user cdc_logminer identified by password default tablespace users;
    grant cdc_logminer_privs to cdc_logminer;
    alter user cdc_logminer quota unlimited on users;

    其中:
    cdc_logminer为LogMiner用户名,请根据实际规划设置。
    password为LogMiner用户密码,请根据实际规划设置。
    cdc_logminer_privs为LogMiner用户角色,在第4步中创建。

  6. 退出数据库连接
    到此即完成了对logminer 权限的配置