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 :
-
La première, une instruction
MAPstandard, met en correspondance la table source avec la table cible réelle. -
La seconde, une instruction MAP d'exceptions, met en correspondance la table source avec la table d'exceptions (au lieu de la table cible). Une instruction
MAPd'exception s'exécute immédiatement après une erreur sur la table source pour envoyer les valeurs de ligne à la table d'exceptions.Pour identifier une instruction
MAPen tant qu'instructionMAPd'exception, utilisez les optionsINSERTALLRECORDSetEXCEPTIONSONLY. L'instructionMAPdes exceptions doit immédiatement suivre l'instructionMAPstandard qui contient la même table source. Utilisez une clauseCOLMAPdans l'instructionMAPd'exceptions si les colonnes source et table d'exceptions ne sont pas identiques, ou si vous voulez mettre en correspondance des informations supplémentaires avec des colonnes supplémentaires dans la table d'exceptions, telles que des informations capturées au moyen de fonctions de conversion de colonne ouSQLEXEC.
Pour plus d'informations sur ces paramètres, reportez-vous à Référence des paramètres et des fonctions pour Oracle GoldenGate.
-
Une instruction
MAPstandard qui met en correspondance la table sourceggs.equip_accountavec sa table cibleequip_account 2. -
Instruction
MAPd'exception qui met en correspondance la même table source avec la table d'exceptionsggs.equip_account_exception.
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.