Triệu chứng
Hãy cân nhắc các trường hợp sau:
Bạn đang chạy Microsoft SQL Server 2014 hoặc Microsoft SQL Server 2012 Gói Dịch vụ 2 (SP2) trên máy chủ lưu trữ bản sao phụ của nhóm tính sẵn sàng như một phần của quá trình nâng cấp luân phiên.
Bạn đã áp dụng một trong các bản cập nhật sau cho bản cài đặt SQL Server:
- Cập nhật Tích lũy 5 của SQL Server 2014
- SQL Server 2012 Gói Dịch vụ 2 Cập nhật Tích lũy 4
- SQL Server 2012 Gói Dịch vụ 2 Bản cập nhật Tích lũy 3
Quan trọng Hotfix được đề cập trong bài viết này sẽ thay thế các bản cập nhật tích lũy này. Không cài đặt các bản cập nhật này nếu bạn chưa thực hiện việc này.
Để hoàn tất cài đặt bản cập nhật tích lũy, bạn hãy khởi động lại bản sao phụ này.
Bạn chuyển đổi dự phòng cho nhóm sẵn sàng đang chuyển bản sao phụ được cập nhật sang vai trò chính.
Trong tình huống này, bạn có thể gặp một hoặc nhiều triệu chứng sau đây trên máy chủ đang chạy SQL Server và hiện đang lưu trữ bản sao chính của nhóm tính sẵn sàng của bạn:
Các bản sao phụ được báo cáo là "KHÔNG ĐỒNG BỘ HÓA".
Khi truy vấn sys.dm_exec_requests, bạn nhận thấy khóa bị chặn không liên tục giữa các phiên người dùng và phiên có lệnh được báo cáo là "DB_STARTUP". Bạn cũng có thể nhận thấy tình trạng khóa giữa các lệnh CHECKPOINT và DB_STARTUP.
Sự cố đình trệ liên quan đến phiên đã khôi phục một trong các cơ sở dữ liệu về tính khả dụng của bạn được báo cáo trong nhật ký lỗi SQL Server. Những nhật ký này trông như sau:
<ngày/giờ> spid<xx> Khôi phục đang ghi điểm kiểm tra trong cơ sở dữ liệu <dbname/dbid>. Đây là
Chỉ là một thông báo cung cấp thông tin. Không cần người dùng hành động nào.
<ngày/giờ spid>< xx> Hoàn tất khôi phục cho cơ sở dữ liệu <dbname/dbid> trong <x> giây (phân tích
<x> ms, làm lại <x ms> , hoàn tác <x ms> .) Đây chỉ là thông báo mang tính chất cung cấp thông tin. Không cần người dùng hành động nào.
…
<Ngày/Giờ> SPID<xx> Lỗi: 1205, Mức độ nghiêm trọng: 13, Trạng thái: 28.
<ngày/giờ> spid<xx> Giao dịch (ID Quy <trình xx>) đã bị đình trệ trên các tài nguyên khóa với một giao dịch khác
quá trình và đã được chọn làm nạn nhân bế tắc. Chạy lại giao dịch.Nếu cơ sở dữ liệu về tính sẵn sàng của bạn được bật cho Microsoft SQL Server Service Broker, thì thư trong cơ sở dữ liệu về tính sẵn sàng của bạn có thể không được xử lý thành công. Nếu bạn khởi động công cụ theo dõi Profiler, sau đó bạn ghi lại sự kiện "Broker:Message Classify", sự kiện sau sẽ được ghi lại:
9791, Trung chuyển bị vô hiệu hóa trong cơ sở dữ liệu của người gửi
Lưu ý Đây không phải là vấn đề có hệ thống. Bạn có thể áp dụng các bản cập nhật tích lũy này trên cấu hình AlwaysOn mà không gặp phải sự cố này. Nếu bạn đã áp dụng các bản cập nhật tích lũy này và không nhận thấy vấn đề này, hệ thống của bạn không bị ảnh hưởng và thông tin này không áp dụng cho bạn.
Nguyên nhân
Sự cố này xảy ra vì đôi khi xảy ra tình huống tương tranh giữa các luồng hệ thống và kết nối người dùng. Điều này ngăn logic vá lỗi của bản cập nhật tích lũy nhận được các khóa cần thiết để hoàn tất quy trình cập nhật.
Giải pháp
Để giải quyết sự cố này, hãy áp dụng hotfix theo yêu cầu (COD) quan trọng sau đây:
3034679 KHẮC PHỤC: Nhóm tính sẵn sàng AlwaysOn có thể bị báo cáo là KHÔNG ĐỒNG BỘ
Quan trọng Bạn phải áp dụng hotfix COD này thay vì các bản cập nhật tích lũy sau:
- Cập nhật Tích lũy 5 của SQL Server 2014
- SQL Server 2012 Gói Dịch vụ 2 Cập nhật Tích lũy 4
- SQL Server 2012 Gói Dịch vụ 2 Bản cập nhật Tích lũy 3
Lưu ý: Nếu bạn đã áp dụng các bản cập nhật tích lũy này, bạn phải sử dụng các giải pháp sau để giải quyết vấn đề này.
Giải pháp thay thế
Vì sự cố này xảy ra do sự cạnh tranh giữa phiên người dùng và phiên nâng cấp với cơ sở dữ liệu sẵn sàng trong khi cơ sở dữ liệu chuyển sang vai trò chính, bạn phải loại bỏ xung đột này để cho phép cơ sở dữ liệu khôi phục từ trạng thái này.
Để khắc phục sự cố này, hãy làm theo các bước sau:
Thử các phương pháp sau theo thứ tự đã cho.
Phương pháp 1: Loại bỏ truy nhập cơ sở dữ liệuKhi cơ sở dữ liệu gặp phải các dấu hiệu được đề cập trong phần "Triệu chứng", hãy sử dụng một hoặc cả hai bước sau khi cần thiết để loại bỏ tình trạng chặn khóa:
- Truy vấn sys.dm_exec_requests để xác định các phiên trong đó việc chặn khóa xảy ra trong cơ sở dữ liệu tính sẵn sàng. Sử dụng câu lệnh KILL để kết thúc các phiên này.
- Tắt hoặc dừng ứng dụng đang truy nhập cơ sở dữ liệu sẵn sàng.
Nếu Phương pháp 1 không khắc phục được sự cố, hãy chuyển sang Phương pháp 2.
Phương pháp 2: Khởi động lại máy chủ lưu trữ SQL ServerKhi quyền truy nhập ứng dụng và quyền truy nhập người dùng vẫn bị vô hiệu hóa, hãy khởi động lại phiên bản SQL Server đang lưu trữ các cơ sở dữ liệu về tính sẵn sàng bị ảnh hưởng. Để thực hiện điều này, hãy làm theo các bước sau:
- Tắt chuyển đổi dự phòng tự động của nhóm tính sẵn sàng.
- Khởi động lại phiên bản SQL Server bị ảnh hưởng đang lưu trữ bản sao chính.
- Bật chuyển đổi dự phòng tự động cho nhóm tính sẵn sàng.
Sau khi các cơ sở dữ liệu bị ảnh hưởng phục hồi hoàn toàn, hãy thiết lập lại kết nối ứng dụng và người dùng.
Trạng thái
Microsoft đã xác nhận rằng đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong mục "áp dụng cho".
Tham khảo
Để biết thêm thông tin về các bản cập nhật tích lũy bị ảnh hưởng bởi sự cố này, hãy xem các bài viết sau trong Cơ sở Kiến thức Microsoft: