SQL Server memiliki opsi konfigurasi "akses data" yang mengaktifkan dan menonaktifkan server tertaut untuk akses kueri terdistribusi.
Jika Anda pernah mendapatkan kesalahan "Server tidak dikonfigurasi untuk AKSES DATA", Anda mungkin perlu mengaktifkan akses data untuk server tertaut yang Anda coba jalankan kueri terdistribusinya. Sebaliknya, mungkin ada saatnya Anda perlu menonaktifkan akses data.
Untuk mengaktifkan atau menonaktifkan akses data, gunakan sp_serveroption
prosedur tersimpan sistem. Jalankan pada server tempat Anda ingin menjalankan kueri terdistribusi. Contoh berikut menunjukkan cara melakukannya.
Contoh 1 – Aktifkan Akses Data
Berikut cara mengaktifkan akses data.
EXEC sp_serveroption @server = 'sqlserver007', @optname = 'DATA ACCESS', @optvalue = 'TRUE';
Dalam hal ini, servernya disebut sqlserver007
, dan saya menyetel DATA ACCESS
pilihan untuk TRUE
.
Berikut cara yang lebih ringkas untuk melakukan hal yang sama:
sp_serveroption 'sqlserver007', 'DATA ACCESS', 'TRUE';
Menjalankan salah satu dari itu akan mengaktifkan akses data pada server tertaut yang ditentukan.
Omong-omong, server tertaut yang ditentukan dapat menjadi server lokal jika diperlukan. Tidak perlu menjadi server jarak jauh.
Untuk memeriksa setelan akses data, jalankan kueri terhadap sys.servers
tampilan katalog sistem.
SELECT name, is_data_access_enabled FROM sys.servers;
Hasil:
+--------------+--------------------------+ | name | is_data_access_enabled | |--------------+--------------------------| | sqlserver007 | 1 | | Homer | 1 | +--------------+--------------------------+
Sekali lagi, Anda menjalankan ini terhadap server lokal – bukan server jarak jauh.
Contoh 2 – Nonaktifkan Akses Data
Untuk menonaktifkan akses data, cukup setel @optvalue
ke FALSE
.
EXEC sp_serveroption @server = 'sqlserver007', @optname = 'DATA ACCESS', @optvalue = 'FALSE';
Sekarang periksa kembali pengaturannya.
SELECT name, is_data_access_enabled FROM sys.servers;
Hasil:
+--------------+--------------------------+ | name | is_data_access_enabled | |--------------+--------------------------| | sqlserver007 | 0 | | Homer | 1 | +--------------+--------------------------+
Di Server Mana Saya Menjalankan Kode?
Jalankan kode terhadap server tempat Anda ingin menjalankan kueri terdistribusi.
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 .
Saya tidak perlu melompat ke Homer untuk mengubah pengaturannya. Sebenarnya, itu bisa memiliki pengaturan yang berbeda dengan yang saya terapkan ke sqlserver007 .
Untuk mendemonstrasikan poin ini, inilah yang saya dapatkan jika saya membandingkan hasil server yang ditautkan dengan pengaturan sebenarnya di server jauh.
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;
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.
Dan fakta bahwa saya dapat mengambil informasi ini melalui kueri terdistribusi menunjukkan bahwa pengaturan server saya sendiri yang mengaktifkan kueri terdistribusi, bukan server jarak jauh.