7

Je mis en place une base de données en miroir, puis utilisé ce connectionstring pour s'y connecter:Comment se connecter à SQL Server en miroir après un basculement?

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

Après avoir ajouté des données dans la base de données, je arrêter le serveur principal, de sorte que le serveur miroir devient le serveur principal. J'ouvre la connexion à nouveau, une obtenir cette erreur:

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.) 

Je pensais qu'avec Failover Partner spécifié dans la chaîne de connexion, ADO.NET ferait le travail pour moi. Alors que dois-je faire maintenant?

Cette question est urgente. Je vous remercie beaucoup pour votre aide.

+1

Vous devez spécifier s'il y a un témoin ou si cela est une configuration manuelle fail-over (vous obtenez seulement automatique basculent si vous avez un témoin. Voir http://technet.microsoft.com/ en-us/library/ms189852 (SQL.90) .aspx). Vous devez également vérifier l'état des bases de données sur le principal et le basculement. –

+0

Quel fournisseur utilisez-vous? – gbn

+0

@doug_w: J'ai vérifié manuellement par T-SQL, tout fonctionne très bien :) @gbn: J'utilise ADO.NET – Vimvq1987

Répondre

3

Heureusement, j'ai résolu ce problème. Tout ce que j'ai besoin de faire est d'appeler la méthode ClearPool:

SqlConnection.ClearPool(conn); 

Cette méthode effacera le pool de connexions. Ensuite, le problème est parti. Je suis tellement heureux avec ça.

Merci à vous tous pour votre soutien. : D

+0

Yep - le pool de connexions peut provoquer ce type de chose avec des clusters et des miroirs – onupdatecascade

+0

Comment déterminez-vous quand il faut vider la piscine? Entourez-vous la tentative d'ouvrir le conn avec un try/catch et le faire si l'ouverture déclenche une exception? Ou avez-vous trouvé un événement particulier sur lequel vous pourriez vous accrocher pour une notification du moment où vous pourriez avoir besoin de vider la piscine? En outre, vous pouvez désactiver la mise en pool dans la chaîne de connexion, mais cela a des implications sur les performances, de la même manière que le fait d'effacer le pool avant d'ouvrir une connexion. –

+0

C'était il y a longtemps, je n'ai plus le code mais si je me souviens bien, je vide le pool de connexion dans l'exception catch. Ce n'est pas une solution idéale, mais cela fonctionne pour moi en tant que démo. – Vimvq1987

2

Je ne suis pas un expert en matière de .net mais vous avez besoin du client SQL natif (SQLNCLI) pour gérer le basculement. "ado.net" peut être SQLOLEDB

Jusqu'à Windows Server 2003 au moins, il n'est pas installé par défaut. Il est autonome ou fait partie des outils client SQL, donc je suppose que vous utilisez SQLOLEDB

+0

Pouvez-vous s'il vous plaît me donner plus de détails? :) – Vimvq1987

+0

Essayez Provider = SQLNCLI; conn chaîne. Je ne peux pas obtenir msdn maintenant pour trouver la référence – gbn

0

Après avoir fermé le principal, avez-vous vérifié que le basculement est bien devenu le principal? S'il n'y avait pas de basculement automatique sur le serveur Sql, alors le miroir est toujours un miroir.

+0

SQL Server a montré que le miroir est devenu le principal. J'ai essayé un T-SQL, ça fonctionnait bien: -s – Vimvq1987

+0

Ok, juste de jouer avec le failover il y a environ un an, je sais à quel point ça peut être facile de rater ces petites choses ... Tu n'as pas de réponse pour toi, Pardon. – taylonr