Esta página descreve como configurar a captura de dados de alterações (CDC) para transmitir dados de uma base de dados Oracle do Amazon RDS para um destino suportado, como o BigQuery ou o Cloud Storage.
Pode configurar a base de dados Oracle de origem para utilização com os seguintes métodos de CDC:
Para mais informações sobre o leitor de registos binários e a API LogMiner, consulte o artigo Trabalhe com ficheiros de registo de refazer da base de dados Oracle.
Para instruções detalhadas sobre como configurar a base de dados Oracle de origem para cada um destes métodos, consulte as secções que se seguem.
Configure a sua base de dados Oracle do Amazon RDS para o leitor de registos binários
Para origens do Amazon RDS, o Datastream suporta apenas objetos de diretório da base de dados como o método de acesso ao registo para o leitor de registos binários. Tem de criar os diretórios da base de dados que apontam para os ficheiros de registo de repetição online e os ficheiros de registo arquivados. Os nomes destes diretórios são estáticos e não podem ser alterados posteriormente. Tem de fornecer estes nomes ao Datastream quando cria a sua stream.
- Faça a ligação à instância de origem do Amazon RDS. 
- No terminal ou através do painel de controlo 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; 
- Confirme se a base de dados está a ser executada no modo - ARCHIVELOG. Para tal, inicie sessão na sua base de dados Oracle e execute o seguinte comando na linha de comandos SQL:- SELECT LOG_MODE FROM V$DATABASE;- Se o resultado for ARCHIVELOG, avance para o passo c.
- Se o resultado for NOARCHIVELOG, tem de ativar o modoARCHIVELOGpara a sua base de dados.
- Os ficheiros de registo arquivados consomem espaço em disco, pelo que deve configurar o parâmetro DB_RECOVERY_FILE_DEST_SIZE para a sua base de dados. Use este parâmetro para especificar (em bytes) o limite máximo do espaço total a ser usado pelos ficheiros de recuperação da base de dados de destino. Ao definir este parâmetro, pode gerir a compensação entre proteger a base de dados contra a falta de espaço em disco e a falha da stream devido à perda da posição do registo.
- Defina uma política de retenção de dados para a sua base de dados executando este comando:
exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',96); 
- Configure a política de rotação de ficheiros de registo do Oracle. Recomendamos que defina um tamanho máximo do ficheiro de registo para um valor inferior a 1 GB.
 
- Se o resultado for 
- Ative os dados de registo suplementares. Para tal, ative primeiro o registo suplementar mínimo ao nível da base de dados executando o seguinte comando: - exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD'); - Em seguida, escolha se quer ativar o registo para tabelas específicas ou para toda a base de dados. - Para registar alterações apenas para tabelas específicas, execute o seguinte comando para cada tabela que quer replicar: - ALTER TABLE SCHEMA.TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS; - Substitua o seguinte: - SCHEMA: o nome do esquema que contém a tabela.
- TABLE: o nome da tabela para a qual quer registar alterações.
 - Para replicar a maioria ou todas as tabelas na sua base de dados, considere ativar o registo para toda a base de dados. Na linha de comandos SQL, execute o seguinte comando para ativar os dados de registo suplementares para toda a base de dados: - exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','ALL'); 
- Conceda os seguintes privilégios ao utilizador da base 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 utilizador que pretende usar para estabelecer ligação à sua base de dados. 
Configure a sua base de dados Oracle do Amazon RDS para o LogMiner
- Confirme se a base de dados está a ser executada no modo - ARCHIVELOG. Para o fazer, inicie sessão na base de dados Oracle e execute o seguinte comando na linha de comandos SQL:- SELECT LOG_MODE FROM V$DATABASE;- Se o resultado for ARCHIVELOG, avance para o passo c.
- Se o resultado for - NOARCHIVELOG, tem de ativar o modo- ARCHIVELOGpara a sua base de dados.- Ponto fundamental: para que a base de dados seja executada no modo - ARCHIVELOG, tem de ativar as cópias de segurança da base de dados.
- Os ficheiros de registo arquivados consomem espaço em disco, pelo que deve configurar o parâmetro DB_RECOVERY_FILE_DEST_SIZE para a sua base de dados. Use este parâmetro para especificar (em bytes) o limite máximo do espaço total a ser usado pelos ficheiros de recuperação da base de dados de destino. Ao definir este parâmetro, pode gerir a compensação entre a proteção da base de dados contra a falta de espaço em disco e a falha da stream devido à perda da posição do registo. 
- Defina uma política de retenção de dados para a sua base de dados executando este comando: - exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',96);- Recomendamos que mantenha as cópias de segurança e os registos de arquivo durante, pelo menos, 4 dias, sendo 7 dias o recomendado. 
 
- Se o resultado for 
- Ative os dados de registo suplementares. Para o fazer, primeiro, ative o registo suplementar mínimo ao nível da base de dados executando o seguinte comando: - exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');- Em seguida, escolha se quer ativar o registo para tabelas específicas ou para toda a base de dados. - Para registar alterações apenas para tabelas específicas, execute o seguinte comando para cada tabela que quer replicar: - ALTER TABLE SCHEMA.TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS; - Substitua o seguinte: - SCHEMA: o nome do esquema que contém a tabela.
- TABLE: o nome da tabela para a qual quer registar alterações.
 - Para replicar a maioria ou todas as tabelas na sua base de dados, considere ativar o registo para toda a base de dados. - Na linha de comandos SQL, execute o seguinte comando para ativar os dados de registo suplementares para toda a base de dados: - exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','ALL');
- Conceda os privilégios adequados à conta de utilizador que vai ser usada para estabelecer ligação à sua base de dados. Para o fazer, 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 a sua base de dados usar a encriptação de dados transparente (TDE), conceda as seguintes autorizaçõ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 autorização - GRANT SELECT ANY TABLE, use a solução descrita na secção Captura de dados de alterações (CDC) da Oracle da página de Perguntas frequentes do Datastream.- Se a sua base de dados de origem for o Oracle 12c ou mais recente, conceda o seguinte privilégio adicional: - GRANT LOGMINING TO USER_NAME; 
- Conceda à conta de utilizador - SELECTacesso à vista- DBA_EXTENTSna sua base de dados. Este privilégio permite-lhe usar o preenchimento baseado em- ROWIDpara a sua origem Oracle:- GRANT SELECT ON DBA_EXTENTS TO USER_NAME; 
O que se segue?
- Saiba como o Datastream funciona com origens Oracle.