1. 概述编辑
CDC(Change Data Capture),即数据变更抓取,通过为源端数据源开启CDC,本地宝可实现数据源的实时数据同步。
本章节主要介绍如何为 Oracle 数据库开启 LogMiner 模式的CDC功能。执行同步任务前,需要参考本文在数据源中进行一些配置,为后续的数据同步做好准备。
2. 操作步骤编辑
同步来源数据库的数据至去向数据源之前,需要确保 Oracle 数据源中不存在数据管道不支持的数据库版本。
本地宝支持连接的 Oracle 数据库版本如下表所示: Oracle 10g、11g、12c、18c、19c、Oracle RAC集群 注:不支持CDB/PDB多租户模式的Oracle数据库。 命令提示符中输入:sqlplus / as sysdba 进入数据库操作界面。 同时可以查看到当前数据库的版本,如下图所示: 2)使用命令查看数据库的 logging mode : 如果返回的结果是 ARCHIVELOG , 可以直接操作 2.3 节进行操作。 如果返回的结果是 NOARCHIVELOG , 继续按照以下步骤操作: 关闭数据库: 使用命令:shutdown immediate; 启动并挂载数据库: startup mount; 开启存档并打开数据库: 使用如下命令: 使用以下命令,确认 supplemental logging 是否开启: 如果返回的三列都是 Yes 或者 Implicit ,则表示 identification key logging(标识键日志)和 full supplemental logging(全补充日志)已同时开启,可以直接查看 2.5 节数据库账号相关内容。 如果返回的前两列是 Yes 或者 Implicit ,则表示只开启了 identification key logging(标识键日志)。需要参考 2.4 节开启全补充日志。 为单个表开启identification key(标识键日志): 对所有表开启identification key(标识键日志): 单表开启full supplemental logging(全补充日志),使用如下命令: 所有表开启full supplemental logging(全补充日志),使用如下命令: 提交更改的配置: 需要规划一个可访问数据源的账号,用于后续数据管道过程中访问数据源并进行数据提取、写入的同步操作。 创建账号操作详情请参见: 创建 Oracle 账号 使用如下命令创建用户帐户并分配权限: 注:只支持Non-CDB。 在Oracle 12c、19c标准模式下,创建一个用户所必须的权限。 1)以具有DBA权限的用户身份登录数据库 2)创建普通用户: 根据对表的权限需求,重复执行最后一个命令来赋予 select 权限。 注:Oracle 11g 及以下版本不需要 LOGMINING 权限 输入以下命令检查判断当前用户是否有 LOGMINER 权限。 对于返回结果,若显示为 Required 则是开启 logminer 缺乏的权限,显示为 OK 则是有权限。 对于缺乏的权限,需要进行开启。2.1 确认当前使用的数据库版本
数据库类型 支持数据库版本 Oracle 2.2 开启 Archive Log
1)以具有 DBA 权限的用户身份登录数据库select log_mode from v$database;
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;2.3.2 Oracle 12c、18c、19c、RAC集群版本的特殊配置方法
SELECT supplemental_log_data_min, supplemental_log_data_pk, supplemental_log_data_all FROM v$database;
2.3.3 Oracle 12c、18c、19c、RAC集群的 PDB 开启方式
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER TABLE <schema name>.<table name> ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
2.4 开启 full supplemental logging(全补充日志)
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER TABLE <schema name>.<table name> ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
ALTER SYSTEM SWITCH LOGFILE;
2.5 分配数据库账号权限
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>;2.5.2 Oracle 12c、18c、19c standard databases 版本
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>;2.6 检查用户权限
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;
3. 后续步骤编辑
在配置好数据库后,即可完成环境配置。
接下来,将使用九数云本地宝连接 SQL Server 数据库。详情参见文档:连接数据库