Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में डेटा एक्सेस सक्षम है या नहीं यह जांचने के 2 तरीके (T-SQL उदाहरण)

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

इस स्थिति में, स्थानीय सर्वर की अपने लिंक किए गए सर्वर समकक्ष से भिन्न सेटिंग होती है।

तथ्य यह है कि मैं एक वितरित क्वेरी के माध्यम से इस जानकारी को पुनः प्राप्त करने में सक्षम था, इस दावे का समर्थन करता है कि यह मेरे अपने सर्वर की सेटिंग थी जिसने वितरित क्वेरी को सक्षम किया।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में sys.parameters, sys.system_parameters और sys.all_parameters के बीच अंतर

  2. तालिका डेटा स्क्रिप्टिंग के लिए उपकरण

  3. SQL सर्वर डेटाबेस में उपयोगकर्ता-परिभाषित तालिकाओं की संख्या की गणना करने के 5 तरीके

  4. SQL सर्वर (T-SQL) में डेटाबेस मेल कतारों की स्थिति की जाँच करें

  5. SQL सर्वर डेटाबेस (T-SQL) से डेटा फ़ाइल कैसे निकालें