Problembehandlung bei der Bereitstellung einer Datenbankspiegelung

Dieses Thema enthält Informationen, die Ihnen die Problembehandlung beim Einrichten einer Datenbank-Spiegelungssitzung erleichtern.

HinweisHinweis

Stellen Sie sicher, dass alle Voraussetzungen für die Datenbankspiegelung erfüllt werden.

Problem

Zusammenfassung

Konten

Erläutert die Anforderungen für eine ordnungsgemäße Konfiguration der Konten, unter denen SQL Server ausgeführt wird.

Endpunkte

Erläutert die Anforderungen für eine ordnungsgemäße Konfiguration des Endpunkts der Datenbankspiegelung für jede Serverinstanz.

Systemadresse

Gibt einen Überblick über die verschiedenen Methoden, die zum Angeben des Systemnames einer Serverinstanz in einer Datenbank-Spiegelungskonfiguration zur Verfügung stehen.

Netzwerkzugriff

Dokumentiert die Anforderung, dass jeder Serverinstanz der Zugriff auf die Ports der anderen Serverinstanz bzw. Serverinstanzen über TCP ermöglicht werden muss.

Vorbereitung der Spiegeldatenbank

Gibt einen Überblick über die Anforderungen zum Vorbereiten der Spiegeldatenbank, sodass die Spiegelung beginnen kann.

Fehler bei einem Dateierstellungsvorgang

Beschreibt, wie auf Fehler bei einem Dateierstellungsvorgang zu reagieren ist.

Starten der Spiegelung (Transact-SQL)

Beschreibt, welche Reihenfolge für ALTER DATABASE database_name SET PARTNER ='partner_server'-Anweisungen eingehalten werden muss.

Konten

Die Konten, unter denen SQL Server ausgeführt wird, müssen richtig konfiguriert sein.

  1. Verfügen die Konten über die richtigen Berechtigungen?

    1. Das Ausführen der Konten in den gleichen Domänenkonten reduziert das Risiko einer Fehlkonfiguration.

    2. Wenn die Konten in unterschiedlichen Domänen ausgeführt werden oder es sich nicht um Domänenkonten handelt, muss der Anmeldename eines Kontos in der master-Datenbank des anderen Computers erstellt werden, und diesem Anmeldenamen müssen CONNECT-Berechtigungen für den Endpunkt erteilt werden. Weitere Informationen finden Sie unter Verwalten von Metadaten beim Bereitstellen einer Datenbank auf einer anderen Serverinstanz. Dies gilt auch für das Netzwerkdienstkonto.

  2. Wird SQL Server als Dienst unter dem lokalen Systemkonto ausgeführt, müssen Sie Zertifikate für die Authentifizierung verwenden. Weitere Informationen finden Sie unter Verwenden von Zertifikaten für die Datenbankspiegelung

Endpunkte

Endpunkte müssen richtig konfiguriert sein.

  1. Stellen Sie sicher, dass jede Serverinstanz (Prinzipalserver, Spiegelserver und ggf. Zeuge) über einen Endpunkt der Datenbankspiegelung verfügt. Weitere Informationen finden Sie unter sys.database_mirroring_endpoints (Transact-SQL) sowie, je nach Form der Authentifizierung, unter Vorgehensweise: Erstellen eines Endpunkts der Datenbankspiegelung für Windows-Authentifizierung (Transact-SQL) oder Vorgehensweise: Ermöglichen des Verwendens von Zertifikaten für ausgehende Verbindungen für die Datenbankspiegelung (Transact-SQL).

  2. Überprüfen Sie, ob die Portnummern richtig sind.

    Verwenden Sie die sys.database_mirroring_endpoints-Katalogsicht und die sys.tcp_endpoints-Katalogsicht, um den Port zu identifizieren, der dem Endpunkt der Datenbankspiegelung einer Serverinstanz derzeit zugeordnet ist:

  3. Um sich von der anderen Serverinstanz unter dem Dienstkonto anzumelden, ist die CONNECT-Berechtigung erforderlich.

  4. Bei Problemen mit der Einrichtung der Datenbankspiegelung, die schwer zu erklären sind, empfiehlt es sich, jede Serverinstanz zu prüfen, um zu ermitteln, ob die richtigen Ports von der Serverinstanz überwacht werden. Informationen zum Überprüfen der Verfügbarkeit von Ports finden Sie unter MSSQLSERVER_1418.

  5. Stellen Sie sicher, dass die Endpunkte gestartet wurden (STATE=STARTED). Verwenden Sie auf jeder Serverinstanz folgende Transact-SQL-Anweisung. 

    SELECT state_desc FROM sys.database_mirroring_endpoints
    

    Weitere Informationen zur state_desc-Spalte finden Sie unter sys.database_mirroring_endpoints (Transact-SQL).

    Verwenden Sie die folgende Transact-SQL-Anweisung, um einen Endpunkt zu starten.

    ALTER ENDPOINT Endpoint_Mirroring 
    STATE = STARTED 
    AS TCP (LISTENER_PORT = <port_number>)
    FOR database_mirroring (ROLE = ALL);
    GO
    

    Weitere Informationen finden Sie unter ALTER ENDPOINT (Transact-SQL).

  6. Überprüfen Sie, ob die Rolle richtig ist. Verwenden Sie auf jeder Serverinstanz folgende Transact-SQL-Anweisung.

    SELECT role FROM sys.database_mirroring_endpoints;
    GO
    

    Weitere Informationen finden Sie unter sys.database_mirroring_endpoints (Transact-SQL).

  7. Stellen Sie sicher, dass der Anmeldename auf dem anderen Server über CONNECT-Berechtigungen verfügt. Führen Sie auf jeder Serverinstanz die folgende Transact-SQL-Anweisung aus, um herauszufinden, wer über CONNECT-Berechtigungen für einen Endpunkt verfügt.

    SELECT 'Metadata Check';
    SELECT EP.name, SP.STATE, 
       CONVERT(nvarchar(38), suser_name(SP.grantor_principal_id)) 
          AS GRANTOR, 
       SP.TYPE AS PERMISSION,
       CONVERT(nvarchar(46),suser_name(SP.grantee_principal_id)) 
          AS GRANTEE 
       FROM sys.server_permissions SP , sys.endpoints EP
       WHERE SP.major_id = EP.endpoint_id
       ORDER BY Permission,grantor, grantee; 
    GO
    

