Datenbankspiegelung in SQL Server

Herunterladen von ADO.NET

Hinweis

Datenbankspiegelung in SQL Server ist nicht dasselbe wie die Datenbankspiegelung in Microsoft Fabric.

Mithilfe der Datenbankspiegelung in SQL Server können Sie eine Kopie, oder auch Spiegelbild, einer SQL Server-Datenbank auf einem Standbyserver speichern. Die Spiegelung stellt sicher, dass jederzeit zwei getrennte Kopien der Daten vorhanden sind, was Hochverfügbarkeit und vollständige Datenredundanz gewährleistet. Der Microsoft SqlClient-Anbieter für SQL Server bietet implizite Unterstützung für die Datenbankspiegelung. Sobald der Client für eine SQL Server-Datenbank konfiguriert wurde, muss der Entwickler nicht mehr tätig werden. Zusätzlich unterstützt das SqlConnection-Objekt einen expliziten Verbindungsmodus, der es ermöglicht, den Namen eines Failoverpartnerservers in ConnectionString anzugeben.

Die folgende vereinfachte Ereignissequenz erfolgt für ein SqlConnection-Objekt, das eine für Spiegelung konfigurierte Datenbank als Ziel hat:

  1. Die Clientanwendung verbindet sich erfolgreich mit der Prinzipaldatenbank, und der Server sendet den Namen des Partnerservers zurück, der dann auf dem Client zwischengespeichert wird.
  2. Wenn der Server mit der Prinzipaldatenbank ausfällt oder die Verbindung unterbrochen wird, gehen Verbindung und Transaktionsstatus verloren. Die Clientanwendung versucht, wieder eine Verbindung mit der Prinzipaldatenbank herzustellen, und schlägt fehl.
  3. Die Clientanwendung versucht dann auf transparente Weise, eine Verbindung mit der Spiegeldatenbank auf dem Partnerserver herzustellen. Bei Erfolg wird die Verbindung zur Spiegeldatenbank umgeleitet, die dann zur neuen Prinzipaldatenbank wird.

Angeben des Failoverpartners in der Verbindungszeichenfolge

Wenn Sie den Namen eines Failoverpartnerservers in der Verbindungszeichenfolge angeben und die Prinzipaldatenbank nicht verfügbar ist, wenn die Clientanwendung eine Verbindung herstellt, versucht der Client transparent, eine Verbindung mit dem Failoverpartner herzustellen.

";Failover Partner=PartnerServerName"

Wenn der Name des Failoverpartnerservers nicht angegeben wird und die Prinzipaldatenbank nicht verfügbar ist, wenn die Clientanwendung erstmalig eine Verbindung herstellt, tritt die Ausnahme SqlException auf.

Wenn eine SqlConnection-Verbindung erfolgreich geöffnet wird, wird der Failoverpartnername vom Server zurückgegeben und ersetzt alle in der Verbindungszeichenfolge angegebenen Werte.

Hinweis

In Szenarien mit Datenbankspiegelung müssen Sie den Ausgangskatalog oder Datenbanknamen explizit in der Verbindungszeichenfolge angeben. Wenn der Client Failover-Informationen zu einer Verbindung empfängt, für die nicht explizit ein Anfangskatalog oder eine Anfangsdatenbank angegeben wurde, werden die Failover-Informationen nicht zwischengespeichert und die Anwendung versucht auch nicht, bei einem Ausfall des Prinzipalservers einen Failover durchzuführen. Wenn eine Verbindungszeichenfolge einen Wert für den Failoverpartner, aber keinen Wert für den Ausgangskatalog oder die Datenbank hat, wird eine InvalidArgumentException ausgelöst.

Abrufen des aktuellen Servernamens

Bei einem Failover können Sie den Namen des Servers abrufen, mit dem die aktuelle Verbindung tatsächlich besteht, indem Sie die DataSource-Eigenschaft eines SqlConnection-Objekts verwenden. Das folgende Codefragment ruft den Namen des aktiven Servers ab, wobei angenommen wird, dass die Verbindungsvariable auf eine geöffnete SqlConnection verweist.

Wenn ein Failoverereignis eintritt und die Verbindung zum Spiegelserver wechselt, wird die DataSource-Eigenschaft aktualisiert, um den Namen des Spiegelservers wiederzugeben.

string activeServer = connection.DataSource;

SqlClient-Spiegelungsverhalten

Der Client versucht stets, eine Verbindung zum Prinzipalserver herzustellen. Bei Misserfolg wird der Failoverpartner versucht. Wenn die Spiegeldatenbank bereits auf die Prinzipalrolle auf dem Partnerserver umgestellt wurde, ist die Verbindung erfolgreich. Die neue Zuordnung zwischen Prinzipal und Spiegel wird an den Client gesendet und für die Lebensdauer des Aufrufs von AppDomain zwischengespeichert. Sie wird nicht im beständigen Speicher gespeichert und ist für nachfolgende Verbindungen in einer anderen AppDomain oder einem anderen Prozess nicht verfügbar. Sie ist allerdings für nachfolgende Verbindungen innerhalb derselben AppDomain verfügbar. Eine andere AppDomain oder ein anderer Prozess, die oder der auf demselben oder einem anderen Computer ausgeführt wird, verfügt immer über einen eigenen Pool von Verbindungen, die nicht zurückgesetzt werden. Wenn in diesem Fall die primäre Datenbank ausfällt, wird jeder Prozess bzw. jede AppDomain einmal mit einem Fehler ausgeführt, und der Pool wird automatisch gelöscht.

Hinweis

Die Unterstützung der Spiegelung auf dem Server wird datenbankbezogen konfiguriert. Wenn Datenbearbeitungsvorgänge auf andere, nicht im Prinzipal-/Spiegelsatz enthaltene Datenbanken angewendet werden, entweder durch Verwendung mehrteiliger Namen oder durch Änderung der aktuellen Datenbank, werden die Änderungen an diesen anderen Datenbanken bei einem Fehler nicht weitergegeben. Wenn Daten in einer nicht gespiegelten Datenbank geändert werden, wird kein Fehler ausgegeben. Der Entwickler muss die möglichen Auswirkungen solcher Vorgänge einschätzen.

Nächste Schritte

Ressourcen für die Datenbankspiegelung

Die Begriffsdokumentation und Informationen zum Konfigurieren, Bereitstellen und Verwalten der Spiegelung finden Sie in den folgenden Ressourcen in der SQL Server-Dokumentation.

Resource BESCHREIBUNG
Datenbankspiegelung Beschreibt, wie Spiegelung in SQL Server eingerichtet und konfiguriert wird.