SQL सर्वर में, एक "डेटा एक्सेस" सेटिंग होती है जो वितरित क्वेरी एक्सेस के लिए लिंक किए गए सर्वर को सक्षम और अक्षम करती है। यदि आपको कभी भी "सर्वर डेटा एक्सेस के लिए कॉन्फ़िगर नहीं किया गया है" त्रुटि मिलती है, तो शायद यह इसलिए है क्योंकि आप किसी लिंक किए गए सर्वर के विरुद्ध वितरित क्वेरी चलाने का प्रयास कर रहे हैं जो डेटा एक्सेस के लिए कॉन्फ़िगर नहीं किया गया है। यह तब भी हो सकता है जब आप OPENQUERY()
को चलाने का प्रयास करते हैं अपने स्थानीय सर्वर के खिलाफ।
आप sp_serveroption
. का उपयोग कर सकते हैं किसी दिए गए सर्वर पर डेटा एक्सेस को सक्षम या अक्षम करने के लिए। हालांकि, हो सकता है कि आप मौजूदा सेटिंग्स को बदलना शुरू करने से पहले जांचना चाहें। निम्नलिखित उदाहरण दिखाते हैं कि यह कैसे करना है।
उदाहरण 1 - sys.servers
से पूछताछ करें सिस्टम दृश्य
शायद यह जांचने का सबसे अच्छा तरीका है कि डेटा एक्सेस सक्षम है या नहीं sys.servers
. से पूछताछ करना है सिस्टम कैटलॉग दृश्य। आप या तो सभी कॉलम वापस कर सकते हैं, या केवल वे जिन्हें आप वापस करना चाहते हैं। यहां दो कॉलम लौटाने का एक उदाहरण दिया गया है:
SELECT name, is_data_access_enabled FROM sys.servers;
परिणाम:
+--------------+--------------------------+ | name | is_data_access_enabled | |--------------+--------------------------| | sqlserver007 | 0 | | Homer | 1 | +--------------+--------------------------+
इस मामले में, होमर . नामक सर्वर के लिए डेटा एक्सेस सक्षम है , लेकिन sqlserver007 . नामक सर्वर के लिए नहीं ।
उदाहरण 2 - sp_helpserver
निष्पादित करें सिस्टम संग्रहित प्रक्रिया
sp_helpserver
सिस्टम संग्रहीत प्रक्रिया हमें यह जानकारी भी देगी, हालांकि एक अलग प्रारूप में:
EXEC sp_helpserver;
परिणाम:
+--------------+--------------------------------+----------------------------------+------+------------------+-------------------+-----------------+ | 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 | +--------------+--------------------------------+----------------------------------+------+------------------+-------------------+-----------------+
यदि आप स्थिति . में देखें कॉलम, आप देखेंगे कि डेटा एक्सेस होमर . के लिए पंक्ति में शामिल है , लेकिन sqlserver007 . के लिए नहीं ।
मैं किस सर्वर पर कोड चलाऊं?
आपको कोड को स्थानीय . के विरुद्ध चलाना होगा सर्वर, रिमोट सर्वर नहीं। इससे मेरा मतलब है, यदि आप यह देखने के लिए जाँच कर रहे हैं कि क्या आप किसी लिंक किए गए सर्वर के विरुद्ध वितरित क्वेरी चला सकते हैं, तो उस सर्वर के विरुद्ध कोड चलाएँ जिसका आप से वितरित क्वेरी चलाने का इरादा रखते हैं ।
मेरे उदाहरण में, sqlserver007 स्थानीय सर्वर का नाम है और होमर रिमोट/लिंक्ड सर्वर है। अगर मैं होमर . के विरुद्ध वितरित क्वेरी चलाना चाहता था , मैं sqlserver007 . के विरुद्ध कोड चलाऊंगा यह देखने के लिए कि होमर . के लिए डेटा एक्सेस सक्षम है या नहीं लिंक किया गया सर्वर।
मुझे होमर . के पास जाने की ज़रूरत नहीं है इसकी सेटिंग की जांच करने के लिए। वास्तव में, अगर मैं कूदता हूं, तो वास्तव में इसकी एक अलग सेटिंग हो सकती है।
इस बिंदु को प्रदर्शित करने के लिए, अगर मैं लिंक किए गए सर्वर परिणामों की तुलना दूरस्थ सर्वर पर वास्तविक सेटिंग से करता हूं तो मुझे यह मिलता है।
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 | +--------------------+--------------------------+
इस स्थिति में, स्थानीय सर्वर की अपने लिंक किए गए सर्वर समकक्ष से भिन्न सेटिंग होती है।
तथ्य यह है कि मैं एक वितरित क्वेरी के माध्यम से इस जानकारी को पुनः प्राप्त करने में सक्षम था, इस दावे का समर्थन करता है कि यह मेरे अपने सर्वर की सेटिंग थी जिसने वितरित क्वेरी को सक्षम किया।