Triệu chứng
Khi bạn dùng phản ánh cơ sở dữ liệu trong Microsoft SQL Server 2012 hoặc Microsoft SQL Server 2014, bạn có thể nhấn vào điều kiện khẳng định và phản ánh cơ sở dữ liệu vào trạng thái tạm ngừng.
Nguyên nhân
Sự cố xảy ra vì, khi đã phân bổ một trang mới, SQL Server sẽ liên quan đến khóa X trên trang mới. SQL Server sẽ đưa vào hobt_id (ID heap hoặc B-Tree) mà trang mới thuộc vào yêu cầu khóa. Tuy nhiên, SQL Server không thể đặt hobt_id trong mục Nhật ký phản chiếu và kết quả trong hành vi khóa khác nhau giữa chính và hình máy. Điều này có thể được giải thích chi tiết như sau:
-
T1 giữ một khóa IX trên trang P1.
-
T2 đã chia tách trang trên P1, phân bổ trang mới P2, TX giao dịch hệ thống được dùng ở đây, nó giữ một khóa X trên P2. Đây là SQL Server không đặt hobt_id trong Nhật ký phản ánh.
-
TX không di chuyển khóa cho T1 để di chuyển khóa IX từ P1 đến P2.
-
TX đã cam kết, bây giờ T2 có thể sử dụng trang P2 và T2 có được khóa IX khác trên trang P2.
-
T1 cam kết, bây giờ T2 là người duy nhất giữ một chiếc IX Lock trên P2.
-
Sau khi có nhiều chèn, một leo thang khóa diễn ra, trên chính, T2 sẽ phát hành IX trên P2, nhưng trên gương, trong khi khóa leo thang, T2 không phát hành khóa IX.
-
Sau khi rất nhiều xóa, trang P2 trở thành trống và được deallocated.
-
T3 cần một trang mới, và nó sẽ xảy ra để phân bổ P2, điều này đòi hỏi phải có khóa X nhưng trên gương, bước này không thành công vì bước 6.
Trên gương, bước 6 sẽ không phát hành các khóa IX vì hobt_id trong khối khóa không chính xác. Điều này không chính xác hobt_id đến trong bước 2 và vì SQL Server không đặt hobt_id trong Mirroring log. thông thường bạn không thấy bất kỳ vấn đề nào vì TX trong bước 2 là rất ngắn, và khối khóa với hobt_id không chính xác sẽ được phát hành khi nó cam kết. Tuy nhiên, vì khóa di chuyển trong Step3 và các bước sau đây (4 và 5), khóa này chặn với hobt_id không chính xác được giữ nguyên và cuối cùng cũng gây ra sự cố. Chính không có vấn đề này vì nó dùng hobt_id chính xác trong bước 2. Nhưng bản ghi nhật ký không có hobt_id chính xác.
Giải pháp
Vấn đề lần đầu tiên được khắc phục trong bản Cập Nhật tích lũy SQL Server sau đây.
Cập Nhật tích lũy 1 cho SQL Server 2014 /en-us/help/2931693
Bản Cập Nhật tích lũy 9 cho SQL Server 2012 SP1 /en-us/help/2931078
Mỗi bản Cập Nhật tích lũy mới cho SQL Server chứa tất cả các hotfix và tất cả các bản sửa lỗi bảo mật đã được đưa vào bản Cập Nhật tích lũy trước đó. Kiểm tra các bản Cập Nhật tích lũy mới nhất cho SQL Server:
Cách giải quyết
Để giải quyết vấn đề này, hãy khởi tạo lại nhân bản để kết thúc trạng thái bị tạm ngừng.
Trạng thái
Microsoft đã xác nhận đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong phần "Áp dụng cho".