Configurar um banco de dados Oracle do Amazon RDS

É possível configurar o banco de dados Oracle de origem para uso com os seguintes métodos de CDC:

Para mais informações sobre o leitor de registro binário e a API LogMiner, consulte Trabalhar com arquivos de registro "redo" do banco de dados Oracle.

Para instruções detalhadas sobre como configurar o banco de dados Oracle de origem para cada um desses métodos, consulte as seções a seguir.

Configurar o banco de dados Oracle do Amazon RDS para leitor de registro binário

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 a registros para o leitor de registros binários. É necessário criar os diretórios do banco de dados que apontam para os arquivos de registro refazer on-line e os arquivos de registro arquivados. Os nomes desses diretórios são estáticos e não podem ser alterados depois. Você precisa 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 seu banco de dados está sendo executado no modo ARCHIVELOG. Para fazer isso, faça login no seu 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 registro arquivados consomem espaço em disco. Portanto, configure o parâmetro DB_RECOVERY_FILE_DEST_SIZE para seu 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 a 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. Recomendamos sete dias.
    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 o registro complementar mínimo 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 alterações.

    Para replicar a maioria ou todas as tabelas do banco de dados, ative o registro para todo o banco de dados. No prompt SQL, execute o seguinte comando para ativar 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:

    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');
    GRANT SELECT ANY TRANSACTION TO USER_NAME;
    GRANT SELECT ANY TABLE TO USER_NAME;
    GRANT SELECT ON DBA_EXTENTS 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 seu banco de dados está sendo executado no modo ARCHIVELOG. Para isso, faça login no seu 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 registro arquivados consomem espaço em disco. Portanto, configure o parâmetro DB_RECOVERY_FILE_DEST_SIZE para seu 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 a 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. Recomendamos sete dias.
    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.
  2. Ative os dados de registro complementares. Para fazer isso, primeiro ative o registro complementar mínimo 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 alterações.

    Para replicar a maioria ou todas as tabelas do banco de dados, ative o registro para todo o banco de dados.

    No prompt SQL, execute o seguinte comando para habilitar 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_$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;

    Se a sua organização não permitir a permissão GRANT SELECT ANY TABLE, use a solução descrita na seção Captura de 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 SELECT acesso à visualização DBA_EXTENTS no seu banco de dados. Esse privilégio permite que você use o preenchimento automático baseado em ROWID para sua origem do Oracle:

    GRANT SELECT ON DBA_EXTENTS TO USER_NAME;

A seguir