O log de transações não está registrando as instruções SQL que estão sendo executadas, como você poderia esperar. Em vez disso, está registrando as alterações nos dados brutos em cada banco de dados, independentemente.
É possível que um processo armazenado de um banco de dados esteja funcionando inteiramente no log de transações de outro banco de dados.
... database1..my_stored_procedure AS
BEGIN
INSERT INTO database2..table1 (col1) values (1);
^^ changes written to database2's tlog
INSERT INTO database2..table2 (col1) values (2);
^^ changes written to database2's tlog
END
^^ when this transaction is committed, COMMIT is recorded in database2's tlog
Ou para fazer alterações nos dois.
... database2..my_other_stored_procedure AS
BEGIN
INSERT INTO database1..table1 (col1) values (1);
^^ changes written to database1's tlog
INSERT INTO database2..table1 (col1) values (2);
^^ changes written to database2's tlog
END
^^ when this transaction is committed, COMMIT is recorded in BOTH database1's and database2's tlog
O que é registrado no log de transações são as alterações reais dos dados , 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, depois 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. Depois de confirmar sua transação, o COMMIT será registrado no log de todos os bancos de dados que participaram da transação.
É perfeitamente possível restaurar um backup do banco de dados2 e reproduzir seus logs de transações em um servidor que não possui banco de dados1.
Esse comportamento permite certa flexibilidade na maneira 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 em um servidor de desenvolvimento sem a necessidade de copiar Admin
também.