Freigeben über


Datenbankspiegelung in SQL Server (ADO.NET)

Mithilfe der Datenbankspiegelung in SQL Server können Sie eine Kopie, oder auch Spiegelbild, einer SQL Server 2005-Datenbank auf einem Standbyserver speichern. Durch das Spiegeln wird sichergestellt, dass jederzeit zwei separate Kopien der Daten vorhanden sind. Dies gewährleistet eine hohe Verfügbarkeit und vollständige Datenredundanz. Der .NET-Datenanbieter für SQL Server stellt implizite Unterstützung für die Datenbankspiegelung bereit. Das Schreiben von Code oder Ausführen anderer Aktionen nach dem Konfigurieren für eine SQL Server 2005- oder SQL Server 2008-Datenbank ist daher seitens der Entwickler nicht erforderlich. Außerdem unterstützt das SqlConnection-Objekt einen expliziten Verbindungsmodus, über den der Name eines Failover-Partnerservers im ConnectionString angegeben werden kann.

Die folgende vereinfachte Ereignissequenz tritt bei einem SqlConnection-Objekt ein, das eine Datenbank zum Ziel hat, welche für die Spiegelung konfiguriert wurde:

  1. Die Clientanwendung stellt mit Erfolg eine Verbindung mit der Prinzipaldatenbank her, 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 Konnektivität unterbrochen wird, gehen die Verbindung und der Transaktionsstatus verloren. Die Clientanwendung versucht, erneut eine Verbindung mit der Prinzipaldatenbank herzustellen, und hat damit keinen Erfolg.

  3. Die Clientanwendung versucht daraufhin transparent, eine Verbindung mit der Spiegeldatenbank auf dem Partnerserver herzustellen. Wenn dieser Vorgang erfolgreich ausgeführt werden kann, wird die Verbindung zur Spiegeldatenbank umgeleitet, die daraufhin zur neuen Prinzipaldatenbank wird.

Angeben des Failoverpartners in der Verbindungszeichenfolge

Wenn Sie den Namen eines Failover-Partnerservers in der Verbindungszeichenfolge angeben, versucht der Client transparent, eine Verbindung mit dem Failover-Partnerserver herzustellen, wenn die Prinzipaldatenbank beim ersten Verbindungsversuch der Clientanwendung nicht verfügbar ist.

";Failover Partner=PartnerServerName"

Wenn Sie den Namen des Failover-Partnerservers nicht angeben und die Prinzipaldatenbank nicht verfügbar ist, wenn die Clientanwendung eine Verbindung herstellt, wird ein SqlException-Objekt ausgelöst.

Wenn ein SqlConnection erfolgreich geöffnet wird, wird der Failover-Partnername vom Server zurückgegeben. Er hat Vorrang vor allen in der Verbindungszeichenfolge angegebenen Werten.

HinweisHinweis

Sie müssen den Namen des Anfangskatalogs oder der Angangsdatenbank explizit in der Verbindungszeichenfolge für Szenarien mit Datenbankspiegelung angeben.Wenn der Client Failoverinformationen zu einer Verbindung empfängt, für die nicht explizit ein Anfangskatalog oder eine Anfangsdatenbank angegeben wurde, werden die Failoverinformationen nicht zwischengespeichert, und die Anwendung versucht auch nicht, bei einem Ausfall des Prinzipalservers einen Failover durchzuführen.Wenn eine Verbindungszeichenfolge über einen Wert für den Failoverpartner, nicht jedoch über einen Wert für den Anfangskatalog oder die Anfangsdatenbank verfügt, wird eine InvalidArgumentException ausgelöst.

Abrufen des Namens für den aktuellen Server

Im Fall eines Failovers können Sie den Namen des Servers, mit dem tatsächlich die aktuelle Verbindung besteht, mit der DataSource-Eigenschaft eines SqlConnection-Objekts abrufen. Das folgende Codefragment ruft den Namen des aktiven Servers ab. Dabei wird davon ausgegangen, dass die Verbindungsvariable auf eine geöffnete SqlConnection verweist.

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

Dim activeServer As String = connection.DataSource
string activeServer = connection.DataSource;

Spiegelungsverhalten bei SqlClient

Der Client versucht stets, eine Verbindung mit dem aktuellen Prinzipalserver herzustellen. Wenn keine Verbindung hergestellt werden kann, wechselt er zum Failover-Partner. Wenn die Spiegeldatenbank auf dem Partnerserver bereits auf die Prinzipalrolle heraufgestuft wurde, kann die Verbindung hergestellt werden. Die neue Prinzipal-Spiegel-Zuordnung wird an den Client gesendet und für die Lebensdauer der aufrufenden AppDomain zwischengespeichert. Sie wird nicht im dauerhaften 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. Beachten Sie, dass eine andere AppDomain oder ein anderer Prozess, die oder der auf demselben oder einem anderen Computer ausgeführt wird, immer über einen eigenen Pool von Verbindungen verfügt, 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.

HinweisHinweis

Die Unterstützung für Spiegelung auf dem Server wird pro Datenbank konfiguriert.Wenn für andere Datenbanken, die nicht zur Prinzipal-Spiegel-Konfiguration gehören, Datenbearbeitungsvorgänge ausgeführt werden (entweder durch Verwendung mehrteiliger Namen oder durch Ändern der aktuellen Datenbank), werden die Änderungen an diesen anderen Datenbanken bei einem Ausfall nicht übernommen.Beim Ändern von Daten in einer Datenbank, die nicht gespiegelt ist, wird kein Fehler erzeugt.Entwickler müssen die möglichen Auswirkungen solcher Vorgänge überprüfen.

Ressourcen zur Datenbankspiegelung

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

Ressource

Beschreibung

Datenbankspiegelung in der SQL Server 2008-Onlinedokumentation.

Beschreibt, wie Spiegelung in SQL Server 2008 eingerichtet und konfiguriert wird.

Datenbankspiegelung in der SQL Server 2005-Onlinedokumentation.

Beschreibt, wie Spiegelung in SQL Server 2005 eingerichtet und konfiguriert wird.