Pergunta

Eu configurar um espelhamento de banco de dados e, em seguida, usou este connectionstring se conectar a ele:

    Data Source={0};Failover Partner={1};Initial Catalog=AdventureWorks;
    Integrated Security=True;

Depois de adicionar alguns dados no banco de dados, eu desligar o servidor principal, de modo que o servidor espelho torna-se o servidor principal. Abro a conexão novamente, um obter este erro:

    System.Data.SqlClient.SqlException: A transport-level error has 
occurred when sending the request to the server. (provider: Shared Memory 
Provider, error: 0 - No process is on the other end of the pipe.)

Eu pensei que com o Parceiro de Failover especificado na cadeia de ligação, ADO.NET iria fazer o trabalho para mim. Então o que eu devo fazer agora?

Foi útil?

Solução

Felizmente, eu fixo este problema. Todos necessidade I a fazer é chamar o método ClearPool:

SqlConnection.ClearPool(conn);

Este método irá limpar o pool de conexão. Então, o problema se foi. Estou muito feliz com isso.

Obrigado, todos vocês, por seu apoio. : D

Outras dicas

Eu não sou um especialista sobre coisas .net, mas você precisa o cliente nativo SQL (SQLNCLI) para failover alça. "Ado.net" pode ser SQLOLEDB

Até o Windows Server 2003, pelo menos ele não está instalado por padrão. É independente ou parte de ferramentas de cliente SQL, então eu suspeito que você está usando SQLOLEDB

Depois de desligar o principal, que você verificar se o failover realmente se tornou o principal? Se ele não tem failover automático no SQL Server, então você o espelho ainda é um espelho.

Nós descobrimos que isso iria acontecer se você não tinha um grande conjunto de tempo limite suficiente.

https://serverfault.com/questions/249589/db-auto-failover-in-c-does-not-work-when-the-principal-server-physically-goes-o

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top