Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Apa yang terjadi pada transaksi yang tidak terikat ketika koneksi ditutup?

Itu bisa tetap terbuka saat penyatuan koneksi berlaku. Contoh:batas waktu perintah dapat meninggalkan kunci dan TXN karena klien mengirim sebagai "abort".

2 solusi:

  • Uji di klien, secara harfiah:

    IF @@TRANCOUNT <> 0 ROLLBACK TRAN

  • Gunakan SET XACT_ABORT ON untuk memastikan TXN dibersihkan:Pertanyaan 1 dan Pertanyaan 2

Saya selalu menggunakan SET XACT_ABORT ON .

Dari blog Tim SQL ini:

Perhatikan bahwa dengan connection pooling, hanya dengan menutup koneksi tanpa rollback hanya akan mengembalikan koneksi ke pool dan transaksi akan tetap terbuka sampai kemudian digunakan kembali atau dihapus dari pool. Hal ini dapat mengakibatkan lock mulai tidak diperlukan dan menyebabkan timeout dan rolling block lainnya.

Dari MSDN, bagian "Dukungan Transaksi" (tebal saya)

Ketika koneksi ditutup, itu dilepaskan kembali ke pool dan ke dalam subdivisi yang sesuai berdasarkan konteks transaksinya. Oleh karena itu, Anda dapat menutup koneksi tanpa membuat kesalahan, meskipun transaksi terdistribusi masih tertunda. Ini memungkinkan Anda untuk melakukan atau membatalkan transaksi terdistribusi pada waktu alater.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Menambahkan atau Menghapus Kolom dengan Menggunakan GUI di SQL Server - Tutorial SQL Server / T-SQL Bagian 39

  2. 4 Cara untuk Memeriksa Baris Duplikat di SQL Server

  3. Bagaimana cara meneruskan sqlparameter ke IN ()?

  4. Kapan saya harus menggunakan variabel tabel vs tabel sementara di server sql?

  5. Kunci Asing ke beberapa tabel