親トランザクションがロールバックしたときに保持したいロギング以外の目的で自律トランザクションを使用することは、ほぼ確実にエラーです。これは自律トランザクションの適切な使用法ではありません。
たとえば、t1
の行を更新するとどうなりますか しかし、私のトランザクションはロールバックします。 t2
変更はすでに行われ、コミットされているため、ロールバックされません。これは通常、t2
データが正しくなくなりました。トランザクションの全体的なポイントは、一連の変更がアトミックであり、完全に成功するか、完全に元に戻されるようにすることです。コードを部分的に成功させることは、ほとんどの場合良い考えではありません。
自律トランザクションを使用することで何がここであなたを買うのかを知るのは難しいです。トリガーエラーの変更を誤って回避するために自律トランザクションを誤って使用している人をよく目にします。ただし、投稿したコードでは、t2
に行レベルのトリガーがない限り、変更トリガーエラーは生成されません。 t1
も更新しようとしていました または、変更テーブルを導入していた同様のメカニズム。ただし、その場合、自律型トランザクションの使用は一般的にさらに悪化します。これは、自律型トランザクションが親トランザクションで行われている変更を確認できないため、コードが希望とは異なる動作をすることはほぼ確実です。