SQL Server AlwaysOn-Datenbank bleibt nach dem Upgrade im Modus Nicht synchronisieren / im Wiederherstellungsmodus hängen. Fehler: Datenbank '…' Version 782 kann nicht geöffnet werden

10

Beim Testen eines Upgrades von SQL Server 2014 SP1 (12.0.4422.0) auf SQL Server 2016 CTP 3.2 (13.0.900.73) habe ich den empfohlenen Aktualisierungsprozess befolgt und bin auf ein Problem gestoßen, bei dem die Datenbank nach einem Failover nicht auf der alten Primärdatenbank gestartet werden konnte zum aktualisierten sekundären. Unser Setup ist ein primäres Replikat und ein einzelnes sekundäres Replikat. Die Schritte, die ich ausgeführt habe, waren:

  1. Entfernen Sie das automatische Failover auf dem sekundären Replikat mit synchronem Commit
  2. Aktualisieren Sie sekundäre Serverinstanzen auf eine neue Version
  3. Manuelles Failover auf das sekundäre Replikat
  4. Überprüfen Sie, ob die Datenbanken auf dem neuen primären Replikat online sind
  5. Aktualisieren Sie das vorherige primäre Replikat auf eine neue Version

Das Upgrade des sekundären und des Failovers zum primären System funktionierte genau wie erwartet. Nach dem Upgrade des zuvor primären Replikats stellte ich jedoch fest, dass die darauf enthaltenen Datenbanken in SSMS als Nicht synchronisierend / In Wiederherstellung aufgeführt waren . Auch der Versuch, auf sie zuzugreifen, würde eine Fehlermeldung erzeugen:

Die Datenbank ... ist nicht zugänglich. (ObjectExplorer)

Überprüfen Sie die SQL Server-Protokolle, die ich gesehen habe

Datenbank '...' Version 782 kann nicht geöffnet werden. Aktualisieren Sie die Datenbank auf die neueste Version.

Das Abfragen der Tabelle master..sysdatabases ergab, dass es sich tatsächlich um eine ältere Version handelt, die während des Upgrades nicht aktualisiert wurde:

SSMS-Sysdatabases-Version

Leider wurde in den Protokollen nicht angegeben, warum es nicht aktualisiert wurde, und das Dashboard für Verfügbarkeitsgruppen gab nur eine allgemeine Warnung aus, die darauf hinweist, dass der Datensynchronisationsstatus einiger Verfügbarkeitsdatenbanken ohne Grund nicht fehlerfrei ist.

Ich habe versucht, die Datenbanken mit TSQL zu trennen oder offline zu setzen, um sie in die Aktualisierung zu "kicken", aber da sie Teil der SQL AG sind, funktionieren diese Befehle nicht.

Wie kann ich die Datenbank auf die neueste Version aktualisieren, wenn sie Teil einer SQL AG ist?

Greg Bray
quelle

Antworten:

10

Nachdem ich mich eine Weile in SSMS umgesehen hatte, bemerkte ich, dass auf dem sekundären Replikat neben den Verfügbarkeitsdatenbanken ein Pausensymbol angezeigt wurde. Die primäre hatte gezeigt, dass beide "grün" waren, aber es gab eine Option auf der sekundären, um die Datenbewegung fortzusetzen . Ich habe die erste Datenbank wieder aufgenommen und sofort wurde die Statusmeldung In Recovery entfernt. Eine Minute später wechselte es von Nicht synchronisieren zu Synchronisiert, und alles funktionierte wie erwartet.

Hier ist ein Screenshot der AG-Datenbanken, nachdem ich "Patch" behoben habe, aber bevor die Testdatenbank repariert wurde:

Fortsetzen der Datenverschiebung in der SQL AG

Beachten Sie, dass Sie TSQL auch auf der Sekundärseite verwenden können, um die Replikation auf mehreren Datenbanken gleichzeitig fortzusetzen:

ALTER DATABASE [Patch] SET HADR RESUME;
ALTER DATABASE [test] SET HADR RESUME;
GO
Greg Bray
quelle
1
Wissen Sie, warum die Replikation angehalten wurde? und kann ich herausfinden, wann die Replikation angehalten wurde?
JohnG