より良い質問は、SQL ServerからOracleにデータを移動して、正常に配信されたすべての行をMSSSから削除する最良の方法は何だと思いますか?
これらをループで実行して、一方に追加するときに、もう一方から削除するようにします。
挿入時に不明なランダムなエラーが発生した場合は、ソースレコードを削除しないようにします。
それが要点ですよね?
この種のデータ移動を処理し、分散トランザクションループの挿入/削除ごとにコミットするより良い方法があります。
ループの途中で最初にコミットするのは悪いことです。 Oracleでは、他のセッションでORA-01555エラーを発生させるのに適した方法です。ですから、可能であればそれは避けたいと思います。
次に、挿入時の合理的なエラーの考えられる原因を完全に知っておく必要があります。列の長さ、FK、英国に違反しています...挿入時に破損する可能性のあるものの有限リストがあります。表領域を拡張できないなどの大きな問題が発生すると、システムが停止する必要があります。そのためにトラップする必要はありません。しかし、私が述べたようなアプリケーションの問題は管理が簡単です。
これを書いているとしたら、OracleのLOGを使用してすべての行を一括挿入します。エラー 1つまたは少数の行のみが失敗したときに完全なロールバックを回避するため。
これで、失敗したすべての行と失敗した理由を含むテーブルができました。これで、SQL Server側で、失敗したIDのリストにないすべての行を削除できます。
同じことを達成しましたが、SLOW-BY-SLOWの代わりにSetベースの操作を使用しました。つまり、行ごとです。