Bối cảnh :
Chúng tôi đang cố gắng tạo ra một khai thác thử nghiệm "là chính" cho một trong các nhóm hỗ trợ của chúng tôi. Không biết máy chủ nào tại bất kỳ thời điểm nào sẽ là máy chủ chính mà họ được hướng dẫn thực hiện TSQL đối với nhóm máy chủ đã đăng ký. Nhóm máy chủ đã đăng ký bao gồm tất cả các máy chủ trong AG. Mục tiêu là chỉ thực hiện TSQL trên máy chủ chính hiện tại:
Khai thác thử nghiệm hiện tại :
IF EXISTS (SELECT *
FROM sys.dm_hadr_availability_replica_states AS HARS
INNER JOIN sys.dm_hadr_availability_replica_cluster_states AS HACS ON HACS.replica_id = HARS.replica_id
WHERE (HARS.role_desc = 'PRIMARY') AND (HACS.replica_server_name LIKE @@SERVERNAME))
BEGIN
<<SOME CODE TO EXECUTE>>
END
Vấn đề :
Nếu máy chủ đầu tiên phản hồi lại truy vấn đa máy chủ không trả về bất kỳ kết quả nào, SSMS sẽ cho rằng tập kết quả đúng không phải là tập kết quả, ngay cả khi các máy chủ khác quay lại với tập kết quả. Vì vậy, trong kịch bản này, không có kết quả nào được trả về ... điều này không chính xác và không phải là chức năng mong đợi.
Có ai có thể nghĩ ra một cách, với SSMS (đây là công cụ quen thuộc nhất với nhóm CS), chỉ buộc thực thi trên máy chủ chính hiện tại không?