Configurar una base de datos Oracle de Amazon RDS para CDC

En esta página se describe cómo configurar la captura de datos de cambios (CDC) para transmitir datos de una base de datos de Oracle de Amazon RDS a un destino admitido, como BigQuery o Cloud Storage.

Puede configurar su base de datos de Oracle de origen para usarla con los siguientes métodos de CDC:

Para obtener más información sobre el lector de registros binarios y la API LogMiner, consulta el artículo Trabajar con archivos de registro de versiones de base de datos de Oracle.

Para obtener instrucciones detalladas sobre cómo configurar la base de datos de Oracle de origen para cada uno de estos métodos, consulta las secciones siguientes.

Configurar la base de datos Oracle de Amazon RDS para el lector de registros binarios

En el caso de las fuentes de Amazon RDS, Datastream solo admite objetos de directorio de base de datos como método de acceso al registro para el lector de registros binarios. Debes crear los directorios de la base de datos que apunten a los archivos de registro de rehacer online y a los archivos de registro archivados. Los nombres de estos directorios son estáticos y no se pueden cambiar más adelante. Debe proporcionar estos nombres a Datastream cuando cree su flujo.

  1. Conéctate a tu instancia de Amazon RDS de origen.

  2. En el terminal o en el panel de control de Amazon RDS, ejecuta los siguientes comandos:

    BEGIN
    rdsadmin.rdsadmin_master_util.create_archivelog_dir;
    END;
    BEGIN
    rdsadmin.rdsadmin_master_util.create_onlinelog_dir;
    END;
    COMMIT;
    GRANT READ ON DIRECTORY ONLINELOG_DIR TO USER_NAME;
    GRANT READ ON DIRECTORY ARCHIVELOG_DIR TO USER_NAME;
  3. Comprueba que tu base de datos se está ejecutando en el modo ARCHIVELOG. Para ello, inicia sesión en tu base de datos Oracle y ejecuta el siguiente comando en el mensaje de SQL:

    SELECT LOG_MODE FROM V$DATABASE;

    1. Si el resultado es ARCHIVELOG, ve al paso c.
    2. Si el resultado es NOARCHIVELOG, tendrás que habilitar el modo ARCHIVELOG en tu base de datos.
    3. Los archivos de registro archivados consumen espacio en disco, por lo que te recomendamos que configures el parámetro DB_RECOVERY_FILE_DEST_SIZE de tu base de datos. Use este parámetro para especificar (en bytes) el límite estricto del espacio total que usarán los archivos de recuperación de la base de datos de destino. Al definir este parámetro, puede gestionar el equilibrio entre proteger la base de datos para que no se quede sin espacio en disco y evitar que la secuencia falle debido a la pérdida de la posición del registro.
    4. Para definir una política de conservación de datos en tu base de datos, ejecuta este comando:
      exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',96);
      Te recomendamos que conserves las copias de seguridad y los registros de archivo durante al menos 4 días, aunque lo ideal es que los conserves durante 7 días.
    5. Configura la política de rotación de archivos de registro de Oracle. Te recomendamos que definas un tamaño máximo para los archivos de registro inferior a 1 GB.
  4. Habilita los datos de registros complementarios. Para ello, primero habilita el registro complementario mínimo a nivel de base de datos ejecutando el siguiente comando:

    exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');

    A continuación, elige si quieres activar el registro de tablas específicas o de toda la base de datos.

    Para registrar los cambios solo de tablas específicas, ejecuta el siguiente comando en cada tabla que quieras replicar:

    ALTER TABLE SCHEMA.TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

    Haz los cambios siguientes:

    • SCHEMA: el nombre del esquema que contiene la tabla.
    • TABLE: el nombre de la tabla de la que quieres registrar los cambios.

    Para replicar la mayoría o todas las tablas de tu base de datos, te recomendamos que actives el registro de todo el contenido de la base de datos. En el mensaje de SQL, ejecuta el siguiente comando para habilitar los datos de registros complementarios en toda la base de datos:

    exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','ALL');
  5. Concede los siguientes privilegios al usuario de la base de datos:

    exec rdsadmin.rdsadmin_util.grant_sys_object('GV_$LOG','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('GV_$LOGFILE','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('GV_$ARCHIVED_LOG','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('GV_$INSTANCE','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('GV_$STANDBY_LOG','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$INSTANCE','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$PDBS','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$TRANSPORTABLE_PLATFORM','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$PARAMETER','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('COL$','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_OBJECTS','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_TABLESPACES','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_ENCRYPTED_COLUMNS','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_EXTENTS','USER_NAME','SELECT');
    GRANT CONNECT TO USER_NAME;
    GRANT CREATE SESSION TO USER_NAME;
    GRANT SELECT ANY TABLE TO USER_NAME;

    Sustituye USER_NAME por el nombre de la cuenta de usuario que quieras usar para conectarte a tu base de datos.

Configurar la base de datos Oracle de Amazon RDS para LogMiner

  1. Comprueba que tu base de datos se está ejecutando en el modo ARCHIVELOG. Para ello, inicia sesión en tu base de datos Oracle y ejecuta el siguiente comando en el mensaje de SQL:

    SELECT LOG_MODE FROM V$DATABASE;
    
    1. Si el resultado es ARCHIVELOG, ve al paso c.
    2. Si el resultado es NOARCHIVELOG, tendrás que habilitar el modo ARCHIVELOG en tu base de datos.

      Punto clave: Para que tu base de datos se ejecute en modo ARCHIVELOG, debes habilitar las copias de seguridad de la base de datos.

    3. Los archivos de registro archivados consumen espacio en disco, por lo que te recomendamos que configures el parámetro DB_RECOVERY_FILE_DEST_SIZE de tu base de datos. Use este parámetro para especificar (en bytes) el límite estricto del espacio total que usarán los archivos de recuperación de la base de datos de destino. Al definir este parámetro, puede gestionar el equilibrio entre proteger la base de datos para que no se quede sin espacio en disco y evitar que la secuencia falle debido a la pérdida de la posición del registro.

    4. Para definir una política de conservación de datos en tu base de datos, ejecuta este comando:

      exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',96);
      

      Te recomendamos que conserves las copias de seguridad y los registros de archivo durante un mínimo de 4 días (lo ideal es 7 días).

  2. Habilita los datos de registros complementarios. Para ello, primero habilita el registro complementario mínimo a nivel de base de datos ejecutando el siguiente comando:

    exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');
    

    A continuación, elige si quieres activar el registro de tablas específicas o de toda la base de datos.

    Para registrar los cambios solo de tablas específicas, ejecuta el siguiente comando en cada tabla que quieras replicar:

    ALTER TABLE SCHEMA.TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
    

    Haz los cambios siguientes:

    • SCHEMA: el nombre del esquema que contiene la tabla.
    • TABLE: el nombre de la tabla de la que quieres registrar los cambios.

    Para replicar la mayoría o todas las tablas de tu base de datos, te recomendamos que actives el registro de todo el contenido de la base de datos.

    En el mensaje de SQL, ejecuta el siguiente comando para habilitar los datos de registros complementarios en toda la base de datos:

    exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','ALL');
    
  3. Concede los permisos adecuados a la cuenta de usuario que se utilizará para conectarse a tu base de datos. Para ello, ejecuta los siguientes comandos:

    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_$LOG','USER_NAME','SELECT'); -- for primary databases
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$STANDBY_LOG','USER_NAME','SELECT'); -- for standby databases
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGFILE','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('V_$PARAMETER','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;

    Si tu base de datos usa el cifrado de datos transparente (TDE), concede los siguientes permisos:

    exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_TABLESPACES','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_ENCRYPTED_COLUMNS','USER_NAME','SELECT');

    Si tu organización no permite conceder el permiso GRANT SELECT ANY TABLE, usa la solución que se describe en la sección Captura de datos modificados (CDC) de Oracle de la página de preguntas frecuentes de Datastream.

    Si la base de datos de origen es Oracle 12c o una versión posterior, concede el siguiente privilegio adicional:

    GRANT LOGMINING TO USER_NAME;
  4. Concede a la cuenta de usuario SELECT acceso a la vista DBA_EXTENTS de tu base de datos. Este privilegio te permite usar el relleno basado en ROWID para tu fuente de Oracle:

    GRANT SELECT ON DBA_EXTENTS TO USER_NAME;

Siguientes pasos

  • Consulte más información sobre cómo funciona Datastream con las fuentes de Oracle.