ALTER DATABASE-Datenbankspiegelung (Transact-SQL)

Steuert die Datenbankspiegelung für eine Datenbank. Werte, die mit den Optionen für die Datenbankspiegelung angegeben werden, gelten für Kopien der Datenbank sowie für die gesamte Sitzung zur Datenbankspiegelung. Pro ALTER DATABASE-Anweisung ist nur eine <database_mirroring_option> erlaubt.

HinweisHinweis

Es empfiehlt sich, die Konfiguration der Datenbankspiegelung außerhalb der Spitzenbetriebszeiten durchzuführen, da sich die Konfiguration auf die Leistung auswirken kann.

Weitere Informationen zur Datenbankspiegelung finden Sie unter Verwaltung der Datenbankspiegelung. Weitere ALTER DATABASE-Optionen finden Sie unter ALTER DATABASE (Transact-SQL). Weitere ALTER DATABASE SET-Optionen finden Sie unter ALTER DATABASE SET-Optionen (Transact-SQL).

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

ALTER DATABASE database_name 
SET { <partner_option> | <witness_option> }
    <partner_option> ::=
    PARTNER { = 'partner_server' 
            | FAILOVER 
            | FORCE_SERVICE_ALLOW_DATA_LOSS
            | OFF
            | RESUME 
            | SAFETY { FULL | OFF }
            | SUSPEND 
            | TIMEOUT integer
            }
    <witness_option> ::=
    WITNESS { = 'witness_server' 
            | OFF 
            }

Argumente

Wichtiger HinweisWichtig

