Kendini Gösteren Bağlantılı Bir Sunucu Oluşturma


14

servername\instancenameAşağıdaki çağrıyı kullanarak SQL Server 2014 örneğinde bağlantılı bir sunucu oluşturmaya çalışıyorum :

EXEC master.dbo.sp_addlinkedserver 
    @server = N'servername\instancename',
    @srvproduct=N'SQL Server'

Hata alıyorum:

Msg 15028, Level 16, State 1, Procedure sp_addlinkedserver, Line 82
The server 'servername\instancename' already exists.

Bu, SQL Server 2005'te sorunsuz çalışır ve MSDN'ye göre ,

Bağlı sunucunun başka bir SQL Server örneği olması gerekmez,

Bu yüzden, buna izin vermeyen son sürümlerde nelerin değiştiğinden emin değilim. Kullanıcı arabirimini kullanmak benzer bir mesaj oluşturur:

Bağlı bir sunucu olarak yerel bir SQL Server oluşturamazsınız.

Bunu talep etmenin garip bir şey olduğunu anlıyorum, ancak 2005'te çalışan (ve ayrı örneklerde kullanılan) bazı eski kodları desteklemek için. Belgeler, çalışması gerektiğini belirtiyor, ancak çalışmıyor. 2014 yılında bu işe almak için bir yolu var mı, yoksa temel kod değiştirmek zorunda kalacak?


1
Aslında bir fark bile yaratmamalı. Yerel bir sunucuda 4 parçalı bir tanımlayıcı kullanabilirsiniz.
Kris Gruttemeyer

Neden yerel sunucuya bağlı bir sunucu oluşturmaya çalışıyorsunuz? Hangi kısım çalışmıyor? Belki de sorunuz bu şekilde olmalı ...
Aaron Bertrand

1
Eski kod, bağlı bir sunucu üzerinden bağlanan farklı örnekler için yazılmıştır. Tarihin bir noktasında, iki örnek tek bir örnekte birleştirildi, ancak kod ve bağlantılı sunucu değişmeden kaldı. Amacım kodu olduğu gibi desteklemektir, çünkü a) değiştirilmesinde neyin yer aldığını bilmiyorum ve b) ana geliştirici gelecekte ayrı örneklere dağıtılacak veritabanlarını desteklemek istiyor.
mathewb

3
Eşanlamlıları düşünmek isteyebilirsiniz. Sonra farklı sunuculara taşınmış nesneler varsa, sadece eşanlamlıları bırakın ve yeniden oluşturun ve koda dokunmak zorunda değilsiniz.
Aaron Bertrand

Teşekkürler Aaron. Bence tam da aradığım şey buydu. Bir veritabanı eşanlamlıları kullanır, bu yüzden sadece damla / onları dört parça adından sunucu adını kaldırarak oluşturmak gerekir. Sonra bağlantılı sunucuyu tamamen ortadan kaldırabilirim. Veritabanı daha sonra taşınırsa, bağlantılı sunucu adını eş anlamlılara geri ekleyebilirim. Anladım.
mathewb

Yanıtlar:


20

Farklı parametrelerle çalıştırabildiğim ortaya çıkıyor.

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

Kodunuzdaki bağlantılı sunucu başvuruları ile uğraşmak yerine, şu anda bağlı bir sunucunuz olan herhangi bir konumda eşanlamlı kullanım içeren bir kerelik bir kod yatırımı düşünebilirsiniz .

Bunun yerine:

SELECT whatever FROM someserver.somedb.dbo.mytable;

Bir eşanlamınız var:

CREATE SYNONYM dbo.mytablepointer FOR someserver.somedb.dbo.mytable;

O zaman kodunuz basitçe:

SELECT whatever FROM dbo.mytablepointer;

Ardından, farklı sunuculara taşınan nesneleriniz varsa, eş anlamlıları bırakıp yeniden oluşturursunuz ve koda dokunmanız gerekmez:

DROP SYNONYM dbo.mytablepointer;
CREATE SYNONYM dbo.mytablepointer FOR otherserver.somedb.dbo.mytable;

3

Bu komutu çalıştır - yerel sunucuyu Bağlı sunucu olarak kullanabileceksiniz, kod değişikliği gerekmez

EXEC sp_addlinkedserver @server = 'LinkedServerName',
                        @provider ='SQLNCLI',
                        @datasrc ='LocalServerName',
                        @srvproduct = 'SQL'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.