2010-10-29 5 views
9

Ist es möglich, nicht nur einen LinkedServer, aber verknüpfte Datenbank und Server? Meine Situation ist, dass eine Umgebung, die mit einer Einrichtung:SQL Server verknüpfte Datenbank Aliase

ServerX: DatabaseOne, DatabaseTwo

und eine andere Umgebung aus:

servery: MyDatabaseOne, MyDatabaseTwo

Nun DatabaseOne und MyDatabaseOne sind genauso wie DatabaseTwo und MyDatabaseTwo. Ich habe eine gespeicherte Prozedur, die einige grundlegende Tabellenaktualisierungen von einer Datenbank zur anderen auf einem bestimmten Server ausführt, und ich möchte, dass sie in beiden Umgebungen arbeiten kann. Ich habe einen Verbindungsserver einrichten, so meine Referenz sein kann:

MyLinkedServer.DatabaseOne.dbo.MyTable oder MyLinkedServer.MyDatabaseOne.dbo.MyTable

Auch mit diesem aber ich muss die SP ändern, wenn ich wechseln Umgebungen die db Namen zu ändern, ist es eine Möglichkeit, einen Datenbank-Alias ​​der Einrichtung, so dass ich schreiben kann:

SELECT * FROM MyLinkedServer.MyLinkedDatabase.dbo.MyTable

damit solange LinkedServer und (wenn möglich) LinkedDatabase wird in jeder Umgebung eingerichtet, der SP funktioniert ohne Änderung beim Switching g Umgebungen?

+0

Um über verknüpfte Server und Synonyme zu erfahren, beziehen Sie sich bitte http://sqlblog.toolsoftonline.com/?p=78 –

Antwort

4

Ich denke, die kurze Antwort ist nein. Ich glaube nicht, dass Datenbank-Aliasing noch unterstützt wird.

Dynamic SQL könnte es tun. Sie könnten den Datenbanknamen usw. eingeben und Ihre Abfrage ausführen.

+0

Dank @Carl, hatte ich ein Gefühl, das die Antwort sein würde. – Ben

+0

Tun Sie das Richtige Ben, und erstellen Sie eine andere Instanz mit den richtigen Datenbanknamen! :) –

+0

Haha danke Will, das ist nicht meine Entscheidung gedacht! – Ben

3

Die Antwort auf meine Probleme gefunden. Es ist etwas komplexer als nur eine verknüpfte Datenbank zu erstellen, aber Synonyme waren die Antwort.

http://msdn.microsoft.com/en-us/library/ms190626.aspx

+0

Der "Hinweis" auf dieser Seite ist bemerkenswert (!?) "Sie können nicht auf ein Synonym verweisen, das sich auf einem Verbindungsserver befindet.". Sie können auch kein Synonym für eine Datenbank erstellen - verwirrt? –

+0

Ja, das war das erste, was ich zu tun versuchte und bemerkte, dass es kläglich versagte. Das heißt, Sie können keinen Verbindungsserver "MyLinkedServer" erstellen, dann ein Synonym "MySyn" auf diesem Server erstellen und "MyLinkedServer.MySyn" aufrufen. Sie müssen LinkedServers nicht verwenden, wenn Sie ohnehin ein Synonym verwenden, da Sie den Server bei seiner Erstellung deklarieren müssen. – Ben

19

Sie dynamische SQL von Aliasing auf den Server mit den folgenden Schritten (Gutschriften this post)

1) Schritt 1 vermeiden:

  • in dem SQL Server Management Studio öffnen Verbindungsserver und dann "Neuer verbundener Server".
  • Innerhalb des angezeigten Assistenten - Wählen Sie die Registerkarte Allgemein.
  • Geben Sie im Feld "Verknüpfter Server" einen Aliasnamen an.
  • Wählen Sie SQL Native Client als Anbieter.
  • Fügen Sie sql_server im Feld "Product Name" hinzu (das ist die Magie).
  • In "Datenquelle" - geben Sie den Namen des Hosts an, der als Verbindungsserver verwendet werden soll.

2) Schritt 2:

  • In Registerkarte Sicherheit - für die richtigen Sicherheitsoptionen angeben (zSicherheitskontext)

3) Schritt 3:

  • Im Register Server Optionen - set "Data Access", "RPC", "RPC Out" und "Use Remote-Sortierungs" auf true.

4) Schritt 4:

  • Genießen

Sie können es noch einen Schritt weiter nehmen und lassen Sie die Datenbanknamen angeben, wenn eine Tabelle abfragt Sie Synonyme für jedes Objekt wie folgt erstellen :

CREATE SYNONYM [dbo].[DimProduct] 
FOR 
[AdventureWorksDW].[dbo].[DimProduct] 

Dies wird DimProduct Synonyme in Ihrer Datenbank erstellen. Soweit ich weiß, können Sie kein Synonym für eine Datenbank erstellen.

0

Ich weiß, es ist eine alte Frage, aber (zumindest in SQL 2014, aber ich denke, in älteren Versionen auch) können Sie einen Verbindungsserver mit einem "Alias" und Remote-Abfragen (OPENQUERY()) für die Datenbank Teil.

USE [master] 
GO 

EXEC master.dbo.sp_addlinkedserver @server = N'MyAliasServer', @srvproduct=N'SQLSERVER', @provider=N'SQLNCLI', @datasrc=N'MyRealServer1', @catalog=N'database1' 

Natürlich müssen Sie die Sicherheit auch einrichten. Danach konnte man

SELECT * OPENQUERY(MyAliasServer, 'select * from dbo.MyTbl') 

ohne einen Datenbanknamen anzugeben (weil es bereits in der verknüpften Server-Verbindung definiert ist) ausgeführt werden.

Wenn Sie den Verbindungsserver scripten (Kontextmenü) und den Servernamen/Datenbanknamen ersetzen, können Sie zwischen den beiden Servern wechseln, indem Sie den aktuellen Server löschen und den anderen Verbindungsserver erstellen.