2010-10-29 21 views
9

È possibile avere non solo un server collegato, ma un database e un server collegati? La mia situazione è quella di avere un unico ambiente con una configurazione di:Alias ​​database collegato a SQL Server

ServerX: DatabaseOne, DatabaseTwo

e un altro ambiente di:

servery: MyDatabaseOne, MyDatabaseTwo

Ora, DatabaseOne e MyDatabaseOne sono esattamente gli stessi, come DatabaseTwo e MyDatabaseTwo. Ho una stored procedure che fa alcuni aggiornamenti di base della tabella da un db all'altro su un dato server, e voglio che sia in grado di funzionare in entrambi gli ambienti. Ho creato un server collegato quindi il mio riferimento può essere:

MyLinkedServer.DatabaseOne.dbo.MyTable o MyLinkedServer.MyDatabaseOne.dbo.MyTable

Anche con questo, però, ho bisogno di cambiare la SP quando ho passa ambienti per modificare i nomi db, c'è un modo di creare un alias del database, in modo che io possa scrivere:

SELECT * FROM MyLinkedServer.MyLinkedDatabase.dbo.MyTable

così che fino a quando LinkedServer e (se possibile) LinkedDatabase sono impostati in ogni ambiente, l'SP funzionerà senza modifiche al passaggio g ambienti?

+0

Per informazioni su server e sinonimi collegati, consultare http://sqlblog.toolsoftonline.com/?p=78 –

risposta

4

Penso che la risposta breve sia no. Non credo che l'alias di database sia ancora supportato.

SQL dinamico potrebbe farlo. È possibile inserire il nome del database ecc. Ed eseguire la query.

+0

Grazie a @Carl, ho avuto la sensazione che sarebbe stata la risposta. – Ben

+0

Fai la cosa giusta Ben e crea un'altra istanza con i nomi dei database corretti! :) –

+0

Haha grazie Will, non è una mia decisione pensata! – Ben

3

Trovato la risposta ai miei problemi. È leggermente più complesso di creare un database collegato, ma i sinonimi sono la risposta.

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

+0

La "Nota" su quella pagina è degna di nota (!?) "Non è possibile fare riferimento a un sinonimo che si trova su un server collegato.". Non puoi creare un sinonimo per un database: confuso? –

+0

Sì, è stata la prima cosa che ho provato a fare e ho notato che falliva miseramente. Ciò significa che non puoi creare un server collegato "MyLinkedServer", quindi creare un sinonimo "MySyn" su detto server e chiamare "MyLinkedServer.MySyn". Non è necessario utilizzare LinkedServer se si utilizza comunque un sinonimo, in quanto è necessario dichiarare il server al momento della sua creazione. – Ben

19

È possibile evitare SQL dinamico dal Aliasing server seguendo questi passaggi (crediti a this post)

1) Fase 1: Server

  • In SQL Server Management Studio linked open e quindi "Nuovo server collegato".
  • Interno del wizard visualizzato - Selezionare la scheda Generale.
  • Specificare il nome alias nel campo "Server collegato".
  • Selezionare SQL Native Client come provider.
  • Aggiungi sql_server nel campo "Nome prodotto" (questa è la magia).
  • In "Origine dati": specificare il nome dell'host da utilizzare come server collegato.

2) Fase 2:

  • Nella scheda Sicurezza - specificare le opzioni di sicurezza appropriate (ad esempiocontesto di protezione)

3) Fase 3:

  • Nella scheda Opzioni server - impostare "Data Access", "RPC", "RPC Out" e "Usa Teleraccolta" true.

4) Fase 4:

  • Godetevi

Si può prendere un ulteriore passo avanti e saltare specificando il nome del database quando si interroga una tabella è possibile creare sinonimi per ogni oggetto come questo :

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

questo creerà DimProduct Sinonimi nel database. Per quanto ne so, non è possibile creare un sinonimo per un database.

0

Lo so, è una vecchia domanda, ma (almeno in SQL 2014, ma credo che anche nelle versioni precedenti) è possibile impostare un server collegato con un "alias" e query remote (OPENQUERY()) per il parte del database.

USE [master] 
GO 

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

Ovviamente è necessario impostare anche la sicurezza ecc. Successivamente è possibile eseguire

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

senza specificare un nome di database (perché è già definito nella connessione al server collegato).

Se si esegue lo script del server collegato (menu di scelta rapida) e si sostituisce il nome del server/nome del database, è possibile eseguire un passaggio tra i due server semplicemente rilasciando la corrente e creando l'altro server collegato.

Problemi correlati