itrain-home Kinderpatenschaften mit Plan Deutschland  
home
 Aktuelle Seite:  knowhow sql 2005 admin mirror.asp 
 



 

Datenbankspiegelung

Bei der Datenbankspiegelung wird zunächst die zu spiegelnde Datenbank auf einer zweiten SQL Server Instanz wiederhergestellt. Die Original-Datenbank wird dabei als Prinzipal-Datenbank, die Kopie als Spiegel-Datenbank bezeichnet. Die Rolle der beiden Datenbanken kann im Verlauf der Zeit wechseln, d.h. die ursprünglich Kopie kann im Fehlerfall die Rolle des Prinzipals übernehmen und das ursprüngliche Original kann als Spiegel des neuen Prinzipals wiederhergestellt werden.
Alle Änderungen an der Prinzipal-Datenbank werden laufend in der Spiegeldatenbank wiederhergestellt (Rollforward). Dazu werden alle Einträge die im Transaktionsprotokoll des Prinzipals erfolgen umgehend auch an den Datenbank-Spiegel übertragen. Im Gegensatz zum Protokollversand wird hier nicht der Umweg über Sicherung und Wiederherstellung des Protokolls gegangen, sondern die Protokolleinträge werden direkt über das Netzwerk an die Spiegel-Instanz übermittelt und dort verarbeitet.

Synchrone oder asynchrone Datenbankspiegelung

Beim Einrichten der Datenbankspiegelung kann zwischen asynchroner und synchroner Spiegelung gewählt werden. Bei der synchronen Datenbankspiegelung wartet der Prinzipal bei einem Commit von Datenänderungen auf die Bestätigung vom Spiegel, dass die Änderungen dort gespeichert worden sind; erst nach erfolgter Rückmeldung ist die Transaktion durchgeführt. Um die zusätzliche Wartezeit für die Rückmeldung zu reduzieren, kann die Spiegelung auch asynchron betrieben werden: Dabei werden die Änderungen vom Prinzipal umgehend an den Spiegel weitergegeben, es wird aber nicht auf eine Antwort gewartet, um die Transaktion abzuschließen. Dadurch wird eine schnellere Verarbeitung in der Prinzipal-Instanz erreicht; bei der Spiegelinstanz kann es zu einer Verzögerung bei der Wiederherstellung der Änderungen kommen.

Automatisches Failover mit Hilfe eines Zeugen

Bei der Datenbankspiegelung kann eine weitere Datenbank-Instanz die Rolle eines „Zeugen“ übernehmen. Der Zeuge überwacht Prinzipal- und Spiegel und prüft, ob beide Systeme verfügbar sind. Fällt der Prinzipal aus, kann bei synchroner Spiegelung ein automatisches Failover durchgeführt werden. Wird für eine Spiegelsitzung ein Zeuge festgelegt, so muss für ein Failover (automatisch oder manuell) ein Quorum vorhanden sein.

Quorum – Sicherstellen der „Beschlussfähigkeit“

Sobald drei Instanzen – also Prinzipal, Spiegel und Zeuge – an einer Datenbankspiegelung teilhaben, muss im Fehlerfall ein Quorum vorhanden sein, damit ein Failover durchgeführt werden kann. Das Quorum ist die minimale Anzahl an Partnern, die noch kommunizieren können, um ein Failover auszuführen. Bei der Datenbankspiegelung ist das Quorum erfüllt, wenn mindestens zwei Partner noch miteinander verbunden sind. Die folgende Übersicht stellt die verschiedenen Möglichkeiten dar:
Prinzipal
Spiegel
Zeuge
Quorum
Erreichbar
Erreichbar
Erreichbar
Vollständiges Quorum
Nicht erreichbar
Erreichbar
Erreichbar
Quorum von Spiegel und Zeuge, automatisches Failover
Nicht erreichbar
Erreichbar
Nicht erreichbar
Kein Quorum, die Spiegel-Datenbank kann nicht online gehen
Erreichbar
Nicht erreichbar
Nicht erreichbar
Kein Quorum, die Prinzipal-Datenbank geht offline
Erreichbar
Erreichbar
Nicht erreichbar
Partner-Quorum, ein manuelles Failover von Prinzipal zu Spiegel ist möglich

