मैं SQL सर्वर में दो अलग-अलग सर्वरों पर एक ही क्वेरी में डेटा का चयन कैसे कर सकता हूं?
मैं SQL सर्वर में दो अलग-अलग सर्वरों पर एक ही क्वेरी में डेटा का चयन कैसे कर सकता हूं?
जवाबों:
क्या आप के लिए देख रहे हैं लिंक्ड सर्वर हैं। आप उन्हें ऑब्जेक्ट एक्सप्लोरर के पेड़ में निम्नलिखित स्थान से एसएसएमएस में प्राप्त कर सकते हैं:
Server Objects-->Linked Servers
या आप sp_addlinkedserver का उपयोग कर सकते हैं ।
आपको केवल एक सेट करना होगा। एक बार आपके पास ऐसा हो, तो आप दूसरे सर्वर पर एक टेबल कॉल कर सकते हैं जैसे:
select
*
from
LocalTable,
[OtherServerName].[OtherDB].[dbo].[OtherTable]
ध्यान दें कि मालिक हमेशा नहीं होता है dbo
, इसलिए जो भी स्कीमा आप उपयोग करते हैं, उसे प्रतिस्थापित करना सुनिश्चित करें।
[OtherServerName].[OtherDB]..[OtherTable]
हालांकि यह सबसे अच्छा है अगर इसे जाना जाता है।
आप इसे लिंक्ड सर्वर का उपयोग करके कर सकते हैं।
आमतौर पर लिंक किए गए सर्वर को Transact-SQL स्टेटमेंट को निष्पादित करने के लिए डेटाबेस इंजन को सक्षम करने के लिए कॉन्फ़िगर किया जाता है, जिसमें SQL सर्वर के किसी अन्य उदाहरण में टेबल या Oracle जैसे अन्य डेटाबेस उत्पाद शामिल होते हैं। कई प्रकार के OLE DB डेटा स्रोतों को लिंक्ड सर्वर के रूप में कॉन्फ़िगर किया जा सकता है, जिसमें Microsoft Access और Excel शामिल हैं।
लिंक किए गए सर्वर निम्नलिखित लाभ प्रदान करते हैं:
लिंक्ड सर्वर के बारे में और पढ़ें ।
सर्वर ऑब्जेक्ट्स -> लिंक्ड सर्वर -> न्यू लिंक्ड सर्वर
दूरस्थ सर्वर नाम प्रदान करें।
रिमोट सर्वर प्रकार (SQL सर्वर या अन्य) का चयन करें।
सुरक्षा का चयन करें -> इस सुरक्षा संदर्भ का उपयोग करके बनाया जाए और रिमोट सर्वर का लॉगिन और पासवर्ड प्रदान करें।
ठीक क्लिक करें और आप कर रहे हैं !!
लिंक सर्वर बनाने के लिए यहां एक सरल ट्यूटोरियल है।
या
आप क्वेरी का उपयोग करके लिंक किए गए सर्वर को जोड़ सकते हैं।
वाक्य - विन्यास:
sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ]
[ , [ @provider= ] 'provider_name' ]
[ , [ @datasrc= ] 'data_source' ]
[ , [ @location= ] 'location' ]
[ , [ @provstr= ] 'provider_string' ]
[ , [ @catalog= ] 'catalog' ]
Sp_addlinkedserver के बारे में और पढ़ें ।
आपको केवल एक बार लिंक्ड सर्वर बनाना होगा । लिंक्ड सर्वर बनाने के बाद, हम इसे निम्नानुसार क्वेरी कर सकते हैं:
select * from LinkedServerName.DatabaseName.OwnerName.TableName
SELECT
*
FROM
[SERVER2NAME].[THEDB].[THEOWNER].[THETABLE]
आप लिंक्ड सर्वर का उपयोग करके भी देख सकते हैं। लिंक्ड सर्वर अन्य प्रकार के डेटा स्रोत भी हो सकते हैं जैसे DB2 प्लेटफ़ॉर्म। यह SQL Server TSQL या Sproc कॉल से DB2 तक पहुँचने की कोशिश करने के लिए एक तरीका है ...
Could not find server '88.208.229.164' in sys.servers. Verify that the correct server name was specified. If necessary, execute the stored procedure sp_addlinkedserver to add the server to sys.servers.
2 अलग-अलग डेटाबेस में क्वेरी करना एक वितरित क्वेरी है। यहाँ कुछ तकनीकों और पेशेवरों और विपक्षों की सूची दी गई है:
इसे इस्तेमाल करे:
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=YOUR SERVER;Trusted_Connection=yes;','SELECT * FROM Table1') AS a
UNION
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=ANOTHER SERVER;Trusted_Connection=yes;','SELECT * FROM Table1') AS a
ये सभी ठीक उत्तर हैं, लेकिन यह गायब है और इसका अपना शक्तिशाली उपयोग है। संभवतः यह ठीक नहीं है कि ओपी क्या चाहता था, लेकिन सवाल अस्पष्ट था और मुझे लगता है कि अन्य लोग यहां अपना रास्ता खोज सकते हैं। मूल रूप से आप एक साथ कई सर्वरों के खिलाफ क्वेरी चलाने के लिए 1 विंडो का उपयोग कर सकते हैं, यहां बताया गया है:
SSMS में पंजीकृत सर्वर खोलें और स्थानीय सर्वर समूहों के तहत एक नया सर्वर समूह बनाएँ ।
इस समूह के तहत आप जिस भी सर्वर से क्वेरी करना चाहते हैं उसके लिए नया सर्वर पंजीकरण बनाएं । यदि DB नाम अलग-अलग हों तो प्रॉपर्टी में प्रत्येक के लिए डिफ़ॉल्ट सेट करना सुनिश्चित करें।
अब आप पहले चरण में बनाए गए ग्रुप में वापस जाएँ, राइट क्लिक करें और न्यू क्वेरी का चयन करें। एक नई क्वेरी विंडो खुलेगी और आपके द्वारा चलाए गए किसी भी क्वेरी को समूह में प्रत्येक सर्वर पर निष्पादित किया जाएगा। परिणाम एक एकल कॉलम सेट के साथ एक एकल डेटा सेट में प्रस्तुत किए जाते हैं जो यह दर्शाता है कि रिकॉर्ड किस सर्वर से आया है। यदि आप स्टेटस बार का उपयोग करते हैं तो आप नोट करेंगे कि सर्वर का नाम कई के साथ बदल दिया गया है ।
एक SQL सर्वर को 2008 में दूरस्थ सर्वर में होस्ट किए गए SQL_server 2016 से कनेक्ट करने के लिए मेरे पास एक ही समस्या थी। अन्य उत्तरों ने मेरे लिए सीधा काम नहीं किया। मैं अपना सुव्यवस्थित समाधान यहां लिखता हूं क्योंकि मुझे लगता है कि यह किसी और के लिए उपयोगी हो सकता है।
दूरस्थ आईपी डीबी कनेक्शन के लिए एक विस्तारित जवाब:
चरण 1: लिंक सर्वर
EXEC sp_addlinkedserver @server='SRV_NAME',
@srvproduct=N'',
@provider=N'SQLNCLI',
@datasrc=N'aaa.bbb.ccc.ddd';
EXEC sp_addlinkedsrvlogin 'SRV_NAME', 'false', NULL, 'your_remote_db_login_user', 'your_remote_db_login_password'
... SRV_NAME
एक आविष्कृत नाम कहां है। हम अपने प्रश्नों से दूरस्थ सर्वर को संदर्भित करने के लिए इसका उपयोग करेंगे। aaa.bbb.ccc.ddd
आपके SQLserver DB की मेजबानी करने वाले दूरस्थ सर्वर का आईपी पता है।
चरण 2: उदाहरण के लिए अपने प्रश्नों को चलाएं :
SELECT * FROM [SRV_NAME].your_remote_db_name.dbo.your_table
...और बस!
सिंटैक्स विवरण: sp_addlinkedserver और sp_addlinkedsrvlogin
एक सर्वर से दूसरे सर्वर में एक लिंक्ड सर्वर परिभाषा बनाई गई (आपको ऐसा करने के लिए एसए की आवश्यकता है), फिर उन्हें केवल 4-पार्ट नामकरण (बीओएल देखें) के साथ संदर्भ दें।
सर्वर 2008:
जब SSMS server1.DB1 से जुड़ा हो और प्रयास करें:
SELECT * FROM
[server2].[DB2].[dbo].[table1]
जैसा कि दूसरों ने उल्लेख किया है, अगर यह काम नहीं करता है क्योंकि सर्वर लिंक नहीं है।
मुझे त्रुटि मिलती है:
Sys.servers में सर्वर DB2 नहीं मिल सका। सत्यापित करें कि सही सर्वर नाम निर्दिष्ट किया गया था। यदि आवश्यक हो, तो sys.servers में सर्वर जोड़ने के लिए संग्रहीत कार्यविधि sp_addlinkedserver निष्पादित करें।
सर्वर जोड़ने के लिए:
संदर्भ: sp_addlinkedserver लिंक का उपयोग करके सर्वर जोड़ने के लिए: [1]: sp_addlinkedserver का उपयोग करके सर्वर जोड़ने के लिए
यह देखने के लिए कि आपके sys.servers में क्या है, बस इसे क्वेरी करें:
SELECT * FROM [sys].[servers]
जैसा कि @ Super9 ने डेटा प्रदाता SQLOLEDB के साथ SQL सर्वर प्रमाणीकरण का उपयोग करते हुए OPENDATASOURCE के बारे में बताया । मैं यहाँ सिर्फ एक टेबल स्निपेट पोस्ट कर रहा हूँ, जो कि वर्तमान गंभीर डेटाबेस में है जहाँ कोड चल रहा है और दूसरे सर्वर में दूसरा '192.166.41.123'
SELECT top 2 * from dbo.tblHamdoonSoft tbl1 inner JOIN
OpenDataSource('SQLOLEDB','Data Source=192.166.41.123;User ID=sa;Password=hamdoonsoft')
.[TestDatabase].[dbo].[tblHamdoonSoft1] tbl2 on tbl1.id = tbl2.id
मुझे पता है कि यह एक पुराना प्रश्न है लेकिन मैं समानार्थक शब्द का उपयोग करता हूं। माना जाता है कि डेटाबेस डेटाबेस A के भीतर क्वेरी को निष्पादित किया जाता है, और एक डेटाबेस सर्वर B में एक तालिका की तलाश करता है, जो सर्वर A पर मौजूद नहीं है। तब A डेटाबेस पर एक समानार्थी शब्द जो सर्वर बी से आपकी तालिका को कॉल करता है, आपकी क्वेरी के पास नहीं है। किसी भी स्कीमा, या अलग-अलग डेटाबेस नाम शामिल करें, बस सामान्य रूप से तालिका नाम को कॉल करें और यह काम करेगा।
सर्वर को लिंक करने की कोई आवश्यकता नहीं है क्योंकि प्रति शब्द पर्यायवाची लिंक की तरह हैं।
सर्वर ऑब्जेक्ट्स ---> लिंक्ड सर्वर ---> नया लिंक्ड सर्वर
लिंक किए गए सर्वर में अन्य सर्वर के लिए सर्वर का नाम या आईपी पता लिखें और SQL सर्वर चुनें सुरक्षा में चयन करें (इस सुरक्षा संदर्भ का उपयोग करके बनाया जाए) अन्य सर्वर के लिए लॉगिन और पासवर्ड लिखें
अब जुड़ा है तो उपयोग करें
Select * from [server name or ip addresses ].databasename.dbo.tblname
लिंक किए गए सर्वर को जोड़ने के लिए सरलीकृत समाधान
पहला सर्वर
EXEC sp_addlinkedserver @server='ip,port\instancename'
दूसरा लॉगिन
EXEC sp_addlinkedsrvlogin 'ip,port\instancename', 'false', NULL, 'remote_db_loginname', 'remote_db_pass'
स्थानीय db से जुड़े प्रश्नों को निष्पादित करें
INSERT INTO Tbl (Col1, Col2, Col3)
SELECT Col1, Col2, Col3
FROM [ip,port\instancename].[linkedDBName].[linkedTblSchema].[linkedTblName]