1. 概述
1.1 版本
FineDataLink 版本 | 功能变动 |
---|---|
4.1 | - |
4.1.2 | 支持多租户模式 |
CDC(Change Data Capture),即数据变更抓取,通过为源端数据源开启CDC,FineDataLink 数据管道可实现数据源的实时数据同步以及数据表的物理删除同步。
FineDataLink 数据管道支持 Oracle 的 XStream 和 LogMiner 两种 CDC 模式,本章节主要介绍如何为 Oracle 数据库开启 XStream 模式的 CDC 功能。
在执行同步任务前,需要参考本文在数据源中进行一些配置,为后续的数据同步做好准备。
注:归档日志会占用较多的磁盘空间,若磁盘空间满了会影响业务,请定期清理过期归档日志,详情参见:清理Oracle归档日志
2. 前提条件
Oracle数据库需具备OGG License 。
XStream的实现机制类似于PG的插槽,仅增量时,在设置管道任务时不支持「自定义任务起点」。
不支持采集二进制类型的字段,例如:BFILE、LONG、LONG RAW、RAW、BLOB、CLOB、NCLOB等。
确认是否为数据管道同步任务所支持的版本。
数据管道支持读取的 Oracle 数据库版本如下表所示:
数据库类型 | 支持数据库版本 |
---|---|
Oracle | Oracle 10g、11g、12c、18c、19c、Oracle RAC集群 |
命令提示符中输入:sqlplus / as sysdba 进入数据库操作界面。
同时可以查看到当前数据库的版本,如下图所示:
3. 数据来源为 CDB 时 Oracle 数据库权限配置
注:数据来源为单实例时,参考本节内容进行操作。
3.1 开启XStream
建议由数据库管理员进行 CDC 功能的配置操作。
在命令行工具中执行以下命令连接到数据库。
sqlplus / as sysdba
注:在实际使用过程中,可以有多种方式连接数据库,此处以命令行方式为例进行说明。
enable_goldengate_replication 可以控制是否允许使用 Golden Gate 来实现数据库之间的复制功能。
使用命令查看是否已经开启:
select VALUE from V$PARAMETER where name = 'enable_goldengate_replication'
alter system set enable_goldengate_replication=true;
执行完成后再次查看,显示 value为 true 则开启成功,如下图所示:
3.2 开启归档日志
建议由数据库管理员进行 CDC 功能的配置操作。
参考 开启 Archive Log 开启归档日志。
3.3 建立XStream管理员并赋权
建议由数据库管理员进行 CDC 功能的配置操作。
在连接的数据库输入以下命令:
CREATE TABLESPACE xstream_adm_tbs DATAFILE '/opt/oracle/oradata/orcl/xstream_adm_tbs.dbf' SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
CREATE USER xstrmadmin IDENTIFIED BY password DEFAULT TABLESPACE xstream_adm_tbs QUOTA UNLIMITED ON xstream_adm_tbs;
GRANT CREATE SESSION TO xstrmadmin;
BEGIN
DBMS_XSTREAM_AUTH.GRANT_ADMIN_PRIVILEGE(
grantee => 'xstrmadmin',
privilege_type => 'CAPTURE',
grant_select_privileges => TRUE,
container => 'ALL'
);
END;
xstream_adm_tbs为XStream管理员用户的表空间名,请根据实际规划设置。
/opt/oracle/oradata/orcl/xstream_adm_tbs.dbf为XStream管理员用户的表空间文件,请根据实际规划设置,此处的路径为 Oracle 安装地址中存放 dbf 文件的位置。
xstrmadmin为XStream管理员用户名,请根据实际规划设置。
password为XStream管理员用户密码,请根据实际规划设置。
“container => 'ALL'”仅当Oracle为12c或以上版本并且开启CDB时,才需要添加,否则删除此行内容。
判断数据库是否开启 CDB 的语句如下,返回 true 或者 yes 则表示开启了 CDB,返回 false 或者 No 表示未开启:
SELECT CDB FROM V$DATABASE;
然后为 XStream 管理员赋权限,使用如下命令:
GRANT create session, alter session, select any table, EXECUTE_CATALOG_ROLE TO <username>;
完成后即可使用命令检查是否权限是否开启成功:
select * from DBA_XSTREAM_ADMINISTRATOR;
例如此处授权的 XStream 管理员为 c#roxy,则显示其拥有了xstream权限,如下图所示:
3.4 FineDataLink 工程配置
3.4.1 下载并解压安装 oracle client
下载地址:Oracle Instant Client Downloads
根据 FineDataLink 工程所在的操作系统下载对应的安装包,并选择 19.20 版本。
并将安装包解压安装。
3.4.2 替换 JAR
将 xstream 和 ojdbc 两个 JAR 包复制到 FineDataLink 安装目录:%finedatalink%/webapps/webroot/WEB-INF/lib中。
FineDataLink 部署在 Windows 系统:
将 oracle client 中的其他的文件复制到 %finedatalink%/jdk/jre/bin中,并重启 FineDataLink 工程。
FineDataLink 部署在 Linux 系统:
将 oracle client 中的其他的文件复制到 %finedatalink%/jdk/jre/lib/amd64中。
然后重启 FineDataLink 工程。
3.5 在 FineDataLink 中创建 Oracle 数据连接
由于 XStream 连接依赖了oci 连接,所以不能通过 thin 方式连接来同步。
因此数据连接 URL 需要改为:
jdbc:oracle:oci:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1533))(CONNECT_DATA=(SID=名称)))
其中 localhost 为 oracle 所在服务器 IP,PORT 为端口、SID后需要写数据库名称。
3.6 后续步骤
完成后即可配置管道任务。
4. 数据来源为 PDB 时 Oracle 数据库权限配置
4.1 开启XStream
建议由数据库管理员进行 CDC 功能的配置操作。
在命令行工具中执行以下命令连接到数据库。
sqlplus / as sysdba
注:在实际使用过程中,可以有多种方式连接数据库,此处以命令行方式为例进行说明。
enable_goldengate_replication 可以控制是否允许使用 Golden Gate 来实现数据库之间的复制功能。
使用命令查看是否已经开启:
select VALUE from V$PARAMETER where name = 'enable_goldengate_replication'
alter system set enable_goldengate_replication=true;
执行完成后再次查看,显示 value为 true 则开启成功,如下图所示:
4.2 开启归档日志
建议由数据库管理员进行 CDC 功能的配置操作。
参考 开启 Archive Log 开启归档日志。
4.3 在 CDB 中添加表空间
建议由数据库管理员进行 CDC 功能的配置操作。
查询表空间:
SELECT tablespace_name, file_name, bytes/1024/1024 AS size_mb
FROM dba_data_files;
按照查询的路径添加 xstream 表空间:
CREATE TABLESPACE xstream_adm_tbs DATAFILE '/u01/app/oracle/oradata/fr/xstream_adm_tbs.dbf' SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
xstream_adm_tbs 为XStream管理员用户的表空间名,请根据实际规划设置。
/u01/app/oracle/oradata/fr/xstream_adm_tbs.dbf 为XStream管理员用户的表空间文件,请根据实际规划设置,此处的路径为 oracle 安装地址中存放 dbf 文件的位置。
4.4 在 PDB 中添加表空间
注:需保证 PDB 下有 xstream 表空间。
在 sqlplus 下使用命令查看当前 PDB 状态,如下图所示:
show pdbs;
如果 PDB 表空间没有开启,则需要使用命令:
ALTER PLUGGABLE DATABASE ORCLPDB1 OPEN;
使用命令切换到 PDB 模式:
注:下面语法切换到了 ORCLPDB1 中。
alter session set container=ORCLPDB1;
在 PDB 模式下先查询表空间:
SELECT tablespace_name, file_name, bytes/1024/1024 AS size_mb
FROM dba_data_files;
如果未显示有 xstream_adm_tbs 表空间,则需要添加:
CREATE TABLESPACE xstream_adm_tbs DATAFILE '/u01/app/oracle/oradata/fr/orclpdb1/xstream_adm_tbs.dbf' SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
xstream_adm_tbs 为XStream管理员用户的表空间名,请根据实际规划设置。
/u01/app/oracle/oradata/fr/orclpdb1/xstream_adm_tbs.dbf 为 XStream 管理员用户的表空间文件,请根据实际规划设置,此处的路径为 oracle 安装地址中存放dbf文件的位置。注: PDB 表空间比 CDB 多一层。
4.5 为用户赋权
再返回 CDB下进行添加用户和赋权操作。
使用命令:
alter session set container=CDB$ROOT;
然后使用命令赋权:
CREATE USER "C##ROXY10" IDENTIFIED BY PASSWORD DEFAULT TABLESPACE XSTREAM_ADM_TBS QUOTA UNLIMITED ON XSTREAM_ADM_TBS container = all;
GRANT CREATE SESSION,SET CONTAINER TO "C##ROXY10" container = all;
BEGIN
DBMS_XSTREAM_AUTH.GRANT_ADMIN_PRIVILEGE(
grantee => 'C##ROXY10',
privilege_type => 'CAPTURE',
grant_select_privileges => TRUE,
container => 'ALL'
);
END;
GRANT alter session, select any table, EXECUTE_CATALOG_ROLE,SELECT ANY DICTIONARY TO "C##ROXY10" container = all;
C##ROXY10 为 XStream管理员用户名,请根据实际规划设置。
password为XStream管理员用户密码,请根据实际规划设置。
注:若在 sqlplus 执行语句,需要在 END;后加一个/,如下图所示:
执行命令继续赋权:
grant restricted session TO "C##ROXY10" container=all;
注:C##ROXY10 为XStream管理员用户的表空间名,请根据实际规划设置。
然后执行命令,赋予建表权限:
GRANT CREATE TABLE TO <username> CONTAINER=ALL;
执行后查询是否还有建表权限:
SELECT PRIVILEGE FROM USER_SYS_PRIVS WHERE PRIVILEGE = 'CREATE TABLE';
此时可以正常建表。
如果需要插表、函数等权限,再继续执行:
grant create sequence to "C##ROXY10" CONTAINER=ALL;
grant create TRIGGER to "C##ROXY10" CONTAINER=ALL;
注:C##ROXY10 为XStream管理员用户的表空间名,请根据实际规划设置。
然后即可使用命令检查权限是否开启成功:
select * from DBA_XSTREAM_ADMINISTRATOR;
4.5 FineDataLink 工程配置
参考本文 3.4 节进行配置。
4.6 在 FineDataLink 中创建 Oracle 数据连接
在创建数据连接时,需要将数据库改为 PDB 来源,如下图所示:
4.7 后续操作
创建管道任务后,即可点击数据源权限检测,看到检测成功,如下图所示: