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

SQL सर्वर में "सर्वर डेटा एक्सेस के लिए कॉन्फ़िगर नहीं है" को कैसे ठीक करें

SQL सर्वर में "सर्वर डेटा एक्सेस के लिए कॉन्फ़िगर नहीं किया गया है" त्रुटि एक सामान्य त्रुटि है जब किसी सर्वर के विरुद्ध वितरित क्वेरी चलाने का प्रयास करते समय इसकी डेटा एक्सेस सेटिंग अक्षम होती है।

त्रुटि में उस सर्वर का नाम होगा जिसे आप एक्सेस करने का प्रयास कर रहे हैं। उदाहरण के लिए, यदि आपके सर्वर का नाम SQL01 है, तो त्रुटि कुछ इस तरह पढ़ेगी:

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

"डेटा एक्सेस" एक सेटिंग है जो वितरित क्वेरी एक्सेस के लिए लिंक किए गए सर्वर को सक्षम और अक्षम करती है।

इस त्रुटि का एक सामान्य कारण तब होता है जब आप OPENQUERY() को चलाने का प्रयास करते हैं स्थानीय सर्वर के खिलाफ। अगर आप सच में OPENQUERY() चलाना चाहते हैं सर्वर के खिलाफ, आपको यह सुनिश्चित करना होगा कि उस सर्वर के लिए डेटा एक्सेस सक्षम है - भले ही वह आपका स्थानीय सर्वर हो।

यह आलेख त्रुटि उत्पन्न करने वाली क्वेरी चलाने के उदाहरण के माध्यम से चलता है, यह जांचता है कि सर्वर में डेटा एक्सेस सक्षम है या नहीं, डेटा एक्सेस सक्षम करना, पुन:जांच करना, और अंत में क्वेरी को फिर से चलाना। यदि आप पूरे परिदृश्य से नहीं चलना चाहते हैं, तो नीचे "समाधान" शीर्षक तक स्क्रॉल करें। वैकल्पिक रूप से, डेटा एक्सेस को सक्षम और अक्षम करने के त्वरित उदाहरण के लिए SQL सर्वर में डेटा एक्सेस को सक्षम और अक्षम करने का तरीका देखें।

यदि आप सेटिंग की जांच करना चाहते हैं तो डेटा एक्सेस सक्षम है या नहीं, यह जांचने के 2 तरीके भी देखें।

अन्यथा, पढ़ें - इस लेख में यह सब शामिल है।

उदाहरण 1 - त्रुटि

यहां एक परिदृश्य का उदाहरण दिया गया है जो त्रुटि का कारण बनता है।

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

परिणाम:

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

इस मामले में, मैं OPENQUERY() run चलाने की कोशिश कर रहा हूं sqlserver007 . नामक मेरे अपने स्थानीय सर्वर के विरुद्ध , लेकिन यह विफल हो जाता है, क्योंकि सर्वर में डेटा एक्सेस सक्षम नहीं है।

आप सोच रहे होंगे कि मैं OPENQUERY() क्यों चला रहा हूं? अपने सर्वर के खिलाफ जब मैं स्थानीय रूप से संग्रहीत प्रक्रिया को कॉल कर सकता था? यह सच है, लेकिन इस मामले में संग्रहीत प्रक्रिया मेरी आवश्यकता से अधिक कॉलम लौटाती है, इसलिए मुझे लगा कि इसे केवल OPENQUERY() के माध्यम से चलाना काफी आसान है। ताकि मैं अपनी जरूरत के कॉलम चुन सकूं। दोह! उतना आसान नहीं जितना मैंने सोचा था!

लेकिन इस छोटी सी हिचकी को सुलझाना काफी आसान है, तो चलिए जारी रखते हैं।

उदाहरण 2 - डेटा एक्सेस सेटिंग जांचें

sys.servers . की जांच करके हम देख सकते हैं कि सर्वर में डेटा एक्सेस सक्षम है या नहीं सिस्टम कैटलॉग व्यू।

SELECT 
  name,
  is_data_access_enabled 
FROM sys.servers;

परिणाम:

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

इस मामले में, होमर . नामक सर्वर के लिए डेटा एक्सेस सक्षम है , लेकिन sqlserver007 . नामक सर्वर के लिए नहीं ।

यदि आप रुचि रखते हैं, तो 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 . के लिए नहीं ।

उदाहरण 3 - समाधान

यहां डेटा एक्सेस की अनुमति देने का तरीका बताया गया है।

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

परिणाम:

Commands completed successfully.

उदाहरण 4 - सेटिंग की दोबारा जांच करें

अब हम डेटा एक्सेस सेटिंग की दोबारा जांच कर सकते हैं।

SELECT 
  name,
  is_data_access_enabled 
FROM sys.servers;

परिणाम:

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

अब मेरे स्थानीय सर्वर में डेटा पहुंच सक्षम है।

और यह sp_helpserver के साथ कैसा दिखता है :

EXEC sp_helpserver;

परिणाम:

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

अब हम देख सकते हैं कि डेटा एक्सेस स्थिति . के अंतर्गत जोड़ा गया है कॉलम।

उदाहरण 5 - मूल क्वेरी को फिर से चलाएँ

अब जबकि हमने डेटा एक्सेस सक्षम कर दिया है, आइए मूल क्वेरी को फिर से चलाते हैं।

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

परिणाम:

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

इस बार यह बिना किसी त्रुटि के चलता है।

हालांकि इस उदाहरण में OPENQUERY() . का इस्तेमाल किया गया है मेरे स्थानीय सर्वर पर, वही फ़िक्स लागू होगा यदि मैं एक (दूरस्थ) लिंक किए गए सर्वर के विरुद्ध वितरित क्वेरी चलाने का प्रयास कर रहा था। भले ही, मेरे स्थानीय सर्वर पर उपरोक्त चरण अभी भी किए गए हैं (दूरस्थ सर्वर को छूने की कोई आवश्यकता नहीं है)।


  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 सर्वर में एक इनलाइन टेबल-वैल्यूड फंक्शन (ITVF) बनाएं

  2. SQL सर्वर अपडेट ट्रिगर, केवल संशोधित फ़ील्ड प्राप्त करें

  3. सी # का उपयोग कर स्थानीय SQL सर्वर डेटाबेस से कनेक्ट करना

  4. पंक्ति दर पंक्ति के बजाय एक बार में संपूर्ण डेटाटेबल को डेटाबेस में सम्मिलित करें?

  5. आशावादी बनाम निराशावादी लॉकिंग