SQL Server có tùy chọn cấu hình "truy cập dữ liệu" cho phép và vô hiệu hóa một máy chủ được liên kết để truy cập truy vấn phân tán.
Nếu bạn từng gặp lỗi “Máy chủ không được định cấu hình cho TRUY CẬP DỮ LIỆU”, bạn có thể cần bật quyền truy cập dữ liệu cho máy chủ được liên kết mà bạn đang cố gắng chạy truy vấn phân tán. Ngược lại, cũng có thể có những lúc bạn cần vô hiệu hóa quyền truy cập dữ liệu.
Để bật hoặc tắt quyền truy cập dữ liệu, hãy sử dụng sp_serveroption
hệ thống lưu trữ thủ tục. Thực thi nó trên máy chủ mà bạn định chạy các truy vấn phân tán từ đó. Ví dụ sau minh họa cách thực hiện điều này.
Ví dụ 1 - Bật quyền truy cập dữ liệu
Dưới đây là cách bật quyền truy cập dữ liệu.
EXEC sp_serveroption @server = 'sqlserver007', @optname = 'DATA ACCESS', @optvalue = 'TRUE';
Trong trường hợp này, máy chủ được gọi là sqlserver007
và tôi đặt DATA ACCESS
tùy chọn thành TRUE
.
Dưới đây là một cách ngắn gọn hơn để làm điều tương tự:
sp_serveroption 'sqlserver007', 'DATA ACCESS', 'TRUE';
Chạy một trong hai cách đó sẽ cho phép truy cập dữ liệu trên máy chủ được liên kết được chỉ định.
Nhân tiện, máy chủ được liên kết được chỉ định có thể là máy chủ cục bộ nếu được yêu cầu. Nó không cần phải là một máy chủ từ xa.
Để kiểm tra cài đặt truy cập dữ liệu, hãy chạy truy vấn đối với sys.servers
chế độ xem danh mục hệ thống.
SELECT name, is_data_access_enabled FROM sys.servers;
Kết quả:
+--------------+--------------------------+ | name | is_data_access_enabled | |--------------+--------------------------| | sqlserver007 | 1 | | Homer | 1 | +--------------+--------------------------+
Một lần nữa, bạn chạy điều này với máy chủ cục bộ - không phải máy chủ từ xa.
Ví dụ 2 - Tắt Quyền truy cập Dữ liệu
Để tắt quyền truy cập dữ liệu, chỉ cần đặt @optvalue
thành FALSE
.
EXEC sp_serveroption @server = 'sqlserver007', @optname = 'DATA ACCESS', @optvalue = 'FALSE';
Bây giờ hãy kiểm tra lại cài đặt.
SELECT name, is_data_access_enabled FROM sys.servers;
Kết quả:
+--------------+--------------------------+ | name | is_data_access_enabled | |--------------+--------------------------| | sqlserver007 | 0 | | Homer | 1 | +--------------+--------------------------+
Tôi chạy mã trên máy chủ nào?
Chạy mã trên máy chủ mà bạn định chạy các truy vấn phân tán từ đó.
Trong ví dụ của tôi, sqlserver007 là tên của máy chủ cục bộ và Homer là một máy chủ từ xa / được liên kết. Nếu tôi muốn chạy các truy vấn phân tán đối với Homer , Tôi sẽ chạy mã trên sqlserver007 .
Tôi không cần phải nhảy qua Homer để thay đổi cài đặt của nó. Trên thực tế, nó có thể có cài đặt khác với cài đặt mà tôi áp dụng cho sqlserver007 .
Để chứng minh điểm này, đây là những gì tôi nhận được nếu tôi so sánh kết quả máy chủ được liên kết với cài đặt thực tế trên máy chủ từ xa.
EXEC sp_serveroption @server = 'Homer', @optname = 'DATA ACCESS', @optvalue = 'TRUE'; SELECT 'From local', is_data_access_enabled FROM sys.servers WHERE name = 'Homer' UNION ALL SELECT 'Remote setting', is_data_access_enabled FROM Homer.master.sys.servers WHERE server_id = 0;
Kết quả:
+--------------------+--------------------------+ | (No column name) | is_data_access_enabled | |--------------------+--------------------------| | From local | 1 | | Remote setting | 0 | +--------------------+--------------------------+
Trong trường hợp này, máy chủ cục bộ có cài đặt khác với đối tác máy chủ được liên kết của nó.
Và thực tế là tôi có thể truy xuất thông tin này qua truy vấn phân tán chứng tỏ rằng chính cài đặt máy chủ của tôi đã kích hoạt truy vấn phân tán, không phải của máy chủ từ xa.