यह आलेख Transact-SQL का उपयोग करके SQL सर्वर में लिंक किए गए सर्वर को बनाने का एक उदाहरण प्रदान करता है। टी-एसक्यूएल का उपयोग आपको ग्राफिकल यूजर इंटरफेस (जैसे एसएसएमएस) पर भरोसा किए बिना लिंक किए गए सर्वर को बनाने में सक्षम बनाता है।
सिंटैक्स
T-SQL का उपयोग करके एक लिंक्ड सर्वर बनाने के लिए, sp_addlinkedserver
. का उपयोग करें सिस्टम संग्रहीत प्रक्रिया।
आधिकारिक वाक्य रचना इस प्रकार है:
sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ] [ , [ @provider= ] 'provider_name' ] [ , [ @datasrc= ] 'data_source' ] [ , [ @location= ] 'location' ] [ , [ @provstr= ] 'provider_string' ] [ , [ @catalog= ] 'catalog' ]
अधिकांश तर्क वैकल्पिक हैं, लेकिन आपको लिंक किए गए सर्वर नाम प्रदान करने की आवश्यकता होगी।
आप शायद लिंक किए गए सर्वर के डेटा स्रोत या स्थान और शायद प्रदाता का नाम भी निर्दिष्ट करना चाहेंगे। catalog
तर्क आपको एक डिफ़ॉल्ट डेटाबेस निर्दिष्ट करने की अनुमति देता है जिससे लिंक किया गया सर्वर मैप किया गया है। इनमें से प्रत्येक तर्क की व्याख्या के लिए आधिकारिक Microsoft दस्तावेज़ देखें।
उदाहरण - लिंक किया गया सर्वर बनाएं
T-SQL का उपयोग करके एक लिंक्ड सर्वर बनाने के लिए, sp_addlinkedserver
निष्पादित करें लिंक किए गए सर्वर के साथ-साथ उसके स्रोत के नाम से गुजरते समय संग्रहीत प्रक्रिया।
लिंक किए गए सर्वर को बनाने का एक उदाहरण यहां दिया गया है:
EXEC sp_addlinkedserver @server=N'Homer', @srvproduct=N'', @provider=N'MSOLEDBSQL', @datasrc=N'172.17.0.2,1433', @catalog='Music';
इस मामले में, लिंक किए गए सर्वर का नाम "होमर" है और मैं सर्वर का आईपी पता निर्दिष्ट करता हूं, उसके बाद टीसीपी पोर्ट (मेरे मामले में यह वास्तव में उसी मशीन पर एक डॉकर कंटेनर है)। आवश्यकतानुसार सर्वर का नाम और आईपी पता/पोर्ट बदलें। मैं "संगीत" नामक एक डिफ़ॉल्ट डेटाबेस भी निर्दिष्ट करता हूं।
यह उदाहरण MSOLEDBSQL
का उपयोग करता है प्रदाता के नाम के रूप में, लेकिन आप अपनी स्थिति में जो भी प्रदाता नाम लागू हो उसका उपयोग कर सकते हैं। मेरे मामले में, मैं SQL सर्वर के दूसरे उदाहरण से लिंक कर रहा हूं।
ध्यान दें कि MSOLEDBSQL
SQL सर्वर के लिए अनुशंसित प्रदाता है। अगर आपने पहले SQLOLEDB
. का इस्तेमाल किया है या SQLNCLI
, इन दोनों को अब बहिष्कृत कर दिया गया है। माइक्रोसॉफ्ट ने ओएलई डीबी को कम करने और इसे 2018 में रिलीज करने का फैसला किया।
यदि आप Oracle से लिंक करना चाहते हैं तो आप OraOLEDB.Oracle
. का उपयोग कर सकते हैं , MS Access के लिए आप Microsoft.Jet.OLEDB.4.0
का उपयोग कर सकते हैं (2002-2003 प्रारूपों तक पहुँचने के लिए) या Microsoft.ACE.OLEDB.12.0
(2007 प्रारूप के लिए)। आधिकारिक दस्तावेज़ीकरण में विभिन्न परिदृश्यों के लिए उपयोग करने के लिए मापदंडों की एक तालिका है।
लिंक किए गए सर्वर का परीक्षण करें
लिंक किए गए सर्वर को जोड़ने के बाद, आप sp_testlinkedserver
. का उपयोग कर सकते हैं इसका परीक्षण करने के लिए:
EXEC sp_testlinkedserver Homer;
परिणाम (यदि सफल हो):
Commands completed successfully.
यदि आपको "लॉगिन विफल" त्रुटि मिलती है, तो संभावना है कि आपके पास दूरस्थ सर्वर पर संबंधित लॉगिन नहीं है। आपको स्थानीय सर्वर पर समान क्रेडेंशियल के साथ संबंधित लॉगिन की आवश्यकता होगी।
जिस तरह से यह काम करता है, जब आप पहली बार लिंक किए गए सर्वर को जोड़ते हैं, तो स्थानीय सर्वर पर सभी लॉगिन और लिंक किए गए सर्वर पर दूरस्थ लॉगिन के बीच एक डिफ़ॉल्ट मैपिंग स्वचालित रूप से बनाई जाती है। SQL सर्वर लॉगिन की ओर से लिंक किए गए सर्वर से कनेक्ट होने पर स्थानीय लॉगिन के क्रेडेंशियल का उपयोग करता है। यदि आपके स्थानीय लॉगिन में दूरस्थ सर्वर पर संबंधित लॉगिन नहीं है, तो आपको "लॉगिन विफल" त्रुटि मिलेगी।
लिंक किए गए सर्वर के लिए लॉगिन जोड़ें
यदि आप नहीं चाहते कि लिंक किया गया सर्वर आपके स्वयं के लॉगिन का उपयोग करे, तो आप इसका उपयोग करने के लिए एक अलग लॉगिन निर्दिष्ट कर सकते हैं। जब तक रिमोट सर्वर में समान क्रेडेंशियल के साथ संबंधित लॉगिन होता है, तब तक आपको जाना अच्छा रहेगा। जाहिर है, आपको यह सुनिश्चित करने की आवश्यकता होगी कि दूरस्थ खाते के पास वह करने के लिए उपयुक्त अनुमतियाँ हैं जो आपको करने की आवश्यकता है।
लिंक किए गए सर्वर के लिए SQL सर्वर लॉगिन जोड़ने का एक उदाहरण यहां दिया गया है।
EXEC sp_addlinkedsrvlogin @rmtsrvname=N'Homer', @useself=N'FALSE', @locallogin=NULL, @rmtuser=N'Marge', @rmtpassword=N'BigStrong#Passw0rd';
लिंक किए गए सर्वर को बनाने के बाद इसे स्थानीय सर्वर पर चलाएँ। आपको वास्तविक (दूरस्थ) लिंक किए गए सर्वर पर समान क्रेडेंशियल्स के साथ संबंधित लॉगिन की आवश्यकता होगी।
यह "होमर" नामक लिंक किए गए सर्वर के लिए "मार्ज" नामक एक लॉगिन जोड़ता है। जब तक दूरस्थ सर्वर में समान क्रेडेंशियल के साथ लॉगिन होता है, तब तक स्थानीय सर्वर लिंक किए गए सर्वर में लॉग इन करने में सक्षम होगा।
दूरस्थ सर्वर पर संबंधित लॉगिन जोड़ने के उदाहरण के लिए SQL सर्वर में लिंक्ड सर्वर लॉगिन जोड़ें देखें।
लिंक किए गए सर्वर को छोड़ें
"होमर" नामक लिंक किए गए सर्वर और सभी संबद्ध लॉगिन को छोड़ने का एक उदाहरण यहां दिया गया है।
EXEC sp_dropserver 'Homer', 'droplogins';
droplogins
तर्क वैकल्पिक है, लेकिन यदि आप किसी लिंक किए गए सर्वर को छोड़ते समय इसे निर्दिष्ट नहीं करते हैं जिसमें संबद्ध दूरस्थ और लिंक सर्वर लॉगिन प्रविष्टियां हैं, या एक प्रतिकृति प्रकाशक के रूप में कॉन्फ़िगर किया गया है, तो एक त्रुटि संदेश वापस आ जाता है।
लिंक किए गए सर्वर को छोड़ने के अधिक उदाहरणों के लिए टी-एसक्यूएल का उपयोग करके एक लिंक किए गए सर्वर को निकालें देखें।
लिंक किए गए सर्वर के विरुद्ध एक वितरित क्वेरी चलाएँ
अब जब हमने लिंक्ड सर्वर बना लिया है, तो इसके विरुद्ध एक वितरित क्वेरी चलाने का एक उदाहरण यहां दिया गया है:
SELECT * FROM Homer.Music.dbo.Artists;
इस और स्थानीय क्वेरी के बीच एकमात्र अंतर यह है कि आपको लिंक किए गए सर्वर नाम को FROM
से जोड़ना होगा खंड।
इस तरह:
LinkedServer.Database.Schema.Table
वैकल्पिक रूप से, आप OPENQUERY()
. का उपयोग कर सकते हैं पास-थ्रू क्वेरी चलाने के लिए:
SELECT * FROM OPENQUERY( Homer, 'SELECT * FROM Music.dbo.Artists;' );