এসকিউএল সার্ভারে দুটি পৃথক সার্ভারে থাকা দুটি পৃথক ডাটাবেস থেকে একই ক্যোয়ারিতে আমি কীভাবে ডেটা নির্বাচন করতে পারি?
এসকিউএল সার্ভারে দুটি পৃথক সার্ভারে থাকা দুটি পৃথক ডাটাবেস থেকে একই ক্যোয়ারিতে আমি কীভাবে ডেটা নির্বাচন করতে পারি?
উত্তর:
আপনি যা খুঁজছেন তা লিঙ্কযুক্ত সার্ভারগুলি। আপনি তাদের কাছে এসএসএমএসে অবজেক্ট এক্সপ্লোরারের গাছের নীচের জায়গা থেকে পেতে পারেন:
Server Objects-->Linked Servers
অথবা আপনি sp_addlinkedserver ব্যবহার করতে পারেন ।
আপনাকে কেবল একটি সেট আপ করতে হবে। এটি একবার হয়ে গেলে আপনি অন্যান্য সার্ভারে এমন কোনও টেবিল কল করতে পারেন:
select
*
from
LocalTable,
[OtherServerName].[OtherDB].[dbo].[OtherTable]
মনে রাখবেন যে মালিক সর্বদা নন dbo
, সুতরাং আপনি যে কোনও স্কিমা ব্যবহার করেন তা এটির সাথে প্রতিস্থাপন করতে ভুলবেন না।
[OtherServerName].[OtherDB]..[OtherTable]
তবে জানা থাকলে এটি অন্তর্ভুক্ত করা ভাল।
আপনি এটি লিঙ্কযুক্ত সার্ভার ব্যবহার করে করতে পারেন।
সাধারণত সংযুক্ত সার্ভারগুলি একটি লেনদেন-এসকিউএল স্টেটমেন্ট কার্যকর করতে ডেটাবেস ইঞ্জিনকে সক্ষম করার জন্য কনফিগার করা হয় যা এসকিউএল সার্ভারের অন্য কোনও ক্ষেত্রে টেবিলগুলি অন্তর্ভুক্ত করে, বা ওরাকেলের মতো অন্য কোনও ডাটাবেস পণ্য। মাইক্রোসফ্ট অ্যাক্সেস এবং এক্সেল সহ অনেক ধরণের ওএলই ডিবি ডেটা উত্সগুলি লিঙ্কযুক্ত সার্ভার হিসাবে কনফিগার করা যেতে পারে।
লিঙ্কযুক্ত সার্ভারগুলি নিম্নলিখিত সুবিধাগুলি সরবরাহ করে:
লিঙ্কযুক্ত সার্ভার সম্পর্কে আরও পড়ুন ।
সার্ভার অবজেক্টস -> লিঙ্কযুক্ত সার্ভার -> নতুন লিঙ্কযুক্ত সার্ভার
রিমোট সার্ভারের নাম সরবরাহ করুন।
রিমোট সার্ভারের প্রকার (এসকিউএল সার্ভার বা অন্যান্য) নির্বাচন করুন।
সুরক্ষা নির্বাচন করুন -> এই সুরক্ষা প্রসঙ্গটি ব্যবহার করে তৈরি করুন এবং দূরবর্তী সার্ভারের লগইন এবং পাসওয়ার্ড সরবরাহ করুন।
ঠিক আছে ক্লিক করুন এবং আপনি সম্পন্ন !!
লিঙ্কযুক্ত সার্ভার তৈরি করার জন্য এখানে একটি সহজ টিউটোরিয়াল।
অথবা
আপনি কোয়েরি ব্যবহার করে লিঙ্কযুক্ত সার্ভার যুক্ত করতে পারেন।
বাক্য গঠন:
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]
আপনি লিঙ্কযুক্ত সার্ভারগুলি ব্যবহার করে দেখতে পারেন। লিঙ্কযুক্ত সার্ভারগুলি অন্যান্য ধরণের ডেটা উত্স হতে পারে যেমন ডিবি 2 প্ল্যাটফর্ম। এসকিউএল সার্ভার টিএসকিউএল বা স্প্রোক কল থেকে ডিবি 2 অ্যাক্সেস করার চেষ্টা করার জন্য এটি একটি পদ্ধতি ...
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 উইন্ডো ব্যবহার করতে পারেন, এখানে কীভাবে:
এসএসএমএসে নিবন্ধিত সার্ভারগুলি খুলুন এবং স্থানীয় সার্ভার গ্রুপগুলির অধীনে একটি নতুন সার্ভার গ্রুপ তৈরি করুন ।
এই গোষ্ঠীর অধীনে আপনি যে সার্ভারটি জিজ্ঞাসা করতে চান তার জন্য নতুন সার্ভার রেজিস্ট্রেশন তৈরি করুন । ডিবি নামগুলি পৃথক হলে বৈশিষ্ট্যের প্রতিটিটির জন্য একটি ডিফল্ট সেট করা নিশ্চিত করুন।
আপনি প্রথম পদক্ষেপে তৈরি করা গোষ্ঠীতে ফিরে যান, ডান ক্লিক করুন এবং নতুন ক্যোয়ারী নির্বাচন করুন। একটি নতুন ক্যোয়ারী উইন্ডো খুলবে এবং আপনি যে কোনও ক্যোয়ারী চালাবেন তা গ্রুপের প্রতিটি সার্ভারে কার্যকর করা হবে। ফলাফলগুলি একটি একক ডেটা সেটে অতিরিক্ত কলামের নাম সহ উপস্থাপিত হয় যা নির্দেশ করে যে কোন সার্ভারটি এসেছে। আপনি স্ট্যাটাস বার ব্যবহার করেন তাহলে আপনি নোট হবে সার্ভার নাম দিয়ে প্রতিস্থাপিত হয় একাধিক ।
রিমোট সার্ভারে হোস্ট করা একটি এসকিউএল_সভার ২০০ 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
অন্যটিতে একটি সার্ভারে লিঙ্কযুক্ত সার্ভার সংজ্ঞা তৈরি করা হয়েছে (এটি করার জন্য আপনার SA এর প্রয়োজন আছে), তবে কেবল তাদের 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]
যেমন @ সুপার 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
আমি জানি এটি একটি পুরানো প্রশ্ন তবে আমি প্রতিশব্দ ব্যবহার করি। অনুমান করা হয় যে কোয়েরিটি ডাটাবেস সার্ভার এ-এর মধ্যে সম্পাদিত হয়েছে এবং এটি একটি ডাটাবেস সার্ভার বি তে একটি সারণী সন্ধান করে যা সার্ভার এ-তে নেই then তারপর একটি ডাটাবেসের একটি প্রতিশব্দ যুক্ত করুন যা সার্ভার বি থেকে আপনার টেবিলটি কল করে Your যেকোন স্কিমা বা বিভিন্ন ডাটাবেসের নাম অন্তর্ভুক্ত করুন, কেবল যথারীতি সারণির নাম কল করুন এবং এটি কার্যকর হবে।
প্রতি সারসংক্ষেপ প্রতি লিঙ্ক সাজানোর হিসাবে সার্ভারগুলি লিঙ্ক করার প্রয়োজন নেই।
সার্ভার অবজেক্টস ---> লিঙ্কযুক্ত সার্ভার ---> নতুন লিঙ্কযুক্ত সার্ভার
লিঙ্কযুক্ত সার্ভারে অন্য সার্ভারের জন্য সার্ভারের নাম বা আইপি ঠিকানা লিখুন এবং এসকিউএল সার্ভার ইন সুরক্ষা নির্বাচন করুন (এই সুরক্ষা প্রসঙ্গটি ব্যবহার করে তৈরি করুন) অন্য সার্ভারের জন্য লগইন এবং পাসওয়ার্ড লিখুন
এখন সংযুক্ত তারপর ব্যবহার করুন
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'
স্থানীয় ডিবিতে লিঙ্ক করা থেকে অনুসন্ধানগুলি কার্যকর করুন
INSERT INTO Tbl (Col1, Col2, Col3)
SELECT Col1, Col2, Col3
FROM [ip,port\instancename].[linkedDBName].[linkedTblSchema].[linkedTblName]