Die Wahl zwischen synchroner oder asynchroner Spiegelung und Spiegelung mit oder ohne Zeuge bestimmt den Betriebsmodus, in dem die Spiegelung ausgeführt wird;
die folgende Übersicht zeigt den Zusammenhang zwischen Synchronisierungsart und Zeuge und den verschiedenen Betriebsmodi für die Datenbankspiegelung:
Synchronisierung
Zeuge
Modus
Synchron
Festgelegt
Modus für hohe Verfügbarkeit
Nicht festgelegt
Modus für hohen Schutz
Asynchron
Nicht festgelegt
Modus für hohe Leistung
Festgelegt
Diese Kombination ist zwar möglich, aber nicht sinnvoll, da bei der asynchronen Spiegelung kein automatisches Failover möglich ist und zusätzlich ein Quorum benötigt wird, wenn die Spiegelinstanz online geschaltet werden soll.

Vorbereitungen für das Einrichten der Datenbankspiegelung

Aktivieren der Datenbank-Spiegelung

Die Datenbankspiegelung war vor dem Service Pack 1 standardmäßig deaktiviert und konnte nur zu Evalierungszwecken aktiviert werden. Dazu mussten die Dienste auf allen beteiligten SQL Server Instanzen mit dem Trace-Flag 1440 gestartet werden.
Starten Sie dazu den „SQL Server Konfigurations Manager“ und wählen Sie in der Liste der „SQL Server 2005 Dienste“ den SQL Server 2005 Dienst aus. Öffnen Sie den Eigenschaften-Dialog. („Eigenschaften“ im Kontext-Menü des SQL Server 2005 Dienst).
Auf der Registerseite „Erweitert“ können Sie die Eigenschaft „Startparameter“ bearbeiten.
Ergänzen Sie die vorhandenen Startparameter um das Trace-Flag 1400:
;-T1400
Die Dienst muss anschließend neu gestartet werden, damit die geänderte Startoption aktiv ist.

Vorbereitungen für die Prinzipal-Datenbank

  • Stellen Sie sicher, dass die Datenbank im Wiederherstellungsmodell „Vollständig“ betrieben wird.
    Datenbanken mit dem Wiederherstellungsmodell „Einfach“ oder „Massenprotokolliert“ können nicht gespiegelt werden.
  • Prüfen Sie, ob alle SQL-Anmeldungen, die von den Datenbankbenutzern verwendet werden auf der Spiegelinstanz auch vorhanden sind.
    Falls nicht, sollten Sie die Logins zuvor auf der vorgesehenen Spiegelinstanz anlegen. Achten Sie darauf, dass für die Anmeldungen auf der Spiegelinstanz die gleichen Spracheinstellungen verwendet werden.
    Falls Sie mit SQL Server Anmeldungen (im Gegensatz zu Windows-Anmeldungen) arbeiten, sollten Sie sicherstellen, dass die Kennwörter auf beiden Instanzen synchron sind oder den Anwendern eine Möglichkeit zum Ändern des Kennworts gegeben wird.
  • Erstellen Sie eine vollständige Datenbanksicherung der Prinzipal-Datenbank und stellen Sie diese Sicherung mit der Option „NORECOVERY“ auf der Spiegel-Instanz wieder her. Erstellen Sie anschließend auch noch eine Transaktionsprotokollsicherung und stellen Sie diese ebenfalls auf der Spiegel-Instanz mit der Option „NORECOVERY“ wieder her.
  • Auf der Spiegelinstanz sollte nach Möglichkeit die gleiche Verzeichnisstruktur wie auf dem Prinzipal vorhanden sein, dies ist aber nicht zwingend erforderlich. Falls Sie abweichende Verzeichnisse verwenden, sollten Sie im laufenden Betrieb beim Hinzufügen weiterer Dateien zur Datenbank daran denken, dass ein gleichnamiges Verzeichnis auf der Spiegelinstanz ebenfalls vorhanden sein muss.
