Utilizzo di EXCEPTIONSONLY
EXCEPTIONSONLY è valido per una coppia di tabelle di origine e di destinazione denominate e mappate uno a uno in modo esplicito in un'istruzione MAP, ovvero non possono esistere caratteri jolly. Per utilizzare EXCEPTIONSONLY, creare due istruzioni MAP per ogni tabella di origine per la quale si desidera utilizzare EXCEPTIONSONLY nella destinazione:
-
La prima, un'istruzione
MAPstandard, mappa la tabella di origine alla tabella di destinazione effettiva. -
La seconda, un'istruzione MAP eccezioni, mappa la tabella di origine alla tabella delle eccezioni (invece che alla tabella di destinazione). Un'istruzione
MAPdelle eccezioni viene eseguita immediatamente dopo un errore nella tabella di origine per inviare i valori delle righe alla tabella delle eccezioni.Per identificare un'istruzione
MAPcome istruzioneMAPdelle eccezioni, utilizzare le opzioniINSERTALLRECORDSeEXCEPTIONSONLY. L'istruzioneMAPdelle eccezioni deve seguire immediatamente l'istruzioneMAPnormale che contiene la stessa tabella di origine. Utilizzare una clausolaCOLMAPnell'istruzioneMAPdelle eccezioni se le colonne di origine e tabella delle eccezioni non sono identiche o se si desidera mappare informazioni aggiuntive a colonne aggiuntive nella tabella delle eccezioni, ad esempio informazioni acquisite mediante funzioni di conversione delle colonne oSQLEXEC.
Per ulteriori informazioni su questi parametri, vedere Riferimento su parametri e funzioni per Oracle GoldenGate.
-
Un'istruzione
MAPregolare che mappa la tabella di origineggs.equip_accountalla relativa tabella di destinazioneequip_account 2. -
Istruzione
MAPdelle eccezioni che associa la stessa tabella di origine alla tabella delle eccezioniggs.equip_account_exception.
In questo caso, sono state create quattro colonne aggiuntive, oltre alle stesse che la tabella stessa contiene:
DML_DATE
OPTYPE
DBERRNUM
DBERRMSG
Per popolare la colonna DML_DATE, la funzione di conversione della colonna @DATENOW viene utilizzata per ottenere la data e l'ora dell'operazione non riuscita e il risultato viene mappato alla colonna. Per popolare le altre colonne extra, la funzione @GETENV viene utilizzata per restituire il tipo di operazione, il numero di errore del database e il messaggio di errore del database.
L'opzione EXCEPTIONSONLY dell'istruzione MAP delle eccezioni comporta l'esecuzione dell'istruzione solo dopo un'operazione non riuscita nella tabella di origine. Impedisce che ogni operazione venga registrata nella tabella delle eccezioni.
Il parametro INSERTALLRECORDS fa sì che tutte le operazioni non riuscite per la tabella di origine specificata, indipendentemente dal tipo di operazione, vengano registrate nella tabella delle eccezioni come inserzioni. Nota: nella tabella delle eccezioni non possono essere presenti limitazioni relative a chiave primaria o indice univoco. In questo scenario sono possibili violazioni di univocità che generano errori.
Esempio 9-21 EXCEPTIONSONLY
Questo esempio mostra come utilizzare REPERROR con EXCEPTIONSONLY e un'istruzione MAP delle eccezioni. Questo esempio mostra solo i parametri correlati a REPERROR; per Replicat sono necessari anche altri parametri non correlati alla gestione degli errori.
REPERROR (DEFAULT, EXCEPTION)
MAP ggs.equip_account, TARGET ggs.equip_account2,
COLMAP (USEDEFAULTS);
MAP ggs.equip_account, TARGET ggs.equip_account_exception,
EXCEPTIONSONLY,
INSERTALLRECORDS
COLMAP (USEDEFAULTS,
DML_DATE = @DATENOW (),
OPTYPE = @GETENV ('LASTERR', 'OPTYPE'),
DBERRNUM = @GETENV ('LASTERR', 'DBERRNUM'),
DBERRMSG = @GETENV ('LASTERR', 'DBERRMSG'));
In questo esempio, il parametro REPERROR è impostato per la gestione degli errori DEFAULT e l'opzione EXCEPTION fa sì che il processo Replicat consideri le operazioni non riuscite come eccezioni e continui l'elaborazione.