Apakah saya menambahkan komitmen baca setelah SET TINGKAT ISOLASI TRANSAKSI SERIALISASI?

9

Di dalam prosedur tersimpan, saya memiliki yang berikut ini: (sql server 2008)

 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
 BEGIN TRANSACTION getStuff
 BEGIN TRY 
    /*  some selects, updates, etc, etc. */
    ....
    COMMIT TRANSACTION getStuff
 END TRY
 BEGIN CATCH 
   ...
 END CATCH

Karena ini berbasis transaksi, saya pikir koneksi database yang lain tidak akan terpengaruh oleh SERIALIZABLE.

Apakah saya perlu secara implisit mengatur level isolasi untuk membaca commit setelah commit saya? Apakah ini akan berdampak buruk pada koneksi lain antara server aplikasi saya dan server database?

CFNinja
sumber

Jawaban:

6

Perintahnya adalah TRANSACTION ISOLATION LEVELtidak SERVER ISOLATION LEVEL. Itu hanya mengubah tingkat isolasi untuk ruang lingkup transaksi.

Erik Darling
sumber
5

Tidak, Anda tidak harus secara implisit mengatur tingkat isolasi kembali untuk membaca yang dilakukan.

Dari buku online .

Jika Anda mengeluarkan SET TRANSAKSI ISOLASI TINGKAT dalam prosedur tersimpan atau pemicu, ketika objek kembali mengontrol tingkat isolasi diatur ulang ke tingkat yang berlaku ketika objek dipanggil. Misalnya, jika Anda mengatur REPEATABLE READ dalam batch, dan batch kemudian memanggil prosedur tersimpan yang mengatur level isolasi ke SERIALIZABLE, pengaturan level isolasi kembali ke REPEATABLE READ ketika prosedur tersimpan mengembalikan kontrol ke batch.

SqlWorldWide
sumber
3

Perintah yang Anda posting hanya menjalankan transaksi di SP dengan TRANSACTION ISOLATION LEVEL SERIALIZABLE. Koneksi lain akan default ke tingkat isolasi standar - baca berkomitmen (kecuali ditentukan tingkat isolasi yang berbeda secara eksplisit).

Ada serangkaian yang sangat baik oleh Paul White - Tingkat Isolasi SQL Server: Seri yang akan membantu Anda memahami secara mendalam apa arti tingkat isolasi yang berbeda dan lakukan ketika mereka digunakan.

Kin Shah
sumber
-3

Algoritma yang cukup baru yang menghindari sebagian besar kelemahan dari pendekatan sebelumnya. Itu menggunakan pendekatan optimis, memungkinkan transaksi untuk melanjutkan tanpa memblokir. Ketika transaksi ingin dikomit, diperiksa, dan dibatalkan jika eksekusi tidak serial. Detail lebih lanjut dari semua masalah aplikasi di: http://writeulearn.com/relational-database-transactions/

cccc
sumber
Ini sepertinya bukan jawaban untuk pertanyaan ....
RDFozz