নিজেকে যুক্ত করে এমন একটি লিঙ্কযুক্ত সার্ভার তৈরি করা হচ্ছে


14

আমি servername\instancenameনিম্নলিখিত কলটি ব্যবহার করে এসকিউএল সার্ভার 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.

এটি এসকিউএল সার্ভার 2005-এ দুর্দান্ত কাজ করে এবং এমএসডিএন অনুসারে ,

লিঙ্কযুক্ত সার্ভারটি এসকিউএল সার্ভারের অন্য কোনও উদাহরণ হতে হবে না,

সুতরাং আমি নিশ্চিত নই যে সাম্প্রতিক সংস্করণ (গুলি) এ কী পরিবর্তন হয়েছে যা এটিকে অস্বীকার করে। ইউআই ব্যবহার করে অনুরূপ বার্তা উত্পন্ন হয়:

আপনি কোনও সংযুক্ত সার্ভার হিসাবে কোনও স্থানীয় এসকিউএল সার্ভার তৈরি করতে পারবেন না।

আমি বুঝতে পারি যে এটি অনুরোধ করা একটি অদ্ভুত জিনিস, তবে এটি এমন কিছু লিগ্যাসি কোডকে সমর্থন করা যা 2005 সালে কাজ করেছিল (এবং পৃথক দৃষ্টান্তে ব্যবহৃত হত)। ডকুমেন্টেশনে বলা হয়েছে যে এটি কাজ করা উচিত, তবে তা কার্যকর করে না। 2014 এ কাজ করার কোনও উপায় আছে, বা আমি অন্তর্নিহিত কোডটি সংশোধন করতে যাচ্ছি?


1
এটি এমনকি একটি পার্থক্য করা উচিত নয়। আপনি স্থানীয় সার্ভারে একটি 4-অংশ সনাক্তকারী ব্যবহার করতে পারেন ঠিক ঠিক fine
ক্রিস গ্রুটমিয়ার

আপনি কেন স্থানীয় সার্ভারের সাথে একটি লিঙ্কযুক্ত সার্ভার তৈরি করার চেষ্টা করছেন? কোন অংশটি কাজ করে না? হয়তো কী আপনার প্রশ্নের সম্পর্কে ... হওয়া উচিত যে
হারুন বারট্রান্ড

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

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'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.