Interazioni tra recuperi da una tabella e DDL

Oracle GoldenGate supporta alcuni tipi di dati identificando la riga modificata dal redo stream e quindi eseguendo una query sulla tabella di base per recuperare le colonne modificate. Ad esempio, gli aggiornamenti parziali sui LOB sono supportati identificando la riga modificata e la colonna LOB dal redo log, quindi eseguendo query per il valore della colonna LOB per la riga dalla tabella di base. Una tecnica simile è impiegata per sostenere UDT.

Nota: Extract richiede solo il recupero per UDT quando non utilizza il supporto degli oggetti nativi.

Tale supporto basato sul recupero viene implementato mediante l'emissione di una query flashback al database basata sul SCN (System Change Number) in corrispondenza del quale è stato eseguito il commit della transazione. La funzione di query flashback presenta alcune limitazioni. Alcune operazioni DDL fungono da ostacoli tali che le query di flashback per ottenere i dati prima di queste DDL non riescono. Esempi di tali DDL sono ALTER TABLE MODIFY COLUMN e ALTER TABLE DROP COLUMN.

Pertanto, nei casi in cui esiste un ritardo di acquisizione Extract, una DDL in corso può causare il mancato recupero delle richieste di dati prima della DDL. In questi casi, Extract ritorna indietro e recupera lo snapshot corrente dei dati per la colonna modificata. Esistono diverse limitazioni a questo approccio: in primo luogo, il DDL potrebbe aver modificato la colonna che Extract deve recuperare (ad esempio, supponiamo che il DDL intervenuto abbia aggiunto un nuovo attributo all'UDT che viene acquisito). In secondo luogo, il DDL potrebbe aver modificato una delle colonne utilizzate da Extract come identificativo di riga logica. In terzo luogo, la tabella potrebbe essere stata rinominata prima che Extract avesse la possibilità di recuperare i dati.

Per evitare incongruenze correlate al recupero come queste, durante la modifica delle colonne, prendere le precauzioni riportate di seguito.

  1. Sospendere tutti i DML nella tabella.

  2. Attendere il completamento dell'acquisizione di tutti i redo rimanenti e attendere che Replicat completi l'elaborazione dei dati acquisiti dal trail. Per determinare se Replicat è terminato, eseguire il comando seguente finché non viene visualizzato un messaggio che indica che non sono presenti altri dati da elaborare.

    INFO REPLICAT *group*
  3. Eseguire il DDL sull'origine.

  4. Riprendi le operazioni DML di origine.