Bevor die Datenbank-Spiegelung konfiguriert wird, sollten Sie noch folgende Punkte klären:
  • Unter welchem Dienstkonto laufen die beteiligten Instanzen?
    Falls alle beteiligten Partner unter dem gleichen Dienstkonto arbeiten, ist keine weitere Konfiguration notwendig. Falls Sie unterschiedliche Dienstkonten verwenden, müssen entsprechende Anmeldungen auf den beteiligten Instanzen eingerichtet werden; der Assistent zum Konfigurieren der Sicherheit für die Datenbankspiegelung kann die notwendigen Anmeldungen erstellen und die erforderliche Berechtigung für den Zugriff auf die Spiegelungsendpunkte setzen. Falls die Instanzen unter dem Konto „Netzwerkdienst“ ausgeführt werden, müssen entsprechende Anmeldungen für die Computerkonten eingerichtet werden. Falls die Instanzen unter dem Konto „Lokaler Dienst“ ausgeführt werden oder sich nicht in einer vertrauten Domäne befinden, kann auch eine Authentifizierung mittels Zertifikaten erfolgen.
  • Befindet sich eine Firewall zwischen den Instanzen?
    Die Instanzen kommunizieren über eigene Ports miteinander. Für jede Datenbankspiegelung können die Ports für alle beteiligten Instanzen festgelegt werden. Falls ein Firewall vorhanden ist, müssen für diese Ports sowohl eingehende als auch ausgehende Verbindungen zugelassen sein.

Beispiel: Einrichten einer Datenbankspiegelung im Modus für „hohe Verfügbarkeit“

Beteiligte Server und Instanzen
Rolle
Server
Instanz
Port
Prinzipal
Mars
Mars\SQL2005
5022
Spiegel
Venus
Venus\SQL2005
5050
Zeuge
Vulkan
Vulkan\SQL2005
5051

Alle drei Instanzen befinden sich in der gleichen Domäne und laufen unter dem Domänenkonto „SQLServer“.
Die Datenbank „Suedwind“ soll von der Instanz „Mars\SQL2005“ auf die Instanz „Venus\SQL2005“ gespiegelt werden. Alle Anmeldungen, die von der Datenbank Suedwind verwendet werden, sind auf beiden Instanzen vorhanden.
  1. Erstellen einer vollständigen Datenbanksicherung
  2. Erstellen einer Transaktionsprotokollsicherung der Datenbank „Suedwind“ auf der Instanz „Mars\SQL2005
  3. Wiederherstellen der vollständigen Datenbanksicherung auf der Instanz „Venus\SQL2005“ mit der Option „NORECOVERY“
  4. Wiederherstellen der Transaktionsprotokollsicherung auf der Instanz „Venus\SQL2005“ mit der Option „NORECOVERY“

Konfigurieren der Sicherheit für die Datenbankspiegelung mithilfe des Assistenten

Der Assistent zum Konfigurieren der Sicherheit sammelt die notwendigen Informationen zum Erstellen der Endpunkte für die Datenbankspiegelung auf allen beteiligten Instanzen. Außerdem können die Anmeldungen und erforderlichen Berechtigungen für den Zugriff auf die Endpunkte festgelegt werden.

Konfigurieren der Prinzipalserverinstanz

Für die Prinzipalserverinstanz kann der Endpunktname und der für die Spiegelung verwendete Port konfiguriert werden. In diesem Beispiel wird der Port 5022 verwendet. Der Endpunkt erhält den Namen „SpiegelSuedwind“. Falls gewünscht, kann über die Option „Durch diesen Endpunkt gesendete Daten verschlüsseln“ aktiviert werden.
Sicherheitskonfiguration
        der Prinzipalserverinstanz
