Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

2 Cách Kiểm tra xem Truy cập Dữ liệu có được Bật trong SQL Server hay không (Ví dụ T-SQL)

Trong SQL Server, có một cài đặt "truy cập dữ liệu" cho phép và tắt 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", có thể là do bạn đang cố chạy truy vấn phân tán đối với máy chủ được liên kết không được định cấu hình để truy cập dữ liệu. Điều này cũng có thể xảy ra khi bạn cố gắng chạy OPENQUERY() chống lại máy chủ cục bộ của bạn.

Bạn có thể sử dụng sp_serveroption để bật hoặc tắt quyền truy cập dữ liệu trên một máy chủ nhất định. Tuy nhiên, bạn có thể muốn kiểm tra các cài đặt hiện có trước khi bắt đầu thay đổi chúng. Các ví dụ sau đây cho thấy cách thực hiện điều đó.

Ví dụ 1 - Truy vấn sys.servers Chế độ xem hệ thống

Có lẽ cách tốt nhất để kiểm tra xem quyền truy cập dữ liệu có được bật hay không là truy vấn sys.servers xem danh mục hệ thống. Bạn có thể trả về tất cả các cột hoặc chỉ những cột bạn muốn trả lại. Dưới đây là một ví dụ về việc trả về hai cột:

SELECT 
  name,
  is_data_access_enabled 
FROM sys.servers;

Kết quả:

+--------------+--------------------------+
| name         | is_data_access_enabled   |
|--------------+--------------------------|
| sqlserver007 | 0                        |
| Homer        | 1                        |
+--------------+--------------------------+

Trong trường hợp này, quyền truy cập dữ liệu được bật cho máy chủ có tên Homer , nhưng không dành cho máy chủ có tên sqlserver007 .

Ví dụ 2 - Thực thi sp_helpserver Quy trình lưu trữ hệ thống

sp_helpserver hệ thống lưu trữ thủ tục cũng sẽ cung cấp cho chúng tôi thông tin này, mặc dù ở định dạng khác:

EXEC sp_helpserver;

Kết quả:

+--------------+--------------------------------+----------------------------------+------+------------------+-------------------+-----------------+
| name         | network_name                   | status                           | id   | collation_name   | connect_timeout   | query_timeout   |
|--------------+--------------------------------+----------------------------------+------+------------------+-------------------+-----------------|
| sqlserver007 | sqlserver007                   | rpc,rpc out,use remote collation | 0    | NULL             | 0                 | 0               |
| Homer        | NULL                           | data access,use remote collation | 1    | NULL             | 0                 | 0               |
+--------------+--------------------------------+----------------------------------+------+------------------+-------------------+-----------------+

Nếu bạn nhìn vào status , bạn sẽ thấy rằng quyền truy cập dữ liệu được bao gồm trong hàng cho Homer , nhưng không dành cho sqlserver007 .

Tôi chạy mã trên máy chủ nào?

Bạn cần chạy mã đối với cục bộ máy chủ, không phải máy chủ từ xa. Ý tôi là, nếu bạn đang kiểm tra xem liệu bạn có thể chạy các truy vấn phân tán trên máy chủ được liên kết hay không, hãy 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 để xem liệu quyền truy cập dữ liệu có được bật cho Homer hay không máy chủ được liên kết.

Tôi không cần phải nhảy qua Homer để kiểm tra cài đặt của nó. Trên thực tế, nếu tôi nhảy qua, nó thực sự có thể có một cài đặt khác.

Để 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.

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ó.

Việc tôi có thể truy xuất thông tin này qua truy vấn phân tán hỗ trợ khẳng định 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tìm tất cả các bảng chứa cột có tên được chỉ định - MS SQL Server

  2. Các kỹ thuật tối ưu hóa truy vấn trong SQL Server:5 phương pháp hay nhất để tăng hiệu suất truy vấn

  3. Danh sách các toán tử so sánh máy chủ SQL

  4. ExecuteNonQuery trả về -1 khi sử dụng sql COUNT bất chấp chuỗi truy vấn

  5. VarBinary vs Image Kiểu dữ liệu SQL Server để lưu trữ dữ liệu nhị phân?