Systemadresse

Für den Systemnamen einer Serverinstanz in einer Datenbank-Spiegelungskonfiguration können Sie jeden beliebigen Namen verwenden, der das System eindeutig bezeichnet. Die Serveradresse kann ein Systemname sein (wenn sich die Systeme in derselben Domäne befinden), ein vollqualifizierter Domänenname oder eine IP-Adresse (vorzugsweise eine statische IP-Adresse). Bei Verwendung des vollquaifizierten Domänennamens ist eine problemfreie Funktionsweise sichergestellt. Weitere Informationen finden Sie unter Angeben einer Server-Netzwerkadresse (Datenbankspiegelung).

Netzwerkzugriff

Jede Serverinstanz muss über TCP auf die Ports der anderen Serverinstanz bzw. der anderen Serverinstanzen zugreifen können. Dies ist insbesondere von Bedeutung, wenn sich die Serverinstanzen in unterschiedlichen Domänen befinden, die sich nicht vertrauen (nicht vertrauenswürdige Domänen). Damit wird ein Großteil der Kommunikation zwischen den Serverinstanzen eingeschränkt.

Vorbereitung der Spiegeldatenbank

Überprüfen Sie, ob die Spiegeldatenbank für die Spiegelung vorbereitet ist, unabhängig davon, ob Sie die Spiegelung zum ersten Mal starten oder nach dem Entfernen der Spiegelung erneut starten.

Stellen Sie bei der Erstellung der Spiegeldatenbank auf dem Spiegelserver sicher, dass Sie die Sicherung der Prinzipaldatenbank wiederherstellen, wobei Sie mit WITH NORECOVERY denselben Datenbanknamen angeben. Darüber hinaus müssen alle Protokollsicherungen, die nach dieser Sicherung erstellt wurden, ebenfalls mithilfe von WITH NORECOVERY angewendet werden.

Außerdem sollte der Pfad (einschließlich des Laufwerkbuchstabens) der Spiegeldatenbank nach Möglichkeit mit dem Pfad der Prinzipaldatenbank übereinstimmen. Wenn sich die Dateilayouts unterscheiden müssen, weil sich die Prinzipaldatenbank beispielsweise auf Laufwerk 'F:' befindet, auf dem Spiegelsystem jedoch kein Laufwerk F: vorhanden ist, müssen Sie die MOVE-Option in die RESTORE-Anweisung einschließen.

Wichtiger HinweisWichtig

Falls Sie die Datenbankdateien bei der Erstellung der Spiegeldatenbank verschieben, können Sie der Datenbank später u. U. keine Dateien hinzufügen, ohne dass die Spiegelung unterbrochen wird.

Wurde die Datenbankspiegelung angehalten, müssen alle nachfolgenden Protokollsicherungen in der Prinizipaldatenbank auf die Spiegeldatenbank angewendet werden, ehe die Spiegelung erneut gestartet werden kann.

