Je pense que la meilleure question est :quelle est la meilleure façon de déplacer des données de SQL Server vers Oracle, ce qui supprime de MSSS chaque ligne livrée avec succès ?
Vous faites cela en boucle pour vous assurer que lorsque vous ajoutez à l'un, vous supprimez de l'autre.
Si une erreur aléatoire inconnue se produit sur l'insertion, vous éviterez de supprimer l'enregistrement source.
C'est l'essentiel, n'est-ce pas ?
Il existe de bien meilleures façons de gérer ce type de mouvement de données que de valider après chaque boucle de transaction distribuée d'insertion/suppression.
Tout d'abord, un commit au milieu d'une boucle est tout simplement mauvais. Dans Oracle, c'est un bon moyen de faire en sorte que d'autres sessions obtiennent des erreurs ORA-01555. Donc j'éviterais ça si possible.
Deuxièmement, vous devez absolument savoir quelles sont les causes possibles d'erreurs raisonnables lors de l'insertion. Vous violez une longueur de colonne, un FK, un UK... il y a une liste finie de ce qui pourrait casser lors de l'insertion. De grosses mauvaises pauses poilues comme Impossible d'étendre l'espace de table DEVRAIENT provoquer l'arrêt du système. Pas besoin de piéger pour ça. Mais les problèmes d'application comme je l'ai mentionné sont faciles à gérer.
Si j'écrivais ceci, j'insérerais en bloc toutes les lignes en utilisant le LOG d'Oracle ERREURS DANS pour éviter un ROLLBACK complet lorsqu'une ou plusieurs lignes échouent.
Vous avez maintenant une table qui contient chaque ligne ayant échoué et la raison pour laquelle elle a échoué. Vous pouvez maintenant, côté SQL Server, supprimer toutes les lignes PAS DANS la liste des ID ayant échoué.
Vous avez accompli la même chose mais avec des opérations basées sur Set au lieu de SLOW-BY-SLOW, oups, je veux dire ligne par ligne.