7

ho creato un mirroring del database e quindi usato questo connectionstring di connettersi ad esso:Come connettersi a SQL Server con mirroring dopo il failover?

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

Dopo aver aggiunto alcuni dati nel database, ho spegnere il server principale, in modo che il server mirror diventa il server principale. Apro la connessione di nuovo, un ottengo questo errore:

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

ho pensato che con failover partner specificato nella stringa di connessione, ADO.NET avrebbe fatto il lavoro per me. Quindi cosa dovrei fare ora?

Questa domanda è urgente. Grazie mille per il vostro aiuto.

+1

Si dovrebbe specificare se c'è un testimone o se questa è una configurazione manuale di fail-over (si ottiene solo non automatica sopra se si dispone di un testimone. Vedi http://technet.microsoft.com/ it-it/library/ms189852 (SQL.90) .aspx). Dovresti anche controllare lo stato dei database sia su Principal che sul Failover. –

+0

Che fornitore utilizzi? – gbn

+0

@doug_w: ho controllato manualmente da T-SQL, tutto funziona perfettamente :) @gbn: sto usando ADO.NET – Vimvq1987

risposta

3

Fortunatamente, ho risolto questo problema. Tutto ciò che devo fare è chiamare il metodo ClearPool:

SqlConnection.ClearPool(conn); 

Questo metodo cancella il pool di connessioni. Quindi, il problema è sparito. Sono così felice con esso.

Grazie a tutti voi per il vostro supporto. : D

+0

Sì - pool di connessioni può causare questo tipo di cose con cluster e specchi – onupdatecascade

+0

Come si determina quando cancellare il pool? Stai circondando il tentativo di aprire il conn con un try/catch e farlo se l'apertura genera un'eccezione? O hai trovato qualche evento particolare a cui potresti aggrapparti per una notifica di quando potresti aver bisogno di ripulire il pool? Inoltre, è possibile disabilitare il pooling nella stringa di connessione, ma questo ha implicazioni sulle prestazioni, come fare sempre per azzerare il pool prima di aprire una connessione. –

+0

Era molto tempo fa, non ho più il codice, ma se ricordo bene, cancello il pool di connessioni nell'eccezione catch. Non è una soluzione ideale ma funziona come demo. – Vimvq1987

2

Non sono un esperto di .net ma ho bisogno del client nativo SQL (SQLNCLI) per gestire il failover. "ado.net" potrebbe essere SQLOLEDB

Fino a Windows Server 2003 almeno non è installato per impostazione predefinita. È indipendente o parte degli strumenti client SQL, quindi sospetto che stiate utilizzando SQLOLEDB

+0

Potete per favore fornirmi maggiori dettagli? :). – Vimvq1987

+0

Prova Provider = SQLNCLI; conn stringa. Non riesco ad accedere a msdn proprio ora per trovare il riferimento – gbn

0

Dopo aver spento l'entità, avete verificato che il failover diventasse effettivamente il principale? Se non ha un failover automatico sul server Sql, allora il mirror è ancora un mirror.

+0

SQL Server ha mostrato che il mirror è diventato il principale. Ho provato un T-SQL, ha funzionato bene: -s – Vimvq1987

+0

Ok, solo giocando con il failover circa un anno fa, so quanto sia facile perdere quelle piccole cose ... Non avere una risposta per te, scusa. – taylonr