এসকিউএল সার্ভারে দুটি পৃথক সার্ভার থেকে ডেটা নির্বাচন করা


363

এসকিউএল সার্ভারে দুটি পৃথক সার্ভারে থাকা দুটি পৃথক ডাটাবেস থেকে একই ক্যোয়ারিতে আমি কীভাবে ডেটা নির্বাচন করতে পারি?


6
এরিক এবং র‌্যাগিং বুলের উত্তরগুলি খুব সহজ। আমি এটি ডিইভি থেকে পিআরডি-তে 5 ঘন্টা থেকে 18 ঘন্টা অবধি 17 সেকেন্ডের সময় কেটে নেওয়ার সময়কালের গণতালিকাগুলি অনুলিপি করতে সক্ষম হয়েছি।
ক্রিস অ্যালডরিচ

একটি সামান্য দ্বিধাদায়ক প্রশ্ন সম্পাদনা করার জন্য এবং এটিকে ১ 170০-প্রতিনিধি প্রশ্ন করার জন্য @ এরিক, কুদোস :)
এরিক উউ

উত্তর:


345

আপনি যা খুঁজছেন তা লিঙ্কযুক্ত সার্ভারগুলি। আপনি তাদের কাছে এসএসএমএসে অবজেক্ট এক্সপ্লোরারের গাছের নীচের জায়গা থেকে পেতে পারেন:

Server Objects-->Linked Servers

অথবা আপনি sp_addlinkedserver ব্যবহার করতে পারেন ।

আপনাকে কেবল একটি সেট আপ করতে হবে। এটি একবার হয়ে গেলে আপনি অন্যান্য সার্ভারে এমন কোনও টেবিল কল করতে পারেন:

select
    *
from
    LocalTable,
    [OtherServerName].[OtherDB].[dbo].[OtherTable]

মনে রাখবেন যে মালিক সর্বদা নন dbo, সুতরাং আপনি যে কোনও স্কিমা ব্যবহার করেন তা এটির সাথে প্রতিস্থাপন করতে ভুলবেন না।


13
লিঙ্কযুক্ত সার্ভার ছাড়া আমরা কি এটি করতে পারি?
স্টিম

5
@ এরিক, এসএসএমএসে সার্ভার অবজেক্টস কোথায়?
সোশি আশের

9
@SahiAsher - আপনি যখন কোনও সার্ভারের সাথে সংযুক্ত হন, সার্ভার অবজেক্টস অবজেক্ট এক্সপ্লোরারের গাছের একটি ফোল্ডার।
এরিক

2
যদি না জানা থাকে তবে আপনি ডিফল্টটি ব্যবহার করতে স্কিমাটি বাদ দিতেও পারেন। উদাহরণস্বরূপ [OtherServerName].[OtherDB]..[OtherTable]তবে জানা থাকলে এটি অন্তর্ভুক্ত করা ভাল।
টম বোয়ার্স

92

আপনি এটি লিঙ্কযুক্ত সার্ভার ব্যবহার করে করতে পারেন।

সাধারণত সংযুক্ত সার্ভারগুলি একটি লেনদেন-এসকিউএল স্টেটমেন্ট কার্যকর করতে ডেটাবেস ইঞ্জিনকে সক্ষম করার জন্য কনফিগার করা হয় যা এসকিউএল সার্ভারের অন্য কোনও ক্ষেত্রে টেবিলগুলি অন্তর্ভুক্ত করে, বা ওরাকেলের মতো অন্য কোনও ডাটাবেস পণ্য। মাইক্রোসফ্ট অ্যাক্সেস এবং এক্সেল সহ অনেক ধরণের ওএলই ডিবি ডেটা উত্সগুলি লিঙ্কযুক্ত সার্ভার হিসাবে কনফিগার করা যেতে পারে।

লিঙ্কযুক্ত সার্ভারগুলি নিম্নলিখিত সুবিধাগুলি সরবরাহ করে:

  • এসকিউএল সার্ভারের বাইরে থেকে ডেটা অ্যাক্সেস করার ক্ষমতা।
  • এন্টারপ্রাইজ জুড়ে বিজাতীয় ডেটা উত্সগুলিতে বিতরণ করা ক্যোয়ারী, আপডেট, কমান্ড এবং লেনদেন জারি করার ক্ষমতা।
  • একইভাবে বিভিন্ন ডেটা উত্সগুলিকে সম্বোধন করার ক্ষমতা।

লিঙ্কযুক্ত সার্ভার সম্পর্কে আরও পড়ুন ।