Weitere Informationen finden Sie unter Vorgehensweise: Vorbereiten einer Spiegeldatenbank für die Spiegelung (Transact-SQL).

Fehler bei einem Dateierstellungsvorgang

Damit eine Datei hinzugefügt werden kann, ohne dass sich dies auf die Spiegelungssitzung auswirkt, muss der Dateipfad auf beiden Servern vorhanden sein. Wenn Sie die Datenbankdateien bei der Erstellung der Spiegeldatenbank verschieben, kann bei einem später durchgeführten Vorgang zum Hinzufügen einer Datei in der Spiegeldatenbank ein Fehler auftreten oder die Spiegelung wird möglicherweise angehalten.

So beheben Sie das Problem

  1. Der Datenbankbesitzer muss die Spiegelungssitzung entfernen und die Dateigruppe aus einer vollständigen Sicherung wiederherstellen, in der die hinzugefügte Datei enthalten ist.

  2. Anschließend muss der Besitzer das Protokoll, in dem der Vorgang zum Hinzufügen einer Datei enthalten ist, auf dem Prinzipalserver sichern und die Protokollsicherung mithilfe der WITH NORECOVERY-Option und der WITH MOVE-Option manuell auf der Spiegeldatenbank wiederherstellen. Auf diese Weise wird der angegebene Dateipfad auf dem Spiegelserver erstellt und die neue Datei an diesem Speicherort wiederhergestellt.

  3. Um die Datenbank für eine neue Spiegelungssitzung vorzubereiten, muss der Besitzer auch alle anderen ausstehenden Protokollsicherungen mithilfe der WITH NO RECOVERY-Option vom Prinzipalserver wiederherstellen.

Weitere Informationen finden Sie unter Entfernen der Datenbankspiegelung, Vorgehensweise: Vorbereiten einer Spiegeldatenbank für die Spiegelung (Transact-SQL), Vorgehensweise: Einrichten einer Datenbank-Spiegelungssitzung mithilfe der Windows-Authentifizierung (Transact-SQL), Verwenden von Zertifikaten für die Datenbankspiegelung oder Vorgehensweise: Konfigurieren einer Datenbank-Spiegelungssitzung (SQL Server Management Studio).

Starten der Spiegelung (Transact-SQL)

Die Reihenfolge, in der die ALTER DATABASE database_name SET PARTNER ='partner_server'-Anweisungen ausgegeben werden, ist von großer Bedeutung.

  1. Die erste Anweisung muss auf dem Spiegelserver ausgeführt werden. Wird diese Anweisung ausgegeben, versucht der Spiegelserver nicht, Kontakt zu anderen Serverinstanzen aufzunehmen. Stattdessen weist der Spiegelserver die Datenbank an, so lange zu warten, bis der Prinzipalserver Kontakt mit dem Spiegelserver aufgenommen hat.

  2. Die zweite ALTER DATABASE-Anweisung muss auf dem Prinzipalserver ausgeführt werden. Diese Anweisung veranlasst den Prinzipalserver, eine Verbindung mit dem Spiegelserver herzustellen. Nachdem diese Verbindung erstellt wurde, versucht der Spiegelserver, den Prinzipalserver über eine andere Verbindung zu kontaktieren.

Weitere Informationen finden Sie unter ALTER DATABASE (Transact-SQL).

Fehlermeldung 1418

In dieser Meldung in SQL Server wird angegeben, dass die Servernetzwerkadresse nicht erreicht werden kann oder nicht vorhanden ist. Es wird vorgeschlagen, den Namen der Netzwerkadresse zu überprüfen und den Befehl erneut auszugeben. Weitere Informationen finden Sie unter MSSQLSERVER_1418.

Datenbankübergreifende Transaktionen

Wenn eine Datenbank im Modus für hohe Sicherheit mit automatischem Failover gespiegelt wird, kann ein automatisches Failover zu einer automatischen und möglicherweise falschen Auflösung von unsicheren Transaktionen führen. Falls auf einer der Datenbanken ein automatisches Failover stattfindet, während für eine datenbankübergreifende Transaktion gerade ein Commit ausgeführt wird, können zwischen den Datenbanken logische Inkonsistenzen auftreten.

Zu den Typen datenbankübergreifender Transaktionen, auf die sich ein automatisches Failover auswirken kann, zählen:

  • Eine Transaktion, die mehrere Datenbanken in derselben Instanz von SQL Server aktualisiert.

  • Transaktionen, die Microsoft DTC (Microsoft Distributed Transaction Coordinator) verwenden.

Weitere Informationen finden Sie unter Datenbankspiegelung und datenbankübergreifende Transaktionen.