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.

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:

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.

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:

Oracle GoldenGate supporta i seguenti tipi di sequenza di escape:

Si applicano le regole riportate di seguito.

Per utilizzare la sequenza di escape Unicode \uFFFF

\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

Per utilizzare l'equenza di escape esadecimale \xFF

\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.

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:

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.

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.

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.

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.

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.

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 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:

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.

TABLE DEMO.PEOPLE, FETCHBEFOREFILTER, FETCHCOLS (age), FILTER (age > 50);
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:

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

Per fare riferimento al valore precedente

  1. Utilizzare la funzione di conversione della colonna @BEFORE con il nome della colonna per la quale si desidera un valore precedente, come indicato di seguito.

    @BEFORE (column_name)

  2. Utilizzare il parametro GETUPDATEBEFORES nel 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'opzione GETBEFORECOLS di TABLE. 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 @BEFORE potrebbe 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 @AFTER da recuperare dopo i valori quando necessario per l'applicazione di filtri, per l'uso nelle funzioni di conversione o per altri scopi. Vedere @BEFORE e @AFTER in 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:

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

  1. Per preparare Extract all'acquisizione prima dei valori, utilizzare il parametro GETUPDATEBEFORES nel 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.

  2. Per preparare Replicat a pubblicare tutte le operazioni come inserimenti, utilizzare il parametro INSERTALLRECORDS nel file dei parametri Replicat. Ogni operazione in una tabella diventa un nuovo record in tale tabella.

  3. Per mappare la cronologia delle transazioni, utilizzare i valori restituiti dall'opzione GGHEADER della funzione di conversione della colonna @GETENV. Includere la funzione di conversione come espressione di origine in un'istruzione COLMAP nel parametro TABLE o MAP.

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';