Freigeben über


Problemlösungslink – Azure SQL Managed Instance

Gilt für:Azure SQL Managed Instance

In diesem Artikel erfahren Sie, wie Sie eine -Verknüpfung zwischen SQL Server und Azure SQL Managed Instance überwachen und Probleme beheben können.

Sie können den Status des Links mit Transact-SQL (T-SQL), Azure PowerShell oder der Azure CLI überprüfen. Wenn Probleme auftreten, können Sie die Fehlercodes verwenden, um das Problem zu beheben.

Viele Probleme beim Erstellen der Verbindung können behoben werden, indem das Netzwerk zwischen den beiden Instanzen überprüft und die Umgebung für die Verbindung ordnungsgemäß vorbereitet wurde.

Wenn Probleme mit einem Link auftreten, können Sie Transact-SQL (T-SQL), Azure PowerShell oder die Azure CLI verwenden, um Informationen zum aktuellen Status des Links abzurufen.

Verwenden Sie T-SQL für schnelle Statusdetails des Verknüpfungszustands, und verwenden Sie dann Azure PowerShell oder die Azure CLI, um umfassende Informationen zum aktuellen Status des Links zu erhalten.

Verwenden Sie T-SQL, um den Zustand der Verknüpfung während der Seedingphase oder nach Beginn der Datensynchronisierung zu bestimmen.

Verwenden Sie die folgende T-SQL-Abfrage, um den Status der Verbindung während der Seedingphase in der Instanz von SQL Server oder SQL Managed Instance zu ermitteln, auf der die Datenbank gehostet wird, die über die Verbindung geseedet wurde:

SELECT
    ag.local_database_name AS 'Local database name',
    ar.current_state AS 'Current state',
    ar.is_source AS 'Is source',
    ag.internal_state_desc AS 'Internal state desc',
    ag.database_size_bytes / 1024 / 1024 AS 'Database size MB',
    ag.transferred_size_bytes / 1024 / 1024 AS 'Transferred MB',
    ag.transfer_rate_bytes_per_second / 1024 / 1024 AS 'Transfer rate MB/s',
    ag.total_disk_io_wait_time_ms / 1000 AS 'Total Disk IO wait (sec)',
    ag.total_network_wait_time_ms / 1000 AS 'Total Network wait (sec)',
    ag.is_compression_enabled AS 'Compression',
    ag.start_time_utc AS 'Start time UTC',
    ag.estimate_time_complete_utc as 'Estimated time complete UTC',
    ar.completion_time AS 'Completion time',
    ar.number_of_attempts AS 'Attempt No'
FROM sys.dm_hadr_physical_seeding_stats AS ag
    INNER JOIN sys.dm_hadr_automatic_seeding AS ar
    ON local_physical_seeding_id = operation_id

-- Estimated seeding completion time
SELECT DISTINCT CONVERT(VARCHAR(8), DATEADD(SECOND, DATEDIFF(SECOND, start_time_utc, estimate_time_complete_utc) ,0), 108) as 'Estimated complete time'
FROM sys.dm_hadr_physical_seeding_stats

Wenn die Abfrage keine Ergebnisse zurückgibt, wurde der Seedingprozess nicht gestartet oder ist bereits abgeschlossen.

Verwenden Sie die folgende T-SQL-Abfrage in der primären Instanz, um die Integrität des Links zu überprüfen, sobald die Synchronisierung beginnt:

DECLARE @link_name varchar(max) = '<DAGname>'
SELECT
   rs.synchronization_health_desc [Link sync health]
FROM
   sys.availability_groups ag 
   join sys.dm_hadr_availability_replica_states rs 
   on ag.group_id = rs.group_id 
WHERE 
   rs.is_local = 0 AND rs.role = 2 AND ag.is_distributed = 1 AND ag.name = @link_name 
GO

Die Abfrage gibt die folgenden möglichen Werte zurück:

  • kein Ergebnis: Die Abfrage wurde in der sekundären Instanz ausgeführt.
  • HEALTHY: Die Verknüpfung ist fehlerfrei, und Daten werden zwischen den Replikaten synchronisiert.
  • NOT_HEALTHY: Die Verbindung ist fehlerhaft, und Daten werden nicht zwischen den Replikaten synchronisiert.

Der Wert replicaState beschreibt den aktuellen Link. Wenn der Zustand auch Error enthält, ist während des im Zustand aufgeführten Vorgangs ein Fehler aufgetreten. Beispielsweise gibt LinkCreationError an, dass beim Erstellen der Verknüpfung ein Fehler aufgetreten ist.

Einige mögliche replicaState-Werte sind:

  • CreatingLink: erstes Seeding
  • LinkSynchronizing: Die Datenreplikation wird durchgeführt.
  • LinkFailoverInProgress: Failover wird ausgeführt

Eine vollständige Liste der Verbindungsstatuseigenschaften erhalten Sie mit dem REST-API-Befehl Verteilte Verfügbarkeitsgruppen – GET.

