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

Cara Memperbaiki "Server tidak dikonfigurasi untuk AKSES DATA" di SQL Server

Kesalahan "Server tidak dikonfigurasi untuk AKSES DATA" di SQL Server adalah kesalahan umum saat mencoba menjalankan kueri terdistribusi terhadap server yang pengaturan akses datanya dinonaktifkan.

Kesalahan akan memiliki nama server yang Anda coba akses. Misalnya, jika nama server Anda adalah SQL01, kesalahannya akan berbunyi seperti ini:

Msg 7411, Level 16, State 1, Line 1
Server 'SQL01' is not configured for DATA ACCESS.

“Akses data” adalah setelan yang mengaktifkan dan menonaktifkan server tertaut untuk akses kueri terdistribusi.

Penyebab umum kesalahan ini adalah saat Anda mencoba menjalankan OPENQUERY() terhadap server lokal. Jika Anda benar-benar ingin menjalankan OPENQUERY() terhadap server, Anda harus memastikan akses data diaktifkan untuk server tersebut – meskipun itu adalah server lokal Anda.

Artikel ini membahas contoh menjalankan kueri yang menghasilkan kesalahan, memeriksa apakah server memiliki akses data yang diaktifkan, mengaktifkan akses data, memeriksa ulang, dan akhirnya menjalankan kueri lagi. Jika Anda tidak ingin menjalani seluruh skenario, gulir ke bawah ke judul "Solusi" di bawah ini. Atau, lihat Cara Mengaktifkan &Menonaktifkan Akses Data di SQL Server untuk contoh cepat mengaktifkan dan menonaktifkan akses data.

Lihat juga 2 Cara untuk Memeriksa apakah Akses Data Diaktifkan jika Anda hanya ingin memeriksa pengaturannya.

Jika tidak, baca terus – semuanya dibahas dalam artikel ini.

Contoh 1 – Kesalahan

Berikut adalah contoh skenario yang menyebabkan kesalahan.

SELECT 
  COLUMN_NAME,
  TYPE_NAME,
  PRECISION,
  LENGTH
FROM 
OPENQUERY (
  sqlserver007,
  'EXEC WideWorldImporters.[dbo].[sp_columns] Cities, Application;'
);

Hasil:

Msg 7411, Level 16, State 1, Line 1
Server 'sqlserver007' is not configured for DATA ACCESS.

Dalam hal ini, saya mencoba menjalankan OPENQUERY() terhadap server lokal saya sendiri yang disebut sqlserver007 , tetapi gagal, karena server tidak mengaktifkan akses data.

Anda mungkin bertanya-tanya mengapa saya menjalankan OPENQUERY() terhadap server saya sendiri ketika saya bisa memanggil prosedur tersimpan secara lokal? Itu benar, tetapi dalam kasus ini prosedur tersimpan mengembalikan lebih banyak kolom daripada yang saya butuhkan, jadi saya pikir cukup mudah untuk menjalankannya melalui OPENQUERY() sehingga saya bisa memilih kolom yang saya butuhkan. Doh! Tidak semudah yang saya kira!

Tapi cegukan kecil ini cukup mudah untuk diselesaikan, jadi mari kita lanjutkan.

Contoh 2 – Periksa Setelan Akses Data

Kita dapat melihat apakah server memiliki akses data yang diaktifkan dengan memeriksa sys.servers tampilan katalog sistem.

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 .

Jika Anda tertarik, sp_helpserver prosedur tersimpan sistem juga akan memberi kita informasi ini:

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 .

Contoh 3 – Solusinya

Berikut cara mengizinkan akses data.

EXEC sp_serveroption
  @server = 'sqlserver007',
  @optname = 'DATA ACCESS',
  @optvalue = 'TRUE';

Hasil:

Commands completed successfully.

Contoh 4 – Periksa Ulang Pengaturan

Sekarang kita dapat memeriksa kembali pengaturan akses data.

SELECT 
  name,
  is_data_access_enabled 
FROM sys.servers;

Hasil:

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

Sekarang server lokal saya mengaktifkan akses data.

Dan inilah tampilannya dengan sp_helpserver :

EXEC sp_helpserver;

Hasil:

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

Sekarang kita dapat melihat akses data telah ditambahkan di bawah status kolom.

Contoh 5 – Jalankan Ulang Query Asli

Sekarang kami telah mengaktifkan akses data, mari jalankan kembali kueri asli.

SELECT 
  COLUMN_NAME,
  TYPE_NAME,
  PRECISION,
  LENGTH
FROM 
OPENQUERY (
  sqlserver007,
  'EXEC WideWorldImporters.[dbo].[sp_columns] Cities, Application;'
);

Hasil:

+--------------------------+-------------+-------------+------------+
| COLUMN_NAME              | TYPE_NAME   | PRECISION   | LENGTH     |
|--------------------------+-------------+-------------+------------|
| CityID                   | int         | 10          | 4          |
| CityName                 | nvarchar    | 50          | 100        |
| StateProvinceID          | int         | 10          | 4          |
| Location                 | geography   | 2147483647  | 2147483647 |
| LatestRecordedPopulation | bigint      | 19          | 8          |
| LastEditedBy             | int         | 10          | 4          |
| ValidFrom                | datetime2   | 27          | 54         |
| ValidTo                  | datetime2   | 27          | 54         |
+--------------------------+-------------+-------------+------------+

Kali ini berjalan tanpa kesalahan.

Meskipun contoh ini menggunakan OPENQUERY() ke server lokal saya, perbaikan yang sama akan berlaku jika saya mencoba menjalankan kueri terdistribusi terhadap server tertaut (jarak jauh). Terlepas dari itu, langkah-langkah di atas masih dilakukan di server lokal saya (tidak perlu menyentuh server jauh).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana Anda menambahkan Kolom NOT NULL ke tabel besar di SQL Server?

  2. Penyedia OLE DB 'Microsoft.Jet.OLEDB.4.0' tidak dapat digunakan untuk kueri terdistribusi

  3. Bagaimana saya bisa mendeteksi kueri buat, perbarui, hapus berhasil di Codeigniter

  4. Gunakan OBJECTPROPERTY() untuk Mengetahui apakah Objek adalah Batasan PERIKSA di SQL Server

  5. Pernyataan pilih bersarang di SQL Server