Ein SET PARTNER- oder SET WITNESS-Befehl kann nach der Eingabe erfolgreich abgeschlossen werden und dennoch später einen Fehler generieren.

  • database_name
    Der Name der Datenbank, die geändert werden soll.

  • PARTNER <partner_option>
    Steuert die Datenbankeigenschaften, die die Failoverpartner einer Datenbank-Spiegelungssitzung und deren Verhalten definieren. Einige Optionen von SET PARTNER können für einen beliebigen Partner festgelegt werden, andere sind auf den Prinzipal- oder den Spiegelserver beschränkt. Weitere Informationen finden Sie unter den jeweiligen Optionen von PARTNER weiter unten. Eine SET PARTNER-Klausel wirkt sich auf beide Kopien der Datenbank aus, unabhängig davon, für welchen Partner sie angegeben ist.

    Für die Endpunkte beider Partner muss STATE auf STARTED festgelegt werden, um eine SET PARTNER-Anweisung auszuführen. Außerdem muss ROLE für den Datenbank-Spiegelungsendpunkt jeder Partnerserverinstanz auf PARTNER oder ALL festgelegt sein. Weitere Informationen zum Angeben eines Endpunkts finden Sie unter Vorgehensweise: Erstellen eines Endpunkts der Datenbankspiegelung für Windows-Authentifizierung (Transact-SQL). Verwenden Sie folgende Transact-SQL-Anweisung, um die Rolle und den Status des Datenbank-Spiegelungsendpunkts einer Serverinstanz zu erfahren:

    SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints
    

    <partner_option> ::=

    HinweisHinweis

    Pro SET PARTNER-Klausel ist nur eine <partner_option> zugelassen.

    • 'partner_server'
      Gibt die Server-Netzwerkadresse einer Instanz von SQL Server an, die als Failoverpartner in einer neuen Datenbank-Spiegelungssitzung agiert. Jede Sitzung erfordert zwei Partner, von denen einer als Prinzipalserver, der andere als Spiegelserver beginnt. Die beiden Partner sollten sich auf unterschiedlichen Computern befinden.

      Diese Option wird einmal pro Sitzung für jeden Partner angegeben. Für das Starten einer Datenbank-Spiegelungssitzung sind zwei ALTER DATABASE database SET PARTNER ='partner_server'-Anweisungen erforderlich. Ihre Reihenfolge ist wichtig. Stellen Sie zuerst eine Verbindung mit dem Spiegelserver her, und geben Sie die Prinzipalserverinstanz als partner_server (SET PARTNER ='principal_server') an. Stellen Sie dann eine Verbindung mit dem Prinzipalserver her, und geben Sie die Spiegelserverinstanz als partner_server (SET PARTNER ='mirror_server') an; auf diese Weise wird eine Datenbank-Spiegelungssitzung zwischen diesen beiden Partnern gestartet. Weitere Informationen finden Sie unter Einrichten der Datenbankspiegelung.

      Der Wert von partner_server ist eine Server-Netzwerkadresse. Diese hat folgende Syntax:

      TCP**://<system-address>:**<port>

      Dabei gilt:

      • <system-address> ist eine Zeichenfolge, z. B. ein Systemname, ein vollqualifizierter Domänenname oder eine IP-Adresse, die das Zielcomputersystem eindeutig identifiziert.

      • <port> ist eine Portnummer, die dem Spiegelungsendpunkt der Partnerserverinstanz zugeordnet ist.

      Weitere Informationen finden Sie unter Angeben einer Server-Netzwerkadresse (Datenbankspiegelung).

      Das folgende Beispiel veranschaulicht die SET PARTNER ='partner_server'-Klausel:

      'TCP://MYSERVER.mydomain.Adventure-Works.com:7777'
      
      Wichtiger HinweisWichtig

      Wird eine Sitzung mithilfe der ALTER DATABASE-Anweisung statt mit SQL Server Management Studio eingerichtet, wird die Sitzung standardmäßig auf vollständige Transaktionssicherheit festgelegt (SAFETY wird auf FULL festgelegt) und im Modus für hohe Sicherheit ohne automatisches Failover ausgeführt. Konfigurieren Sie einen Zeugen, um automatisches Failover zuzulassen. Für die Ausführung im Modus für hohe Leistung deaktivieren Sie die Transaktionssicherheit (SAFETY OFF).

    • FAILOVER
      Führt ein manuelles Failover vom Prinzipalserver zum Spiegelserver aus. Sie können FAILOVER nur auf dem Prinzipalserver angeben. Diese Option ist nur dann gültig, wenn die Einstellung SAFETY auf FULL (Standardeinstellung) festgelegt ist.

      Die Option FAILOVER erfordert master als Datenbankkontext.

      Weitere Informationen finden Sie unter Manuelles Failover.

    • FORCE_SERVICE_ALLOW_DATA_LOSS
      Erzwingt ein Failover des Datenbankdiensts auf die Spiegeldatenbank, wenn auf dem Prinzipalserver ein Fehler auftritt, wobei sich die Datenbank im nicht synchronisierten Zustand oder im synchronisierten Zustand ohne automatisches Failover befindet.

      Es wird dringend empfohlen, den Dienst nur dann zu erzwingen, wenn der Prinzipalserver nicht mehr ausgeführt wird. Andernfalls können einige Clients weiter versuchen, auf die ursprüngliche Prinzipaldatenbank zuzugreifen statt auf die neue Prinzipaldatenbank.

      FORCE_SERVICE_ALLOW_DATA_LOSS ist nur auf dem Spiegelserver verfügbar und nur unter allen folgenden Bedingungen:

      • Der Prinzipalserver ist ausgefallen.

      • WITNESS ist auf OFF festgelegt, oder der Zeugenserver ist mit dem Spiegelserver verbunden.

      Sie sollten den Dienst nur erzwingen, wenn Sie bereit sind, Datenverluste in Kauf zu nehmen, um den Dienst für die Datenbank unverzüglich wiederherzustellen. Informationen zu Alternativen für das Erzwingen des Diensts finden Sie unter Asynchrone Datenbankspiegelung (Modus für hohe Leistung).

      Durch das Erzwingen des Diensts wird die Sitzung ausgesetzt, und alle Daten werden vorübergehend in der ursprünglichen Prinzipaldatenbank beibehalten. Sobald der ursprüngliche Prinzipalserver in Betrieb und zur Kommunikation mit dem neuen Prinzipalserver in der Lage ist, kann der Datenbankadministrator den Dienst fortsetzen. Wenn die Sitzung fortgesetzt wird, gehen alle nicht gesendeten Protokolldatensätze sowie die entsprechenden Aktualisierungen verloren.

      Weitere Informationen zu den Risiken beim Erzwingen des Diensts finden Sie unter Erzwungener Dienst (mit möglichem Datenverlust).

    • OFF
      Entfernt eine Datenbank-Spiegelungssitzung und entfernt die Spiegelung von der Datenbank. Sie können OFF auf beiden Partnern festlegen. Informationen zu den Auswirkungen des Entfernens der Spiegelung finden Sie unter Entfernen der Datenbankspiegelung.

    • RESUME
      Setzt eine ausgesetzte Datenbank-Spiegelungssitzung fort. Sie können RESUME nur auf dem Prinzipalserver angeben.

    • SAFETY { FULL | OFF }
      Legt die Sicherheitsstufe für Transaktionen fest. Sie können SAFETY nur auf dem Prinzipalserver angeben.

      Der Standardwert ist FULL. Bei höchster Sicherheitsstufe (FULL) wird die Datenbank-Spiegelungssitzung synchron (im Modus für hohe Sicherheit) ausgeführt. Ist SAFETY auf OFF festgelegt, wird die Datenbank-Spiegelungssitzung asynchron (im Modus für hohe Leistung) ausgeführt.

      Das Verhalten des Modus für hohe Sicherheit hängt teilweise folgendermaßen vom Zeugen ab:

      • Wenn die Sicherheit auf FULL und ein Zeuge für die Sitzung festgelegt wurden, wird die Sitzung im Modus für hohe Sicherheit mit automatischem Failover ausgeführt. Wenn der Prinzipalserver ausfällt, findet automatisch ein Failover der Sitzung statt, sofern die Datenbank synchronisiert ist und die Spiegelserverinstanz und der Zeuge noch miteinander verbunden sind (das heißt, sie verfügen über ein Quorum). Weitere Informationen finden Sie unter Quorum: Auswirkungen eines Zeugen auf die Datenbankverfügbarkeit.

        Wenn ein Zeuge für die Sitzung festgelegt wurde, der zurzeit nicht verbunden ist, bewirkt der Verlust des Spiegelservers, dass der Prinzipalserver ausfällt.

      • Wenn die Sicherheit auf FULL und der Zeuge auf OFF festgelegt wurden, wird die Sitzung im Modus für hohe Sicherheit ohne automatisches Failover ausgeführt. Wenn die Spiegelserverinstanz ausfällt, hat dies keine Auswirkungen auf die Prinzipalserverinstanz. Wenn der Prinzipalserver ausfällt, können Sie den Dienst (mit möglichem Datenverlust) auf dem Spiegelserver erzwingen.

      Ist SAFETY auf OFF festgelegt, wird die Sitzung im Modus für hohe Leistung ausgeführt, und weder automatisches noch manuelles Failover werden unterstützt. Probleme auf dem Spiegelserver wirken sich jedoch nicht auf den Prinzipalserver aus. Wenn die Prinzipalserverinstanz ausfällt, können Sie ggf. das Failover des Diensts (mit möglichem Datenverlust) auf die Spiegelserverinstanz erzwingen – sofern WITNESS auf OFF festgelegt wurde oder der Zeuge aktuell mit dem Spiegelserver verbunden ist. Weitere Informationen zum Erzwingen des Diensts finden Sie unter "FORCE_SERVICE_ALLOW_DATA_LOSS" weiter oben in diesem Abschnitt.

      Wichtiger HinweisWichtig

      Der Modus für hohe Leistung ist nicht für die Verwendung eines Zeugen konzipiert. Beim Festlegen von SAFETY auf OFF sollte unbedingt sichergestellt werden, dass WITNESS ebenfalls auf OFF festgelegt ist.

      Weitere Informationen finden Sie unter Transact-SQL-Einstellungen und Datenbankspiegelungs-Betriebsmodi.

    • SUSPEND
      Hält eine Datenbank-Spiegelungssitzung an.

      Sie können SUSPEND auf beiden Partnern angeben.

    • TIMEOUT integer
      Gibt den Timeoutzeitraum in Sekunden an. Der Timeoutzeitraum ist die Zeit, die eine Serverinstanz maximal auf den Empfang einer PING-Nachricht von einer anderen Instanz in der Spiegelungssitzung wartet, bevor davon ausgegangen wird, dass die Verbindung der anderen Instanz getrennt wurde.

      Sie können die Option TIMEOUT nur auf dem Prinzipalserver angeben. Wenn Sie die Option nicht angeben, beträgt der Timeoutzeitraum standardmäßig 10 Sekunden. Wenn Sie 5 oder höher angeben, wird der Timeoutzeitraum auf die angegebene Anzahl von Sekunden festgelegt. Wenn Sie einen Timeoutzeitwert von 0 bis 4 Sekunden angeben, wird der Timeoutzeitraum automatisch auf 5 Sekunden festgelegt.

      Wichtiger HinweisWichtig

      Es wird empfohlen, einen Timeoutzeitraum von 10 Sekunden oder mehr zu wählen. Wenn Sie diesen Wert auf weniger als 10 Sekunden festlegen, verpasst ein stark ausgelastetes System möglicherweise PINGs und meldet einen nicht zutreffenden Fehler.

      Weitere Informationen finden Sie unter Mögliche Fehler während der Datenbankspiegelung.

  • WITNESS <witness_option>
    Steuert die Datenbankeigenschaften, die einen Datenbank-Spiegelungszeugen definieren. Eine SET WITNESS-Klausel wirkt sich auf beide Kopien der Datenbank aus, Sie können SET WITNESS jedoch nur auf dem Prinzipalserver angeben. Wenn ein Zeuge für eine Sitzung festgelegt wird, ist unabhängig von der SAFETY-Einstellung ein Quorum erforderlich, um die Datenbank zur Verfügung zu stellen. Weitere Informationen finden Sie unter Quorum: Auswirkungen eines Zeugen auf die Datenbankverfügbarkeit.

    Zeuge und Failoverpartner sollten sich auf separaten Computern befinden. Weitere Informationen zum Zeugen finden Sie unter Datenbank-Spiegelungszeuge. Weitere Informationen zum automatischen Failover finden Sie unter Automatisches Failover.

    Für die Endpunkte von Prinzipal- und Zeugenserverinstanz muss STATE auf STARTED festgelegt werden, um eine SET WITNESS-Anweisung ausführen zu können. Außerdem muss ROLE für den Datenbank-Spiegelungsendpunkt einer Zeugenserverinstanz auf WITNESS oder ALL festgelegt sein. Weitere Informationen zum Angeben eines Endpunkts finden Sie unter Datenbank-Spiegelungsendpunkt.

    Verwenden Sie folgende Transact-SQL-Anweisung, um die Rolle und den Status des Datenbank-Spiegelungsendpunkts einer Serverinstanz zu erfahren:

    SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints
    
    HinweisHinweis

    Auf dem Zeugenserver können keine Datenbankeigenschaften festgelegt werden.

    <witness_option> ::=

    HinweisHinweis

    Pro SET WITNESS-Klausel ist nur eine <witness_option> zugelassen.

    • 'witness_server'
      Gibt eine Instanz von Database Engine (Datenbankmodul) an, die als Zeugenserver für die Datenbank-Spiegelungssitzung agiert. Sie können SET WITNESS-Anweisungen nur auf dem Prinzipalserver angeben.

      In einer SET WITNESS ='witness_server'-Anweisung ist die Syntax von witness_server mit der Syntax von partner_server identisch.

    • OFF
      Entfernt den Zeugen aus einer Datenbank-Spiegelungssitzung. Durch das Festlegen des Zeugen auf OFF wird das automatische Failover deaktiviert. Sind die Datenbank auf FULL SAFETY und der Zeuge auf OFF festgelegt, führt ein Fehler auf dem Spiegelserver dazu, dass der Prinzipalserver bewirkt, dass die Datenbank nicht verfügbar ist.

