Configurar um banco de dados do Amazon RDS Oracle para CDC

O Datastream permite transmitir atualizações de captura de dados alterados (CDC) de um banco de dados do Amazon RDS para Oracle para um destino compatível, como o BigQuery ou o Cloud Storage. É possível configurar a origem para o leitor de registros binários (visualização) ou a API LogMiner ativando o modo ARCHIVELOG e a geração de registros complementar, além de conceder privilégios de usuário. Para mais informações sobre esses métodos de CDC, consulte Trabalhar com arquivos do tipo redo log do banco de dados Oracle.

Configurar o banco de dados Oracle do Amazon RDS para o leitor de registros binários

Para origens do Amazon RDS, o Datastream oferece suporte apenas a objetos de diretório de banco de dados como o método de acesso ao registro para o leitor de registros binários. É necessário criar os diretórios de banco de dados que apontam para os arquivos redo log on-line e os arquivos de registro arquivados. Os nomes desses diretórios são estáticos e não podem ser alterados mais tarde. É necessário fornecer esses nomes ao Datastream ao criar o stream.

  1. Conecte-se à instância de origem do Amazon RDS.

  2. No terminal ou usando o painel do Amazon RDS, execute os seguintes 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. Verifique se o banco de dados está sendo executado no modo ARCHIVELOG. Para fazer isso, faça login no banco de dados Oracle e execute o seguinte comando no prompt SQL:

    SELECT LOG_MODE FROM V$DATABASE;

    1. Se o resultado for ARCHIVELOG, avance para a etapa c.
    2. Se o resultado for NOARCHIVELOG, será necessário ativar o modo ARCHIVELOG para seu banco de dados.
    3. Os arquivos de registros arquivados consomem espaço em disco. Portanto, configure o parâmetro DB_RECOVERY_FILE_DEST_SIZE para o banco de dados. Use esse parâmetro para especificar (em bytes) o limite absoluto no espaço total a ser usado pelos arquivos de recuperação do banco de dados de destino. Ao definir esse parâmetro, é possível gerenciar a compensação entre proteger o banco de dados contra falta de espaço em disco e a falha do stream devido à perda da posição do registro.
    4. Defina uma política de retenção de dados para seu banco de dados executando este comando:
      exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',96);
      Recomendamos que você mantenha backups e arquive registros por no mínimo quatro dias, sendo sete dias o mais recomendado.
    5. Configure a política de rotação de arquivos de registros da Oracle. Recomendamos definir um tamanho máximo de arquivo de registro para um valor menor que 1 GB.
  4. Ative os dados de registro complementares. Para fazer isso, primeiro ative a geração de registros complementar mínima no nível do banco de dados executando o seguinte comando:

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

    Em seguida, escolha se você quer ativar a geração de registros para tabelas específicas ou para todo o banco de dados.

    Para registrar alterações apenas em tabelas específicas, execute o seguinte comando em cada tabela que você quer replicar:

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

    Substitua:

    • SCHEMA: o nome do esquema que contém a tabela.
    • TABLE: o nome da tabela para a qual você quer registrar as mudanças.

    Para replicar a maioria ou todas as tabelas no banco de dados, considere ativar a geração de registros para todo o banco de dados. No prompt SQL, execute o seguinte comando para ativar os dados de registro complementares para todo o banco de dados:

    exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','ALL');
  5. Conceda os seguintes privilégios ao usuário do banco de dados:

    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;

    Substitua USER_NAME pelo nome da conta de usuário que você pretende usar para se conectar ao banco de dados.

Configurar o banco de dados Oracle do Amazon RDS para o LogMiner

  1. Verifique se o banco de dados está sendo executado no modo ARCHIVELOG. Para fazer isso, faça login no banco de dados Oracle e execute o seguinte comando no prompt SQL:

    SELECT LOG_MODE FROM V$DATABASE;
    
    1. Se o resultado for ARCHIVELOG, avance para a etapa c.
    2. Se o resultado for NOARCHIVELOG, será necessário ativar o ARCHIVELOG modo para seu banco de dados.

      Ponto principal: para que o banco de dados seja executado no modo ARCHIVELOG, é necessário ativar os backups.

    3. Os arquivos de registros arquivados consomem espaço em disco. Portanto, configure o DB_RECOVERY_FILE_DEST_SIZE para o banco de dados. Use esse parâmetro para especificar (em bytes) o limite absoluto no espaço total a ser usado pelos arquivos de recuperação do banco de dados de destino. Ao definir esse parâmetro, é possível gerenciar a compensação entre proteger o banco de dados contra falta de espaço em disco e a falha do stream devido à perda da posição do registro.

    4. Defina uma política de retenção de dados para seu banco de dados executando este comando:

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

      Recomendamos que você mantenha backups e arquive registros por no mínimo quatro dias, sendo sete dias o mais recomendado.

  2. Ative os dados de registro complementares. Para fazer isso, primeiro ative a geração de registros complementar mínima no nível do banco de dados executando o seguinte comando:

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

    Em seguida, escolha se você quer ativar a geração de registros para tabelas específicas ou para todo o banco de dados.

    Para registrar alterações apenas em tabelas específicas, execute o seguinte comando em cada tabela que você quer replicar:

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

    Substitua:

    • SCHEMA: o nome do esquema que contém a tabela.
    • TABLE: o nome da tabela para a qual você quer registrar as mudanças.

    Para replicar a maioria ou todas as tabelas no banco de dados, considere ativar a geração de registros para todo o banco de dados.

    No prompt SQL, execute o seguinte comando para ativar os dados de registro complementares para todo o banco de dados:

    exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','ALL');
    
  3. Conceda os privilégios necessários à conta de usuário que será usada para se conectar ao seu banco de dados. Para isso, execute os seguintes 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;

    Se o banco de dados usar a criptografia transparente de dados (TDE), conceda as seguintes permissões:

    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');

    Se a sua organização não permitir a concessão da permissão GRANT SELECT ANY TABLE, use a solução descrita na seção Captura de dados alterados (CDC) do Oracle da página de perguntas frequentes do Datastream.

    Se o banco de dados de origem for Oracle 12c ou mais recente, conceda o seguinte privilégio adicional:

    GRANT LOGMINING TO USER_NAME;
  4. Conceda à conta de usuário acesso SELECT à visualização DBA_EXTENTS no banco de dados. Esse privilégio permite usar o ROWID baseado em preenchimento para a origem do Oracle:

    GRANT SELECT ON DBA_EXTENTS TO USER_NAME;

A seguir