配置可插入的 Oracle 数据库

Datastream 支持 Oracle 多租户架构,其中单个容器数据库 (CDB) 包含一个或多个可插入数据库 (PDB)。每个可插入数据库都是具有唯一 ID 和名称的独立数据库,可以独立管理。

如需配置自行托管的 Oracle 可插拔数据库,以便将其与 Datastream 搭配使用,请执行以下步骤:

  1. 验证数据库是否正以 ARCHIVELOG 模式运行。为此,请从 CDB$ROOT 容器运行以下命令:

    SELECT LOG_MODE FROM V$DATABASE;

    1. 如果结果为 ARCHIVELOG,则继续执行第 2 步。
    2. 如果结果为 NOARCHIVELOG,则需要为数据库启用 ARCHIVELOG 模式。
    3. SYSDBA 身份登录后运行以下命令:

      SHUTDOWN IMMEDIATE;
      STARTUP MOUNT;
      ALTER DATABASE ARCHIVELOG;
      ALTER DATABASE OPEN;
      
    4. 归档的日志文件会占用磁盘空间,因此您需要为数据库配置 DB_RECOVERY_FILE_DEST_SIZE 参数。使用此参数指定目标数据库恢复文件要使用的总空间硬性限制(以字节为单位)。通过设置此参数,您可以管理在保护数据库免于磁盘空间不足与因日志位置丢失而导致数据流失败之间的折衷。

  2. 通过从 CDB$ROOT 容器中运行以下 Oracle 恢复管理器 (RMAN) 命令,为数据库定义数据保留政策:

    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;
    

    该命令用于为容器数据库中的所有可插拔数据库定义数据保留政策。

    我们建议您将备份和归档日志至少保留 4 天,建议保留 7 天。

  3. 返回到用于配置 Oracle 日志文件轮替政策的数据库工具的 SQL 提示。我们建议日志文件大小不要超过 512 MB。

  4. 启用补充日志数据。为此,请先运行以下命令,在 CDB$ROOT 容器级别对数据库启用补充日志记录:

    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;
    
  5. 创建普通用户。普通用户在 CDB$ROOT 容器和可插入数据库中具有相同的身份。普通用户可以连接到 CDB$ROOT 容器并在其中执行操作,也可以在其拥有权限的任何可插入数据库中执行操作。通用用户名必须以 C##c## 开头。

  6. 向普通用户授予用于连接数据库的适当权限。CDB$ROOT 容器和可插入数据库级别需要不同的权限。

    • 连接到 CDB$ROOT 容器并运行以下命令:
    GRANT CREATE SESSION TO USER_NAME;
    GRANT SET CONTAINER TO USER_NAME;
    GRANT SELECT ON SYS.V_$DATABASE 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 LOGMINING TO USER_NAME;
    GRANT EXECUTE_CATALOG_ROLE TO USER_NAME;
    
    • 连接到可插入数据库并运行以下命令:
    GRANT CREATE SESSION TO USER_NAME;
    GRANT SET CONTAINER TO USER_NAME;
    GRANT SELECT ANY TABLE 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 DBA_SUPPLEMENTAL_LOGGING TO USER_NAME;
    
  7. 向普通用户 SELECT 授予对数据库中 DBA_EXTENTS 视图的访问权限。有了此权限,您就可以为 Oracle 来源使用基于 ROWID 的回填

    GRANT SELECT ON DBA_EXTENTS TO USER_NAME;

后续步骤