Utiliser EXCEPTIONSONLY

EXCEPTIONSONLY est valide pour une paire de tables source et cible explicitement nommées et mises en correspondance un à un dans une instruction MAP. Autrement dit, il ne peut pas y avoir de caractères génériques. Pour utiliser EXCEPTIONSONLY, créez deux instructions MAP pour chaque table source à laquelle vous souhaitez utiliser EXCEPTIONSONLY sur la cible :

Pour plus d'informations sur ces paramètres, reportez-vous à Référence des paramètres et des fonctions pour Oracle GoldenGate.

Dans ce cas, quatre colonnes supplémentaires ont été créées, en plus des colonnes que contient la table elle-même :

DML_DATE
OPTYPE
DBERRNUM
DBERRMSG

Pour remplir la colonne DML_DATE, la fonction de conversion de colonne @DATENOW est utilisée pour obtenir la date et l'heure de l'opération ayant échoué, et le résultat est mis en correspondance avec la colonne. Pour remplir les autres colonnes supplémentaires, la fonction @GETENV est utilisée pour renvoyer le type d'opération, le numéro d'erreur de base de données et le message d'erreur de base de données.

L'option EXCEPTIONSONLY de l'instruction MAP des exceptions entraîne l'exécution de l'instruction uniquement après l'échec d'une opération sur la table source. Elle empêche chaque opération d'être consignée dans la table des exceptions.

Le paramètre INSERTALLRECORDS entraîne la consignation de toutes les opérations ayant échoué pour la table source indiquée, quel que soit le type d'opération, dans la table des exceptions en tant qu'insertions. Remarque : il ne peut y avoir aucune restriction de clé primaire ou d'index unique sur la table d'exceptions. Des violations d'unicité sont possibles dans ce scénario et génèrent des erreurs.

Exemple 9-21 EXCEPTIONSONLY

Cet exemple montre comment utiliser REPERROR avec EXCEPTIONSONLY et une instruction MAP d'exception. Cet exemple montre uniquement les paramètres liés à REPERROR. D'autres paramètres non liés à la gestion des erreurs sont également requis pour le processus Replicat.

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

Dans cet exemple, le paramètre REPERROR est défini pour la gestion des erreurs DEFAULT, et l'option EXCEPTION amène le processus Replicat à traiter les opérations en échec comme des exceptions et à poursuivre le traitement.