Truy vấn từ xa ở mức cô lập SNAPSHOT


9

Tôi đang thử nghiệm mức độ cô lập ảnh chụp nhanh. Bất cứ khi nào tôi cố gắng truy cập một máy chủ được liên kết, tôi gặp lỗi:

Truy cập từ xa không được hỗ trợ cho mức cô lập giao dịch "SNAPSHOT"

Tôi không thể tìm thấy bất cứ điều gì có ý nghĩa trong BOL hoặc Google về vấn đề này.

Các giới hạn có vẻ khá bực bội. Có một cách giải quyết, ngoài việc lưu trữ tất cả dữ liệu từ xa cục bộ không?

Câu trả lời:


9

Nếu bạn đào sâu vào phần bên trong về cách thức cách ly ảnh chụp nhanh được thực hiện trong SQL Server, lý do tại sao truy cập từ xa không được hỗ trợ sẽ trở nên rõ ràng.

Khi bật tính năng chụp nhanh, tối đa 14 byte thông tin phiên bản sẽ được thêm vào mỗi hàng được sửa đổi. Các byte bổ sung chứa số thứ tự giao dịch của giao dịch đã sửa đổi hàng, cùng với một con trỏ tới hàng được phiên bản trong tempdb.

Một giao dịch đang chạy ở sự cô lập ảnh chụp nhanh sẽ thấy phiên bản của một hàng tồn tại tại thời điểm nó bắt đầu (tồn tại tại thời điểm câu lệnh đầu tiên được thực thi, thay vì BEGIN TRAN). Đó là số thứ tự giao dịch được sử dụng để xác định phiên bản chính xác trong cửa hàng phiên bản. Vì không có mối tương quan giữa các số thứ tự trên máy chủ cục bộ và máy chủ từ xa của bạn, nên máy chủ từ xa không thể truy xuất phiên bản chính xác.

Chắc chắn có những cách mà một kết nối SQL Server với SQL Server có thể quản lý vấn đề đầu tiên này, nếu nhóm phát triển SQL quyết định rằng nó đáng để thực hiện. Nhưng có một vấn đề thứ hai, làm thế nào bạn sẽ đối phó với việc loại bỏ các phiên bản khỏi cửa hàng phiên bản?

Quá trình nền chịu trách nhiệm dọn dẹp lại sử dụng số thứ tự giao dịch để xác định xem có cần phiên bản hàng không. Điều này không đòi hỏi gì hơn là xác định số thứ tự giao dịch cũ nhất và loại bỏ bất kỳ phiên bản nào cũ hơn phiên bản này. Với kết nối từ xa ... nghe có vẻ xấu, đó là lý do tại sao nó không được hỗ trợ.

Có thể thực hiện một cách tiếp cận khác, có thể thực thi REPEATABLE READhoặc SERIALIZABLEtrên kết nối từ xa? Không, không phải không ảnh hưởng đến tính nhất quán vì hàng tại máy chủ từ xa không thể bị khóa tại thời điểm giao dịch cục bộ của bạn bắt đầu. Bạn không thể dựa vào hành vi, ảnh hưởng đến việc tuân thủ ACID.

Sử dụng tài nguyên phiên bản hàngSQL Server 2005 Cách ly giao dịch dựa trên phiên bản hàng chứa hầu hết các chi tiết nổi bật.

Cách tốt nhất để giải quyết vấn đề này sẽ phụ thuộc vào những gì bạn đang cố gắng đạt được. Nếu bạn có thể mở rộng theo kịch bản cụ thể của mình, chúng tôi có thể khám phá các phương pháp thay thế.


Cảm ơn đã giải thích. Dữ liệu từ xa không có khả năng được sửa đổi, do đó, bất kỳ mức cô lập nào cũng sẽ làm trong trường hợp này. Tôi đã cố gắng chỉ định các gợi ý như (đã đọc) hoặc (nolock) cho bảng từ xa, nhưng gặp lỗi tương tự.
VladV

Nếu dữ liệu từ xa sẽ không được sửa đổi và bạn có thể chấp nhận mức cô lập thấp hơn, bạn có thể đọc trước khi bắt đầu giao dịch chụp nhanh cục bộ không?
Mark Storey-Smith

Có, chắc chắn tôi có thể đọc dữ liệu từ xa trước và bắt đầu giao dịch chụp nhanh sau đó. Tôi đã hy vọng tránh điều đó, bởi vì nó làm cho mã phức tạp hơn.
VladV
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.