Beispiele

A. Erstellen einer Datenbank-Spiegelungssitzung mit einem Zeugen

Das Einrichten einer Datenbankspiegelung mit einem Zeugen erfordert das Konfigurieren der Sicherheitseinstellungen, die Vorbereitung der Spiegeldatenbank sowie das Festlegen der Partner mit ALTER DATABASE. Ein Beispiel des vollständigen Setupprozesses finden Sie unter Einrichten der Datenbankspiegelung.

B. Manuelles Ausführen eines Failovers für eine Datenbank-Spiegelungssitzung

Ein manuelles Failover kann von beiden Partnern der Datenbankspiegelung initiiert werden. Vor dem Failover sollten Sie sicherstellen, dass es sich bei dem aktuellen Prinzipalserver auch tatsächlich um den Prinzipalserver handelt. Führen Sie z. B. für die AdventureWorks-Datenbank auf der Serverinstanz, die Sie für den aktuellen Prinzipalserver halten, die folgende Abfrage aus:

SELECT db.name, m.mirroring_role_desc 
FROM sys.database_mirroring m 
JOIN sys.databases db
ON db.database_id = m.database_id
WHERE db.name = N'AdventureWorks'; 
GO

Handelt es sich bei der Serverinstanz tatsächlich um den Prinzipalserver, hat mirroring_role_desc den Wert Principal. Handelt es sich bei der Serverinstanz aber um den Spiegelserver, gibt die SELECT-Anweisung Mirror zurück.

Im folgenden Beispiel wird vorausgesetzt, dass es sich bei dem Server um den aktuellen Prinzipalserver handelt.

  1. Manuelles Failover zum Datenbankspiegelungspartner:

    ALTER DATABASE AdventureWorks SET PARTNER FAILOVER;
    GO
    
  2. Führen Sie die folgende Abfrage aus, um die Ergebnisse des Failovers auf dem neuen Spiegelserver zu überprüfen:

    SELECT db.name, m.mirroring_role_desc 
    FROM sys.database_mirroring m 
    JOIN sys.databases db
    ON db.database_id = m.database_id
    WHERE db.name = N'AdventureWorks'; 
    GO
    

    Der aktuelle Wert von mirroring_role_desc ist jetzt Mirror.