একটি লিঙ্কযুক্ত সার্ভার তৈরি করতে এই পদক্ষেপগুলি অনুসরণ করুন:

  1. সার্ভার অবজেক্টস -> লিঙ্কযুক্ত সার্ভার -> নতুন লিঙ্কযুক্ত সার্ভার

  2. রিমোট সার্ভারের নাম সরবরাহ করুন।

  3. রিমোট সার্ভারের প্রকার (এসকিউএল সার্ভার বা অন্যান্য) নির্বাচন করুন।

  4. সুরক্ষা নির্বাচন করুন -> এই সুরক্ষা প্রসঙ্গটি ব্যবহার করে তৈরি করুন এবং দূরবর্তী সার্ভারের লগইন এবং পাসওয়ার্ড সরবরাহ করুন।

  5. ঠিক আছে ক্লিক করুন এবং আপনি সম্পন্ন !!

লিঙ্কযুক্ত সার্ভার তৈরি করার জন্য এখানে একটি সহজ টিউটোরিয়াল।

অথবা

আপনি কোয়েরি ব্যবহার করে লিঙ্কযুক্ত সার্ভার যুক্ত করতে পারেন।

বাক্য গঠন:

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

দ্রষ্টব্য: কীভাবে সার্ভারের নামটি হোস্টনাম / পোর্ট ছাড়া অন্য কিছু হতে পারে তা এখানে দেখুন ।
রিচার্ড

