Eu configurei um banco de dados espelhado em dois servidores Server1 e Server 2.
No Server3, estou tentando configurar um servidor vinculado que funcionará independentemente de qual servidor tenha o banco de dados ativo.
Estou usando isso para configurar o servidor vinculado.
EXEC sp_addlinkedserver
@server = N'MyLinkedServer',
@srvproduct = N'',
@provider = N'SQLNCLI',
@provstr = N'Server=SERVER1;FailoverPartner=SERVER2;Network=dbmssocn',
@catalog = N'MyDatabase';
EXEC master.dbo.sp_serveroption
@server = N'MyLinkedServer',
@optname = N'data access',
@optvalue = N'true';
EXEC master.dbo.sp_serveroption
@server = N'MyLinkedServer',
@optname = N'rpc',
@optvalue = N'false';
EXEC master.dbo.sp_serveroption
@server = N'MyLinkedServer',
@optname = N'rpc out',
@optvalue = N'true';
EXEC master.dbo.sp_serveroption
@server = N'MyLinkedServer',
@optname = N'connect timeout',
@optvalue = N'60';
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname = N'MyLinkedServer',
@locallogin = NULL,
@useself = N'False',
@rmtuser = N'sqluser',
@rmtpassword = N'sqlpassword';
Enquanto MyDatabase no Server1 for o principal, o servidor vinculado funcionará. Quando faço o failover manualmente para o Server2, o servidor vinculado falha.
As mensagens de erro são:
Msg 11001, Level 16, State 1, Line 0
TCP Provider: No such host is known.
Msg 18456, Level 14, State 1, Line 1
Login failed for user 'sqluser'.
Msg 4060, Level 11, State 1, Line 1
Cannot open database "MyDatabase" requested by the login. The login failed.
As mensagens de erro 18456 e 4060 se repetem até que a consulta expire após 60 segundos.
No Server1, posso ver falhas repetidas ao tentar fazer login em "MyDatabase". Está falhando porque o Server1 é o espelho. Não vejo nenhuma tentativa de conexão com o Server2, que é o principal.
Se eu recriar o servidor vinculado com o Servidor2 como Primário e o Servidor1 como Espelhamento, ele funcionará até que eu faça o failback para o Servidor1.
Os servidores espelhados são SQL Server 2012 e a caixa em que estou tentando criar um servidor vinculado é SQL Server 2005, mas também tenho o mesmo problema ao criar o servidor vinculado em uma caixa SQL Server 2008 R2.
Já vi relatos de que funciona.
o que estou perdendo?
Obrigada!
Atualizar
Eu fiz progressos. Ontem, quando configurei as coisas pela primeira vez, poderia jurar que funcionou uma vez. Eu nunca poderia reproduzi-lo. Então, hoje, consegui que funcionasse uma vez. Posso fazer failover do Servidor1 para o Servidor2 (ou vice-versa) uma vez. O servidor vinculado funcionará após um failover, mas se eu retornar ao servidor original, ele parará de funcionar. Uma reinicialização do serviço SQL Server no servidor com o servidor vinculado permitirá que ele funcione novamente (para 1 failover). Deixar as coisas paradas durante a noite deve funcionar também, já que funcionou na primeira vez que tentei hoje.
Criar um novo servidor vinculado (com um nome diferente) não funciona, então acho que o driver do SQL Native Client está armazenando algo em cache.
outra atualização
Consegui que o servidor vinculado (conforme descrito acima) funcionasse corretamente em uma instância do SQL Server 2012 Express. Em seguida, tentei em outra instância do SQL Server 2012 Standard. Não funcionou. Uma coisa que pode ser relevante é que Server1 e Server2 estão em um domínio não confiável diferente do Server3. Mas, como estou usando a autenticação do servidor SQL, acho que não deveria. A instância do Express que funciona bem está no mesmo domínio não confiável.
Este é um problema conhecido. Servidores vinculados que procuram logins de espelhamento de banco de dados funcionam apenas para logins do Windows, não para logins do SQL, conforme mencionado neste item de conexão . Basicamente, você precisa codificar um nome de usuário e senha no servidor vinculado, o que não é recomendado, ou usar a autenticação do Windows para acessar o servidor vinculado.
Outra opção seria configurar alertas e trabalhos do SQL Agent nas duas máquinas para que, quando o banco de dados se tornasse ativo nessas máquinas, eles reconfigurassem automaticamente o servidor vinculado com o nome de servidor correto.