Log transaksi tidak merekam pernyataan SQL yang sedang dieksekusi, seperti yang mungkin Anda harapkan. Sebagai gantinya, itu merekam perubahan ke data mentah di setiap database, secara independen.
Ada kemungkinan untuk proc yang disimpan dari satu basis data bekerja sepenuhnya dalam log transaksi dari basis data lain.
... 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
Atau untuk itu membuat perubahan pada keduanya.
... 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
Apa yang dicatat dalam log transaksi adalah perubahan data aktual , bukan pernyataan SQL yang menyebabkannya terjadi. Entri untuk setiap file log transaksi sepenuhnya independen, kecuali sejauh KOMIT ditulis ke dua file log pada saat yang sama, setelah transaksi dilakukan.
Logika yang sama berlaku jika Anda memiliki transaksi yang lebih besar menjalankan sejumlah prosedur tersimpan di banyak basis data. Setelah Anda KOMIT transaksi Anda, KOMIT akan dicatat dalam log setiap basis data yang berpartisipasi dalam transaksi.
Sangat mungkin untuk memulihkan cadangan database2, dan memutar ulang log transaksinya pada server yang tidak memiliki database1.
Perilaku ini memungkinkan beberapa fleksibilitas dalam bagaimana prosedur dan pandangan ditata dalam SQL Server. Banyak administrator basis data menyimpan prosedur yang tersimpan - terutama yang pemeliharaan - dalam basis data (mis. Admin
) Yang benar-benar terpisah dari basis data aplikasi / pengguna, dan menuliskan hasil operasi pemeliharaan ke basis data tersebut. Untungnya, dimungkinkan untuk mengembalikan salah satu database pengguna ke server pengembangan tanpa perlu menyalin Admin
juga.