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 registros binários 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 o leitor de registros binários

Para fontes do Amazon RDS, o Datastream só aceita 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 de registros refazer on-line e os arquivos de registros 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 seu 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 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 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 falta de espaço em disco e a falha do fluxo devido à perda de 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 registros inferior a 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 em que você quer registrar as mudanças.

    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:

    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 LogMiner

  1. Verifique se seu banco de dados está sendo executado no modo ARCHIVELOG. Para 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.

      Ponto importante: 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 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 falta de espaço em disco e a falha do fluxo devido à perda de 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.

  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 mudanças 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 em que você quer registrar as mudanças.

    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');
    
  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 usa 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 de alterações (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. Com esse privilégio, você pode usar o backfill baseado em ROWID para sua origem do Oracle:

    GRANT SELECT ON DBA_EXTENTS TO USER_NAME;

A seguir