Usar uma transação autônoma para qualquer outra coisa que não seja o log que você deseja que seja preservado quando a transação pai é revertida é quase certamente um erro. Este não é um bom uso de uma transação autônoma.
O que acontece, por exemplo, se eu atualizar uma linha em
t1
mas minha transação reverte. O t2
as alterações já foram feitas e confirmadas para que não sejam revertidas. Isso geralmente significa que o t2
os dados agora estão incorretos. O ponto principal das transações é garantir que um conjunto de alterações seja atômico e seja completamente bem-sucedido ou completamente revertido. Permitir que o código seja parcialmente bem-sucedido quase nunca é uma boa ideia. Estou pressionado para ver o que usar uma transação autônoma compra você aqui. Muitas vezes, você verá pessoas usando transações autônomas incorretamente para contornar erros de gatilho mutantes. Mas o código que você postou não geraria um erro de gatilho mutante, a menos que houvesse um gatilho em nível de linha em
t2
que também estava tentando atualizar t1
ou algum mecanismo semelhante que estava introduzindo uma tabela mutante. Se for esse o caso, no entanto, usar uma transação autônoma geralmente é ainda pior porque a transação autônoma não pode ver as alterações feitas na transação pai, o que quase certamente faz com que o código se comporte de maneira diferente do que você deseja.