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.
Estabeleça a ligação à instância do Amazon RDS de origem.
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 no comando 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 modoARCHIVELOG
para 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:
Recomendamos que mantenha as cópias de segurança e os registos de arquivo durante, pelo menos, 4 dias, sendo 7 dias o recomendado.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 modoARCHIVELOG
para 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
SELECT
acesso à vistaDBA_EXTENTS
na sua base de dados. Este privilégio permite-lhe usar o preenchimento baseado emROWID
para a sua origem Oracle:GRANT SELECT ON DBA_EXTENTS TO USER_NAME;
O que se segue?
- Saiba como o Datastream funciona com origens Oracle.