Abbildung: Sicherheitskonfiguration der Prinzipalserverinstanz

Konfigurieren der Spiegelserverinstanz

Für die Spiegelserverinstanz können ebenfalls der Name und Port für die Endpunkte festgelegt werden. Dabei muss nicht der gleiche Port wie bei der Prinzipalserverinstanz verwendet werden.
Sicherheitskonfiguration der Spiegelserverinstanz
Abbildung: Sicherheitskonfiguration der Spiegelserverinstanz

Konfigurieren der Zeugenserverinstanz

Auch für die Zeugenserverinstanz werden Port und Endpunktname festgelegt. Verwenden Sie für den Endpunktnamen nach Möglichkeit einen Namen, der die Rolle als Zeuge verdeutlicht.
Sicherheitskonfiguration
        der Zeugenserverinstanz
Abbildung: Sicherheitskonfiguration der Zeugenserverinstanz
Falls Sie unterschiedliche Dienstkonten für die drei Serverinstanzen verwenden, können Sie auf der nächsten Seite des Assistenten die Namen der Konten festlegen. Dadurch kann der Assistent die Anmeldungen und benötigten Berechtigungen für die Endpunkte automatisch anlegen.

Fertigstellen des Assistenten

Überprüfen der Konfiguration

Sie finden die vom Assistenten erstellten Endpunkte für die Datenbankspiegelung im SQL Server Management Studio unter dem Ordner „Serverobjekte“, „Endpunkte“, „Datenbankspiegelung“. Sie können auch die folgende Abfrage verwenden, um alle Informationen über den Endpunkt abzurufen:
SELECT * FROM sys.database_mirroring_endpoints

Starten der Spiegelung

Nachdem die Endpunkte konfiguriert sind, kann die Datenbankspiegelung gestartet werden. Legen Sie vor dem Starten den gewünschten Modus fest. In diesem Beispiel soll der Modus „Hohe Verfügbarkeit“ verwendet werden, d.h. ein automatischer Failover ist möglich.
Starten der Datenbank-Spiegelung
Abbildung: Starten der Datenbank-Spiegelung

Mögliche Probleme beim Starten der Spiegelung

Beim Starten der Spiegelung wird geprüft, ob die Datenbank auf der Spiegelinstanz erfolgreich synchronisiert werden kann. Wurden auf der Prinzipalinstanz inzwischen Protokollsicherungen durchgeführt, die auf der Spiegelinstanz noch nicht eingespielt wurden, kann die Spiegelung nicht aktiviert werden. Führen Sie in diesem Fall zunächst eine Wiederherstellung aller noch nicht eingespielten Transaktionsprotokollsicherungen auf der Spiegelinstanz durch.
Nachdem die Datenbankspiegelung gestartet ist, tauschen alle drei beteiligten Instanzen regelmäßig Statusinformationen aus. Sie können den Netzwerkstatus aller drei Instanzen mithilfe von netstat prüfen:
Netstat –abn

Einrichten der Datenbankspiegelung mit Transact-SQL

Natürlich kann die Datenbankspiegelung auch über Transact-SQL Anweisungen eingerichtet werden. Diese Methode ist empfehlenswert, wenn eine ganze Reihe von Datenbanken auf eine andere Instanz gespiegelt werden soll. Das folgende Beispiel zeigt die Einrichtung der Datenbankspiegelung analog zum vorangegangenen Beispiel. Die Datenbank „Suedwind“ soll von der Instanz „Mars/SQL2005“ auf die Instanz „Venus/SQL2005“ gespiegelt werden. Als Zeuge wird die Instanz „Vulkan/SQL2005“ verwendet.

Erstellen der Endpunkte auf allen drei beteiligten Instanzen

