SQL सर्वर में "डेटा एक्सेस" कॉन्फ़िगरेशन विकल्प होता है जो वितरित क्वेरी एक्सेस के लिए लिंक किए गए सर्वर को सक्षम और अक्षम करता है।
यदि आपको कभी भी "सर्वर डेटा एक्सेस के लिए कॉन्फ़िगर नहीं किया गया है" त्रुटि मिलती है, तो संभवतः आपको उस लिंक किए गए सर्वर के लिए डेटा एक्सेस को सक्षम करने की आवश्यकता होगी जिसके विरुद्ध आप वितरित क्वेरी को चलाने का प्रयास कर रहे हैं। इसके विपरीत, कई बार आपको डेटा एक्सेस को अक्षम करने की आवश्यकता भी हो सकती है।
डेटा एक्सेस को सक्षम या अक्षम करने के लिए, sp_serveroption
. का उपयोग करें सिस्टम संग्रहीत प्रक्रिया। इसे उस सर्वर के विरुद्ध निष्पादित करें जिससे आप वितरित प्रश्नों को चलाने का इरादा रखते हैं। निम्न उदाहरण दर्शाता है कि यह कैसे करना है।
उदाहरण 1 - डेटा एक्सेस सक्षम करें
यहां डेटा एक्सेस सक्षम करने का तरीका बताया गया है।
EXEC sp_serveroption @server = 'sqlserver007', @optname = 'DATA ACCESS', @optvalue = 'TRUE';
इस स्थिति में, सर्वर को sqlserver007
. कहा जाता है , और मैंने DATA ACCESS
. सेट किया है TRUE
. का विकल्प ।
यहाँ वही काम करने का अधिक संक्षिप्त तरीका दिया गया है:
sp_serveroption 'sqlserver007', 'DATA ACCESS', 'TRUE';
इनमें से किसी एक को चलाने से निर्दिष्ट लिंक किए गए सर्वर पर डेटा पहुंच सक्षम हो जाएगी।
वैसे, यदि आवश्यक हो तो निर्दिष्ट लिंक सर्वर स्थानीय सर्वर हो सकता है। इसे दूरस्थ सर्वर होने की आवश्यकता नहीं है।
डेटा एक्सेस सेटिंग की जांच करने के लिए, sys.servers
. के विरुद्ध एक क्वेरी चलाएँ सिस्टम कैटलॉग व्यू।
SELECT name, is_data_access_enabled FROM sys.servers;
परिणाम:
+--------------+--------------------------+ | name | is_data_access_enabled | |--------------+--------------------------| | sqlserver007 | 1 | | Homer | 1 | +--------------+--------------------------+
फिर से, आप इसे स्थानीय सर्वर के विरुद्ध चलाते हैं - दूरस्थ सर्वर के लिए नहीं।
उदाहरण 2 - डेटा एक्सेस अक्षम करें
डेटा एक्सेस को अक्षम करने के लिए, बस @optvalue
सेट करें करने के लिए FALSE
।
EXEC sp_serveroption @server = 'sqlserver007', @optname = 'DATA ACCESS', @optvalue = 'FALSE';
अब फिर से सेटिंग जांचें।
SELECT name, is_data_access_enabled FROM sys.servers;
परिणाम:
+--------------+--------------------------+ | name | is_data_access_enabled | |--------------+--------------------------| | sqlserver007 | 0 | | Homer | 1 | +--------------+--------------------------+
मैं किस सर्वर पर कोड चलाऊं?
उस सर्वर के विरुद्ध कोड चलाएँ जिससे आप वितरित क्वेरीज़ चलाना चाहते हैं।
मेरे उदाहरण में, sqlserver007 स्थानीय सर्वर का नाम है और होमर रिमोट/लिंक्ड सर्वर है। अगर मैं होमर . के विरुद्ध वितरित क्वेरी चलाना चाहता था , मैं sqlserver007 . के विरुद्ध कोड चलाऊंगा ।
मुझे होमर . के पास जाने की ज़रूरत नहीं है इसकी सेटिंग बदलने के लिए। वास्तव में, इसकी एक अलग सेटिंग हो सकती है जिसे मैं sqlserver007 पर लागू करता हूं ।
इस बिंदु को प्रदर्शित करने के लिए, अगर मैं लिंक किए गए सर्वर परिणामों की तुलना दूरस्थ सर्वर पर वास्तविक सेटिंग से करता हूं तो मुझे यह मिलता है।
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;
परिणाम:
+--------------------+--------------------------+ | (No column name) | is_data_access_enabled | |--------------------+--------------------------| | From local | 1 | | Remote setting | 0 | +--------------------+--------------------------+
इस स्थिति में, स्थानीय सर्वर की अपने लिंक किए गए सर्वर समकक्ष के लिए एक अलग सेटिंग होती है।
और यह तथ्य कि मैं एक वितरित क्वेरी के माध्यम से इस जानकारी को पुनः प्राप्त करने में सक्षम था, यह दर्शाता है कि यह मेरे अपने सर्वर की सेटिंग थी जिसने वितरित क्वेरी को सक्षम किया, न कि दूरस्थ सर्वर की।