本页面介绍了如何配置变更数据捕获 (CDC),以 将数据从自行管理的 Oracle 数据库流式传输到受支持的目标位置, 例如 BigQuery 或 Cloud Storage。
您可以将自行管理的 Oracle 数据库配置为使用以下 CDC 方法:
这些方法指定了 Datastream 如何访问您的日志文件。如需详细了解二进制日志读取器和 LogMiner API,请参阅 使用 Oracle 数据库重做日志文件。
如需详细了解如何为每种方法配置 Oracle 源数据库,请参阅以下部分。
为二进制日志读取器配置自行管理的 Oracle 数据库
如需配置自行管理的 Oracle 数据库以使用二进制日志读取器 CDC 方法,请执行以下步骤:
创建数据库用户账号,供 Datastream 用于连接到您的数据库:
CREATE USER USER_NAME IDENTIFIED BY USER_PASSWORD;
替换以下内容:
- USER_NAME:您要用于连接到数据库的数据库用户账号的名称。
- USER_PASSWORD:数据库用户账号的密码。
选择以下任一方法来访问您的日志文件:
存储空间自动管理 (ASM):如果您选择此选项,则需要 创建专用 ASM 连接,并在创建 连接配置文件时提供其详细信息。用于 ASM 连接的用户账号必须具有
SYSASM权限。如需创建具有
SYSASM权限的新 ASM 用户,请运行以下命令:CREATE USER ASM_USER_NAME IDENTIFIED BY ASM_PASSWORD; GRANT SYSASM TO ASM_USER_NAME;
替换以下内容:
- ASM_USER_NAME:ASM 用户的名称。
- ASM_PASSWORD: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:归档的重做 日志文件的目录的名称。
- ONLINE_REDO_LOGS_PATH:在线重做 日志文件的存储目录的路径。
- ARCHIVED_REDO_LOGS_PATH:归档的 日志文件的存储目录的路径。
- USER_NAME:之前创建的数据库用户账号的名称。
如果您选择二进制日志读取器方法并使用数据库目录,则需要在创建数据流时提供重做日志和归档日志目录名称。
验证数据库正以
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 恢复管理器 (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 SELECT ON GV_$LOG TO USER_NAME; GRANT SELECT ON GV_$LOGFILE TO USER_NAME; GRANT SELECT ON GV_$ARCHIVED_LOG TO USER_NAME; GRANT SELECT ON GV_$INSTANCE TO USER_NAME; GRANT SELECT ON GV_$STANDBY_LOG TO USER_NAME; GRANT SELECT ON V_$INSTANCE TO USER_NAME; GRANT SELECT ON V_$PDBS TO USER_NAME; GRANT SELECT ON V_$TRANSPORTABLE_PLATFORM TO USER_NAME; GRANT SELECT ON V_$DATABASE TO USER_NAME; GRANT SELECT ON V_$PARAMETER TO USER_NAME; GRANT SELECT ON COL$ TO USER_NAME; GRANT SELECT ON DBA_OBJECTS TO USER_NAME; GRANT SELECT ON DBA_TABLESPACES TO USER_NAME; GRANT SELECT ON DBA_ENCRYPTED_COLUMNS TO USER_NAME; GRANT SELECT ON DBA_EXTENTS TO USER_NAME; GRANT CONNECT TO USER_NAME; GRANT CREATE SESSION TO USER_NAME; GRANT SELECT ANY TABLE TO USER_NAME;
将 USER_NAME 替换为之前创建的数据库用户账号的名称。
为 LogMiner 配置自行管理的 Oracle 数据库
创建数据库用户账号,供 Datastream 用于连接到您的数据库:
CREATE USER USER_NAME IDENTIFIED BY USER_PASSWORD;
替换以下内容:
- USER_NAME:您要用于连接到数据库的数据库用户账号的名称。
- USER_PASSWORD:数据库用户账号的密码。
验证数据库正以
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 恢复管理器 (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_$LOG TO USER_NAME; -- for primary databases GRANT SELECT ON SYS.V_$STANDBY_LOG TO USER_NAME; -- for standby databases GRANT SELECT ON SYS.V_$LOGFILE TO USER_NAME; GRANT SELECT ON SYS.V_$ARCHIVED_LOG TO USER_NAME; GRANT SELECT ON SYS.V_$LOGMNR_CONTENTS TO USER_NAME; GRANT SELECT ON SYS.V_$PARAMETER 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;
如果您的数据库使用透明数据加密 (TDE),请授予以下权限:
GRANT SELECT ON DBA_TABLESPACES TO USER_NAME; GRANT SELECT ON DBA_ENCRYPTED_COLUMNS TO USER_NAME;
如果贵组织不允许授予
GRANT SELECT ANY TABLE权限,请使用 Datastream 常见问题解答页面的 Oracle 变更数据捕获 (CDC) 部分中所述的解决方案。如果您的来源数据库是 Oracle 12c 或更新版本,则授予以下额外的权限:
GRANT LOGMINING TO USER_NAME;
向用户账号授予对数据库中
DBA_EXTENTS视图的SELECT访问权限。借助此权限,您可以对 Oracle 来源使用基于ROWID的回填:GRANT SELECT ON DBA_EXTENTS TO USER_NAME;
后续步骤
- 详细了解 Datastream 如何使用 Oracle 来源。