Auf der Prinzipalinstanz soll der Port 5022 verwendet werden. Als Name für den Endpunkt wird „SpiegelSuedwind“ festgelegt. Das Dienstkonto „SQLServer“ erhält die notwendige Berechtigung zum Verbindungsaufbau:
-- Prinzipal Instanz
-- Endpunkt für Datenbankspiegelung erstellen:
CREATE ENDPOINT SpiegelSuedwind STATE = STARTED
       AS TCP ( LISTENER_PORT = 5022 )
       FOR DATABASE_MIRRORING
           ( ENCRYPTION = SUPPORTED, ROLE = PARTNER );
GO
-- Dienstkonto "sqlserver" Berechtigung zum Verbinden mit dem
-- Endpunkt erteilen:
GRANT CONNECT
     
ON ENDPOINT::SpiegelSuedwind
      TO [sqltrain\sqlserver];
GO

Listing: Einrichten des Datenbankspiegel-Endpunkts auf der Prinzipalinstanz
Auf der Spiegelinstanz wird der Port 5050 verwendet. Das folgende Transact-SQL Skript wird auf der Instanz „Venus\SQL2005“ ausgeführt:
-- Spiegel Instanz
-- Endpunkt für Datenbankspiegelung erstellen:
CREATE ENDPOINT SpiegelSuedwind STATE = STARTED
       AS TCP ( LISTENER_PORT = 5050 )
       FOR DATABASE_MIRRORING
         ( ENCRYPTION = SUPPORTED, ROLE = PARTNER );
GO
-- Dienstkonto "sqlserver" Berechtigung zum Verbinden mit dem
-- Endpunkt erteilen:
GRANT CONNECT
      ON ENDPOINT::SpiegelSuedwind
      TO [sqltrain\sqlserver];
GO
Listing: Einrichten des Datenbankspiegel-Endpunkts auf der Spiegelinstanz „Venus\SQL2005“
Schließlich wird auf der Zeugen-Instanz der Endpunkt „ZeugeSuedwind“ mit Port 5051 aktiviert:
-- Zeugen Instanz
-- Endpunkt für Datenbankspiegelung erstellen:
CREATE ENDPOINT ZeugeSuedwind STATE = STARTED
       AS TCP ( LISTENER_PORT = 5051 )
       FOR DATABASE_MIRRORING
         ( ENCRYPTION = SUPPORTED, ROLE = WITNESS );
GO
-- Dienstkonto "sqlserver" Berechtigung zum Verbinden mit dem
-- Endpunkt erteilen:
GRANT CONNECT
      ON ENDPOINT::ZeugeSuedwind
      TO [sqltrain\sqlserver];
GO

Listing 1.6: Aktiveren des Endpunkts „ZeugeSuedwind“ auf der Zeugen-Instanz

Starten der Datenbankspiegelung

Nachdem alle Endpunkte konfiguriert sind, kann die Datenbankspiegelung gestartet werden. Dazu wird im ersten Schritt auf der Spiegelinstanz („Venus\SQL2005“) die Prinzipalinstanz als Partner festgelegt.
Die Datenbank „Suedwind“ wurde auf der Spiegelinstanz bereits mit der Option „NORECOVERY“ wiederhergestellt.
-- 1. Partner von Spiegel zu Prinzipal
ALTER DATABASE Suedwind SET PARTNER = 'TCP://mars.muc.sqltrain:5022'
GO

Listing: Festlegen des Partners auf der Spiegelinstanz

Anschließend kann auf der Prinzipalinstanz („Mars\SQL2005“) die Spiegelinstanz als Partner festgelegt werden.
Dadurch werden beide Datenbanken synchronisiert; die Datenbank „Suedwind“ auf der Instanz „Mars\SQL2005“ wird zur Prinzipaldatenbank.
Im gleichen Skript kann zusätzlich die Instanz „Vulkan\SQL2005“ als Zeuge für die Spiegelsitzung definiert werden:
-- 2. Partner von Prinzipal zu Spiegel
ALTER DATABASE Suedwind
SET PARTNER = 'TCP://venus.muc.sqltrain:5050'
GO
-- Festlegen der Zeugen-Instanz:
ALTER DATABASE Suedwind
SET WITNESS = 'TCP://vulkan.muc.sqltrain:5051'
-- Abfragen der Eigenschaften der Spiegelung:
USE Suedwind;
SELECT *
FROM sys.database_mirroring
WHERE database_id = DB_ID()
GO