Es gibt zwei verschiedene Kategorien von Fehlern, die beim Verwenden des Links auftreten können: Fehler, wenn Sie versuchen, den Link zu initialisieren, und Fehler, wenn Sie versuchen, den Link zu erstellen.

Der folgende Fehler kann beim Initialisieren eines Links auftreten (Linkstatus: LinkInitError):

  • Fehler 41962: Vorgang abgebrochen, da der Link innerhalb von 5 Minuten nicht hergestellt wurde. Überprüfen Sie die Netzwerkkonnektivität, und versuchen Sie es erneut.
  • Fehler 41973: Verbindung kann nicht hergestellt werden, da das Endpunktzertifikat von SQL Server nicht ordnungsgemäß in Azure SQL Managed Instance importiert wurde.
  • Fehler 41974: Verbindung kann nicht hergestellt werden, da das Endpunktzertifikat von der verwalteten SQL-Instanz nicht ordnungsgemäß in SQL Server importiert wurde.
  • Fehler 41976: Die Verfügbarkeitsgruppe reagiert nicht. Überprüfen Sie Namen und Konfigurationsparameter, und versuchen Sie es erneut.
  • Fehler 41986: Verknüpfung kann nicht hergestellt werden, da die Verbindung fehlgeschlagen ist oder das sekundäre Replikat nicht reagiert. Überprüfen Sie Namen, Konfigurationsparameter und Netzwerkkonnektivität, und versuchen Sie es dann erneut.
  • Fehler 47521: Verknüpfung kann nicht hergestellt werden, da der sekundäre Server die Anforderung nicht empfangen hat. Stellen Sie sicher, dass die Verfügbarkeitsgruppe und Datenbanken auf dem primären Server fehlerfrei sind, und versuchen Sie es erneut.

Der folgende Fehler kann beim Erstellen eines Links auftreten (Linkstatus: LinkCreationError):

  • Fehler 41977: Die Zieldatenbank reagiert nicht. Überprüfen Sie die Linkparameter, und versuchen Sie es erneut.

Inkonsistenter Zustand nach erzwungenem Failover

Nach einem erzwungenen Failover kann ein Split Brain-Szenario auftreten, bei dem sich beide Replikate in der primären Rolle befinden und die Verbindung in einem inkonsistenten Zustand bleibt. Dies kann passieren, wenn Sie während einer Katastrophe auf das sekundäre Replikat umschalten und das primäre Replikat wieder online geht.

Vergewissern Sie sich zunächst, dass Sie es sich um ein Split Brain-Szenario handelt. Dazu können Sie SQL Server Management Studio (SSMS) oder Transact-SQL (T-SQL) verwenden.

Stellen Sie eine Verbindung mit SQL Server und SQL Managed Instance in SSMS her, und erweitern Sie dann im Objekt-Explorer die Option Verfügbarkeitsreplikate unter dem Knoten Verfügbarkeitsgruppe in Hochverfügbarkeit mit Always On. Wenn zwei verschiedene Replikate als (Primary) aufgeführt werden, handelt es sich um ein Split Brain-Szenario.

Alternativ können Sie das folgende T-SQL-Skript sowohl auf SQL Server als auch auf SQL Managed Instance ausführen, um die Rolle der Replikas zu überprüfen.

-- Execute on SQL Server and SQL Managed Instance 
USE master
DECLARE @link_name varchar(max) = '<DAGName>'
SELECT
   ag.name [Link name], 
   rs.role_desc [Link role] 
FROM
   sys.availability_groups ag 
   JOIN sys.dm_hadr_availability_replica_states rs 
   ON ag.group_id = rs.group_id 
WHERE 
   rs.is_local = 1 AND ag.is_distributed = 1 AND ag.name = @link_name 
GO

Wenn für beide Instanzen PRIMARY in der Spalte Verbindungsrolle steht, handelt es sich um ein Split Brain-Szenario.

Um den Split Brain-Zustand aufzuheben, führen Sie zuerst eine Sicherung des Replikats durch, das ursprünglich über die primäre Rolle verfügte. Wenn es sich bei der ursprünglichen primären Instanz um SQL Server handelt, führen Sie eine Sicherung des Protokollfragments durch. Wenn die ursprüngliche primäre Instanz eine Instanz von SQL Managed Instance war, führen Sie eine vollständige Kopiesicherung durch. Nachdem die Sicherung abgeschlossen ist, setzen Sie die verteilte Verfügbarkeitsgruppe auf die sekundäre Rolle für das Replikat fest, das ursprünglich die primäre Rolle innehatte, nun aber die neue sekundäre Rolle übernehmen wird.

Wenn Sie ein Failover Ihrer SQL Server-Arbeitsauslastung zu Azure SQL Managed Instance erzwungen haben und beabsichtigen, die Arbeitsauslastung weiterhin in SQL Managed Instance auszuführen, führen Sie bei einem tatsächlichen Notfall eine Sicherung des Protokollfragments auf SQL Server durch, und legen Sie dann wie im folgenden Beispiel für die verteilte Verfügbarkeitsgruppe die sekundäre Rolle auf SQL Server fest:

