Dado o seguinte trecho:
-- error checking omitted for brevity
begin tran
exec database1..my_stored_procedure
exec database2..my_other_stored_procedure
if (@@error <> 0)
rollback
commit
Em qual(is) log(s) de transações do banco de dados as informações transacionais serão inseridas?
Eu esperaria que ambos os logs obtivessem todos os dados, já que não faria sentido se você tentasse reproduzir database1
o log de transações e isso afetasse apenas aquele banco de dados. Eu também esperaria que você não conseguisse reproduzir database1
o log de transações em um servidor onde database2
não estava presente e vice-versa.
.. mas estou aberto a correções!
O log de transações não está registrando as instruções SQL que estão sendo executadas, como você pode esperar. Em vez disso, ele registra as alterações nos dados brutos em cada banco de dados, de forma independente.
É possível que um procedimento armazenado de um banco de dados esteja funcionando inteiramente no log de transações de outro banco de dados.
Ou para fazer alterações em ambos.
O que está registrado no log de transações são as alterações de dados reais , não as instruções SQL que as causaram. As entradas para cada arquivo de log de transações são totalmente independentes, exceto na medida em que o COMMIT é gravado nos dois arquivos de log ao mesmo tempo, uma vez que a transação é confirmada.
A mesma lógica se aplica se você tiver uma transação maior executando vários procedimentos armazenados em vários bancos de dados. Uma vez que você COMMIT sua transação, o COMMIT será registrado no log de cada banco de dados que participou da transação.
É perfeitamente possível restaurar um backup do database2 e reproduzir seus logs de transação em um servidor que não possui database1.
Esse comportamento permite alguma flexibilidade em como os procedimentos e exibições são dispostos no SQL Server. Muitos administradores de banco de dados mantêm seus procedimentos armazenados - especialmente os de manutenção - em um banco de dados (por exemplo
Admin
, ) completamente separado dos bancos de dados de aplicativos/usuários e gravam os resultados da operação de manutenção nesse banco de dados. Felizmente, é possível restaurar um dos bancos de dados do usuário para um servidor de desenvolvimento sem precisar copiarAdmin
também.