Comment intercepter les ORA-02055, “distribués opération de mise à jour a échoué; la restauration nécessaire” et, éventuellement, obtenir à la cause racine
Dans une procédure stockée sur un serveur Oracle, je tente d'insérer un enregistrement dans une table, sur un deuxième serveur Oracle et il échoue à l'exception de "distribué opération de mise à jour a échoué; la restauration nécessaire"
Bien que mon code est enveloppé dans un COMMENCER de FIN d'EXCEPTION, le gestionnaire d'erreur ne parvient pas à intercepter l'erreur.
J'ai même jeté à l'intérieur d'un deuxième gestionnaire d'erreur avec aucun effet. Aucune idée de pourquoi je ne peux pas rattraper cette erreur. La Procédure se compile sans problème.
Mon principal objectif est d'intercepter l'erreur pour que je puisse retourner quelque chose d'utile à mon utilisateur. En plus j'ai envie d'aller à la racine de l'erreur, si possible.
Note 1: Si je dé-commenter la ligne qui pose la "Distance d'Erreur", puis il est pris comme prévu.
Note 2: La connexion au serveur distant est solide comme je peux l'interroger sans problème.
Les deux serveurs sont: Oracle Database 11g Release 11.2.0.3.0 - 64bit Production
BEGIN
begin
--raise_application_error( -20001, 'Remote Error' );
insert into RemoteSchema.RemoteObject@RemoteSystem
(field_one, field_two)
select value_one, value_two from dual;
exception
when others then
raise_application_error( -20000, 'Remote Error:' || sqlerrm );
end;
exception
when others then
raise_application_error( -20000, 'Caught Remote Error:' || sqlerrm );
end;
OriginalL'auteur AnthonyVO | 2012-09-12
Vous devez vous connecter pour publier un commentaire.
Après plus de débogage à un collègue de travail m'a aidé à repérer le problème. Le message d'erreur est source de confusion car la mise à jour a en fait réussi, mais que le succès signifie qu'il y a maintenant une transaction active avec un "distribué à jour".
Quand mon code a couru dans une autre trivial erreur, Oracle a soulevé le message d'erreur "distribué opération de mise à jour a échoué; la restauration nécessaire", parce qu'il y avait maintenant une transaction qui devait être annulée en premier avant que je puisse élever l'erreur suivante.
Dans mon débogage je n'ai pas vu le message complet qui aurait m'a envoyé dans la bonne direction.
OriginalL'auteur AnthonyVO