--Execute on SQL Server 
USE master
ALTER AVAILABILITY GROUP [<DAGName>] 
SET (ROLE = SECONDARY) 
GO 

Führen Sie als Nächstes ein geplantes manuelles Failover von SQL Managed Instance zu SQL Server mithilfe des Links aus, z. B. das folgende Beispiel:

--Execute on SQL Managed Instance 
USE master
ALTER AVAILABILITY GROUP [<DAGName>] FAILOVER 
GO 

Netzwerkkonnektivität testen

Bidirektionale Netzwerkkonnektivität zwischen SQL Server und SQL Managed Instance ist erforderlich, damit die Verbindung funktioniert. Nachdem Sie Ports auf der SQL Server-Seite geöffnet und eine NSG-Regel auf der Sql Managed Instance-Seite konfiguriert haben, testen Sie die Konnektivität entweder mithilfe von SQL Server Management Studio (SSMS) oder Transact-SQL.

Testen Sie das Netzwerk, indem Sie einen temporären SQL-Agent-Auftrag sowohl in SQL Server als auch in sql Managed Instance erstellen, um die Verbindung zwischen den beiden Instanzen zu überprüfen. Wenn Sie die Netzwerküberprüfung in SSMS verwenden, wird der Auftrag automatisch für Sie erstellt und nach Abschluss des Tests gelöscht. Sie müssen den SQL-Agent-Auftrag manuell löschen, wenn Sie Ihr Netzwerk mithilfe von T-SQL testen.

Anmerkung

Das Ausführen von PowerShell-Skripts durch den SQL Server-Agent unter SQL Server unter Linux wird derzeit nicht unterstützt, sodass es derzeit nicht möglich ist, Test-NetConnection aus dem SQL Server-Agent-Auftrag auf SQL Server unter Linux auszuführen.

Um den SQL-Agent zum Testen der Netzwerkkonnektivität zu verwenden, benötigen Sie die folgenden Anforderungen:

  • Die testende Person muss über Berechtigungen zum Erstellen eines Auftrags sowohl für SQL Server als auch für SQL Managed Instance verfügen – entweder als sysadmin oder mit der SQLAgentOperator-Rolle für msdb.
  • Der SQL Server-Agent-Dienst muss auf SQL Server ausgeführt werden. Da der Agent standardmäßig in SQL Managed Instance aktiviert ist, ist keine zusätzliche Aktion erforderlich.

Führen Sie die folgenden Schritte aus, um die Netzwerkkonnektivität zwischen SQL Server und SQL Managed Instance in SSMS zu testen:

  1. Stellen Sie eine Verbindung mit der Instanz her, die als primäres Replikat in SSMS dient.

  2. Erweitern Sie im Objekt-Explorerdie Datenbanken, und klicken Sie mit der rechten Maustaste auf die Datenbank, die Sie mit der sekundären Datenbank verknüpfen möchten. Wählen Sie Aufgaben>Azure SQL Managed Instance-Verbindung>Testverbindung aus, um den Assistenten für die Netzwerküberprüfung zu öffnen:

    Screenshot: Objekt-Explorers in SSMS mit ausgewählter Testverbindung im Kontextmenü für die Datenbankverbindung

  3. Wählen Sie Weiter auf der Seite Einführung des Assistenten für die Netzwerküberprüfung aus.

  4. Wenn alle Anforderungen auf der Seite Voraussetzungen erfüllt sind, wählen Sie Weiter aus. Sorgen Sie andernfalls dafür, dass allen nicht erfüllten Voraussetzungen entsprochen wird, und wählen Sie dann Überprüfung erneut ausführen aus.

  5. Wählen Sie auf der Seite Anmelden Anmelden aus, um eine Verbindung mit einer anderen Instanz herzustellen, die als sekundäres Replikat dient. Wählen Sie Weiter aus.

  6. Überprüfen Sie die Details auf der Seite "Netzwerkoptionen angeben" und geben Sie ggf. eine IP-Adresse an. Wählen Sie Weiter aus.

  7. Überprüfen Sie auf der Seite Ergebnisse die Aktionen, die der Assistent ausführt, und wählen Sie dann Fertig stellen aus, um die Verbindung zwischen den beiden Replikaten zu testen.

  8. Überprüfen Sie die Seite Ergebnisse, um die Konnektivität zwischen den beiden Replikaten zu überprüfen, und wählen Sie dann Schließen aus, um den Vorgang zu beenden.

Vorsicht

Fahren Sie mit den nächsten Schritten nur fort, wenn Sie die Netzwerkkonnektivität zwischen Ihrer Quell- und Zielumgebung überprüft haben. Andernfalls beheben Sie Probleme mit der Netzwerkkonnektivität, bevor Sie fortfahren.

Weitere Informationen zum Linkfeature finden Sie in den folgenden Ressourcen: