2011-02-12 22 views
8

thể trùng lặp:
What happens to an uncommitted transaction when the connection is closed?SQL Server và mất kết nối ở giữa một giao dịch

Điều gì sẽ xảy ra nếu mất kết nối ở giữa một giao dịch?

Tôi đoán rằng nếu giao dịch không bao giờ được cam kết và có thể thực thi lại, nhưng ... có cách nào tôi có thể kết nối và cuộn lại vào một điểm đã lưu và tiếp tục với những thứ tôi đã có?

Trân trọng.

+0

nào kết nối bạn đang nói về. Chỉ kết nối với máy chủ sql hoặc kết nối mạng của máy khách với máy chủ. Điều này thậm chí có thể sử dụng một số kết nối VPN, v.v. –

+0

kết nối với máy chủ sql. – vtortola

+0

Related: http://stackoverflow.com/q/1539564/1569 –

Trả lời

8

Nếu bạn mất kết nối ở giữa giao dịch, bạn không còn có thể nhập lại giao dịch này từ kết nối khác. Nếu kết nối bị ngắt, SQL Server sẽ tự động khôi phục bất kỳ giao dịch không được cam kết nào. Vì vậy, nếu điều này xảy ra, chỉ cần kết nối lại và bạn sẽ tìm thấy cơ sở dữ liệu của bạn ở trạng thái giống như trước khi bắt đầu giao dịch (giả sử tất nhiên không có người dùng nào khác có thể thay đổi nó ở giữa)

2

Nói chung, bất kỳ ngắt nào các giao dịch sẽ được cuộn lại. cho dù ngắt kết nối khách hàng, CommandTimeout hoặc máy chủ khởi động lại chính nó.

Đây là nguyên tử trong ACID

khả năng để "nhặt" một giao dịch mà nó rời đi không có ý nghĩa

  • các giao dịch khác điều đó xảy ra/giao dịch LSN sẽ được ra khỏi trật tự
  • cấu trúc nội bộ được thay đổi như một phần của một ghi (chỉ số vv)/cơ sở dữ liệu không phù hợp
+0

Không có vấn đề * cơ bản * nào với cuộc sống lâu dài TXN. Một DBMS có thể thực hiện chúng giống như một TXN "bình thường" chạy dài. I E. nó sẽ phải giữ tất cả các khóa/phiên bản hàng/... mà TXN giữ/yêu cầu. Điều duy nhất là: nó rất không thực tế. Các ứng dụng bị hỏng sẽ yêu cầu dọn dẹp thủ công, nó sẽ kết hợp tài nguyên máy chủ và trong hầu hết các tình huống mà cơ sở dữ liệu SQL được sử dụng, cơ hội thực hiện TXN là giờ hoặc thậm chí ngày cũ sẽ không còn tồn tại. –

Các vấn đề liên quan