历史版本2 :Oracle环境准备(LogMiner) 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

CDC(Change Data Capture),即数据变更抓取,通过为源端数据源开启CDC,本地宝可实现数据源的实时数据同步。

本章节主要介绍如何为 Oracle 数据库开启 LogMiner 模式的CDC功能。执行同步任务前,需要参考本文在数据源中进行一些配置,为后续的数据同步做好准备。

2. 操作步骤编辑

同步来源数据库的数据至去向数据源之前,需要确保 Oracle 数据源中不存在数据管道不支持的数据库版本。

2.1 确认当前使用的数据库版本

本地宝支持连接的 Oracle 数据库版本如下表所示:

数据库类型支持数据库版本
Oracle

Oracle 10g、11g、12c、18c、19c、Oracle RAC集群

注:不支持CDB/PDB多租户模式的Oracle数据库。

命令提示符中输入:sqlplus / as sysdba 进入数据库操作界面。

同时可以查看到当前数据库的版本,如下图所示:

1.png

2.2 开启 Archive Log 

1)以具有 DBA 权限的用户身份登录数据库

2)使用命令查看数据库的 logging mode :

select log_mode from v$database;

如果返回的结果是 ARCHIVELOG , 可以直接操作 2.3 节进行操作。

2.png

如果返回的结果是 NOARCHIVELOG , 继续按照以下步骤操作:

  • 关闭数据库: 使用命令:shutdown immediate;

  • 启动并挂载数据库: startup mount;

  • 开启存档并打开数据库:

alter database archivelog;alter database open;

2.3 开启 Supplemental Log

2.3.1 Oracle 10g、11g版本开启方式

使用如下命令:

alter database add supplemental log data;alter system switch logfile;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

3.png

2.3.2 Oracle 12c、18c、19c、RAC集群版本的特殊配置方法

使用以下命令,确认 supplemental logging 是否开启:

SELECT supplemental_log_data_min, supplemental_log_data_pk, supplemental_log_data_all FROM v$database;

4.png

如果返回的三列都是 Yes 或者 Implicit ,则表示 identification key logging(标识键日志)和 full supplemental logging(全补充日志)已同时开启,可以直接查看 2.5 节数据库账号相关内容。

如果返回的前两列是 Yes 或者 Implicit ,则表示只开启了 identification key logging(标识键日志)。需要参考 2.4 节开启全补充日志。

2.3.3 Oracle 12c、18c、19c、RAC集群的 PDB 开启方式

为单个表开启identification key(标识键日志):

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;    
ALTER TABLE <schema name>.<table name> ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;

对所有表开启identification key(标识键日志):

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;

2.4 开启 full supplemental logging(全补充日志)

单表开启full supplemental logging(全补充日志),使用如下命令:

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER TABLE <schema name>.<table name> ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

所有表开启full supplemental logging(全补充日志),使用如下命令:

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

5.png

提交更改的配置:

ALTER SYSTEM SWITCH LOGFILE;

2.5 分配数据库账号权限

需要规划一个可访问数据源的账号,用于后续数据管道过程中访问数据源并进行数据提取、写入的同步操作。

创建账号操作详情请参见: 创建 Oracle 账号

2.5.1 Oracle 10g、11g版本

使用如下命令创建用户帐户并分配权限:

CREATE USER <user name> IDENTIFIED BY <password>;
GRANT create session, alter session, execute_catalog_role, select any dictionary, select any transaction, select any table, unlimited tablespace to <user name>;

6.png

注:只支持Non-CDB。

2.5.2 Oracle 12c、18c、19c standard databases 版本

在Oracle 12c、19c标准模式下,创建一个用户所必须的权限。

1)以具有DBA权限的用户身份登录数据库

2)创建普通用户:

CREATE USER <user name> IDENTIFIED BY <password>;
GRANT create session, alter session, select any dictionary, select any transaction,select any table,logmining, execute_catalog_role TO <username>;

根据对表的权限需求,重复执行最后一个命令来赋予 select 权限。

2.6 检查用户权限

注:Oracle 11g 及以下版本不需要 LOGMINING 权限

输入以下命令检查判断当前用户是否有 LOGMINER 权限。

WITH required_sys_privileges AS (
    SELECT column_value AS PRIVILEGE
    FROM TABLE (
        sys.odcivarchar2list(
                'SELECT ANY TRANSACTION',
                'CREATE SESSION',
                'SELECT ANY DICTIONARY',
                'SELECT ANY TABLE',
                'FLASHBACK ANY TABLE',
                'LOGMINING'
            )
        )
),
     required_role_privileges AS (
         SELECT column_value AS ROLE_NAME
         FROM TABLE (
             sys.odcivarchar2list(
                     'EXECUTE_CATALOG_ROLE',
                     'RESOURCE'
                 )
             )
     ),
     required_table_privileges AS (
         SELECT column_value AS PRIVILEGE
         FROM TABLE (
             sys.odcivarchar2list(
                     'DBMS_FLASHBACK',
                     'DBMS_LOGMNR',
                     'DBMS_LOGMNR_D'
                 )
             )
     )
SELECT r.PRIVILEGE,
       NVL2(p.USERNAME, 'OK', 'REQUIRED') AS PRIVILEGE_STATUS
FROM required_sys_privileges r
         LEFT JOIN user_sys_privs p
                   ON r.PRIVILEGE = p.PRIVILEGE
UNION
SELECT r.ROLE_NAME,
       NVL2(p.USERNAME, 'OK', 'REQUIRED') AS PRIVILEGE_STATUS
FROM required_role_privileges r
         LEFT JOIN user_role_privs p
                   ON r.ROLE_NAME = p.GRANTED_ROLE
UNION
SELECT r.PRIVILEGE,
       NVL2(p.GRANTEE, 'OK', 'REQUIRED') AS PRIVILEGE_STATUS
FROM required_table_privileges r
         LEFT JOIN user_tab_privs p
                   ON r.PRIVILEGE = p.TABLE_NAME;

对于返回结果,若显示为 Required 则是开启 logminer 缺乏的权限,显示为 OK 则是有权限。

7.png

对于缺乏的权限,需要进行开启。

3. 后续步骤编辑

在配置好数据库后,即可完成环境配置。

接下来,将使用九数云本地宝连接 SQL Server 数据库。详情参见文档:连接数据库