验证数据库是否正以
ARCHIVELOG
模式运行。为此,请登录您的 Oracle 数据库,并在 SQL 提示符处运行以下命令:SELECT LOG_MODE FROM V$DATABASE;
- 如果结果为
ARCHIVELOG
,则继续执行第 2 步。 - 如果结果为
NOARCHIVELOG
,则需要为数据库启用ARCHIVELOG
模式。 - 归档的日志文件会占用磁盘空间,因此您需要为数据库配置 DB_RECOVERY_FILE_DEST_SIZE 参数。使用此参数指定目标数据库恢复文件要使用的总空间硬性限制(以字节为单位)。通过设置此参数,您可以在防止数据库耗尽磁盘空间以及因日志位置丢失而导致数据流失败之间进行权衡。
- 运行以下命令,为数据库定义数据保留政策:
我们建议您将备份和归档日志至少保留 4 天,建议保留 7 天。exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',96);
- 配置 Oracle 日志文件轮替政策。我们建议将日志文件的大小上限设置为小于 1GB 的值。
- 如果结果为
启用补充日志数据。为此,请先运行以下命令,启用最低限度的数据库级补充日志记录功能:
exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');
接下来,选择是为特定表还是整个数据库启用日志记录。
如需仅记录特定表的更改,请针对要复制的每个表运行以下命令:
ALTER TABLE SCHEMA.TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS
替换以下内容:
- SCHEMA:包含表的架构的名称。
- TABLE:您要记录其更改的表的名称。
如需复制数据库中的大部分或所有表,请考虑为整个数据库启用日志记录。
在 SQL 提示符处,运行以下命令可为整个数据库启用补充日志数据:
exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','ALL');
向将用于连接到数据库的用户账号授予适当的权限。为此,请运行以下命令:
GRANT EXECUTE_CATALOG_ROLE TO USER_NAME; GRANT CONNECT TO USER_NAME; GRANT CREATE SESSION TO USER_NAME; exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE','USER_NAME','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$ARCHIVED_LOG','USER_NAME','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_LOGS','USER_NAME','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_CONTENTS','USER_NAME','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR','USER_NAME','EXECUTE'); exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR_D','USER_NAME','EXECUTE'); GRANT SELECT ANY TRANSACTION TO USER_NAME; GRANT SELECT ANY TABLE TO USER_NAME;
如果贵组织不允许授予
GRANT SELECT ANY TABLE
权限,请使用 Datastream 常见问题解答页面的 Oracle 变更数据捕获 (CDC) 部分中介绍的解决方案。如果您的来源数据库是 Oracle 12c 或更新版本,则授予以下额外的权限:
GRANT LOGMINING TO USER_NAME;
向用户账号
SELECT
授予对数据库中DBA_EXTENTS
视图的访问权限。有了此权限,您就可以为 Oracle 来源使用基于ROWID
的回填:GRANT SELECT ON DBA_EXTENTS TO USER_NAME;
后续步骤
- 详细了解 Datastream 如何与 Oracle 来源协同工作。