1
একটি টিপ এর বিট, আপনি যদি sp_addlinkedserver নিয়ে সমস্যা বোধ করেন। কথোপকথনে সার্ভারটি তৈরি করুন - এটি কাজ করে তা নিশ্চিত করুন - তারপরে সংযোগটি ডানদিকে ক্লিক করুন এবং স্ক্রিপ্টটি নির্বাচন করুন [t লিঙ্কযুক্ত সার্ভার হিসাবে তৈরি করুন
রিচার্ড হাশাম

25
SELECT
        *
FROM
        [SERVER2NAME].[THEDB].[THEOWNER].[THETABLE]

আপনি লিঙ্কযুক্ত সার্ভারগুলি ব্যবহার করে দেখতে পারেন। লিঙ্কযুক্ত সার্ভারগুলি অন্যান্য ধরণের ডেটা উত্স হতে পারে যেমন ডিবি 2 প্ল্যাটফর্ম। এসকিউএল সার্ভার টিএসকিউএল বা স্প্রোক কল থেকে ডিবি 2 অ্যাক্সেস করার চেষ্টা করার জন্য এটি একটি পদ্ধতি ...


2
এই পদ্ধতি কি সব সময় কাজ করবে? এটি ব্যর্থ হতে পারে যেখানে পরিস্থিতিতে কি?
স্টিম

3
এটি আমার এনভির মধ্যে ব্যর্থ হয়েছে তা নিশ্চিত করে, ত্রুটি বলেছে যে আমার
অ্যাডলিংকড

1
এটি কোনও লিঙ্কযুক্ত সার্ভার ব্যবহার না করে কারও পক্ষে কাজ করে?
ডগ এস

পরীক্ষিত এবং প্রাপ্ত ত্রুটিটি হ'ল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.
হোয়াটপয়েন্ট পয়েন্ট

22

2 টি ভিন্ন ভিন্ন ডাটাবেস জুড়ে জিজ্ঞাসা করা একটি বিতরণ করা ক্যোয়ারী। এখানে কয়েকটি কৌশল প্লাসের উপকারিতা এবং কনসগুলির একটি তালিকা রয়েছে:

  1. লিঙ্কযুক্ত সার্ভারগুলি: এসকিউএল সার্ভারের প্রতিরূপ সরবরাহের তুলনায় বিস্তৃত বিভিন্ন ডেটা উত্সগুলিতে অ্যাক্সেস সরবরাহ করুন
  2. লিঙ্কযুক্ত সার্ভার: ডেটা উত্সগুলির সাথে সংযুক্ত করুন যা প্রতিলিপি সমর্থন করে না বা যার জন্য অ্যাডহক অ্যাক্সেসের প্রয়োজন
  3. লিঙ্কযুক্ত সার্ভারগুলি: OPendATASOURCE বা OPENROWSET এর চেয়ে ভাল পারফর্ম করুন
  4. ওপেনড্যাটাসোর্স এবং ওপেনরোউসেট ফাংশন: বিজ্ঞাপনের ভিত্তিতে ডেটা উত্স থেকে ডেটা পুনরুদ্ধারের জন্য সুবিধাজনক। OPENROWSET- এ বাল্ক সুবিধাগুলি রয়েছে যা / যে কোনও ফর্ম্যাট ফাইলের প্রয়োজনও নাও হতে পারে যা বেহাল হতে পারে
  5. বিকল্প : ভেরিয়েবল সমর্থন করে না
  6. সবগুলিই টি-এসকিউএল সমাধান। তুলনামূলকভাবে কার্যকর এবং সেট আপ করা সহজ
  7. সকলেই উত্স এবং বিবরণীর মধ্যে সংযোগের উপর নির্ভরশীল যা পারফরম্যান্স এবং স্কেলাবিলিটিটিকে প্রভাবিত করতে পারে

ওপেনকোরির এখনও একটি লিঙ্কযুক্ত সার্ভারের প্রয়োজন যেখানে ওপেন্ড্যাটাসসোর্স হিসাবে নেই
সিজে

16

এটা চেষ্টা কর:

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

16

এগুলি সমস্ত সূক্ষ্ম উত্তর, তবে এটি একটি অনুপস্থিত এবং এর নিজস্ব শক্তিশালী ব্যবহার রয়েছে। সম্ভবত ওপি যা চেয়েছিল তা এটি খাপ খায় না, তবে প্রশ্নটি অস্পষ্ট ছিল এবং আমি অনুভব করি যে অন্যরা এখানে তাদের উপায় খুঁজে পেতে পারে। মূলত আপনি একসাথে একাধিক সার্ভারের বিরুদ্ধে কোয়েরি চালাতে 1 উইন্ডো ব্যবহার করতে পারেন, এখানে কীভাবে:

এসএসএমএসে নিবন্ধিত সার্ভারগুলি খুলুন এবং স্থানীয় সার্ভার গ্রুপগুলির অধীনে একটি নতুন সার্ভার গ্রুপ তৈরি করুন ।

এই গোষ্ঠীর অধীনে আপনি যে সার্ভারটি জিজ্ঞাসা করতে চান তার জন্য নতুন সার্ভার রেজিস্ট্রেশন তৈরি করুন । ডিবি নামগুলি পৃথক হলে বৈশিষ্ট্যের প্রতিটিটির জন্য একটি ডিফল্ট সেট করা নিশ্চিত করুন।

আপনি প্রথম পদক্ষেপে তৈরি করা গোষ্ঠীতে ফিরে যান, ডান ক্লিক করুন এবং নতুন ক্যোয়ারী নির্বাচন করুন। একটি নতুন ক্যোয়ারী উইন্ডো খুলবে এবং আপনি যে কোনও ক্যোয়ারী চালাবেন তা গ্রুপের প্রতিটি সার্ভারে কার্যকর করা হবে। ফলাফলগুলি একটি একক ডেটা সেটে অতিরিক্ত কলামের নাম সহ উপস্থাপিত হয় যা নির্দেশ করে যে কোন সার্ভারটি এসেছে। আপনি স্ট্যাটাস বার ব্যবহার করেন তাহলে আপনি নোট হবে সার্ভার নাম দিয়ে প্রতিস্থাপিত হয় একাধিক


2
এটি ধরে নেওয়া যায় যে ক্যোয়ারী সমস্ত ডাটাবেসে একই টেবিলগুলি ব্যবহার করে। (যা সিস. টেবিলের মতো স্ট্যান্ডার্ড টেবিলগুলির জন্য ঠিক তবে dbo.mycustomers এর মতো কাস্টম তৈরি টেবিলগুলির পক্ষে সম্ভবত এটি নয়)
ডেনিস জাহেরউদ্দিন

এটি "দুটি পৃথক ডাটাবেস থেকে একই ক্যোয়ারী" দেওয়া হয়েছে এটির একই সারণী হওয়ার সম্ভাবনা রয়েছে। তবে হ্যাঁ আমি বেশ কয়েকটি সার্ভারে থাকা প্রোডাকশন সিস্টেমের জন্য এবং এমএসডিবি টেবিল অনুসন্ধানের জন্য নিয়মিত এই পদ্ধতিটি ব্যবহার করি।
পল

আসলেই দুর্দান্ত বৈশিষ্ট্য। অপূর্ণতাটি ফলাফলের সেটটির স্কিমাটি অবশ্যই মিলবে, কারণ এটি কোয়েরিটি দু'বার কার্যকর করে এবং সেগুলি একই সাথে একত্রে মিশে যায়। এটি দুর্দান্ত হবে যদি আপনি এসকিউএল-র মধ্যেই সার্ভারগুলি রেফারেন্স করতে পারতেন, যেমন আপনি লিঙ্কযুক্ত সার্ভারগুলির সাথে করতে পারেন, এমনকি আপনি ফলাফলের সাথে যোগ দিতে না পারলেও সেটগুলি পৃথকভাবে মূল্যায়ন করার জন্য তৈরি করতে হয়েছিল।
ক্রস

1
@ ক্রস আপনি সাজানোর পারে। একটি # আউটপুট টেবিল তৈরি করুন, @@ SERVERNAME এর উপর ভিত্তি করে যুক্তি করুন এবং ডেটা # আউটপুটে স্থাপন করুন তারপরে এটি নির্বাচন করে এটি শেষ করুন। আমি এসকিউএল 2000 এবং এসকিউএল ২০০8 আর 2 মেশিনগুলির মিশ্রণ থেকে লগের তথ্য অনুসন্ধানের জন্য অনুরূপ কাজ করেছি যার বিভিন্ন স্তরের / তথ্যের কলাম রয়েছে, তবে @@ সার্ভারের পরিবর্তে আমি একটি সার্ভার সংস্করণ ভেরিয়েবল ব্যবহার করছিলাম।
পল

9

রিমোট সার্ভারে হোস্ট করা একটি এসকিউএল_সভার ২০০ to এর সাথে একটি এসকিউএল_সভার ২০০৮ সংযোগ করার জন্য আমার একই সমস্যা ছিল। অন্যান্য উত্তরগুলি আমার পক্ষে সোজাভাবে কাজ করে নি। আমি আমার টুইটযুক্ত সমাধানটি এখানে লিখছি কারণ আমি মনে করি এটি অন্য কারও পক্ষে কার্যকর হতে পারে।

দূরবর্তী আইপি ডিবি সংযোগের জন্য বর্ধিত উত্তর:

পদক্ষেপ 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আপনার এসকিউএল সার্ভার ডিবি হোস্ট করা রিমোট সার্ভারের আইপি ঠিকানা।

পদক্ষেপ 2: উদাহরণস্বরূপ আপনার প্রশ্নগুলি চালান :

SELECT * FROM [SRV_NAME].your_remote_db_name.dbo.your_table

...এবং এটাই!

সিনট্যাক্সের বিশদ: sp_addlinkedserver এবং sp_addlinkedsrvlogin


4

অন্যটিতে একটি সার্ভারে লিঙ্কযুক্ত সার্ভার সংজ্ঞা তৈরি করা হয়েছে (এটি করার জন্য আপনার SA এর প্রয়োজন আছে), তবে কেবল তাদের 4-অংশের নামকরণের সাথে উল্লেখ করুন (বিওএল দেখুন)।


4

সার্ভার ২০০৮:

এসএসএমএসে সার্ভার 1.DB1 এর সাথে সংযুক্ত হয়ে চেষ্টা করুন:

SELECT  * FROM
[server2].[DB2].[dbo].[table1]

অন্যরা যেমন উল্লেখ করেছে, এটি যদি কাজ না করে তবে এটি সার্ভারের সাথে সংযুক্ত নয়।

আমি ত্রুটি পেয়েছি:

Sys.servers এ সার্ভার DB2 খুঁজে পাওয়া যায় নি। সঠিক সার্ভার নাম নির্দিষ্ট করা হয়েছে তা যাচাই করুন। যদি প্রয়োজন হয় তবে সার্ভারকে sys.servers এ যুক্ত করতে sp_addlinkedserver সঞ্চিত পদ্ধতিটি কার্যকর করুন।

সার্ভার যুক্ত করতে:

রেফারেন্স: sp_addlinkedserver লিঙ্কটি ব্যবহার করে সার্ভার যুক্ত করতে: [1]: sp_addlinkedserver ব্যবহার করে সার্ভার যুক্ত করতে

আপনার সিএস সার্ভারে কী আছে তা দেখার জন্য এটি কেবল জিজ্ঞাসা করুন:

SELECT * FROM [sys].[servers]


2

যেমন @ সুপার 9 ডেটা সরবরাহকারী এসকিউএলএলডিবি'র সাথে এসকিউএল সার্ভার প্রমাণীকরণ ব্যবহার করে ওপেন্ডাসটর্স সম্পর্কে জানিয়েছে । আমি এখানে কেবল একটি টেবিলের জন্য একটি কোড স্নিপেট পোস্ট করছি বর্তমান সেভার ডাটাবেসে যেখানে কোড চলছে এবং অন্যটি অন্য সার্ভারে '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

0
sp_addlinkedserver('servername')

সুতরাং এটি এভাবে যেতে হবে -

select * from table1
unionall
select * from [server1].[database].[dbo].[table1]

0

আমি জানি এটি একটি পুরানো প্রশ্ন তবে আমি প্রতিশব্দ ব্যবহার করি। অনুমান করা হয় যে কোয়েরিটি ডাটাবেস সার্ভার এ-এর মধ্যে সম্পাদিত হয়েছে এবং এটি একটি ডাটাবেস সার্ভার বি তে একটি সারণী সন্ধান করে যা সার্ভার এ-তে নেই then তারপর একটি ডাটাবেসের একটি প্রতিশব্দ যুক্ত করুন যা সার্ভার বি থেকে আপনার টেবিলটি কল করে Your যেকোন স্কিমা বা বিভিন্ন ডাটাবেসের নাম অন্তর্ভুক্ত করুন, কেবল যথারীতি সারণির নাম কল করুন এবং এটি কার্যকর হবে।

প্রতি সারসংক্ষেপ প্রতি লিঙ্ক সাজানোর হিসাবে সার্ভারগুলি লিঙ্ক করার প্রয়োজন নেই।


1
এখন, এই প্রসঙ্গে একটি "প্রতিশব্দ" কি?
ওসকার বার্গগ্রেন

এটি একটি ডাটাবেস অবজেক্ট যা অন্য ডাটাবেসের একটি বেস অবজেক্টকে বোঝায়। এখানে আরও তথ্য: ডকস.মাইক্রোসফট.ইন- ইউএস
নিক্লাস হেনরিকসন

শীতল, আমি এই বৈশিষ্ট্য সম্পর্কে জানতাম না। তবে, আপনি আরও জানান যে তারা লিঙ্কযুক্ত সার্ভারের প্রয়োজনীয়তা এড়িয়ে চলে, তবে আমি কীভাবে তা দেখতে ব্যর্থ হই। প্রতিশব্দ নিজেই ঠিক এটি একটি সমার্থক হিসাবে উপস্থিত হয়, এবং নিজেই কোনও নির্দিষ্ট দূরবর্তী ক্ষমতা ধারণ করে না। উদাহরণস্বরূপ, বি ডকস.মাইক্রোসফট.এইন.ইউএস / এসকিএল / টি- এসকিএল / স্টেটমেন্টস / এ , তারা একটি প্রতিশব্দ থেকে রেফারেন্স করার আগে একটি লিঙ্কযুক্ত সার্ভার তৈরি করে।
ওসকার বার্গগ্রেন

সত্য, আমি ধরে নিয়েছি ডেটাবেসগুলি একই সার্ভার পরিবেশে রয়েছে। অবশ্যই ডাটাবেসগুলি একে অপরের থেকে দূরে থাকলে অবশ্যই আপনাকে লিঙ্ক করতে হবে। ডাটাবেস-থেকে-ডাটাবেস সম্পর্কের সাথে অ্যাক্সেসের অন্য কোনও উপায় নেই।
নিক্লাস হেনরিকসন

0

সার্ভার অবজেক্টস ---> লিঙ্কযুক্ত সার্ভার ---> নতুন লিঙ্কযুক্ত সার্ভার

লিঙ্কযুক্ত সার্ভারে অন্য সার্ভারের জন্য সার্ভারের নাম বা আইপি ঠিকানা লিখুন এবং এসকিউএল সার্ভার ইন সুরক্ষা নির্বাচন করুন (এই সুরক্ষা প্রসঙ্গটি ব্যবহার করে তৈরি করুন) অন্য সার্ভারের জন্য লগইন এবং পাসওয়ার্ড লিখুন

এখন সংযুক্ত তারপর ব্যবহার করুন

Select * from [server name or ip addresses ].databasename.dbo.tblname

0

লিঙ্কযুক্ত সার্ভারগুলি যুক্ত করার জন্য সরলীকৃত সমাধান

প্রথম সার্ভার

EXEC sp_addlinkedserver @server='ip,port\instancename'

দ্বিতীয় লগইন

EXEC sp_addlinkedsrvlogin 'ip,port\instancename', 'false', NULL, 'remote_db_loginname', 'remote_db_pass'

স্থানীয় ডিবিতে লিঙ্ক করা থেকে অনুসন্ধানগুলি কার্যকর করুন

INSERT INTO Tbl (Col1, Col2, Col3)
SELECT Col1, Col2, Col3
FROM [ip,port\instancename].[linkedDBName].[linkedTblSchema].[linkedTblName]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.