Listing: Aktivieren von Spiegelung und Zeuge auf der Prinzipalinstanz

Nachdem alle Partner konfiguriert sind, können über die Sicht „sys.database_mirroring“ die Konfiguration und der Status der einzelnen Partner abgefragt werden.
Zusammenspiel von Prinzipal,
            Spiegel und Zeuge
Abbildung: Zusammenspiel von Prinzipal, Spiegel und Zeuge

Failover-Szenarien

Manueller Failover

Im Fehlerfall kann ein manueller Failover vom Prinzipal zum Spiegel durchgeführt werden. Der Spiegel übernimmt in diesem Fall die Rolle des Prinzipals und bringt seine Datenbank online. Die folgende Transact-SQL Anweisung kann auf dem Prinzipal ausgeführt werden, um einen manuellen Failover zu starten:
USE master
GO
ALTER DATABASE Suedwind
SET PARTNER FAILOVER
GO

Automatischer Failover

Ist der Prinzipalserver nicht mehr erreichbar und Spiegel und Zeuge können noch miteinander kommunizieren, erfolgt ein automatischer Failover (Im Betriebsmodus „Hohe Verfügbarkeit“). Wird der ursprüngliche Prinzipal später wieder erreicht, übernimmt er die Rolle des Spiegels und synchronisiert die Daten wieder mit dem neuen Prinzipal.

Failover und Clientverbindungen

Für Clientprogramme, die mit dem SQL Native Client Provider auf die Datenbank zugreifen, ist ein Failover transparent, d.h. dem Client muss die Adresse des aktiven Servers nicht explizit mitgeteilt werden.
Baut ein solcher Client eine Verbindung zu einer gespiegelten Datenbank auf (der Name der Datenbank muss in der Verbindungszeichenfolge angegeben sein), sendet der Prinzipal dem Client mit dem Verbindungsaufbau auch die Adresse der Spiegelinstanz. Findet während des Programmlaufs ein Failover statt, wird die Verbindung automatisch mit dem Failover Partner aufgebaut. Bestand noch eine offene Verbindung zum ursprünglichen Prinzipal, als der Failover stattfand, erhält der Client zunächst eine entsprechende Fehlermeldung, dass die Verbindung getrennt wurde. Anschließend kann die Verbindung jedoch einfach wiederhergestellt werden, ohne dass der Name des „neuen“ Prinzipals explizit angegeben werden muss.
Damit auch Clients, die zum Zeitpunkt des Failovers noch nicht gestartet wurden direkt eine Verbindung zum aktuellen Prinzipal aufbauen können, sollte die Verbindungszeichenfolge immer auch den Namen des Fail-over Partners enthalten. In diesem Fall wird automatisch eine Verbindung zum Partner aufgebaut, wenn keine Verbindung zum ursprünglichen Prinzipal möglich ist.
Beispiel für eine Verbindungszeichenfolge mit Failover Partner:
connectionString="Data Source=mars.muc.sqltrain\SQL2005;Initial Catalog=Suedwind;Integrated Security=True;Failover Partner=venus.muc.sqltrain\SQL2005;"
Mit welcher Instanz die Verbindung tatsächlich hergestellt wird, kann im Client-Programm nach dem Verbindungsaufbau über die Eigenschaft „DataSource“ des „SQLConnection“-Objekts ermittelt werden.

Einige Zusatzinfos zu transparentem Failover und Connection-Pooling

