GETUPDATEBEFORES | IGNOREUPDATEBEFORES
Valido per
Estrai e Replicat
Descrizione
Utilizzare i parametri GETUPDATEBEFORES e IGNOREUPDATEBEFORES per controllare se le immagini precedenti delle colonne nelle operazioni UPDATE sono incluse nei record elaborati da Oracle GoldenGate. Prima che le immagini contengano dettagli di colonna esistenti prima dell'aggiornamento di una riga.
(Solo Oracle) Oracle GoldenGate acquisisce per impostazione predefinita i valori di pre-modifica e post-modifica per le operazioni di aggiornamento in un singolo record di aggiornamento unificato. Per altri database, solo i valori di pre-modifica vengono scritti nel file trail. Nelle release precedenti l'impostazione predefinita prevedeva solo l'acquisizione del valore successivo alla modifica. A partire da questa release, le istruzioni SQL personalizzate (SQLEXEC) ora vengono eseguite una sola volta per operazione di aggiornamento con il nuovo formato di aggiornamento predefinito. Prima di questa release, le istruzioni SQL personalizzate venivano eseguite due volte, una volta quando si incontrava il valore di pre-modifica e una volta quando si incontrava il valore successivo alla modifica. Se si utilizza Oracle GoldenGate con il formato di aggiornamento unificato, è possibile passare in modo esplicito il valore precedente o successivo all'istruzione SQL personalizzata utilizzando le funzioni @BEFORE, @AFTER e @BEFOREAFTER. Sebbene Oracle GoldenGate possa utilizzare questo formato di aggiornamento per impostazione predefinita, la camma del vecchio formato viene conservata se sono presenti parametri in conflitto che in precedenza avrebbero generato due record di modifica precedenti e successive separati. In questi casi, viene registrato un messaggio informativo nel file di report.
Utilizzare il parametro GETUPDATEBEFORES come indicato di seguito.
-
nel file dei parametri Extract da estrarre prima delle immagini dall'origine dati.
-
nel file dei parametri Replicat da includere prima delle immagini in un'operazione Replicat.
È possibile confrontare le immagini precedenti con quelle successive per identificare i risultati netti di una transazione o eseguire altri calcoli delta. Ad esempio, se un campo BALANCE è $100 prima di un aggiornamento e $120 dopo, un confronto mostrerebbe la differenza di $20. È possibile utilizzare le funzioni di conversione delle colonne di Oracle GoldenGate per eseguire i confronti e i calcoli.
Per fare riferimento alle immagini precedenti nel file dei parametri, utilizzare la funzione di conversione @BEFORE. Ad esempio:
COLMAP (previous = @BEFORE (balance))
È necessario specificare GETUPDATEBEFORES quando si utilizza la funzione CDR (Confllict Detection and Resolution). Per ulteriori informazioni su CDR, vedere Rilevamento e risoluzione manuale dei conflitti.
I parametri GETUPDATEBEFORES e IGNOREUPDATEBEFORES sono specifici della tabella. Un parametro rimane valido per tutte le istruzioni TABLE o MAP successive, fino a quando non viene rilevato l'altro parametro.
Poiché è possibile abilitare o disabilitare in modo selettivo questi parametri tra le istruzioni MAP, è possibile abilitarli o disabilitarli per thread diversi di un Replicat coordinato. Specificare i thread GETUPDATEBEFORES in un set di istruzioni MAP e specificare i thread IGNOREUPDATEBEFORES in un altro set di istruzioni MAP.
Limitazioni per GETUPDATESBEFORES:
-
Per PostgreSQL, prima che le immagini delle colonne
LOBnon vengano registrate e non vengano scritte nei trail. -
Per SQL Server, le colonne dei tipi di dati
IMAGE,NTEXTeTEXTvengono registrate come valoreNULLper le operazioni di aggiornamento delle immagini precedenti e le colonneVARBINARY(MAX),VARCHAR(MAX)eNVARCHAR(MAX)vengono registrate come valoreNULLper le operazioni di aggiornamento delle immagini precedenti a meno che la colonna non sia stata aggiornata.
Predefinito
IGNOREUPDATEBEFORES
Sintassi
GETUPDATEBEFORES | IGNOREUPDATEBEFORES
Esempio
Questo esempio mostra come è possibile applicare GETUPDATEBEFORES e IGNOREUPDATEBEFORES in modo selettivo a diverse istruzioni MAP, ognuna delle quali rappresenta un thread diverso di un Replicat coordinato.
GETUPDATEBEFORES
MAP sales.cust, TARGET sales.cust, THREAD (1);
MAP sales.ord, TARGET sales.ord, THREAD (2);
IGNOREUPDATEBEFORES
MAP sales.loc, TARGET sales.loc, THREAD (3);