Datastream consente di eseguire lo streaming degli aggiornamenti di Change Data Capture (CDC) da un
database Amazon RDS per Oracle a una destinazione
supportata, come BigQuery o
Cloud Storage. Puoi configurare l'origine per il lettore
di log binari
(anteprima) o l'
API LogMiner abilitando la modalità ARCHIVELOG e il logging
supplementare e concedendo i privilegi utente. Per ulteriori informazioni su questi metodi CDC, consulta la pagina Utilizzare i file di redo log del database Oracle.
Configurare il database Oracle Amazon RDS per il lettore di log binari
Per le origini Amazon RDS, Datastream supporta solo gli oggetti della directory del database come metodo di accesso ai log per il lettore di log binari. Devi creare le directory del database che puntano ai file di redo log online e ai file di log archiviati. I nomi di queste directory sono statici e non possono essere modificati in un secondo momento. Devi fornire questi nomi a Datastream quando crei il flusso.
Connettiti all'istanza Amazon RDS di origine.
Nel terminale o utilizzando la dashboard di Amazon RDS, esegui i seguenti comandi:
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;
Verifica che il tuo database sia in esecuzione in modalità
ARCHIVELOG. Per farlo, accedi al database Oracle ed esegui il seguente comando alla richiesta di SQL:SELECT LOG_MODE FROM V$DATABASE;- Se il risultato è
ARCHIVELOG, vai al passaggio c. - Se il risultato è
NOARCHIVELOG, dovrai abilitare la modalitàARCHIVELOGper il tuo database. - I file di log archiviati consumano spazio su disco, quindi ti consigliamo di configurare il parametro DB_RECOVERY_FILE_DEST_SIZE per il tuo database. Utilizza questo parametro per specificare (in byte) il limite massimo dello spazio totale da utilizzare per i file di ripristino del database di destinazione. Impostando questo parametro, puoi gestire il compromesso tra la protezione del database dall'esaurimento dello spazio su disco e l'errore del flusso a causa della perdita della posizione del log.
- Definisci una policy sulla conservazione dei dati per il tuo database eseguendo questo comando:
Ti consigliamo di conservare i backup e i log di archiviazione per un minimo di 4 giorni, ma 7 giorni è il tempo raccomandato.exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',96);
- Configura la policy di rotazione dei file di log Oracle. Ti consigliamo di impostare una dimensione massima dei file di log su un valore inferiore a 1 GB.
- Se il risultato è
Abilita i dati di log supplementari. Per farlo, abilita prima il logging supplementare minimo a livello di database eseguendo il seguente comando:
exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');
Poi, scegli se attivare il logging per tabelle specifiche o per l'intero database.
Per registrare le modifiche solo per tabelle specifiche, esegui il comando seguente per ogni tabella da replicare:
ALTER TABLE SCHEMA.TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
Sostituisci quanto segue:
- SCHEMA: il nome dello schema che contiene la tabella.
- TABLE: il nome della tabella per cui vuoi registrare le modifiche.
Per replicare la maggior parte o tutte le tabelle del database, valuta la possibilità di attivare il logging per l'intero database. Alla richiesta di SQL, esegui il seguente comando per abilitare i dati di log supplementari per l'intero database:
exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','ALL');
Concedi i seguenti privilegi all'utente del database:
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; Sostituisci USER_NAME con il nome dell'account utente che intendi utilizzare per connetterti al tuo database.
Configurare il database Oracle Amazon RDS per LogMiner
Verifica che il tuo database sia in esecuzione in modalità
ARCHIVELOG. Per farlo, accedi al database Oracle ed esegui il seguente comando alla richiesta di SQL:SELECT LOG_MODE FROM V$DATABASE;- Se il risultato è
ARCHIVELOG, vai al passaggio c. Se il risultato è
NOARCHIVELOG, dovrai abilitare la modalitàARCHIVELOGper il tuo database.Punto chiave: affinché il database sia in esecuzione in modalità
ARCHIVELOG, devi abilitare i backup per il database.I file di log archiviati consumano spazio su disco, quindi ti consigliiamo di configurare il DB_RECOVERY_FILE_DEST_SIZE per il tuo database. Utilizza questo parametro per specificare (in byte) il limite massimo dello spazio totale da utilizzare per i file di ripristino del database di destinazione. Impostando questo parametro, puoi gestire il compromesso tra la protezione del database dall'esaurimento dello spazio su disco e l'errore del flusso a causa della perdita della posizione del log.
Definisci una policy sulla conservazione dei dati per il tuo database eseguendo questo comando:
exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',96);Ti consigliamo di conservare i backup e i log di archiviazione per un minimo di 4 giorni, ma 7 giorni è il tempo raccomandato.
- Se il risultato è
Abilita i dati di log supplementari. Per farlo, abilita prima il logging supplementare minimo a livello di database eseguendo il seguente comando:
exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');Poi, scegli se attivare il logging per tabelle specifiche o per l'intero database.
Per registrare le modifiche solo per tabelle specifiche, esegui il comando seguente per ogni tabella da replicare:
ALTER TABLE SCHEMA.TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
Sostituisci quanto segue:
- SCHEMA: il nome dello schema che contiene la tabella.
- TABLE: il nome della tabella per cui vuoi registrare le modifiche.
Per replicare la maggior parte o tutte le tabelle del database, valuta la possibilità di attivare il logging per l'intero database.
Alla richiesta di SQL, esegui il seguente comando per abilitare i dati di log supplementari per l'intero database:
exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','ALL');Concedi i privilegi appropriati all'account utente che verrà utilizzato per la connessione al tuo database. Per farlo, esegui il comando seguente:
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 il tuo database utilizza Transparent Data Encryption (TDE), concedi le seguenti autorizzazioni:
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 la tua organizzazione non consente di concedere l'autorizzazione
GRANT SELECT ANY TABLE, utilizza la soluzione descritta nella sezione Change Data Capture (CDC) di Oracle della pagina Domande frequenti di Datastream.Se il tuo database di origine è Oracle 12c o successivo dovrai concedere il privilegio aggiuntivo seguente:
GRANT LOGMINING TO USER_NAME;
Concedi all'account utente l'accesso
SELECTalla visualizzazioneDBA_EXTENTSnel tuo database. Questo privilegio ti consente di utilizzare ilROWIDbased backfill per l'origine Oracle:GRANT SELECT ON DBA_EXTENTS TO USER_NAME;
Passaggi successivi
- Scopri di più su come funziona Datastream con le origini Oracle.