एक लिंक्ड सर्वर बनाना जो अपने आप को इंगित करता है


14

मैं servername\instancenameनिम्न कॉल का उपयोग करके SQL सर्वर 2014 आवृत्ति पर एक लिंक किए गए सर्वर को बनाने का प्रयास कर रहा हूं :

EXEC master.dbo.sp_addlinkedserver 
    @server = N'servername\instancename',
    @srvproduct=N'SQL Server'

मुझे त्रुटि मिल रही है:

Msg 15028, Level 16, State 1, Procedure sp_addlinkedserver, Line 82
The server 'servername\instancename' already exists.

यह SQL Server 2005 में ठीक काम करता है, और MSDN के अनुसार ,

लिंक किए गए सर्वर में SQL सर्वर का दूसरा उदाहरण नहीं है,

इसलिए मुझे यकीन नहीं है कि हाल के संस्करण में बदल गया है जो इसे अस्वीकार करता है। UI का उपयोग करना एक समान संदेश उत्पन्न करता है:

आप लिंक किए गए सर्वर के रूप में स्थानीय SQL सर्वर नहीं बना सकते।

मैं समझता हूं कि यह अनुरोध करने के लिए एक अजीब बात है, लेकिन यह कुछ विरासत कोड का समर्थन करने के लिए है जो 2005 में काम किया था (और अलग-अलग उदाहरणों में इस्तेमाल किया गया था)। प्रलेखन में कहा गया है कि इसे काम करना चाहिए, लेकिन ऐसा नहीं है। क्या 2014 में काम करने का कोई तरीका है, या क्या मुझे अंतर्निहित कोड को संशोधित करना होगा?


1
यह वास्तव में भी फर्क नहीं करना चाहिए। आप एक स्थानीय सर्वर पर 4-भाग पहचानकर्ता का उपयोग कर सकते हैं।
क्रिस ग्रुटेमेयर 21

आप स्थानीय सर्वर से लिंक सर्वर बनाने की कोशिश क्यों कर रहे हैं? क्या हिस्सा काम नहीं करता है? हो सकता है कि क्या अपने प्रश्न के बारे में ... होना चाहिए कि
हारून बर्ट्रेंड

1
विरासत कोड एक लिंक किए गए सर्वर के माध्यम से जुड़ने वाले विभिन्न उदाहरणों के लिए लिखा गया था। इतिहास के कुछ बिंदु पर, दोनों उदाहरणों को एक ही उदाहरण में विलय कर दिया गया था, लेकिन कोड और लिंक किए गए सर्वर अपरिवर्तित रहे। मेरा लक्ष्य कोड का समर्थन करना है, क्योंकि a) मुझे नहीं पता कि इसे बदलने में क्या शामिल है, और b) मुख्य डेवलपर भविष्य में अलग-अलग उदाहरणों के लिए वितरित किए जा रहे डेटाबेस का समर्थन करने में सक्षम होना चाहता है।
मैथ्यू

3
आप पर्यायवाची विचार करना चाह सकते हैं। फिर अगर आपके पास ऑब्जेक्ट्स अलग-अलग सर्वरों में चले गए हैं तो आप केवल समानार्थी शब्द को छोड़ दें और पुन: बनाएं और कोड को स्पर्श न करें।
हारून बर्ट्रेंड

धन्यवाद हारून। मुझे लगता है कि वास्तव में वही है जिसकी मुझे तलाश थी। एक डेटाबेस पर्यायवाची शब्द का उपयोग करता है, इसलिए मुझे बस चार भाग नाम से सर्वर नाम को हटाने / बनाने की आवश्यकता है। फिर मैं लिंक किए गए सर्वर को पूरी तरह से समाप्त कर सकता हूं। यदि डेटाबेस बाद में स्थानांतरित हो जाता है, तो मैं लिंक किए गए सर्वर का नाम वापस समानार्थी में जोड़ सकता हूं। समझ गया।
मैथ्यू

जवाबों:


20

पता चलता है कि मैं इसे विभिन्न मापदंडों के साथ काम करने में सक्षम था।

EXEC master.dbo.sp_addlinkedserver
    @server = N'LinkedServerName', 
    @srvproduct=N'', 
    @provider=N'SQLNCLI', 
    @provstr=N'DRIVER={SQL Server};Server=(local)\InstanceName; Initial Catalog=DBNAME;uid=user;pwd=password;'

11

अपने कोड के अंदर लिंक किए गए सर्वर संदर्भ से निपटने के बजाय, आप किसी भी स्थान पर एक समानार्थी शब्द के उपयोग से जुड़े एक बार के कोड निवेश पर विचार करना चाह सकते हैं, जहां वर्तमान में आपके पास लिंक सर्वर है।

इसलिए इसके बजाय:

SELECT whatever FROM someserver.somedb.dbo.mytable;

आपके पास एक समानार्थी शब्द है:

CREATE SYNONYM dbo.mytablepointer FOR someserver.somedb.dbo.mytable;

फिर आपका कोड बस है:

SELECT whatever FROM dbo.mytablepointer;

फिर यदि आपके पास अलग-अलग सर्वरों पर ले जाने वाली वस्तुएं हैं, तो आप बस छोड़ दें और समानार्थक शब्द बनाएं और कोड को स्पर्श न करें:

DROP SYNONYM dbo.mytablepointer;
CREATE SYNONYM dbo.mytablepointer FOR otherserver.somedb.dbo.mytable;

3

यह कमांड चलाएँ - आप स्थानीय सर्वर का उपयोग करने में सक्षम होंगे क्योंकि लिंक किए गए सर्वर में कोई कोड परिवर्तन की आवश्यकता नहीं है

EXEC sp_addlinkedserver @server = 'LinkedServerName',
                        @provider ='SQLNCLI',
                        @datasrc ='LocalServerName',
                        @srvproduct = 'SQL'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.