Mappa e trasforma dati
Informazioni su task, funzioni, comandi e processi utilizzati per l'integrazione dei dati tra le tabelle di origine e di destinazione.
Parametri che controllano il mapping e l'integrazione dati
Tutte le operazioni di selezione, mapping e manipolazione dei dati eseguite da Oracle GoldenGate vengono eseguite utilizzando una o più opzioni dei parametri TABLE e MAP.
-
Utilizzare
TABLEnel file dei parametri Extract. -
Utilizzare
MAPnel file dei parametri Replicat.
TABLE e MAP specificano gli oggetti di database interessati dagli altri parametri nel file dei parametri. Per istruzioni sulla specifica dei nomi oggetto in questi parametri, vedere Specifica dei nomi oggetto nell'input di Oracle GoldenGate.
Mapping tra database diversi
Il mapping e la conversione tra tabelle con strutture dati diverse richiedono un file di definizione di origine, un file di definizione di destinazione o, in alcuni casi, entrambi. Il mapping tra database diversi è controllato dagli trail autodescrittivi e il mapping viene eseguito in base al nome della colonna, indipendentemente dal tipo di dati per la colonna di origine o di destinazione.
Se non si desidera eseguire il mapping automatico in base agli trail di auto-descrizione o si desidera la compatibilità con le versioni precedenti, è possibile utilizzare SOURCEDEFS o TARGETDEFS.
Mappatura e conversione su sistemi NonStop
Se si esegue il mapping o la conversione di dati da un sistema Windows o UNIX a una destinazione NonStop Enscribe, il mapping o la conversione devono essere eseguiti sul sistema di origine Windows o UNIX. Replicat per NonStop non può convertire i nomi e i tipi di dati delle tabelle SQL in tre parti o due parti nei nomi di file in tre parti utilizzati per la piattaforma Enscribe. Extract può formattare i dati di trail con nomi Enscribe e tipi di dati di destinazione.
Mappatura e conversione su sistemi Windows e UNIX
Quando Oracle GoldenGate funziona solo su sistemi basati su Windows e UNIX, è possibile eseguire il mapping e la conversione delle colonne nel processo Extract o nel processo Replicat. Per evitare il sovraccarico aggiunto di questa elaborazione nel processo Extract, è possibile configurare il mapping e la conversione da eseguire nel processo Replicat o in un sistema intermedio.
Nel caso in cui vi siano più origini e una destinazione, potrebbe essere più efficiente eseguire il mapping e la conversione sull'origine.
Considerazioni sulla globalizzazione durante il mapping dei dati
Quando si pianifica di mappare e convertire i dati tra database e piattaforme, tenere in considerazione ciò che è supportato o non supportato da Oracle GoldenGate in termini di globalizzazione.
Conversione tra set di caratteri
Oracle GoldenGate esegue la conversione tra i set di caratteri di origine e di destinazione se sono diversi, in modo che i nomi degli oggetti e i dati delle colonne vengano confrontati, mappati e manipolati correttamente da un database all'altro. Per una lista dei set dei caratteri supportati, vedere Set di caratteri supportati.
Per garantire una rappresentazione accurata dei caratteri da un database all'altro, è necessario che:
-
Il set di caratteri del database di destinazione deve essere un superset o equivalente al set di caratteri del database di origine. Equivalente indica un valore diverso, ma con lo stesso set di caratteri. Ad esempio, Shift-JIS e EUC-JP tecnicamente non sono completamente uguali, ma hanno gli stessi caratteri nella maggior parte dei casi.
-
Se le applicazioni client utilizzano set di caratteri diversi, il set di caratteri del database deve essere anche un superset o un equivalente dei set di caratteri delle applicazioni client.
-
In molti database, tra cui Oracle, è possibile forzare un carattere in un database che non fa parte del set di caratteri. Oracle GoldenGate considera questo valore non valido e potrebbe non mappare correttamente questo carattere durante la replica dei dati. Per questi tipi di situazioni, è possibile utilizzare il parametro
REPLACEBADCHARcome descritto in Riferimento parametri e funzioni per Oracle GoldenGate.
In questa configurazione, ogni carattere viene rappresentato quando si esegue la conversione da un set di caratteri client o di origine al set di caratteri del database locale.
Un processo Replicat può supportare la conversione da un set di caratteri di origine a un set di caratteri di destinazione.
Nomi dell'oggetto del database
Oracle GoldenGate elabora i nomi di catalogo, schema, tabella e colonna nella lingua nativa in base alla codifica del set di caratteri dei database di origine e di destinazione. Questo supporto conserva i nomi, i simboli, i caratteri di accento e la distinzione tra maiuscole e minuscole a byte singolo e multibyte, tenendo conto delle impostazioni nazionali, ove disponibili, a tutti i livelli della gerarchia del database.
Dati colonna
Oracle GoldenGate supporta la conversione dei dati di colonna tra set di caratteri quando i dati sono contenuti nei tipi di colonna riportati di seguito.
-
Colonne di tipo carattere: da
CHAR/VARCHAR/CLOBaCHAR/VARCHAR/CLOBdi un altro set di caratteri e daCHAR/VARCHAR/CLOBa e daNCHAR/NVARCHAR/NCLOB. -
Colonne che contengono numeri basati su stringhe e dati di data e ora. Le conversioni di queste colonne vengono eseguite tra i dati EBCDIC z/OS e non-z/OS ASCII. La conversione non viene eseguita tra le versioni ASCII e ASCII di questi dati, né tra le versioni EBCDIC ed EBCDIC, perché i dati sono compatibili in questi casi.
Nota: Oracle GoldenGate supporta i dati dell'indicatore orario da
0001-01-03 00:00:00a9999-12-31 23:59:59. Se un indicatore orario viene convertito da GMT all'ora locale, questi limiti si applicano anche all'indicatore orario risultante. Non è supportato un valore di mese zero, campo giorno zero o valore di data zero totale. Ad esempio, non sono supportati valori quali 0000-00-00 00:00:00 o qualsiasi valore di data che includa un campo di tipo mese zero o giorno zero.
La conversione del set di caratteri per i dati delle colonne è limitata a un mapping diretto di una colonna di origine e di una colonna di destinazione nelle clausole COLMAP o USEDEFAULTS del parametro Replicat MAP. Un mapping diretto è un mapping nome-nome senza l'uso di una stored procedure o di una funzione di conversione delle colonne. Replicat esegue la conversione del set di caratteri. Nessuna conversione eseguita da Extract.
Conservazione della versione locale
Oracle GoldenGate tiene conto delle impostazioni nazionali del database durante il confronto dei nomi degli oggetti senza distinzione tra maiuscole e minuscole. Per un elenco delle impostazioni nazionali supportate, vedere Versioni locali supportate.
Supporto per sequenze di escape
Oracle GoldenGate supporta l'uso di una sequenza di escape per rappresentare una colonna stringa, un testo letterale o un nome oggetto nel file dei parametri. È possibile utilizzare una sequenza di escape se il sistema operativo non supporta il carattere richiesto, ad esempio un carattere di controllo, o per qualsiasi altro scopo che richieda un carattere che non può essere utilizzato in un file di parametri.
Una sequenza di escape può essere utilizzata in qualsiasi punto del file dei parametri, ma è particolarmente utile nei seguenti elementi all'interno di un'istruzione TABLE o MAP:
-
Nome oggetto
-
clausola
WHERE -
Clausola
COLMAPper assegnare un carattere Unicode a una colonna Unicode o per assegnare un carattere codificato nativo a una colonna. -
Funzioni di conversione delle colonne di Oracle GoldenGate all'interno di una clausola
COLMAP.
Oracle GoldenGate supporta i seguenti tipi di sequenza di escape:
-
Sequenza di escape Unicode
\uFFFF. È possibile utilizzare qualsiasi code pointUNICODEad eccezione delle coppie surrogate. -
sequenza di escape ottale
\377 -
sequenza di escape esadecimale
\xFF
Si applicano le regole riportate di seguito.
-
Se utilizzato per il mapping di un nome oggetto in
TABLEoMAP, non sono previste limitazioni. Ad esempio, la seguente specificaTABLEè valida:TABLE schema."\u3000ABC"; -
Se utilizzato con una funzione di mapping delle colonne, è possibile utilizzare qualsiasi codepoint, ma solo per una colonna
NCHAR/NVARCHAR. Per una colonnaCHAR/VARCHAR, il code point è limitato all'equivalente di ASCII a 7 bit. -
I tipi di dati di origine e di destinazione devono essere identici (ad esempio, da
NCHARaNCHAR). -
Iniziare ogni sequenza di escape con un solido inverso (punto codice
U+005C), seguito dal punto codice carattere. (Un solidus è più comunemente noto come simbolo di backslash.) Utilizzare la sequenza di escape, anziché il carattere effettivo, all'interno della stringa di input nell'istruzione parametro o nella funzione di conversione colonna.Nota: per specificare una barra rovesciata effettiva nel file dei parametri, specificare una barra rovesciata doppia. Ad esempio, la barra rovesciata viene trovata in
COL1: @STRFIND (COL1, '\' ).
Per utilizzare la sequenza di escape Unicode \uFFFF
-
La sequenza di escape Unicode
\uFFFFdeve iniziare con una minuscolau, seguita da esattamente quattro cifre esadecimali. -
Gli intervalli supportati sono i seguenti:
-
Da
0a9(daU+0030aU+0039) -
Da
AaF(daU+0041aU+0046) -
Da
aaf(daU+0061aU+0066)
-
\u20ac è la sequenza di escape Unicode per il segno di valuta Euro.
Nota: per un supporto multipiattaforma affidabile, utilizzare la sequenza di escape Unicode. Le sequenze di escape ottali ed esadecimali non sono standardizzate su diversi sistemi operativi.
Per utilizzare la sequenza di escape ottale \377
-
Deve contenere esattamente tre cifre ottali.
-
Gamme supportate:
-
L'intervallo per la prima cifra è compreso tra
0e3(daU+0030aU+0033) -
L'intervallo per la seconda e la terza cifra è compreso tra
0e7(daU+0030aU+0037)
\200è la sequenza di escape ottale per il segno di valuta Euro su Microsoft Windows -
Per utilizzare l'equenza di escape esadecimale \xFF
-
Deve iniziare con una minuscola
xseguita esattamente da due cifre esadecimali. -
Gamme supportate:
-
Da
0a9(daU+0030aU+0039) -
Da
AaF(daU+0041aU+0046) -
Da
aaf(daU+0061aU+0066)
-
\x80 è la sequenza di escape esadecimale per il segno di valuta Euro sulla pagina del codice di Microsoft Windows 1252 Latin1.
Mapping delle colonne mediante TABLE e MAP
Oracle GoldenGate fornisce il mapping delle colonne a livello di tabella e a livello globale. Il mapping di colonne predefinito viene fornito anche in assenza di regole di mapping di colonne esplicite.
Questa sezione contiene le linee guida riportate di seguito per il mapping delle colonne.
Caso di supporto e caratteri speciali nei nomi di colonna
Per impostazione predefinita, Oracle GoldenGate segue le regole SQL-92 per specificare nomi di colonna e valori letterali. Nei file dei parametri di Oracle GoldenGate, nelle funzioni di conversione, nelle uscite utente e nei comandi, i nomi delle colonne con distinzione tra maiuscole e minuscole devono essere racchiusi tra virgolette doppie se il database richiede virgolette doppie per applicare la distinzione tra maiuscole e minuscole. Per altri database con distinzione tra maiuscole e minuscole che non richiedono virgolette, è necessario specificare i nomi delle colonne con distinzione tra maiuscole e minuscole man mano che vengono memorizzati nel database. I valori devono essere racchiusi tra virgolette singole. Per ulteriori informazioni, vedere Differenziazione dei nomi di colonna con distinzione tra maiuscole e minuscole dai valori letterali.
Configurazione del mapping di colonne a livello di tabella con COLMAP
Se si utilizzano trail con descrizione automatica, qualsiasi colonna dell'oggetto di origine viene mappata allo stesso nome di colonna dell'oggetto di destinazione. È necessario gestire solo nomi di colonna diversi tra origine e destinazione o se è necessario trasformare una colonna.
Tuttavia, se non si utilizzano trail con descrizione automatica, il mapping predefinito viene eseguito in base all'ordine delle colonne e non al nome della colonna. Pertanto, la colonna 1 dell'origine sarà mappata alla colonna 1 dell'obiettivo, dalla colonna 2 alla colonna 2 e così via.
Utilizzare l'opzione COLMAP dei parametri MAP e TABLE per effettuare le operazioni riportate di seguito.
-
mappare le singole colonne di origine alle colonne di destinazione con nomi diversi.
-
specificare il mapping di colonne predefinito quando non è necessario un mapping di colonne esplicito.
-
Fornire istruzioni per selezionare, mappare, tradurre e spostare i dati da una colonna di origine in una colonna di destinazione.
Utilizzo di USEDEFAULTS per abilitare il mapping delle colonne predefinito
È possibile utilizzare l'opzione USEDEFAULTS di COLMAP per specificare il mapping automatico delle colonne predefinite per le colonne di origine e di destinazione corrispondenti con nomi identici. USEDEFAULTS consente di risparmiare tempo eliminando la necessità di mappare in modo esplicito ogni colonna di destinazione.
Il mapping predefinito fa sì che Oracle GoldenGate esegua il mapping di tali colonne e, se necessario, converta i tipi di dati in base al file delle definizioni dei dati. Non specificare il mapping predefinito per le colonne già mappate con un'istruzione di mapping esplicita.
L'esempio seguente di mapping di colonne illustra l'uso del mapping di colonne sia predefinito che esplicito per una tabella di origine ACCTBL e una tabella di destinazione ACCTTAB. La maggior parte delle colonne è uguale in entrambe le tabelle, ad eccezione delle seguenti differenze:
-
La tabella di origine ha una colonna
CUST_NAME, mentre la tabella di destinazione ha una colonnaNAME. -
Una colonna
PHONE_NOa dieci cifre nella tabella di origine corrisponde a colonneAREA_CODE,PHONE_PREFIXePHONE_NUMBERseparate nella tabella di destinazione. -
Le colonne
YY, MMeDDseparate nella tabella di origine corrispondono a una singola colonnaTRANSACTION_DATEnella tabella di destinazione.
Per risolvere queste differenze, USEDEFAULTS viene utilizzato per mappare automaticamente le colonne simili, mentre le funzioni di mapping e conversione esplicite vengono utilizzate per colonne diverse.
L'esempio seguente mostra il mapping delle colonne utilizzando l'opzione COLMAP dei parametri MAP e TABLE. Descrive il mapping della tabella di origine ACCTBL alla tabella di destinazione ACCTTAB.
MAP SALES.ACCTBL, TARGET SALES.ACCTTAB,
COLMAP ( USEDEFAULTS,
NAME = CUST_NAME,
TRANSACTION_DATE = @DATE ('YYYY-MM-DD', 'YY',YEAR, 'MM', MONTH, 'DD', DAY),
AREA_CODE = @STREXT (PHONE_NO, 1, 3),
PHONE_PREFIX = @STREXT (PHONE_NO, 4, 6),
PHONE_NUMBER = @STREXT (PHONE_NO, 7, 10)
)
;
Mapping colonne campione tabella 3
| Istruzione parametro | Descrizione |
|---|---|
COLMAP |
Inizia l'istruzione COLMAP. |
USEDEFAULTS, |
Mappa le colonne di origine così com'è quando i nomi delle colonne di destinazione sono identici. |
NAME = CUST_NAME, |
Mappa la colonna di origine CUST_NAME alla colonna di destinazione NAME. |
TRANSACTION_DATE = @DATE ('YYYY-MM-DD', 'YY', YEAR, 'MM', MONTH, 'DD', DAY), |
Converte la data della transazione dalle colonne della data di origine alla colonna di destinazione TRANSACTION_DATE utilizzando la funzione di conversione della colonna @DATE. |
AREA_CODE = @STREXT (PHONE_NO, 1, 3), PHONE_PREFIX = @STREXT (PHONE_NO, 4, 6), PHONE_NUMBER = @STREXT (PHONE_NO, 7, 10)) ; |
Converte la colonna di origine PHONE_NO nelle colonne di destinazione separate di AREA_CODE, PHONE_PREFIX e PHONE_NUMBER utilizzando la funzione di conversione della colonna @STREXT. |
Per ulteriori informazioni sulle regole seguite da Oracle GoldenGate per il mapping delle colonne predefinito, vedere Informazioni sul mapping delle colonne predefinito.
Specifica delle colonne da mappare nella clausola COLMAP
La sintassi COLMAP è la seguente:
COLMAP ([USEDEFAULTS, ] target_column = source_expression)
In questa sintassi, target_column è il nome della colonna di destinazione e source_expression. Di seguito sono riportati alcuni esempi di source_expressions.
-
Nome di una colonna di origine, ad esempio
ORD_DATE. -
Costante numerica, come
123. -
Costante stringa racchiusa tra virgolette singole, ad esempio
'ABCD'. -
Espressione che utilizza una funzione di conversione delle colonne di Oracle GoldenGate. All'interno di un'istruzione
COLMAP, è possibile utilizzare qualsiasi funzione di conversione delle colonne di Oracle GoldenGate per trasformare i dati per le colonne mappate, ad esempio:@STREXT (COL1, 1, 3) -
Di seguito è riportato un esempio di utilizzo di
BEFORE column_name:BEFORE ORD_DATE -
Di seguito è riportato un esempio di utilizzo di
AFTER column_name:AFTER ORD_DATE. Questa è l'opzione predefinita se viene elencato un nome di colonna.
Se il mapping delle colonne include colonne con distinzione tra maiuscole e minuscole di tipi di database diversi, specificare ogni colonna così come viene memorizzata nel database.
-
Se il database richiede virgolette doppie per applicare la distinzione tra maiuscole e minuscole, specificare il nome della colonna con distinzione tra maiuscole e minuscole tra virgolette.
-
Se il database fa distinzione tra maiuscole e minuscole senza richiedere virgolette, specificare il nome della colonna così come viene memorizzato nel database.
Di seguito è riportato un mapping tra una colonna di destinazione in un Oracle AI Database e una colonna di origine in un database SQL Server con distinzione tra maiuscole e minuscole.
COLMAP ("ColA" = ColA)
Per ulteriori informazioni sulla specifica dei nomi in Oracle GoldenGate, vedere Specifica dei nomi oggetto nell'input di Oracle GoldenGate.
Vedere Considerazioni sulla globalizzazione durante il mapping dei dati per considerazioni sulla globalizzazione durante il mapping delle colonne di origine e di destinazione in database con set di caratteri e impostazioni nazionali diversi.
Evitare di utilizzare COLMAP per mappare un valore a una colonna chiave (che fa sì che l'operazione diventi un aggiornamento della chiave primaria). La clausola WHERE utilizzata da Oracle GoldenGate per individuare la riga di destinazione non utilizzerà l'immagine corretta prima della colonna chiave. Verrà invece utilizzata l'immagine successiva. Ciò causerà errori se si utilizzano funzioni basate sulla colonna chiave, ad esempio un'istruzione SQLEXEC.
Limiti mapping colonne
Di seguito sono riportate le limitazioni per il mapping delle colonne.
-
Le colonne
LOBnon possono essere utilizzate nelle colonneFILTER,WHEREo comesource_expressionin un'istruzioneCOLMAP. Le colonneLOBsonoBLOB,CLOB,NCLOB,XMLType, tipi di dati definiti dall'utente, tabelle nidificate,VARRAYse altri tipi di dati speciali. -
Se la colonna di origine contiene più di 4000 byte, non può essere utilizzata nelle routine di trasformazione, poiché il valore viene memorizzato nel trail come record
LOB. Ad esempio,VARCHAR2(4000 CHAR) in Oracle e il set di caratteri giapponese viene memorizzato come 3 byte per ogni carattere. Ciò implica che la colonna potrebbe avere una lunghezza di 12000 byte e che Oracle GoldenGate memorizzerebbe questo valore come campoLOB. -
L'istruzione SQL completa che verrà eseguita da Oracle GoldenGate supererà i 4 MB. Ad esempio, se si dispone di una tabella con migliaia di colonne
VARCHAR2(4000)e si desidera inserire 4000 byte in ciascuna tabella, ciò potrebbe causare il superamento della dimensione massima di 4 MB dell'istruzione SQL totale che verrà eseguita da Oracle GoldenGate.
Configurazione del mapping di colonne globali con COLMATCH
Utilizzare il parametro COLMATCH per creare regole globali per il mapping delle colonne. Con COLMATCH, è possibile eseguire il mapping tra tabelle strutturate in modo simile con nomi di colonna diversi per gli stessi set di dati. COLMATCH fornisce un modo più conveniente per mappare le colonne di questo tipo rispetto all'utilizzo del mapping a livello di tabella con una clausola COLMAP nelle singole istruzioni TABLE o MAP.
La distinzione tra maiuscole e minuscole è supportata come indicato di seguito.
-
Per MySQL, SQL Server se il database fa distinzione tra maiuscole e minuscole,
COLMATCHcerca una corrispondenza esatta tra maiuscole e minuscole e nome, indipendentemente dal fatto che un nome venga specificato tra virgolette. -
Per i database Oracle AI Database e Db2, in cui i nomi possono essere con distinzione tra maiuscole e minuscole o senza distinzione tra maiuscole e minuscole nello stesso database e le virgolette doppie sono necessarie per mostrare la distinzione tra maiuscole e minuscole,
COLMATCHrichiede una corrispondenza esatta tra maiuscole e minuscole quando un nome è racchiuso tra virgolette nel database.
Sintassi
COLMATCH
{NAMES target_column = source_column |
PREFIX prefix |
SUFFIX suffix |
RESET}
| Argomento | Descrizione |
|---|---|
NAMES target_column = source_column |
Mappe basate sui nomi delle colonne. Inserite le virgolette doppie nel nome della colonna se fa distinzione tra maiuscole e minuscole e il database richiede virgolette per applicare la distinzione tra maiuscole e minuscole. Per questi tipi di database, Oracle GoldenGate considera senza distinzione tra maiuscole e minuscole un nome di colonna senza virgolette. Per i database che supportano la distinzione tra maiuscole e minuscole senza richiedere virgolette, specificare il nome della colonna così come viene memorizzato nel database. Se COLMATCH si trova tra colonne di tipi di database diversi, assicurarsi che i nomi riflettano la rappresentazione appropriata delle maiuscole e minuscole per ciascuno di essi. Ad esempio, di seguito viene specificato un nome di colonna di destinazione con distinzione tra maiuscole e minuscole "aBc" in Oracle AI Database e un nome di colonna di origine con distinzione tra maiuscole e minuscole aBc in un database SQL Server con distinzione tra maiuscole e minuscole: COLMATCH NAMES "aBc" = aBc. |
PREFIX prefix / SUFFIX suffix |
Ignora il prefisso o il suffisso del nome specificato. Inserire le virgolette doppie nel prefisso o nel suffisso se il database richiede virgolette per applicare la distinzione tra maiuscole e minuscole, ad esempio "P_". Per questi tipi di database, un prefisso o un suffisso senza virgolette viene considerato senza distinzione tra maiuscole e minuscole. Per i database che supportano la distinzione tra maiuscole e minuscole senza richiedere virgolette, specificare il prefisso o il suffisso mentre è memorizzato nel database. Ad esempio, "P_" specifica un prefisso maiuscolo P. Nell'esempio seguente viene specificato un prefisso senza distinzione tra maiuscole e minuscole da ignorare: COLMATCH PREFIX p_. Il nome della colonna target P_ABC è mappato al nome della colonna di origine ABC e il nome della colonna target P_abc è mappato al nome della colonna di origine abc. Nell'esempio seguente viene specificato un suffisso con distinzione tra maiuscole e minuscole da ignorare: SUFFIX "_k". Il nome della colonna target ABC_k è mappato al nome della colonna di origine ABC e il nome della colonna target "abc_k" è mappato al nome della colonna di origine abc. |
RESET |
Disattiva le regole COLMATCH definite in precedenza per le successive istruzioni TABLE o MAP. |
Nell'esempio seguente viene illustrato quando utilizzare COLMATCH. Le tabelle di origine e di destinazione sono identiche, ad eccezione di tabelle leggermente diverse e il database names.The a colonne non fa distinzione tra maiuscole e minuscole.
| Tabella ACCT | Tabella ORD |
|---|---|
CUST_CODE CUST_NAME CUST_ADDR PHONE S_REP S_REPCODE |
CUST_CODE CUST_NAME ORDER_ID ORDER_AMT S_REP S_REPCODE |
| Tabella conto cliente | Tabella ORDINE |
|---|---|
CUSTOMER_CODE CUSTOMER_NAME CUSTOMER_ADDRESS PHONE REP REPCODE |
CUSTOMER_CODE CUSTOMER_NAME ORDER_ID ORDER_AMT REP REPCODE |
Per mappare le colonne di origine alle colonne di destinazione in questo esempio, nonché per gestire le mappe successive per altre tabelle, la sintassi è la seguente:
COLMATCH NAMES CUSTOMER_CODE = CUST_CODE
COLMATCH NAMES CUSTOMER_NAME = CUST_NAME
COLMATCH NAMES CUSTOMER_ADDRESS = CUST_ADDR
COLMATCH PREFIX S_
MAP SALES.ACCT, TARGET SALES.ACCOUNT, COLMAP (USEDEFAULTS);
MAP SALE.ORD, TARGET SALES.ORDER, COLMAP (USEDEFAULTS);
COLMATCH RESET
MAP SALES.REG, TARGET SALE.REG;
MAP SALES.PRICE, TARGET SALES.PRICE;
In base alle regole dell'esempio, si verifica quanto riportato di seguito.
-
I dati vengono mappati dalle colonne
CUST_CODEnelle tabelleACCTeORDdi origine alle colonneCUSTOMER_CODEnelle tabelleACCOUNTeORDERdi destinazione. -
Il prefisso
S_verrà ignorato. -
Le colonne con gli stessi nomi, ad esempio le colonne
PHONEeORDER_AMT, vengono mappate automaticamente medianteUSEDEFAULTSsenza richiedere regole esplicite. Per ulteriori informazioni, vedere Informazioni sul mapping delle colonne predefinito. -
Il precedente mapping di colonne globali è disattivato per le tabelle
REGePRICE. Le colonne di origine e di destinazione in tali tabelle vengono mappate automaticamente perché tutti i nomi sono identici.
Introduzione alla mappatura delle colonne predefinita
Per gli trail con descrizione automatica, se non esiste un mapping di colonne esplicito, utilizzando COLMATCH o COLMAP, Oracle GoldenGate esegue il mapping delle colonne di origine e di destinazione per impostazione predefinita in base alle regole riportate di seguito.
Ciò non si applica se si utilizza SOURCEDEFS o TARGETDEFS.
-
Se viene trovata una colonna di origine il cui nome e il cui caso corrispondono esattamente a quelli della colonna di destinazione, i due vengono mappati.
-
Se non viene trovata alcuna corrispondenza tra maiuscole e minuscole, viene utilizzato il mapping dei nomi di fallback. Il mapping di fallback esegue un mapping di tabelle di destinazione senza distinzione tra maiuscole e minuscole per trovare una corrispondenza di nome. La corrispondenza dei nomi di colonna inesatta viene applicata utilizzando i nomi con maiuscole. Questo comportamento è controllato dal parametro
GLOBALSNAMEMATCHIGNORECASE. È possibile disabilitare la corrispondenza del nome di fallback con il parametroNAMEMATCHEXACToppure mantenerlo abilitato ma con un messaggio di avvertenza utilizzando il parametroNAMEMATCHNOWARNING. -
Le colonne di destinazione che non corrispondono ad alcuna colonna di origine assumono valori predefiniti determinati dal database.
Se non è possibile eseguire il mapping predefinito, la colonna di destinazione viene impostata automaticamente su uno dei valori mostrati nella tabella seguente.
| Tipo di colonna | Valore |
|---|---|
| Numerico | Zero (0) |
Carattere o VARCHAR |
Spazi |
| Data o ora | Data e orario correnti |
Colonne che possono assumere un valore NULL |
Nullo |
Conversioni tipo dati
Informazioni sul mapping dei tipi di dati in Oracle GoldenGate.
Colonne numeriche
Le colonne numeriche vengono convertite in modo da corrispondere al tipo e alla scala della colonna di destinazione. Se la scala della colonna di destinazione è inferiore a quella dell'origine, il numero viene troncato a destra. Se la scala della colonna di destinazione è maggiore di quella dell'origine, il numero viene riempito con zeri a destra.
Per ulteriori informazioni, è possibile specificare un valore di sostituzione per i dati numerici non validi rilevati durante il mapping delle colonne di numeri utilizzando il parametro REPLACEBADNUM.
Colonne tipo di carattere
Le colonne di tipo carattere possono accettare tipi di dati basati su caratteri, ad esempio VARCHAR, numerici in formato stringa, data e ora in formato stringa e valori letterali stringa. Se la scala della colonna di destinazione è inferiore a quella dell'origine, la colonna viene troncata a destra. Se la scala della colonna di destinazione è maggiore di quella dell'origine, la colonna viene riempita con spazi a destra.
I valori devono essere racchiusi tra virgolette singole.
È possibile controllare la risposta del processo Oracle GoldenGate quando non esiste un code point valido per il set di caratteri di origine o di destinazione durante il mapping delle colonne di caratteri utilizzando il parametro REPLACEBADCHAR per ulteriori informazioni.
Colonne data/ora
Le colonne Datetime (DATE, TIME e TIMESTAMP possono accettare le colonne Datetime e Carattere, nonché i valori letterali stringa. I valori devono essere racchiusi tra virgolette singole. Per mappare una colonna di caratteri a una colonna di data e ora, assicurarsi che sia conforme al formato SQL esterno di Oracle GoldenGate di YYYY-MM-DD HH:MI:SS.FFFFFF.
Oracle GoldenGate supporta i dati dell'indicatore orario da 0001-01-03 00:00:00 a 9999-12-31 23:59:59. Se un indicatore orario viene convertito da GMT all'ora locale, questi limiti si applicano anche all'indicatore orario risultante. A seconda del fuso orario, la conversione può aggiungere o sottrarre ore, il che può causare il superamento dell'indicatore orario del limite supportato inferiore o superiore.
La precisione richiesta varia a seconda del tipo di dati e della piattaforma di destinazione. Se la scala della colonna di destinazione è inferiore a quella dell'origine, i dati vengono troncati a destra. Se la scala della colonna di destinazione è maggiore di quella dell'origine, la colonna viene estesa a destra con i valori per la data e l'ora correnti.
Selezione e filtro delle righe
Il filtro può essere eseguito solo sulle colonne disponibili per Oracle GoldenGate. In TRANLOG Extract Oracle GoldenGate ha accesso a tutte le colonne presenti nei redo log e nel database. Se le colonne non si trovano nei redo log, devono essere recuperate in modo esplicito (utilizzando FETCHCOLS) per poterle filtrare. Nella pompa Extract e in Replicat, le colonne devono essere disponibili nel file trail. Per questo motivo, qualsiasi colonna che si desidera utilizzare in una clausola FILTER o WHERE deve essere loggata in modo esplicito utilizzando ADD TRANDATA COLS e si deve mantenere l'impostazione predefinita di LOGALLSUPCOLS.
Per filtrare o selezionare le righe per l'estrazione o la replica, utilizzare le clausole FILTER e WHERE dei parametri TABLE e MAP.
La clausola FILTER offre più funzionalità della clausola WHERE perché è possibile utilizzare una qualsiasi delle funzioni di conversione delle colonne di Oracle GoldenGate, mentre la clausola WHERE accetta gli operatori WHERE di base.
Selezione delle righe con una clausola FILTER
Utilizzare una clausola FILTER per selezionare le righe in base a un valore numerico utilizzando operatori di base o una o più funzioni di conversione delle colonne di Oracle GoldenGate.
Nota: per filtrare una colonna in base a una stringa, utilizzare una delle funzioni stringa di Oracle GoldenGate o una clausola WHERE.
La sintassi per FILTER in un'istruzione TABLE è la seguente:
TABLE source_table
, FILTER (
[, ON INSERT | ON UPDATE| ON DELETE]
[, IGNORE INSERT | IGNORE UPDATE | IGNORE DELETE]
, filter_clause);
La sintassi per FILTER in un'istruzione MAP è la seguente e include un'opzione di gestione degli errori.
MAP source_table, TARGET target_table,
, FILTER (
[, ON INSERT | ON UPDATE| ON DELETE]
[, IGNORE INSERT | IGNORE UPDATE | IGNORE DELETE]
[, RAISEERROR error_number]
, filter_clause);
Gli elementi validi della clausola FILTER sono i seguenti:
-
Funzione di conversione delle colonne di Oracle GoldenGate. Queste funzioni sono integrate in Oracle GoldenGate in modo da poter eseguire test, manipolare i dati, recuperare valori e così via. Per ulteriori informazioni sulle funzioni di conversione di Oracle GoldenGate, vedere Test e trasformazione dei dati.
-
Numeri
-
Colonne contenenti numeri
-
Funzioni che restituiscono numeri
-
Operatori aritmetici:
-
+(più) -
-(meno) -
*(moltiplicazione) -
/(divisione) -
%(remainder)
-
-
Operatori del confronto:
-
>(maggiore di) -
>=(maggiore o uguale a) -
<(inferiore a) -
<=(minore o uguale a) -
=(uguale) -
<>(diverso) -
I risultati derivati dai confronti possono essere zero (indicare
FALSE) o diverso da zero (indicareTRUE).
-
-
Parentesi (per il raggruppamento dei risultati nell'espressione)
-
Operatori di congiunzione:
AND,OR
Utilizzare le opzioni FILTER riportate di seguito per specificare le operazioni SQL interessate da una clausola di filtro. È possibile combinare una qualsiasi di queste opzioni.
ON INSERT | ON UPDATE | ON DELETE IGNORE INSERT | IGNORE UPDATE | IGNORE DELETE
Utilizzare l'opzione RAISEERROR di FILTER nel parametro MAP per generare un errore definito dall'utente quando il filtro non riesce. Questa opzione è utile quando è necessario attivare un evento in risposta all'errore.
Utilizzare la funzione @RANGE all'interno di una clausola FILTER per distribuire il carico di lavoro di elaborazione tra più istruzioni MAP o TABLE.
Ecco un esempio:
REPERROR (9999, EXCEPTION)
MAP OWNER.SRCTAB, TARGET OWNER.TARGTAB,
SQLEXEC (ID CHECK, ON UPDATE, QUERY ' SELECT COUNT FROM TARGTAB WHERE PKCOL = :P1 ', PARAMS (P1 = PKCOL)),
FILTER (BALANCE > 15000),
FILTER (ON UPDATE, @BEFORE (COUNT) = CHECK.COUNT)
;
MAP OWNER.SRCTAB, TARGET OWNER.TARGEXC,
EXCEPTIONSONLY,
COLMAP ( USEDEFAULTS,
ERRTYPE = 'UPDATE FILTER FAILED'
)
;
Tabella 4 Utilizzo di più istruzioni FILTER
| File dei parametri | Descrizione |
|---|---|
REPERROR (9999, EXCEPTION) |
Genera un'eccezione per l'errore specificato. |
MAP OWNER.SRCTAB, TARGET OWNER.TARGTAB, |
Avvia l'istruzione MAP. |
SQLEXEC (ID CHECK, ON UPDATE, QUERY ' SELECT COUNT FROM TARGTAB ' 'WHERE PKCOL = :P1 ', PARAMS (P1 = PKCOL)), |
Esegue una query per recuperare il valore corrente della colonna COUNT ogni volta che viene rilevato un aggiornamento. Esiste anche un'opzione BEFOREFILTER che consente di eseguire la query o la stored procedure prima di elaborare la clausola FILTER. Ciò consente di utilizzare i valori della parte SQLEXEC all'interno di FILTER in runtime. |
FILTER (BALANCE > 15000), |
Utilizza una clausola FILTER per selezionare le righe in cui il saldo è maggiore di 15000. |
FILTER (ON UPDATE, @BEFORE (COUNT) = CHECK.COUNT) |
Utilizza un'altra clausola FILTER per garantire che il valore della colonna COUNT di origine prima di un aggiornamento corrisponda al valore nella colonna di destinazione prima di applicare l'aggiornamento di destinazione. |
; |
Il punto e virgola conclude l'istruzione MAP. |
MAP OWNER.SRCTAB, TARGET OWNER.TARGEXC, EXCEPTIONSONLY, COLMAP (USEDEFAULTS, ERRTYPE = 'UPDATE FILTER FAILED'); |
Designa un'istruzione eccezioni MAP. La clausola REPERROR per l'errore 9999 garantisce l'esecuzione del mapping delle eccezioni a TARGEXC. |
Esempio 9-5 Chiamata della funzione @COMPUTE
Nell'esempio seguente viene chiamata la funzione @COMPUTE per estrarre i record in cui il prezzo moltiplicato per l'importo supera 10.000.
MAP SALES.TCUSTORD, TARGET SALES.TORD,
FILTER (@COMPUTE (PRODUCT_PRICE * PRODUCT_AMOUNT) > 10000);
Esempio 9-6 Chiamata della funzione @STREQ
Di seguito viene utilizzata la funzione @STREQ per estrarre i record in cui il valore di una colonna di caratteri è 'JOE'.
TABLE ACCT.TCUSTORD, FILTER (@STREQ ("Name", 'joe') > 0);
Esempio 9-7 Selezione di record
Di seguito vengono selezionati i record in cui la colonna AMOUNT è maggiore di 50 ed esegue il filtro nelle operazioni UPDATE e DELETE.
TABLE ACT.TCUSTORD, FILTER (ON UPDATE, ON DELETE, AMOUNT > 50);
Esempio 9-8 Utilizzo della funzione @RANGE
(file dei parametri Replicat group 1)
MAP sales.acct, TARGET sales.acct, FILTER (@RANGE (1, 2, ID));
(file dei parametri Replicat group 2)
MAP sales.acct, TARGET sales.acct, FILTER (@RANGE (2, 2, ID));
È possibile combinare più clausole FILTER in un'istruzione MAP o TABLE, come illustrato nella Tabella 9-4, che mostra parte di un file dei parametri Replicat. Oracle GoldenGate esegue i filtri nell'ordine elencato, fino a quando uno non riesce o fino a quando tutti non vengono passati. Se un filtro fallisce, tutti falliscono.
Selezione di righe con una clausola WHERE
Utilizzare uno qualsiasi degli elementi della Tabella 9-5 in una clausola WHERE per selezionare o escludere righe (o entrambe) in base a un'istruzione condizionale. Ogni clausola WHERE deve essere racchiusa tra parentesi. I valori devono essere racchiusi tra virgolette singole.
Tabella 5 Operatori consentiti WHERE
| Elemento | Esempi |
|---|---|
| Nomi colonna | PRODUCT_AMT |
| valori numerici | -123, 5500.123 |
| Stringhe letterali | 'AUTO', 'Ca' |
| Test di colonna incorporati | @NULL, @PRESENT, @ABSENT (la colonna è nulla, presente o assente nella riga). Questi test sono integrati in Oracle GoldenGate. Vedere Considerazioni sulla selezione delle righe con FILTER e WHERE. |
| operatori di confronto | =, <>, >, <, >=, <= |
| Operatori congiuntivi | AND, OR |
| Parentesi di raggruppamento | Utilizzare parentesi aperte e chiuse ( ) per il raggruppamento logico di più elementi. |
Oracle GoldenGate non supporta FILTER per le colonne con un set di caratteri a più byte o un set di caratteri incompatibile con il set di caratteri del sistema operativo locale.
Gli operatori aritmetici e i tipi di dati a virgola mobile non sono supportati da WHERE. Per utilizzare condizioni di selezione più complesse, utilizzare una clausola FILTER o una routine di user exit.
La sintassi per WHERE è identica nelle istruzioni TABLE e MAP:
TABLE table, WHERE (clause);
MAP source_table, TARGET target_table, WHERE (clause);
Considerazioni per la selezione di righe con FILTRO e DOVE
I seguenti suggerimenti consentono di creare una clausola di selezione corretta. Nota: negli esempi riportati in questa sezione viene utilizzato un database senza distinzione tra maiuscole e minuscole.
Garantire la disponibilità dei dati per i filtri
Se il database registra solo i valori per le colonne modificate nel log delle transazioni, possono verificarsi errori se i criteri di selezione fanno riferimento a una qualsiasi delle colonne invariate. Oracle GoldenGate ignora tali operazioni di riga, le restituisce al file di scarto ed emette un'avvertenza.
Per evitare errori di colonna mancante, creare le condizioni di selezione come indicato di seguito.
-
Utilizzare solo colonne chiave primaria come criteri di selezione, se possibile.
-
Rendere disponibili i valori di colonna obbligatori abilitando il log supplementare per tali colonne. In alternativa, è possibile utilizzare l'opzione
FETCHCOLSoFETCHCOLSEXCEPTdel parametroTABLE. Queste opzioni sono valide per tutti i database supportati. Esegue una query sul database per recuperare i valori se non sono presenti nel log. Per recuperare i valori prima dell'esecuzione della clausolaFILTERoWHERE, includere l'opzioneFETCHBEFOREFILTERnell'istruzioneTABLEprima della clausolaFILTERoWHERE. Ad esempio:
TABLE DEMO.PEOPLE, FETCHBEFOREFILTER, FETCHCOLS (age), FILTER (age > 50);
- Verificare prima la presenza di una colonna, quindi il valore della colonna. Per verificare la presenza di una colonna, utilizzare la sintassi seguente.
column_name {= | <>} {@PRESENT | @ABSENT}
L'esempio seguente restituisce tutti i record quando la colonna amount supera 10.000 e non causa l'eliminazione di un record quando amount è assente.
WHERE (amount = @PRESENT AND amount > 10000)
Confronto dei valori di colonna
Per garantire la corrispondenza degli elementi utilizzati in un confronto, confrontare i tipi di colonna appropriati:
-
Colonne di caratteri per stringhe letterali.
-
Colonne numeriche a valori numerici, che possono includere un segno e un punto decimale.
-
Colonne di data e ora in stringhe letterali, utilizzando il formato in cui la colonna viene recuperata dall'applicazione.
Test per valori NULL
Per valutare le colonne per i valori NULL, utilizzare la sintassi seguente.
column {= | <>} @NULL
Di seguito viene restituito TRUE se il valore della colonna è NULL e quindi la riga viene replicata. Restituisce FALSE per tutti gli altri casi, inclusa una colonna mancante nel record.
WHERE (amount = @NULL)
Quanto segue restituisce TRUE solo se la colonna è presente nel record e non è NULL.
WHERE (amount = @PRESENT AND amount <> @NULL)
Nota: se un valore nel trail contiene più di 4000 byte, la funzione @NULL restituirà TRUE.
Recupero dei valori precedenti e successivi
Per le operazioni di aggiornamento ed eliminazione, può essere utile recuperare i valori BEFORE delle colonne di origine (i valori prima dell'aggiornamento). Per gli inserimenti, tutti i valori di colonna vengono considerati immagini AFTER.
Questi valori vengono memorizzati nel trail e possono essere utilizzati nei filtri e nei mapping delle colonne. È ad esempio possibile
-
Recuperare l'immagine precedente di una riga come parte di una specifica di mapping delle colonne in un'istruzione
MAPdelle eccezioni e mappare tali valori a una tabella delle eccezioni da utilizzare nelle routine di test o risoluzione dei problemi di risoluzione dei conflitti. -
Eseguire calcoli delta. Ad esempio, se una tabella contiene una colonna
Balance, è possibile calcolare il risultato netto di una determinata transazione sottraendo il saldo originale dal nuovo saldo, come nell'esempio riportato di seguito.MAP "owner"."src", TARGET "owner"."targ", COLMAP (PK1 = PK1, delta = balance - @BEFORE (balance));Nota: l'esempio precedente indica un database con distinzione tra maiuscole e minuscole, ad esempio Oracle. I nomi delle tabelle sono racchiusi tra virgolette per riflettere la distinzione tra maiuscole e minuscole.
Per fare riferimento al valore precedente
-
Utilizzare la funzione di conversione della colonna
@BEFOREcon il nome della colonna per la quale si desidera un valore precedente, come indicato di seguito.@BEFORE (column_name) -
Utilizzare il parametro
GETUPDATEBEFORESnel file dei parametri Extract per acquisire prima le immagini del record transazione oppure utilizzarlo nel file dei parametri Replicat per utilizzare l'immagine precedente in un mapping o in un filtro di colonne. Se si utilizza la funzione CDR (Conflict Resolution and Detection), è possibile utilizzare l'opzioneGETBEFORECOLSdiTABLE. Per utilizzare questi parametri, tutte le colonne devono essere presenti nel log delle transazioni. Se il database registra solo i valori delle colonne modificate, l'uso della funzione@BEFOREpotrebbe comportare la mancanza di una colonna e la mappa delle colonne viene eseguita come se la colonna non fosse presente nel record. Fare riferimento alla sezione Assegnazione della disponibilità dei dati per i filtri per assicurarsi che i valori delle colonne siano disponibili.Oracle GoldenGate fornisce anche la funzione
@AFTERda recuperare dopo i valori quando necessario per l'applicazione di filtri, per l'uso nelle funzioni di conversione o per altri scopi. Vedere@BEFOREe@AFTERin Riferimento parametri e funzioni per Oracle GoldenGate.
Selezione delle colonne
Per controllare quali colonne di una tabella di origine vengono estratte da Oracle GoldenGate, utilizzare le opzioni COLS e COLSEXCEPT del parametro TABLE. Utilizzare COLS per selezionare le colonne per l'estrazione e COLSEXCEPT per selezionare tutte le colonne ad eccezione di quelle designate da COLSEXCEPT.
La limitazione delle colonne estratte può essere utile quando una tabella di destinazione non contiene le stesse colonne della tabella di origine o quando le colonne contengono informazioni riservate, ad esempio un numero di identificazione personale o altre informazioni aziendali proprietarie.
Selezione e conversione di operazioni SQL
Per impostazione predefinita, Oracle GoldenGate acquisisce e applica le operazioni INSERT, UPDATE e DELETE. È possibile utilizzare i parametri riportati di seguito nel file dei parametri Extract o Replicat per controllare il tipo di operazioni elaborate, ad esempio solo inserimenti o solo inserimenti e aggiornamenti.
GETINSERTS | IGNOREINSERTS
GETUPDATES | IGNOREUPDATES
GETDELETES | IGNOREDELETES
È possibile convertire un tipo di operazione SQL in un altro utilizzando i seguenti parametri nel file dei parametri Replicat:
-
Utilizzare
INSERTUPDATESper convertire le operazioni di aggiornamento di origine da inserire nella tabella di destinazione. Ciò è utile per mantenere una cronologia delle transazioni in quella tabella. Il record del log delle transazioni deve contenere tutti i valori di colonna della tabella, non solo i valori modificati. Alcuni database non registrano i valori di riga completi nel log delle transazioni, ma solo i valori modificati. -
Utilizzare
INSERTDELETESper convertire tutte le operazioni di eliminazione di origine da inserire nella tabella di destinazione. Ciò è utile per conservare una cronologia di tutti i record presenti nel database di origine. -
Utilizzare
UPDATEDELETESper convertire le eliminazioni di origine in aggiornamenti sulla destinazione.
Utilizzo della cronologia delle transazioni
Oracle GoldenGate consente di conservare una cronologia delle modifiche apportate a un record di destinazione e di mappare le informazioni sull'operazione che ha causato ogni modifica. Questa cronologia può essere utile per creare un sistema di generazione report basato su transazioni che contiene un record separato per ogni operazione eseguita su una tabella, anziché contenere solo la versione più recente di ciascun record.
Ad esempio, la seguente serie di operazioni eseguite su una tabella di destinazione denominata CUSTOMER non lascerebbe traccia dell'ID di Dave. L'ultima operazione elimina il record, quindi non c'è modo di scoprire la cronologia del conto di Dave o il suo saldo finale.
Tabella 6 Cronologia operazioni per CLIENTE tabella
| Sequenza | Operazione | ID | BALANCE |
|---|---|---|---|
1 |
Insert |
Dave |
1000 |
2 |
Update |
Dave |
900 |
3 |
Update |
Dave |
1250 |
4 |
Delete |
Dave |
1250 |
Mantenere questa cronologia come una serie di record può essere utile in molti modi. Ad esempio, è possibile generare l'effetto netto delle transazioni.
Per implementare il reporting delle transazioni
-
Per preparare Extract all'acquisizione prima dei valori, utilizzare il parametro
GETUPDATEBEFORESnel file dei parametri Extract. Un valore precedente (o precedente all'immagine) è il valore esistente di una colonna prima di eseguire un aggiornamento. Prima delle immagini, abilitare Oracle GoldenGate per creare il record transazione. -
Per preparare Replicat a pubblicare tutte le operazioni come inserimenti, utilizzare il parametro
INSERTALLRECORDSnel file dei parametri Replicat. Ogni operazione in una tabella diventa un nuovo record in tale tabella. -
Per mappare la cronologia delle transazioni, utilizzare i valori restituiti dall'opzione
GGHEADERdella funzione di conversione della colonna@GETENV. Includere la funzione di conversione come espressione di origine in un'istruzioneCOLMAPnel parametroTABLEoMAP.
Utilizzando la serie di esempi di transazioni mostrate nella Tabella 9-6 è possibile creare le configurazioni dei parametri seguenti per generare una vista dei clienti più orientata alle transazioni, anziché lo stato più recente del database.
| Processo | Istruzioni parametri |
|---|---|
| Extract | GETUPDATEBEFORES TABLE ACCOUNT.CUSTOMER; |
| Replicat | INSERTALLRECORDS MAP SALES.CUSTOMER, TARGET SALES.CUSTHIST, COLMAP (TS = @GETENV ('GGHEADER', 'COMMITTIMESTAMP'), BEFORE_AFTER = @GETENV ('GGHEADER', 'BEFOREAFTERINDICATOR'), OP_TYPE = @GETENV ('GGHEADER', 'OPTYPE'), ID = ID, BALANCE = BALANCE); |
Nota: questo non è rappresentativo di un file di parametri completo per un processo Oracle GoldenGate. Si noti inoltre che questi esempi rappresentano un database senza distinzione tra maiuscole e minuscole.
Questa configurazione rende possibili query come le seguenti, che restituiscono la somma netta di ogni transazione insieme all'ora della transazione e all'ID cliente.
SELECT AFTER.ID, AFTER.TS, AFTER.BALANCE - BEFORE.BALANCE
FROM CUSTHIST AFTER, CUSTHIST BEFORE
WHERE AFTER.ID = BEFORE.ID AND AFTER.TS = BEFORE.TS AND
AFTER.BEFORE_AFTER = 'A' AND BEFORE.BEFORE_AFTER = 'B';