Il registro delle transazioni non registra le istruzioni SQL in esecuzione, come ci si potrebbe aspettare. Invece, sta registrando le modifiche ai dati grezzi in ciascun database, indipendentemente.
È possibile che un proc memorizzato da un database funzioni interamente nel registro delle transazioni di un altro database.
... 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
O per fare modifiche ad entrambi.
... 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
Ciò che è registrato nel registro delle transazioni sono le effettive modifiche ai dati , non le istruzioni SQL che le hanno provocate. Le voci per ciascun file di registro delle transazioni sono completamente indipendenti, tranne nella misura in cui COMMIT viene scritto nei due file di registro contemporaneamente, una volta che la transazione viene impegnata.
La stessa logica si applica se si dispone di una transazione più ampia che esegue una serie di procedure memorizzate su più database. Dopo aver COMMITATO la transazione, COMMIT verrà registrato nel registro di ogni database che ha partecipato alla transazione.
È perfettamente possibile ripristinare un backup di database2 e riprodurre i registri delle transazioni su un server che non dispone di database1.
Questo comportamento consente una certa flessibilità nel modo in cui le procedure e le viste sono disposte in SQL Server. Molti amministratori di database conservano le loro procedure memorizzate, in particolare quelle di manutenzione, in un database (ad esempio Admin
) completamente separato dai database di applicazioni / utenti e scrivono i risultati dell'operazione di manutenzione su quel database. Per fortuna, è possibile ripristinare uno dei database utente su un server di sviluppo senza la necessità di copiarlo Admin
.