É 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.
Conecte-se à instância de origem do Amazon RDS.
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;
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;
- Se o resultado for
ARCHIVELOG
, avance para a etapa c. - Se o resultado for
NOARCHIVELOG
, será necessário ativar o modoARCHIVELOG
para seu banco de dados. - 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.
- Defina uma política de retenção de dados para seu banco de dados executando este comando:
Recomendamos que você mantenha backups e arquive registros por no mínimo quatro dias. Recomendamos sete dias.exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',96);
- 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.
- Se o resultado for
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');
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
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;
- Se o resultado for
ARCHIVELOG
, avance para a etapa c. Se o resultado for
NOARCHIVELOG
, será necessário ativar o modoARCHIVELOG
para seu banco de dados.Ponto importante: para que o banco de dados seja executado no modo
ARCHIVELOG
, é necessário ativar os backups.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.
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.
- Se o resultado for
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');
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;
Conceda à conta de usuário
SELECT
acesso à visualizaçãoDBA_EXTENTS
no seu banco de dados. Com esse privilégio, você pode usar o backfill baseado emROWID
para sua origem do Oracle:GRANT SELECT ON DBA_EXTENTS TO USER_NAME;
A seguir
- Saiba mais sobre como o Datastream funciona com fontes da Oracle.