Tentando criar um servidor vinculado do servidor A (2005) para B (2008 R2). Tudo funcionou quando criado. O login no servidor B foi mapeado para dois bancos de dados: DataBase1 e Database2. Database1 era o padrão.
Database2 foi colocado off-line. Ao abrir o Mapeamento de usuários, aparece a mensagem "Um ou mais bancos de dados estão inacessíveis e não serão exibidos na lista". Presumo que o Database2 seja o culpado. Coloquei o Database2 online e desmarquei.
Ao testar a conexão no Servidor Vinculado, falha porque não consegue acessar o Banco de Dados2. Novamente, Database1 é o padrão.
Eu reconstruí o login usando exatamente o mesmo script sem mencionar o Database2, ainda recebo o erro.
Como preciso de um nome de servidor vinculado diferente que não corresponda ao nome real do SQL Server, digamos que eu queira vincular ao servidor "A", mas chamar o link de "X"
EXEC master.dbo.sp_addlinkedserver @server = N'X'
, @srvproduct=N'Microsoft OLE DB Provider for ODBC'
, @provider=N'MSDASQL', @datasrc=N'X'
, @provstr=N'DRIVER={SQL Server};SERVER=B;UID=test;PWD=*******;'
Posso entrar no SSMS e criar um servidor vinculado por meio da GUI. Escolhendo o SQL Server, que não me permite usar um nome para o servidor vinculado, exceto o mesmo nome do servidor e funciona. Isso não usa o provedor OLE DB para ODBC.
EXEC master.dbo.sp_addlinkedserver @server = N'B', @srvproduct=N'SQL Server'
Posso criar um script para indicar o nome do link como X e o servidor ou datasrc?
Eu também mudaria os parâmetros da seguinte forma:
@srvproduct = 'sql_server'
@provider = 'SQLNCLI' se você vem de 2005 (e 'SQLNCLI10' de 2008/8R2 e 'SQLNCLI11' de 2012, etc.)
@provstr pode ser totalmente removido; não é necessário com este produto e provedor; seus logins de servidor vinculados cuidarão disso.
Qualquer login do SQL Server que esteja sendo usado pelo servidor vinculado provavelmente tem um banco de dados padrão offline/removido. Altere o banco de dados padrão desse login para um que exista e para o qual o usuário tenha permissões e tente novamente.
Isso é um palpite, já que você não postou o script CREATE USER que gerou o login do nome de usuário específico.