Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Điều gì xảy ra với một giao dịch không được cam kết khi kết nối bị đóng?

Nó có thể vẫn mở trong khi áp dụng gộp kết nối. Ví dụ:thời gian chờ lệnh có thể để lại khóa và TXN vì ứng dụng khách gửi dưới dạng "hủy bỏ".

2 giải pháp:

  • Kiểm tra trong ứng dụng khách, nghĩa đen:

    IF @@TRANCOUNT <> 0 ROLLBACK TRAN

  • Sử dụng SET XACT_ABORT ON để đảm bảo một TXN được làm sạch:Câu hỏi 1 và Câu hỏi 2

Tôi luôn sử dụng SET XACT_ABORT ON .

Từ blog của Nhóm SQL này:

Lưu ý rằng với tính năng gộp kết nối, chỉ cần đóng kết nối mà không khôi phục lại kết nối sẽ chỉ trả lại kết nối về nhóm và giao dịch sẽ vẫn mở cho đến khi được sử dụng lại hoặc bị xóa khỏi nhóm.

Từ MSDN, phần "Hỗ trợ giao dịch" (chữ in đậm của tôi)

Khi một kết nối bị đóng, nó sẽ được đưa trở lại vào nhóm và đưa vào bối cảnh giao dịch dựa trên phân khu thích hợp. Do đó, bạn có thể đóng kết nối mà không tạo ra lỗi, ngay cả khi giao dịch được phân bổ vẫn đang tiếp tục. Điều này cho phép bạn xác nhận giao dịch được phân phối tại thời điểm khác nhau.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách thực hiện một truy vấn chuyển qua CHÈN trong SQL Server

  2. Phân tích MS SQL Server cho những người lần đầu tiên nhìn thấy nó

  3. Tôi có thể sử dụng Kiểu dữ liệu ngày trong máy chủ sql như thế nào?

  4. Giá trị Null có kích thước bao nhiêu trong SQL Server

  5. Nhóm luôn sẵn sàng của SQL Server:Cài đặt và cấu hình, Phần 2