Das Transaktionsprotokoll zeichnet die ausgeführten SQL-Anweisungen nicht auf, wie Sie es vielleicht erwarten. Stattdessen werden die Änderungen an den Rohdaten in jeder Datenbank unabhängig voneinander aufgezeichnet.
Es ist möglich, dass ein gespeicherter Prozess aus einer Datenbank vollständig im Transaktionsprotokoll einer anderen Datenbank funktioniert.
... 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
Oder damit es Änderungen an beiden vornimmt.
... 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
Was im Transaktionsprotokoll aufgezeichnet wird, sind die tatsächlichen Datenänderungen , nicht die SQL-Anweisungen, die sie verursacht haben. Die Einträge in jede Transaktionsprotokolldatei sind völlig unabhängig, außer insofern, als COMMIT nach dem Festschreiben der Transaktion gleichzeitig in die beiden Protokolldateien geschrieben wird.
Die gleiche Logik gilt, wenn bei einer größeren Transaktion mehrere gespeicherte Prozeduren in mehreren Datenbanken ausgeführt werden. Sobald Sie Ihre Transaktion festschreiben, wird das COMMIT im Protokoll jeder Datenbank aufgezeichnet, die an der Transaktion teilgenommen hat.
Es ist durchaus möglich, eine Sicherung von Datenbank2 wiederherzustellen und die Transaktionsprotokolle auf einem Server ohne Datenbank1 wiederzugeben.
Dieses Verhalten ermöglicht eine gewisse Flexibilität bei der Anordnung von Prozeduren und Ansichten in SQL Server. Viele Datenbankadministratoren speichern ihre gespeicherten Prozeduren - insbesondere die Wartungsprozeduren - in einer Datenbank (z. B. Admin
), die vollständig von Anwendungs- / Benutzerdatenbanken getrennt ist, und schreiben die Ergebnisse des Wartungsvorgangs in diese Datenbank. Zum Glück ist es möglich, eine der Benutzerdatenbanken auf einem Entwicklungsserver wiederherzustellen, ohne dass auch ein Kopieren erforderlich ist Admin
.