Tatsächlich spielen Connection Pooling und die Angabe von "Failover Partner" im Connection-String eine Rolle, aber grundsätzlich kommt es darauf an, in welchem Zustand sich die Client-Verbindung befindet, während der Failover stattfindet. Ich habe mal die folgenden Szenarien durchgespielt:
1. Fall: Failover bevor das Client Programm gestartet wurde
Ist der Failover Partner im ConnectionString angegeben, wird automatisch eine Verbindung zum neuen Prinzipal aufgebaut, ist der Failover Partner nicht angegeben, findet kein Verbindungsaufbau statt (Auch wenn ein manueller Failover durchgeführt wurde und der "Master"-Server eigentlich erreichbar ist.)
2. Fall: Failover während das Client-Programm läuft; es besteht aber zur Zeit keine Verbindung
(was bei der Arbeit mit Datasets durchaus realistisch ist), d.h. das Connection Objekt hat den Status "Closed" und es existiert dahinter auch keine durch das Connection-Pooling offen gehaltene Verbindung mehr.
Bei diesem Szenario spielt es keine Rolle, ob ein Failover Partner im Connectionstring angegeben ist, da beim ersten Öffnen der Verbindung der Name des Partners im Connection-Objekt gecacht wird. Diese Information bleibt erhalten, auch wenn die Verbindung geschlossen wird (State=Closed). Wird die Verbindung nach dem Failover erneut geöffnet, z.B. durch ein Update über Datenadapter, findet eine transparente Umleitung zum Partner statt. Natürlich muss für den Verbindungsaufbau wieder das gleiche Connection-Objekt verwendet werden, sonst ist das Verhalten wie im 1. Fall beschrieben.
3. Fall: Failover während das Client-Programm läuft; die Verbindung wurde seit dem letzten Befehl (Update, Fill, etc.) nicht geschlossen.
Ich meine hier die "echte" Verbindung zum Server - ist Connection Pooling aktiviert, so bleibt die eigentliche Verbindung ja noch einige Zeit geöffnet, auch wenn das Connection-Objekt den Status "Closed" hat. Wird jetzt der nächste Befehl an den Server gesendet, kommt es zum Fehler: Ist gar keine Verbindung zum Server mehr möglich (Server weg oder Netz weg) gibt es entsprechend eine Meldung: Verbindung zum Server fehlgeschlagen, ...
Ist der Server noch erreichbar und wurde die Verbindung durch den Failover getrennt, gibt es eine entsprechende Fehlermeldung, dass die Verbindung vom Server getrennt wurde. In beiden Fällen muss der Fehler abgefangen werden. Ein anschließender Verbindungsaufbau ist jedoch wieder fehlerfrei möglich - die Verbindung wird dann automatisch zum Failover Partner umgeleitet. Auch hier gilt wieder das gleiche wie bei Fall 2: Für den erneuten Verbindungsaufbau muss das gleiche Connection-Objekt verwendet werden, ansonsten muss der Failover-Partner im Connectionstring angegeben sein.
Das heißt, ganz ohne Fehlerbehandlung kommt man nicht aus, aber die sollte ja in jedem Fall vorhanden sein: Es gibt ja auch noch den Zeitraum zwischen Fehler und Umschalten auf den Spiegelpartner. Insgesamt finde ich, dass man doch von einer transparenten Umleitung sprechen kann.
Leider habe ich keinen Weg gefunden, den Namen des Partner Servers nach dem Verbindungsaufbau aus dem Connection-Objekt auszulesen, obwohl die Information ja irgendwo gecacht wird, aber man kann den Namen leicht sofort nach dem Verbindungsaufbau durch einen Select auf die Sicht sys.database_mirroring abfragen.
Nach erfolgreichem Verbindungsaufbau kann man übrigens über die Eigenschaft DataSource des Connection-Objekts feststellen, mit welchem Server die Verbindung tatsächlich hergestellt wurde.
Leerraum

Dokument zum Drucken anzeigen
English Pages
Link-Tipp zum Thema "Microsoft SQL Server": www.devx.com/projectcool/developer/Default.asp

Viele Artikel, Links zu .Net, VB, SQL Server, und und und...