您可以将自行管理的 Oracle 数据库配置为与以下 CDC 方法搭配使用:
这些方法指定了 Datastream 如何访问日志文件。如需详细了解二进制日志读取器和 LogMiner API,请参阅使用 Oracle 数据库重做日志文件。
如需详细了解如何针对每种方法配置源 Oracle 数据库,请参阅以下部分。
为二进制日志读取器配置自行管理的 Oracle 数据库
如需将您自行管理的 Oracle 数据库配置为与二进制日志读取器 CDC 方法搭配使用,请执行以下步骤:
选择以下任一方法访问日志文件:
- 存储空间自动管理 (ASM):如果您选择此选项,则需要创建专用 ASM 连接,并在创建连接配置文件时提供其详细信息。
- 数据库目录:如果您选择此选项,则需要创建指向重做日志文件和归档日志文件的数据库目录对象,并向数据库用户授予对目录的
READ
访问权限:
CREATE DIRECTORY DIRECTORY_NAME_1 as 'ONLINE_REDO_LOGS_PATH'; CREATE DIRECTORY DIRECTORY_NAME_2 as 'ARCHIVED_REDO_LOGS_PATH'; GRANT READ ON DIRECTORY DIRECTORY_NAME_1 to USER_NAME; GRANT READ ON DIRECTORY DIRECTORY_NAME_2 to USER_NAME;
替换以下内容:
- DIRECTORY_NAME_1:在线重做日志文件的目录名称。
- DIRECTORY_NAME_2:归档的 redo 日志文件的目录名称。
- ONLINE_REDO_LOGS_PATH:要存储在线重做日志文件的目录的路径。
- ARCHIVED_REDO_LOGS_PATH:要存储归档日志文件的目录的路径。
- USER_NAME:您要向其授予
READ
访问权限的数据库用户的名称。
如果您选择二进制日志读取器方法并使用数据库目录,则需要在创建数据流时提供重做日志和归档日志目录名称。
验证数据库是否正以
ARCHIVELOG
模式运行。为此,请登录 Oracle 数据库,然后在 SQL 提示符处运行以下命令:
SELECT LOG_MODE FROM V$DATABASE;
- 如果结果为
ARCHIVELOG
,则继续执行下一步。 - 如果结果为
NOARCHIVELOG
,则需要为数据库启用ARCHIVELOG
模式。 以
SYSDBA
身份登录后运行以下命令:SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN;
归档的日志文件会占用磁盘空间,因此您需要为数据库配置 DB_RECOVERY_FILE_DEST_SIZE 参数。使用此参数指定目标数据库恢复文件要使用的总空间硬性限制(以字节为单位)。通过设置此参数,您可以管理在保护数据库免于磁盘空间不足与因日志位置丢失而导致数据流失败之间的折衷。
- 如果结果为
通过运行以下 Oracle Recovery Manager (RMAN) 命令,为数据库定义数据保留政策:
TARGET / CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;
我们建议您将备份和归档日志至少保留 4 天,建议保留 7 天。
返回到用于配置 Oracle 日志文件轮替政策的数据库工具的 SQL 提示。我们建议日志文件大小不要超过 512 MB。
启用补充日志数据。为此,请先运行以下命令来启用最低限度的数据库级补充日志记录:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
接下来,选择是为特定表还是整个数据库启用日志记录。
如需仅记录特定表的更改,请针对要复制的每个表运行以下命令:
ALTER TABLE SCHEMA.TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
替换以下内容:
- SCHEMA:包含表的架构的名称。
- TABLE:您要记录更改的表的名称。
如需复制数据库中的大部分或所有表,请考虑为整个数据库启用日志记录。运行以下命令可为整个数据库启用补充日志数据:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
向将用于连接到数据库的用户账号授予适当的权限。为此,请运行以下命令:
rdsadmin.rdsadmin_util.grant_sys_object('GV_$LOG','USER_NAME','SELECT'); rdsadmin.rdsadmin_util.grant_sys_object('GV_$LOGFILE','USER_NAME','SELECT'); rdsadmin.rdsadmin_util.grant_sys_object('GV_$ARCHIVED_LOG','USER_NAME','SELECT'); rdsadmin.rdsadmin_util.grant_sys_object('GV_$INSTANCE','USER_NAME','SELECT'); rdsadmin.rdsadmin_util.grant_sys_object('V_$INSTANCE','USER_NAME','SELECT'); rdsadmin.rdsadmin_util.grant_sys_object('V_$PDBS','USER_NAME','SELECT'); rdsadmin.rdsadmin_util.grant_sys_object('V_$TRANSPORTABLE_PLATFORM','USER_NAME',
'SELECT'); rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE','USER_NAME','SELECT'); rdsadmin.rdsadmin_util.grant_sys_object('DBA_OBJECTS','USER_NAME','SELECT'); rdsadmin.rdsadmin_util.grant_sys_object('GV_$STANDBY_LOG','USER_NAME','SELECT'); rdsadmin.rdsadmin_util.grant_sys_object('COL$','USER_NAME','SELECT'); rdsadmin.rdsadmin_util.grant_sys_object('DBA_TABLESPACES','USER_NAME','SELECT'); rdsadmin.rdsadmin_util.grant_sys_object('DBA_ENCRYPTED_COLUMNS','USER_NAME','SELECT'); GRANT CONNECT TO USER_NAME; GRANT CREATE SESSION TO USER_NAME; GRANT SELECT ANY TABLE TO USER_NAME; GRANT READ ON DIRECTORY ONLINELOG_DIR TO USER_NAME; GRANT READ ON DIRECTORY ARCHIVELOG_DIR TO USER_NAME; 将 USER_NAME 替换为您打算用于连接到数据库的用户账号的名称。
为 LogMiner 配置自行管理的 Oracle 数据库
验证数据库是否正以
ARCHIVELOG
模式运行。为此,请登录 Oracle 数据库,然后在 SQL 提示符处运行以下命令:
SELECT LOG_MODE FROM V$DATABASE;
- 如果结果为
ARCHIVELOG
,则继续执行第 2 步。 - 如果结果为
NOARCHIVELOG
,则需要为数据库启用ARCHIVELOG
模式。 以
SYSDBA
身份登录后运行以下命令:SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN;
归档的日志文件会占用磁盘空间,因此您需要为数据库配置 DB_RECOVERY_FILE_DEST_SIZE 参数。使用此参数指定目标数据库恢复文件要使用的总空间硬性限制(以字节为单位)。通过设置此参数,您可以管理在保护数据库免于磁盘空间不足与因日志位置丢失而导致数据流失败之间的折衷。
- 如果结果为
通过运行以下 Oracle Recovery Manager (RMAN) 命令,为数据库定义数据保留政策:
TARGET / CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;
我们建议您将备份和归档日志至少保留 4 天,建议保留 7 天。
返回到用于配置 Oracle 日志文件轮替政策的数据库工具的 SQL 提示。我们建议日志文件大小不要超过 512 MB。
启用补充日志数据。为此,请先运行以下命令来启用最低限度的数据库级补充日志记录:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
接下来,选择是为特定表还是整个数据库启用日志记录。
如需仅记录特定表的更改,请针对要复制的每个表运行以下命令:
ALTER TABLE SCHEMA.TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
替换以下内容:
- SCHEMA:包含表的架构的名称。
- TABLE:您要记录更改的表的名称。
如需复制数据库中的大部分或所有表,请考虑为整个数据库启用日志记录。运行以下命令可为整个数据库启用补充日志数据:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
向将用于连接到数据库的用户账号授予适当的权限。为此,请运行以下命令:
GRANT EXECUTE_CATALOG_ROLE TO USER_NAME; GRANT CONNECT TO USER_NAME; GRANT CREATE SESSION TO USER_NAME; GRANT SELECT ON SYS.V_$DATABASE TO USER_NAME; GRANT SELECT ON SYS.V_$ARCHIVED_LOG TO USER_NAME; GRANT SELECT ON SYS.V_$LOGMNR_CONTENTS TO USER_NAME; GRANT EXECUTE ON DBMS_LOGMNR TO USER_NAME; GRANT EXECUTE ON DBMS_LOGMNR_D TO USER_NAME; GRANT SELECT ANY TRANSACTION TO USER_NAME; GRANT SELECT ANY TABLE TO USER_NAME;
如果贵组织不允许授予
GRANT SELECT ANY TABLE
权限,请使用“数据流常见问题解答”页面中Oracle 变更数据捕获 (CDC) 部分中所述的解决方案。如果您的来源数据库是 Oracle 12c 或更新版本,则授予以下额外的权限:
GRANT LOGMINING TO USER_NAME;
向用户账号
SELECT
授予对数据库中DBA_EXTENTS
视图的访问权限。有了此权限,您就可以为 Oracle 来源使用基于ROWID
的回填:GRANT SELECT ON DBA_EXTENTS TO USER_NAME;
后续步骤
- 详细了解 DataStream 如何与 Oracle 来源搭配使用。