跳到主要内容
版本:2.x

Oracle

请遵循以下说明以确保在 Tapdata 中成功添加和使用Oracle数据库,注意:Oracle 实时同步基于Oracle Redo Log,因此需要提前执行某些配置。

前提条件(作为源)

开启 LogMiner

  • 以具有 DBA 权限的用户身份登录数据库
  • 查看数据库的 logging mode :select log_mode from v$database;
  • 如果返回的结果是 ARCHIVELOG , 您可以直接跳到 开启 Supplemental Logging
  • 如果返回的结果是 NOARCHIVELOG , 继续按照以下步骤操作:
  • 关闭数据库: shutdown immediate;
  • 启动并挂载数据库:startup mount;
  • 开启存档并打开数据库:
alter database archivelog;
alter database open;

开启 Supplemental Logging

Oracle 9i

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

Oracle 10g、11g

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

Oracle 12C 的特殊配置方法

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

SELECT supplemental_log_data_min, supplemental_log_data_pk, supplemental_log_data_all FROM v$database;

如果返回的三列都是 Yes 或者 Implicit ,则表示 identification key logging(标识键日志)和 full supplemental logging(全补充日志)已同时开启,您可以跳到 创建用户账号

如果返回的前两列是 Yes 或者 Implicit ,则表示只开启了 identification key logging(标识键日志)。如果这个能满足您的需求,则可以跳到创建用户账号

开启 identification key(标识键日志)

当使用 12c 的 PDB 时,最佳做法是为容器的表开启日志,而不是对整个数据库开启日志。您可以先使用以下命令将更改应用于容器:

ALTER SESSION SET CONTAINER=<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;

开启 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;

提交更改的配置:

ALTER SYSTEM SWITCH LOGFILE;

创建用户账号

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, create any table, create any index, unlimited tablespace to <user name>;

Oracle 12c multitenant databases

在 Oracle 12c 的多租户环境下创建用户,必须在 cdb 中创建,并且命名格式约定为:c##<name>

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

创建普通用户:

ALTER SESSION SET CONTAINER=cdb$root;
CREATE USER <user name> IDENTIFIED BY <password> CONTAINER=all;
GRANT create session, alter session, set container, select any dictionary, select any transaction, logmining, execute_catalog_role, create any table, create any index, unlimited tablespace TO <username> CONTAINER=all;
ALTER SESSION SET CONTAINER=<pdb>;

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

当您配置的是源库连接时,请使用此用户来通过 JDBC 的身份验证。 注意必须使用整个用户名(包括“c ##”)作为JDBC连接的用户名。

Oracle 12c standard databases

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

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

创建普通用户:

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

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

已知问题

Oracle 的 connection_time

connect_time 参数将自动断开超时的会话。 默认情况下,它是无限的。 设置此设置后,Tapdata 的实时同步可能无法正常工作。 要检查设置的值,可以使用以下命令:

select resource_name, limit from dba_profiles where profile=( select profile from dba_users where username = '<username>');