Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

2 Cara untuk Memeriksa apakah Akses Data Diaktifkan di SQL Server (Contoh T-SQL)

Di SQL Server, ada pengaturan "akses data" yang mengaktifkan dan menonaktifkan server tertaut untuk akses kueri terdistribusi. Jika Anda pernah mendapatkan kesalahan "Server tidak dikonfigurasi untuk AKSES DATA", itu mungkin karena Anda mencoba menjalankan kueri terdistribusi terhadap server tertaut yang tidak dikonfigurasi untuk akses data. Ini juga dapat terjadi ketika Anda mencoba menjalankan OPENQUERY() terhadap server lokal Anda.

Anda dapat menggunakan sp_serveroption untuk mengaktifkan atau menonaktifkan akses data pada server tertentu. Namun, Anda mungkin ingin memeriksa pengaturan yang ada sebelum Anda mulai mengubahnya. Contoh berikut menunjukkan cara melakukannya.

Contoh 1 – Kueri sys.servers Tampilan Sistem

Mungkin cara terbaik untuk memeriksa apakah akses data diaktifkan adalah dengan menanyakan sys.servers tampilan katalog sistem. Anda dapat mengembalikan semua kolom, atau hanya kolom yang ingin Anda kembalikan. Berikut ini contoh mengembalikan dua kolom:

SELECT 
  name,
  is_data_access_enabled 
FROM sys.servers;

Hasil:

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

Dalam hal ini, akses data diaktifkan untuk server yang disebut Homer , tetapi tidak untuk server bernama sqlserver007 .

Contoh 2 – Jalankan sp_helpserver Prosedur Tersimpan Sistem

sp_helpserver prosedur tersimpan sistem juga akan memberi kita informasi ini, meskipun dalam format yang berbeda:

EXEC sp_helpserver;

Hasil:

+--------------+--------------------------------+----------------------------------+------+------------------+-------------------+-----------------+
| 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               |
+--------------+--------------------------------+----------------------------------+------+------------------+-------------------+-----------------+

Jika Anda melihat status kolom, Anda akan melihat akses data disertakan dalam baris untuk Homer , tetapi tidak untuk sqlserver007 .

Di Server Mana Saya Menjalankan Kode?

Anda perlu menjalankan kode terhadap lokal server, bukan server jarak jauh. Maksud saya, jika Anda memeriksa untuk melihat apakah Anda dapat menjalankan kueri terdistribusi terhadap server tertaut, jalankan kode terhadap server yang ingin Anda jalankan kueri terdistribusi dari .

Dalam contoh saya, sqlserver007 adalah nama server lokal dan Homer adalah server jarak jauh/tertaut. Jika saya ingin menjalankan kueri terdistribusi terhadap Homer , saya akan menjalankan kode terhadap sqlserver007 untuk melihat apakah akses data diaktifkan untuk Homer server tertaut.

Saya tidak perlu melompat ke Homer untuk memeriksa pengaturannya. Bahkan, jika saya melompati, itu mungkin memiliki pengaturan yang berbeda.

Untuk mendemonstrasikan poin ini, inilah yang saya dapatkan jika saya membandingkan hasil server yang ditautkan dengan pengaturan sebenarnya di server jauh.

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;

Hasil:

+--------------------+--------------------------+
| (No column name)   | is_data_access_enabled   |
|--------------------+--------------------------|
| From local         | 1                        |
| Remote setting     | 0                        |
+--------------------+--------------------------+

Dalam hal ini, server lokal memiliki pengaturan yang berbeda dengan rekan server tertautnya.

Fakta bahwa saya dapat mengambil informasi ini melalui kueri terdistribusi mendukung pernyataan bahwa pengaturan server saya sendiri yang mengaktifkan kueri terdistribusi.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Agregasi String Selama Bertahun-tahun di SQL Server

  2. Menggunakan sp_help_schedule di SQL Server

  3. Apakah mungkin untuk klausa Output SQL untuk mengembalikan kolom yang tidak dimasukkan?

  4. Bagaimana Pengaturan Bahasa dapat Mempengaruhi Hasil FORMAT() Anda di SQL Server (Contoh T-SQL)

  5. Jalankan prosedur tersimpan menggunakan kerangka entitas