Beheben von Konnektivitätsproblemen und anderen Fehlern mit Azure SQL-Datenbank und Azure SQL Managed Instance

Gilt für:Azure SQL-DatenbankAzure SQL Managed Instance

Wenn keine Verbindung mit Azure SQL-Datenbank oder Azure SQL Managed Instance hergestellt werden kann, erhalten Sie Fehlermeldungen.

Wenden Sie wie immer bewährte Methoden und Designrichtlinien während des Anwendungsdesignprozesses an.

Hinweis

Sie können mit Azure SQL-Konnektivitätsprüfung eine Vielzahl von Konnektivitätsfehlern in Azure SQL Datenbank, Azure SQL Managed Instance und Azure Synapse Analytics-Umgebungen erkennen und beheben.

Schritte zum Beheben häufiger Verbindungsprobleme

  1. Stellen Sie sicher, dass TCP/IP auf dem Anwendungsserver als Clientprotokoll aktiviert ist. Überprüfen Sie auf Anwendungsservern, auf denen keine SQL-Tools installiert sind, ob TCP/IP aktiviert ist, indem Sie cliconfg.exe (Hilfsprogramm für das SQL Server-Clientnetzwerk) ausführen.

  2. Stellen Sie sicher, dass die Verbindungszeichenfolge der Anwendung ordnungsgemäß konfiguriert ist. Stellen Sie z. B. sicher, dass in der Verbindungszeichenfolge der richtige Port (1433) und der vollqualifizierte Servername angegeben sind. Siehe Abrufen von Verbindungsinformationen mithilfe von SQL Server Management Studio.

  3. Versuchen Sie, den Wert für das Verbindungstimeout zu erhöhen. Wir empfehlen ein Verbindungstimeout von mindestens 30 Sekunden.

  4. Testen Sie die Konnektivität zwischen dem Anwendungsserver und der Azure SQL-Datenbank-Instanz, indem Sie SQL Server Management Studio (SSMS), eine UDL-Datei, Ping oder Telnet verwenden. Weitere Informationen finden Sie unter Beheben von Fehlern bei der Konnektivität mit SQL Server und Diagnose bei Verbindungsproblemen.

    Hinweis

    Als Problembehandlungsschritt können Sie die Konnektivität auch auf einem anderen Clientcomputer testen.

  5. Als bewährte Methode müssen Anwendungen mit Cloudverbindung die Wiederholungslogik verwenden.

Wenn Ihr Problem mit diesen Schritten nicht behoben werden kann, versuchen Sie, weitere Daten zu erfassen, und wenden Sie sich dann an den Support. Wenn es sich bei Ihrer Anwendung um einen Clouddienst handelt, aktivieren Sie die Protokollierung. Dieser Schritt gibt einen UTC-Zeitstempel des Fehlers zurück. Weitere Informationen zum Aktivieren der Protokollierung finden Sie unter Aktivieren der Diagnoseprotokollierung für Web-Apps in Azure App Service. Außerdem gibt SQL-Datenbank die Ablaufverfolgungs-ID zurück. Microsoft Customer Support Services kann diese Informationen verwenden.

Implementieren von Wiederholungslogik

Für Ihre Clientanwendung wird dringend die Verwendung einer Wiederholungslogik empfohlen, sodass erneut eine Verbindung hergestellt werden kann, nachdem sich der vorübergehende Fehler selbst korrigiert hat. Es wird empfohlen, dass vor dem ersten Wiederholungsversuch eine Verzögerungszeit von fünf Sekunden verwendet wird. Wiederholungsversuche nach weniger als fünf Sekunden können den Clouddienst überfordern. Für jeden nachfolgenden Wiederholungsversuch sollte die Verzögerung exponentiell steigen, bis zu einem Maximum von 60 Sekunden.

Codebeispiele zur Wiederholungslogik finden Sie unter:

Weitere Informationen zur Behandlung von vorübergehenden Fehlern in Ihrer Anwendung finden Sie unter Behandeln von Problemen bei vorübergehenden Verbindungsfehlern mit SQL-Datenbank

Eine Beschreibung der Sperrfrist für Clients, die ADO.NET verwenden, finden Sie im Artikel zum Verbindungspooling (ADO.NET).

Fehlermeldungen für vorübergehende Fehler (40197, 40613 u. a.)

Die Azure-Infrastruktur verfügt über die Möglichkeit, Server dynamisch neu zu konfigurieren, wenn hohe Workloads im SQL-Datenbankdienst auftreten. Dieses dynamische Verhalten führt aber u. U. dazu, dass die Verbindung zwischen Ihrem Clientprogramm und der Datenbank oder Instanz getrennt wird. Diese Art Fehlerbedingung wird als vorübergehender Fehler bezeichnet. Ereignisse bei der Neukonfiguration von Datenbanken werden durch geplante Ereignisse (z.B. Softwareupgrades) oder ungeplante Ereignisse (z.B. einen Prozessabsturz oder einen Lastenausgleich) hervorgerufen. Die meisten bei einer Neukonfiguration auftretenden Ereignisse sind kurzlebig und sollten innerhalb von höchstens 60 Sekunden beendet werden. Trotzdem kann das Beenden dieser Ereignisse beizeiten länger dauern, so z.B., wenn eine große Transaktion eine lang andauernde Wiederherstellung auslöst. Die folgende Tabelle enthält eine Liste der verschiedenen vorübergehenden Fehler, die Anwendungen beim Herstellen einer Verbindung zur Azure SQL-Datenbank empfangen können.

Liste der Fehlercodes für vorübergehende Fehler

Fehlercode severity BESCHREIBUNG
926 14 Database 'replicatedmaster' cannot be opened. It has been marked SUSPECT by recovery. See the SQL Server error log for more information.

Dieser Fehler kann während der letzten Phase einer Neukonfiguration für kurze Zeit im SQL Managed Instance-Fehlerprotokoll protokolliert werden, während die alte Primärinstanz ihr Protokoll herunterfährt.
Andere, dauerhafte Szenarien, die diese Fehlermeldung einbeziehen, sind in der Dokumentation: MSSQL-Fehler beschrieben.
4060 16 Cannot open database "%.*ls" requested by the login. The login failed.

Weitere Informationen finden Sie unter Fehler 4000 bis 4999.
40197 17 The service has encountered an error processing your request. Please try again. Error code %d.

Sie erhalten diesen Fehler, wenn der Dienst aufgrund von Software- oder Hardwareupgrades, Hardwarefehlern oder sonstigen Failoverproblemen ausgefallen ist. Der Fehlercode (%d), der in der Meldung zum Fehler 40197 enthalten ist, liefert weitere Informationen zur Art des aufgetretenen Fehlers oder Failovers. Beispiele für Fehlercodes, die in die Meldung zum Fehler 40197 eingebettet sind, lauten 40020, 40143, 40166 und 40540.

Wenn die Verbindung wiederhergestellt wird, werden Sie automatisch mit einer fehlerfreien Kopie Ihrer Datenbank verbunden. Ihre Anwendung muss den Fehler 40197 abfangen, den für die Problembehandlung in der Meldung enthaltenen Fehlercode (%d) protokollieren und versuchen, eine neue Verbindung mit SQL-Datenbank herzustellen, bis die Ressourcen verfügbar sind, damit Ihre Verbindung wiederhergestellt wird. Weitere Informationen finden Sie unter Vorübergehende Fehler.
40501 20 The service is currently busy. Retry the request after 10 seconds. Incident ID: %ls. Code: %d.

Weitere Informationen finden Sie unter:
Logische SQL-Server-Ressourcengrenzen.
DTU-basierte Einschränkungen für einzelne Datenbanken.
DTU-basierte Einschränkungen für Pools für elastische Datenbanken.
V-Kern-basierte Einschränkungen für einzelne Datenbanken.
V-Kern-basierte Einschränkungen für Pools für elastische Datenbanken.
Übersicht über Ressourcenlimits für verwaltete Azure SQL-Instanzen.
40613 17 Database '%.*ls' on server '%.*ls' is not currently available. Please retry the connection later. If the problem persists, contact customer support, and provide them with the session tracing ID of '%.*ls'.

Dieser Fehler kann auftreten, wenn bereits eine dedizierte Administratorverbindung (DAC) zur Datenbank besteht. Weitere Informationen finden Sie unter Vorübergehende Fehler.
49918 16 Cannot process request. Not enough resources to process request. The service is currently busy. Please retry the request later.

Weitere Informationen finden Sie unter:
Logische SQL-Server-Ressourcengrenzen.
DTU-basierte Einschränkungen für einzelne Datenbanken.
DTU-basierte Einschränkungen für Pools für elastische Datenbanken.
V-Kern-basierte Einschränkungen für einzelne Datenbanken.
V-Kern-basierte Einschränkungen für Pools für elastische Datenbanken.
Übersicht über Ressourcenlimits für verwaltete Azure SQL-Instanzen.
49919 16 Cannot process create or update request. Too many create or update operations in progress for subscription "%ld".

Der Dienst ist mit der Verarbeitung mehrerer Erstell- oder Aktualisierungsvorgänge für Ihr Abonnement oder Ihren Server ausgelastet. Zur Ressourcenoptimierung werden Anforderungen derzeit blockiert. Fragen Sie sys.dm_operation_status auf ausstehende Vorgänge ab. Warten Sie, bis ausstehende Erstellungs- oder Aktualisierungsanforderungen abgeschlossen sind, oder löschen Sie eine Ihrer ausstehenden Anforderungen, und wiederholen Sie die Anforderung später. Wenn Ihre Vorgänge scheinbar hängen bleiben, warten Sie, bis andere ausgeführte Vorgänge abgeschlossen sind, oder brechen Sie sie nach Möglichkeit ab. Sie können z. B. eine Datenbankkopie oder eine Georeplikaterstellung abbrechen, indem Sie die Datenbank oder das Replikat löschen, das erstellt wird. Wenn ein scheinbar hängen gebliebener Vorgang nicht abgebrochen werden kann, öffnen Sie ein Supportticket in Microsoft.
49920 16 Cannot process request. Too many operations in progress for subscription "%ld".

Der Dienst ist mit der Verarbeitung mehrerer Vorgänge für dieses Abonnement ausgelastet. Zur Ressourcenoptimierung werden Anforderungen derzeit blockiert. Fragen Sie sys.dm_operation_status auf den Vorgangsstatus ab. Warten Sie, bis ausstehende Anforderungen abgeschlossen sind, oder löschen Sie eine Ihrer ausstehenden Anforderungen, und wiederholen Sie die Anforderung später. Wenn Ihre Vorgänge scheinbar hängen bleiben, warten Sie, bis andere ausgeführte Vorgänge abgeschlossen sind, oder brechen Sie sie nach Möglichkeit ab. Sie können z. B. eine Datenbankkopie oder eine Georeplikaterstellung abbrechen, indem Sie die Datenbank oder das Replikat löschen, das erstellt wird. Wenn ein scheinbar hängen gebliebener Vorgang nicht abgebrochen werden kann, öffnen Sie ein Supportticket in Microsoft.
4221 16 Login to read-secondary failed due to long wait on 'HADR_DATABASE_WAIT_FOR_TRANSITION_TO_VERSIONING'.

Das Replikat steht zur Anmeldung nicht zur Verfügung, weil Zeilenversionen für Transaktionen fehlen, die beim Neustarten des Replikats in Verarbeitung waren. Dieses Problem kann durch einen Rollback oder durch einen Commit der aktiven Transaktionen auf dem primären Replikat gelöst werden. Vorkommen dieser Bedingung können durch Vermeiden langer Schreibtransaktionen auf dem primären Replikat minimiert werden.
615 21 Could not find database ID %d, name '%.*ls'

Dies bedeutet, dass der Zwischenspeicher-Cache nicht mit der SQL Server-Instanz synchronisiert ist und Suchvorgänge veraltete Datenbank-IDs abrufen.

SQL-Anmeldungen verwenden den Zwischenspeicher-Cache, um den Datenbanknamen der ID-Zuordnung zuzuordnen. Der Cache sollte mit der Back-End-Datenbank synchron sein und aktualisiert werden, wenn das Anhängen und Trennen der Datenbank an/von der SQL Server-Instanz erfolgt.
Sie erhalten diesen Fehler, wenn der Arbeitsablauf zum Trennen den Zwischenspeicher-Cache nicht rechtzeitig bereinigen kann und nachfolgende Suchen in der Datenbank auf eine veraltete Datenbank-ID verweisen.

Versuchen Sie, erneut eine Verbindung zu SQL-Datenbank herzustellen, bis die Ressourcen verfügbar sind und die Verbindung erneut hergestellt wird. Weitere Informationen finden Sie unter Vorübergehende Fehler.

Schritte zum Beheben vorübergehender Verbindungsprobleme

  1. Überprüfen Sie das Microsoft Azure-Dienstdashboard auf alle bekannten Ausfälle, die während des von der Anwendung gemeldeten Zeitraums aufgetreten sind.
  2. Für Anwendungen, die Verbindungen mit einem Clouddienst wie Azure SQL-Datenbank herstellen, sollten Sie regelmäßige Neukonfigurationsereignisse erwarten. Daher sollten Sie eine Wiederholungslogik zur Fehlerbehandlung implementieren und so verhindern, dass Anwendungsfehler Benutzern gemeldet werden.
  3. Wenn sich eine Datenbank ihren Ressourcenbegrenzungen nähert, kann dies wie ein vorübergehendes Verbindungsproblem aussehen. Sie Ressourceneinschränkungen.
  4. Wenn Verbindungsprobleme weiterhin bestehen, die Fehlerdauer 60 Sekunden überschreitet oder der Fehler an einem Tag mehrfach auftritt, schicken Sie eine Azure-Supportanfrage, indem Sie auf der Azure-Support -Website Support erhalten auswählen.

Das Problem tritt auf, wenn die Anwendung keine Verbindung mit dem Server herstellen kann.

Um dieses Problem zu beheben, führen Sie die unter Schritte zum Beheben häufiger Verbindungsprobleme genannten Schritte (in der angegebenen Reihenfolge) aus.

Der Server/die Instanz wurde nicht gefunden, oder auf ihn/sie kann nicht zugegriffen werden (Fehler 26, 40, 10053)

Fehler 26: Fehler beim Bestimmen des angegebenen Servers

System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections.(provider: SQL Network Interfaces, error: 26 – Error Locating Server/Instance Specified)

Fehler 40: Serververbindung konnte nicht geöffnet werden.

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

Fehler 10053: Beim Empfangen von Ergebnissen vom Server ist ein Fehler auf Übertragungsebene aufgetreten.

10053: A transport-level error has occurred when receiving results from the server. (Provider: TCP Provider, error: 0 - An established connection was aborted by the software in your host machine)

Diese Probleme treten auf, wenn die Anwendung keine Verbindung mit dem Server herstellen kann.

Um diese Probleme zu beheben, führen Sie die unter Schritte zum Beheben häufiger Verbindungsprobleme genannten Schritte (in der angegebenen Reihenfolge) aus.

Aufgrund von Firewallproblemen kann keine Verbindung mit dem Server hergestellt werden

Fehler 40615: Verbindung zu < Servername > nicht möglich

Konfigurieren Sie im Azure-Portal die Firewalleinstellungen für Azure SQL-Datenbank, um dieses Problem zu beheben.

Fehler 5: Verbindung zu < Servername > nicht möglich

Stellen Sie für alle Firewalls zwischen Client und Internet sicher, dass Port 1433 für ausgehende Verbindungen geöffnet ist, um dieses Problem zu beheben.

Die Anmeldung beim Server ist nicht möglich (Fehler 18456, 40531)

Anmeldung für Benutzer '< Benutzername >' fehlgeschlagen

Login failed for user '<User name>'.This session has been assigned a tracing ID of '<Tracing ID>'. Provide this tracing ID to customer support when you need assistance. (Microsoft SQL Server, Error: 18456)

Wenden Sie sich zum Beheben dieses Problems an Ihren Dienstadministrator, um einen gültigen Benutzernamen und das zugehörige Kennwort zu erhalten.

In der Regel kann der Dienstadministrator die Anmeldeinformationen mit den folgenden Schritten hinzufügen:

  1. Anmelden beim Server mit SQL Server Management Studio (SSMS).

  2. Mithilfe der folgenden SQL-Abfrage in der master-Datenbank überprüfen, ob der Anmeldename deaktiviert ist:

    SELECT name, is_disabled FROM sys.sql_logins;
    
  3. Wenn der entsprechende Name deaktiviert ist, kann er mithilfe der folgenden Anweisung aktiviert werden:

    ALTER LOGIN <User name> ENABLE;
    
  4. Wenn der Benutzername für die SQL-Anmeldung nicht vorhanden ist, bearbeiten Sie die folgende SQL-Abfrage, um eine neue SQL-Anmeldung zu erstellen, und führen Sie die Abfrage aus:

    CREATE LOGIN <SQL_login_name, sysname, login_name>
    WITH PASSWORD = '<password, sysname, Change_Password>';
    GO
    
  5. Erweitern Sie im SSMS-Objekt-Explorer den Eintrag Datenbanken.

  6. Wählen Sie die Datenbank aus, für die der Benutzer die Berechtigung erhalten soll.

  7. Klicken Sie mit der rechten Maustaste auf Sicherheit, und wählen Sie Neu und dann Benutzer aus.

  8. Befolgen Sie im generierten Skript mit Platzhaltern die Schritte zum die Ersetzen der SSMS-Vorlagenparameter und führen Sie es aus, zum Beispiel:

    CREATE USER [<user_name, sysname, user_name>]
    FOR LOGIN [<login_name, sysname, login_name>]
    WITH DEFAULT_SCHEMA = [<default_schema, sysname, dbo>];
    GO
    
    -- Add user to the database owner role
    EXEC sp_addrolemember N'db_owner', N'<user_name, sysname, user_name>';
    GO
    

    Sie können auch sp_addrolemember verwenden, um bestimmte Benutzer bestimmten Datenbankrollen zuzuordnen.

    Hinweis

    Zur Verwaltung von Mitgliedschaften in Datenbankrollen sollten Sie in Azure SQL-Datenbank die neuere ALTER ROLE-Syntax in Erwägung ziehen.

Weitere Informationen finden Sie unter Steuern und Gewähren des Datenbankzugriffs für SQL-Datenbank und SQL Data Warehouse.

Verbindungstimeoutfehler

System.Data.SqlClient.SqlException (0x80131904): Verbindungstimeout abgelaufen

System.Data.SqlClient.SqlException (0x80131904): Connection Timeout Expired. The timeout period elapsed while attempting to consume the pre-login handshake acknowledgement. This could be because the pre-login handshake failed or the server was unable to respond back in time. The duration spent while attempting to connect to this server was - [Pre-Login] initialization=3; handshake=29995;

System.Data.SqlClient.SqlException (0x80131904): Timeout abgelaufen

System.Data.SqlClient.SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

System.Data.Entity.Core.EntityException: Fehler des zugrunde liegenden Anbieters beim Öffnen

System.Data.Entity.Core.EntityException: The underlying provider failed on Open. -> System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. -> System.ComponentModel.Win32Exception: The wait operation timed out

Verbindung zu < Servername > nicht möglich

Cannot connect to <server name>.ADDITIONAL INFORMATION:Connection Timeout Expired. The timeout period elapsed during the post-login phase. The connection could have timed out while waiting for server to complete the login process and respond; Or it could have timed out while attempting to create multiple active connections. The duration spent while attempting to connect to this server was - [Pre-Login] initialization=231; handshake=983; [Login] initialization=0; authentication=0; [Post-Login] complete=13000; (Microsoft SQL Server, Error: -2) For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=-2&LinkId=20476 The wait operation timed out

Diese Ausnahmen können aufgrund von Verbindungs- oder Abfrageproblemen auftreten. Informationen zum Bestätigen, dass dieser Fehler durch Konnektivitätsprobleme verursacht wird, finden Sie unter Bestätigen, dass ein Fehler von einem Konnektivitätsproblem verursacht wird.

Verbindungstimeouts treten auf, weil die Anwendung keine Verbindung mit dem Server herstellen kann. Um dieses Problem zu beheben, führen Sie die unter Schritte zum Beheben häufiger Verbindungsprobleme genannten Schritte (in der angegebenen Reihenfolge) aus.

Fehler aufgrund einer beendeten Netzwerkverbindung

SQL-Clientbibliotheken stellen mithilfe des TCP-Netzwerkprotokolls eine Verbindung mit Azure SQL-Datenbank und Azure SQL Managed Instance her. Eine Clientbibliothek verwendet eine Komponente auf niedrigerer Ebene namens TCP-Anbieter, um TCP-Verbindungen zu verwalten. Wenn der TCP-Anbieter erkennt, dass ein Remotehost eine vorhandene TCP-Verbindung unerwartet beendet, löst die Clientbibliothek einen Fehler aus. Da es sich bei dem Fehler um einen Clientfehler und nicht um einen SQL Server-Fehler handelt, ist keine SQL-Fehlernummer enthalten. Stattdessen ist die Fehlernummer 0, und die Fehlermeldung des TCP-Anbieters wird verwendet.

Beispiele für Fehler aufgrund einer beendeten Netzwerkverbindung:

A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.) An existing connection was forcibly closed by the remote host

A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)

The client was unable to establish a connection because of an error during connection initialization process before login. Possible causes include the following: the client tried to connect to an unsupported version of SQL Server; the server was too busy to accept new connections; or there was a resource limitation (insufficient memory or maximum allowed connections) on the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)

A connection was successfully established with the server, but then an error occurred during the login process. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)

Fehler aufgrund einer beendeten Verbindung können auftreten, weil die Datenbank oder der Pool für elastische Datenbanken vorübergehend nicht verfügbar ist. Sie treten auch aufgrund verschiedener Probleme in der Netzwerkinfrastruktur zwischen dem Datenbankserver und der Clientanwendung auf, einschließlich Firewalls, Netzwerkanwendungen usw. Diese Probleme können vorübergehend oder dauerhaft sein. Als allgemeine Richtlinie sollten Anwendungen eine feste Anzahl von Wiederholungsversuchen für diese Fehler ausführen, bevor sie als dauerhafte Fehler betrachtet werden.

Fehler bei der Ressourcenkontrolle

Azure SQL-Datenbank verwendet eine Ressourcen-Governance-Implementierung, die auf Resource Governor basiert, um Ressourcengrenzwerte durchzusetzen. Erfahren Sie mehr über Ressourcenverwaltung in Azure SQL-Datenbank.

Die häufigsten Fehler der Ressourcen-Governance werden zuerst mit Details aufgeführt, gefolgt von einer Tabelle mit Fehlermeldungen zur Ressourcen-Governance.

Fehler 10928 und 10936: Ressourcen-ID: 1. Die Anforderungsgrenze für [die Datenbank oder den Pool für elastische Datenbanken] beträgt %d und wurde erreicht.

Wenn der Grenzwert auf Datenbankebene erreicht ist, lautet die ausführliche Fehlermeldung in diesem Fall Resource ID : 1. The request limit for the database is %d and has been reached. See 'http://go.microsoft.com/fwlink/?LinkId=267637' for assistance..

Wenn der Grenzwert für den Pool für elastische Datenbanken erreicht ist, lautet die ausführliche Fehlermeldung in diesem Fall: Resource ID : 1. The request limit for the elastic pool is %d and has been reached. See 'http://go.microsoft.com/fwlink/?LinkId=267637' for assistance.Grenzwerte für Pools für elastische Datenbanken sind höher als Datenbankgrenzwerte. Weitere Informationen finden Sie unter Ressourcengrenzen. Grenzwerte können erreicht werden, wenn mehrere Datenbanken im Pool eine Ressource (z. B. einen Worker) gleichzeitig verwenden.

Diese Fehlermeldung gibt an, dass der Workergrenzwert für die Datenbank oder den Pool für elastische Datenbanken erreicht wurde. Anstelle des Platzhalters %d wird der maximale Wert für gleichzeitige Worker für das Dienstziel der Datenbank oder des Pools für elastische Datenbanken angegeben.

Hinweis

Das anfängliche Angebot von Azure SQL-Datenbank nur Einzelthreadabfragen unterstützt. Zu diesem Zeitpunkt war die Anzahl der Anforderungen immer gleichbedeutend mit der Anzahl der Arbeitskräfte. Die Fehlermeldungen 10928 und 10936 in Azure SQL-Datenbank enthält aus Gründen der Abwärtskompatibilität die Formulierung „Das Anforderungslimit für [...] ist N und wurde erreicht.“. Der Grenzwert ist tatsächlich die Anzahl der Arbeitskräfte. Wenn Ihre Einstellung für den maximalen Grad von Parallelität (MAXDOP) gleich 0 oder größer als 1 ist, ist die Anzahl der Arbeitskräfte möglicherweise wesentlich höher als die Anzahl der Anforderungen, und der Grenzwert kann viel früher erreicht werden, als wenn MAXDOP gleich eins ist.

Erfahren Sie mehr über Sitzungen, Mitarbeitern und Anfragen.

Verbinden bei Bedarf mit dem Dedicated Admin Connection (DAC)

Wenn ein Livevorfall auftritt, bei dem das Workerlimit erreicht wurde, wird möglicherweise Fehler 10928 angezeigt, wenn Sie eine Verbindung über SQL Server Management Studio (SSMS) oder Azure Data Studio herstellen. Eine Sitzung kann mithilfe der Diagnoseverbindung für Datenbankadministratoren (DAC) eine Verbindung herstellen, auch wenn der maximale Schwellenwert für Mitarbeiter erreicht wurde.

So stellen Sie eine Verbindung mit dem DAC von SSMS:

  • Klicken Sie im Menü auf Datei> Neu>Datenbank-Engine-Abfrage.
  • Geben Sie Verbindungsdialog im Feld „Servername“ admin:<fully_qualified_server_name> ein (z. B. admin:servername.database.windows.net).
  • Wählen Sie Optionen >> aus.
  • Wählen Sie die Verbindungseigenschaften-Registerkarte
  • Geben Sie Verbinden Datenbank speichern den Namen der Datenbank ein.
  • Wählen Sie Verbinden.

Wenn Fehler 40613, Database '%.&#x2a;ls' on server '%.&#x2a;ls' is not currently available. Please retry the connection later. If the problem persists, contact customer support, and provide them the session tracing ID of '%.&#x2a;ls', angezeigt wird, weist dies möglicherweise darauf hin, dass bereits eine andere Sitzung mit dem DAC verbunden ist. Es kann immer nur eine Sitzung gleichzeitig eine Verbindung mit dem DAC für eine einzelne Datenbank oder einen Pool für elastische Datenbanken herstellen.

Wenn nach der Auswahl von Verbinden der Fehler „Fehler beim Herstellen einer Verbindung mit dem Server“ auftritt, wurde die DAC-Sitzung möglicherweise trotzdem erfolgreich eingerichtet, wenn Sie eine Version von SSMS vor 18.9 verwenden. Frühe Versionen von SSMS versucht, IntelliSense für Verbindungen mit dem DAC zur Verfügung zu stellen. Dies ist fehlgeschlagen, da das DAC nur einen einzigen Worker unterstützt und IntelliSense einen separaten Worker erfordert.

Sie können keine DAC-Verbindung mit dem Objekt-Explorer in SSMS verwenden.

Überprüfen Ihrer max_worker_percent Nutzung

Um Statistiken zum Ressourcenverbrauch für Ihre Datenbank für 14 Tage zu finden, fragen Sie die sys.resource_stats-Systemkatalogansicht ab. Die max_worker_percentSpalte zeigt den Prozentsatz der verwendeten Arbeitskräfte relativ zum Mitarbeiterlimit für Ihre Datenbank an. Stellen Sie eine Verbindung mit der master-Datenbank auf Ihrem logischen Server her, um sys.resource_stats abzufragen.

SELECT start_time, end_time, database_name, sku, avg_cpu_percent, max_worker_percent, max_session_percent 
FROM sys.resource_stats;

Sie können auch Ressourcenverbrauchsstatistiken der letzten Stunde aus der dynamischen Verwaltungsansicht sys.dm_db_resource_stats abfragen. Verbinden sie direkt an die Datenbank, um abfragen sys.dm_db_resource_stats zu können.

SELECT end_time, avg_cpu_percent, max_worker_percent, max_session_percent
FROM sys.dm_db_resource_stats;

Geringerer Arbeitseinsatz nach Möglichkeit

Blockierungsketten können zu einer plötzlichen Zunahme der Anzahl von Arbeitskräften in einer Datenbank führen. Ein großer Umfang paralleler Abfragen kann zu einer hohen Anzahl von Arbeitskräften führen. Wenn Sie den Grad an Parallelität (MAXDOP)erhöhen oder MAXDOP auf Null festlegen, kann die Anzahl der aktiven Arbeitskräfte erhöht werden.

Durch Ausführen der folgenden Schritte können Sie einen Vorfall mit nicht genügend Mitarbeitern aufarbeiten:

  1. Überprüfen Sie, ob Blockierung erfolgt oder ob Sie eine große Anzahl von gleichzeitig arbeitenden Mitarbeitern erkennen können. Führen Sie die folgende Abfrage aus, um aktuelle Anforderungen zu untersuchen und auf Blockierung zu prüfen, wenn ihre Datenbank Fehler 10928 zurück gibt. Möglicherweise müssen Sie eine Verbindung mit dem Dedicated Admin Connection (DAC) herstellen, um die Abfrage auszuführen.

    SELECT
        r.session_id, r.request_id, r.blocking_session_id, r.start_time, 
        r.status, r.command, DB_NAME(r.database_id) AS database_name,
        (SELECT COUNT(*) 
            FROM sys.dm_os_tasks AS t 
            WHERE t.session_id=r.session_id and t.request_id=r.request_id) AS worker_count,
        i.parameters, i.event_info AS input_buffer,
        r.last_wait_type, r.open_transaction_count, r.total_elapsed_time, r.cpu_time,
        r.logical_reads, r.writes, s.login_time, s.login_name, s.program_name, s.host_name
    FROM sys.dm_exec_requests as r
    JOIN sys.dm_exec_sessions as s on r.session_id=s.session_id
    OUTER APPLY sys.dm_exec_input_buffer (r.session_id,r.request_id) AS i
    WHERE s.is_user_process=1;
    GO
    
    1. Suchen Sie nach Zeilen mit einem blocking_session_id, um blockierte Sitzungen zu identifizieren. Suchen Sie in der Liste nach den einzelnen blocking_session_id Sitzungen, um festzustellen, ob diese Sitzung ebenfalls blockiert ist. Mit den Werten blocking_session_id und session_id gelangen Sie letztlich zum Kopfblocker: eine Sitzung, die nicht blockiert wird, sondern blockiert. Optimieren Sie die Abfrage „Blockiert andere Prozesse“.

      Tipp

      Ausführlichere Informationen zur Problembehandlung bei zeitintensiven oder blockierenden Abfragen finden Sie unter Verstehen und Beheben von Problemen durch Blockierungen in Azure SQL-Datenbank.

    2. Um eine große Anzahl von gleichzeitigen Mitarbeitern zu identifizieren, überprüfen Sie die Anzahl der Anforderungen insgesamt und die worker_countSpalte für jede Anforderung. Worker_count ist die Anzahl der Worker zum Zeitpunkt der Stichprobe und kann sich im Laufe der Ausführung der Anforderung ändern. Optimieren Sie Abfragen, um die Ressourcenverwendung zu verringern, wenn die Ursache für steigende Arbeitskräfte gleichzeitige Abfragen sind, die in ihrem optimalen Parallelitätsgrad ausgeführt werden. Weitere Informationen finden Sie unter Abfrageoptimierung/Abfragehinweise.

  2. Werten Sie den maximalen Grad der Parallelitätseinstellung (MAXDOP) für die Datenbank aus.

Erhöhen der Grenzwerte für Mitarbeiter

Wenn die Datenbank oder der Pool für elastische Datenbanken trotz Auflösung möglicher Blockierungen, der Optimierung von Abfragen und der Überprüfung Ihrer MAXDOP-Einstellung fortlaufend den Grenzwert für Worker erreicht, erwägen Sie das Hochskalieren der Datenbank oder des Pools für elastische Datenbanken, um den Workergrenzwert zu erhöhen.

Finden Sie Ressourcengrenzwerte für Azure SQL-Datenbank Dienstebene und Berechnungsgröße:

Erfahren Sie mehr über Azure SQL-Datenbank Ressourcen-Governance von Arbeitskräften.

Fehler 10929: Ressourcen-ID: 1

10929: Resource ID: 1. The %s minimum guarantee is %d, maximum limit is %d and the current usage for the database is %d. However, the server is currently too busy to support requests greater than %d for this database. See http://go.microsoft.com/fwlink/?LinkId=267637 for assistance. Otherwise, please try again later.

Fehler 40501: Der Dienst ist derzeit ausgelastet

40501: The service is currently busy. Retry the request after 10 seconds. Incident ID: %ls. Code: %d.

Fehler 40501 ist ein Engine-Einschränkungsfehler. Er weist darauf hin, dass Ressourcenlimits überschritten werden.

Weitere Informationen zu Ressourcenlimits finden Sie unter Ressourcenlimits für Azure SQL-Datenbank und Azure Synapse Analytics-Server.

Fehler 40544: Das Größenkontingent der Datenbank wurde erreicht

40544: The database has reached its size quota. Partition or delete data, drop indexes, or consult the documentation for possible resolutions. Incident ID: <ID>. Code: <code>.

Dieser Fehler tritt auf, wenn die Datenbank ihr Größenkontingent erreicht hat.

Mithilfe der folgenden Schritte können Sie das Problem umgehen oder mehr Optionen nutzen:

  1. Überprüfen Sie die aktuelle Größe der Datenbank, indem Sie das Dashboard im Azure-Portal verwenden.

    Hinweis

    Um festzustellen, welche Tabellen den meisten Speicherplatz belegen und somit potenzielle Kandidaten für die Bereinigung sind, führen Sie die folgende SQL-Abfrage aus:

    SELECT o.name,
     SUM(p.row_count) AS 'Row Count',
     SUM(p.reserved_page_count) * 8.0 / 1024 AS 'Table Size (MB)'
    FROM sys.objects o
    JOIN sys.dm_db_partition_stats p on p.object_id = o.object_id
    GROUP BY o.name
    ORDER BY [Table Size (MB)] DESC;
    GO
    
  2. Wenn die aktuelle Größe die für Ihre Edition maximal unterstützte Größe nicht überschreitet, können Sie mit ALTER DATABASE die MAXSIZE-Einstellung erhöhen.

  3. Wenn die Datenbank bereits die maximal unterstützte Größe für Ihre Edition überschreitet, können Sie einen oder mehrere der folgenden Schritte probieren:

    • Führen Sie normale Aktivitäten zur Bereinigung der Datenbank aus. Bereinigen Sie beispielsweise die unerwünschten Daten mithilfe von TRUNCATE/DELETE, oder verschieben Sie Daten mithilfe von SQL Server Integration Services (SSIS) oder des Hilfsprogramms zum Massenkopieren (Bulk Copy Program, bcp).
    • Partitionieren oder löschen Sie Daten, löschen Sie Indizes, oder informieren Sie sich in der Dokumentation über mögliche Lösungen.
    • Informationen zur Datenbankskalierung finden Sie unter Skalieren der Ressourcen für einzelne Datenbanken und Skalieren der Ressourcen für Pools für elastische Datenbanken.

Fehler 40549: Sitzung wurde aufgrund einer zeitintensiven Transaktion beendet

40549: Session is terminated because you have a long-running transaction. Try shortening your transaction.

Wenn diese Fehlermeldung wiederholt auftritt, führen Sie die folgenden Schritte aus, um das Problem zu beheben:

  1. Führen Sie die folgende Abfrage aus, um eventuelle geöffnete Sitzungen zu sehen, die für die Spalte duration_ms einen hohen Wert aufweisen.

    SELECT
        r.start_time, DATEDIFF(ms,start_time, SYSDATETIME()) as duration_ms, 
        r.session_id, r.request_id, r.blocking_session_id,  
        r.status, r.command, DB_NAME(r.database_id) AS database_name,
        i.parameters, i.event_info AS input_buffer,
        r.last_wait_type, r.open_transaction_count, r.total_elapsed_time, r.cpu_time,
        r.logical_reads, r.writes, s.login_time, s.login_name, s.program_name, s.host_name
    FROM sys.dm_exec_requests as r
    JOIN sys.dm_exec_sessions as s on r.session_id=s.session_id
    OUTER APPLY sys.dm_exec_input_buffer (r.session_id,r.request_id) AS i
    WHERE s.is_user_process=1
    ORDER BY start_time ASC;
    GO
    

    Sie können Zeilen ignorieren, in denen in der input_bufferSpalte eine Abfrage angezeigt wird, die aus liestsys.fn_MSxe_read_event_stream: Diese Anforderungen sind mit erweiterten Ereignissitzungen verknüpft.

  2. Überprüfen Sie blocking_session_id die Spalte, um zu sehen, ob Blockierung zu langfristigen Transaktionen bei trägt.

    Hinweis

    Weitere Informationen zur Problembehandlung bei Blockierungen in Azure SQL-Datenbank finden Sie unter Verstehen und Beheben von Problemen durch Blockierungen in Azure SQL-Datenbank.

  3. Sie sollten Batchverarbeitung für Ihre Abfragen in Erwägung ziehen. Weitere Informationen finden Sie unter Gewusst wie: Verbessern der Leistung von SQL-Datenbankanwendungen mithilfe von Batchverarbeitung.

Fehler 40551: Die Sitzung wurde aufgrund einer übermäßigen tempdb-Auslastung beendet.

40551: The session has been terminated because of excessive TEMPDB usage. Try modifying your query to reduce the temporary table space usage.

Um dieses Problem zu umgehen, führen Sie die folgenden Schritte aus:

  1. Ändern Sie die Abfragen, um die Verwendung von temporärem Tabellenspeicherplatz zu verringern.
  2. Löschen Sie temporäre Objekte, wenn sie nicht mehr benötigt werden.
  3. Kürzen Sie Tabellen, oder entfernen Sie nicht verwendete Tabellen.

Fehler 40552: Die Sitzung wurde aufgrund übermäßiger Belegung des Speicherplatzes für das Transaktionsprotokoll beendet

40552: The session has been terminated because of excessive transaction log space usage. Try modifying fewer rows in a single transaction.

Probieren Sie die folgenden Methoden aus, um dieses Problem zu beheben:

  • Das Problem kann aufgrund von Einfüge-, Aktualisierungs- oder Löschvorgängen auftreten. Versuchen Sie, die Anzahl der Zeilen zu verringern, die sofort ausgeführt werden, indem Sie Batchverarbeitung oder eine Aufteilung in mehrere kleinere Transaktionen implementieren.
  • Das Problem kann aufgrund von Vorgängen zum Neuerstellen des Indexes auftreten. Um dieses Problem zu umgehen, stellen Sie sicher, dass die Anzahl der betroffenen Zeilen in der Tabelle multipliziert mit der durchschnittlichen Größe des aktualisierten Felds in Bytes + 80 kleiner als < 2 Gigabyte (GB) ist.
  • Bei einer Indexneuerstellung muss die durchschnittliche Größe des aktualisierten Felds durch die durchschnittliche Indexgröße ersetzt werden.
  • Weitere Informationen finden Sie unter Problembehandlung für ein vollständiges Transaktionsprotokoll in Azure SQL-Datenbank und Problembehandlung für ein vollständiges Transaktionsprotokoll in Azure SQL Managed Instance.

Fehler 40553: Die Sitzung wurde aufgrund übermäßiger Speicherauslastung beendet

40553: The session has been terminated because of excessive memory usage. Try modifying your query to process fewer rows.

Um dieses Problem zu umgehen, versuchen Sie, die Abfrage zu optimieren.

Eine ausführliche Problembehandlung finden Sie unter Wird meine Abfrage in der Cloud einwandfrei ausgeführt?

Weitere Informationen zu anderen Fehlern im Zusammenhang mit unzureichendem Arbeitsspeicher und Beispielabfragen finden Sie unter Behandeln von Fehlern mit unzureichendem Arbeitsspeicher mit Azure SQL-Datenbanken.

Tabelle mit Fehlermeldungen bezüglich Ressourcenkontrolle

Fehlercode severity BESCHREIBUNG
10928 20 Resource ID: %d. The %s limit for the database is %d and has been reached. See 'http://go.microsoft.com/fwlink/?LinkId=267637' for assistance.

Mit der Ressourcen-ID wird die Ressource angegeben, für die das Limit erreicht wurde. Wenn Ressourcen-ID = 1, gibt dies an, dass ein Mitarbeiterlimit erreicht wurde. Weitere Informationen finden Sie unter Fehler 10928: Ressourcen-ID: 1. Das Anforderungslimit für die Datenbank beträgt %d und wurde erreicht. Wenn Ressourcen-ID = 2, gibt dies an, dass das Sitzungslimit erreicht wurde.

Erfahren Sie mehr über Ressourcensätze:
Logische SQL-Server-Ressourcengrenzen.
DTU-basierte Einschränkungen für einzelne Datenbanken.
V-Kern-basierte Einschränkungen für einzelne Datenbanken.
Übersicht über Ressourcenlimits für verwaltete Azure SQL-Instanzen.
10936 20 Resource ID: %d. The %s limit for the elastic pool is %d and has been reached. See 'http://go.microsoft.com/fwlink/?LinkId=267637' for assistance.

Mit der Ressourcen-ID wird die Ressource angegeben, für die das Limit erreicht wurde. Wenn Ressourcen-ID = 1, gibt dies an, dass ein Mitarbeiterlimit erreicht wurde. Weitere Informationen finden Sie unter Fehler 10936: Ressourcen-ID: 1. Das Anforderungslimit für den Pool für elastische Datenbanken beträgt %d und wurde erreicht.. Wenn Ressourcen-ID = 2, gibt dies an, dass das Sitzungslimit erreicht wurde.

Erfahren Sie mehr über Ressourcensätze:
Logische SQL-Server-Ressourcengrenzen.
DTU-basierte Einschränkungen für Pools für elastische Datenbanken.
V-Kern-basierte Einschränkungen für Pools für elastische Datenbanken.
Übersicht über Ressourcenlimits für verwaltete Azure SQL-Instanzen.
10929 20 Resource ID: %d. The %s minimum guarantee is %d, maximum limit is %d, and the current usage for the database is %d. However, the server is currently too busy to support requests greater than %d for this database.

Mit der Ressourcen-ID wird die Ressource angegeben, für die das Limit erreicht wurde. Bei Arbeitsthreads lautet die Ressourcen-ID „1“. Bei Sitzungen lautet die Ressourcen-ID „2“. Weitere Informationen finden Sie unter:
Logische SQL-Server-Ressourcengrenzen.
DTU-basierte Einschränkungen für einzelne Datenbanken.
DTU-basierte Einschränkungen für Pools für elastische Datenbanken.
V-Kern-basierte Einschränkungen für einzelne Datenbanken.
V-Kern-basierte Einschränkungen für Pools für elastische Datenbanken.
Übersicht über Ressourcenlimits für verwaltete Azure SQL-Instanzen.
Versuchen Sie es andernfalls später erneut.
40544 20 The database has reached its size quota. Partition or delete data, drop indexes, or consult the documentation for possible resolutions.

Informationen zur Datenbankskalierung finden Sie unter Skalieren der Ressourcen für einzelne Datenbanken und Skalieren der Ressourcen für Pools für elastische Datenbanken.
40549 16 Session is terminated because you have a long-running transaction. Try shortening your transaction.

Weitere Informationen finden Sie unter Gewusst wie: Verbessern der Leistung von SQL-Datenbankanwendungen mithilfe von Batchverarbeitung.
40550 16 The session has been terminated because it has acquired too many locks. Try reading or modifying fewer rows in a single transaction.

Weitere Informationen finden Sie unter Gewusst wie: Verbessern der Leistung von SQL-Datenbankanwendungen mithilfe von Batchverarbeitung.
40551 16 The session has been terminated because of excessive tempdb usage. Try modifying your query to reduce the temporary table space usage.

Wenn Sie temporäre Objekte verwenden, können Sie Speicherplatz in der tempdb-Datenbank sparen, indem Sie die temporären Objekte verwerfen, die von der Sitzung nicht mehr benötigt werden. Weitere Informationen zu Grenzwerten für tempdb in SQL-Datenbank finden Sie unter tempdb-Datenbank in SQL-Datenbank.
40552 16 The session has been terminated because of excessive transaction log space usage. Try modifying fewer rows in a single transaction.

Weitere Informationen finden Sie unter Gewusst wie: Verbessern der Leistung von SQL-Datenbankanwendungen mithilfe von Batchverarbeitung.

Versuchen Sie beim Durchführen von Masseneinfügungen mit dem Hilfsprogramm bcp.exe oder der System.Data.SqlClient.SqlBulkCopy-Klasse, die Option -b batchsize oder BatchSize zu verwenden, um die Anzahl der Zeilen zu beschränken, die bei jeder Transaktion auf den Server kopiert werden. Versuchen Sie es mit der Option REBUILD WITH ONLINE = ON, wenn Sie einen Index mit der ALTER INDEX-Anweisung neu erstellen. Informationen zu den Größen von Transaktionsprotokollen für das V-Kern-basierte Kaufmodell finden Sie unter:
V-Kern-basierte Einschränkungen für einzelne Datenbanken.
V-Kern-basierte Einschränkungen für Pools für elastische Datenbanken.
Übersicht über Ressourcenlimits für verwaltete Azure SQL-Instanzen.
40553 16 The session has been terminated because of excessive memory usage. Try modifying your query to process fewer rows.

Wenn Sie die Anzahl von ORDER BY- und GROUP BY-Vorgängen im Transact-SQL-Code reduzieren, verringern sich auch die Arbeitsspeicheranforderungen Ihrer Abfrage. Informationen zur Datenbankskalierung finden Sie unter Skalieren der Ressourcen für einzelne Datenbanken und Skalieren der Ressourcen für Pools für elastische Datenbanken. Weitere Informationen zu Fehlern im Zusammenhang mit unzureichendem Arbeitsspeicher und Beispielabfragen finden Sie unter Behandeln von Fehlern mit unzureichendem Arbeitsspeicher mit Azure SQL-Datenbanken.

Fehler im Zusammenhang mit Pools für elastische Datenbanken

Die folgenden Fehler beziehen sich auf die Erstellung und Verwendung von Pools für elastische Datenbanken:

Fehlercode severity BESCHREIBUNG Korrekturmaßnahme
1132 17 The elastic pool has reached its storage limit. The storage usage for the elastic pool cannot exceed (%d) MBs.

Es wurde versucht, Daten in eine Datenbank zu schreiben, während die Speicherbegrenzung des Pools für elastische Datenbanken erreicht wurde. Informationen zu Ressourceneinschränkungen finden Sie unter:
DTU-basierte Einschränkungen für Pools für elastische Datenbanken.
V-Kern-basierte Einschränkungen für Pools für elastische Datenbanken.
Erhöhen Sie nach Möglichkeit die DTUs des Pools für elastische Datenbanken und/oder fügen Sie ihm Speicher hinzu, um die Speicherkapazität zu erweitern, reduzieren Sie die Speichernutzung der einzelnen Datenbanken innerhalb des Pools für elastische Datenbanken, oder entfernen Sie Datenbanken aus dem Pools für elastische Datenbanken. Informationen zur Skalierung von Pools für elastische Datenbanken finden Sie unter Skalieren von Ressourcen für Pools für elastische Datenbanken. Weitere Informationen zum Entfernen von nicht verwendetem Speicherplatz aus Datenbanken finden Sie unter Verwalten von Dateispeicherplatz für Datenbanken in Azure SQL-Datenbank.
10929 16 The %s minimum guarantee is %d, maximum limit is %d, and the current usage for the database is %d. However, the server is currently too busy to support requests greater than %d for this database.

Informationen zu Ressourceneinschränkungen finden Sie unter:
DTU-basierte Einschränkungen für Pools für elastische Datenbanken.
V-Kern-basierte Einschränkungen für Pools für elastische Datenbanken.
Versuchen Sie es andernfalls später erneut. DTU-/V-Kern-Mindestanzahl pro Datenbank; DTU-/V-Kern-Höchstanzahl pro Datenbank Die Gesamtanzahl der gleichzeitigen Worker in allen Datenbanken im Pool für elastische Datenbanken hat versucht, den Poolgrenzwert zu überschreiten.
Erhöhen Sie nach Möglichkeit die Anzahl von DTUs oder V-Kernen des Pools für elastische Datenbanken, um die Begrenzung für Worker zu steigern, oder entfernen Sie Datenbanken aus dem Pool für elastische Datenbanken.
40844 16 Database '%ls' on Server '%ls' is a '%ls' edition database in an elastic pool and cannot have a continuous copy relationship. N/V
40857 16 Elastic pool not found for server: '%ls', elastic pool name: '%ls'. Specified elastic pool does not exist in the specified server. Geben Sie einen gültigen Namen für den Pool für elastische Datenbanken an.
40858 16 Elastic pool '%ls' already exists in server: '%ls'. Specified elastic pool already exists in the specified server. Geben Sie einen neuen Namen für den Pool für elastische Datenbanken an.
40859 16 Elastic pool does not support service tier '%ls'. Specified service tier is not supported for elastic pool provisioning. Geben Sie die richtige Edition an, oder lassen Sie die Dienstebene leer, um die Standarddienstebene zu verwenden.
40860 16 Elastic pool '%ls' and service objective '%ls' combination is invalid. Elastic pool and service tier can be specified together only if resource type is specified as 'ElasticPool'. Geben Sie die richtige Kombination aus Pool für elastische Datenbanken und Dienstebene an.
40861 16 The database edition '%.*ls' cannot be different than the elastic pool service tier which is '%.*ls'. The database edition is different than the elastic pool service tier. Geben Sie keine Datenbankedition an, die sich von der Dienstebene des Pools für elastische Datenbanken unterscheidet. Die Datenbankedition muss nicht angegeben werden.
40862 16 Elastic pool name must be specified if the elastic pool service objective is specified. Elastic pool service objective does not uniquely identify an elastic pool. Geben Sie den Namen des Pools für elastische Datenbanken an, wenn Sie das Dienstziel des Pools für elastische Datenbanken verwenden.
40864 16 The DTUs for the elastic pool must be at least (%d) DTUs for service tier '%.*ls'. Attempting to set the DTUs for the elastic pool below the minimum limit. Legen Sie die DTU-Einstellung für den Pool für elastische Datenbanken mindestens auf die Untergrenze fest.
40865 16 The DTUs for the elastic pool cannot exceed (%d) DTUs for service tier '%.*ls'. Attempting to set the DTUs for the elastic pool above the maximum limit. Legen Sie die DTU-Einstellung für den Pool für elastische Datenbanken höchstens auf die Obergrenze fest.
40867 16 The DTU max per database must be at least (%d) for service tier '%.*ls'. Attempting to set the DTU max per database below the supported limit. Sie sollten in Betracht ziehen, die Dienstebene des Pools für elastische Datenbanken zu verwenden, die die gewünschte Einstellung unterstützt.
40868 16 The DTU max per database cannot exceed (%d) for service tier '%.*ls'. Attempting to set the DTU max per database beyond the supported limit. Sie sollten in Betracht ziehen, die Dienstebene des Pools für elastische Datenbanken zu verwenden, die die gewünschte Einstellung unterstützt.
40870 16 The DTU min per database cannot exceed (%d) for service tier '%.*ls'. Attempting to set the DTU min per database beyond the supported limit. Sie sollten in Betracht ziehen, die Dienstebene des Pools für elastische Datenbanken zu verwenden, die die gewünschte Einstellung unterstützt.
40873 16 The number of databases (%d) and DTU min per database (%d) cannot exceed the DTUs of the elastic pool (%d). Attempting to specify DTU min for databases in the elastic pool that exceeds the DTUs of the elastic pool. Sie sollten in Betracht ziehen, die Anzahl der DTUs im Pool für elastische Datenbanken zu erhöhen oder die Mindestanzahl der DTUs pro Datenbank zu verringern, oder Sie verringern die Anzahl der Datenbanken im Pool für elastische Datenbanken.
40877 16 An elastic pool cannot be deleted unless it does not contain any databases. The elastic pool contains one or more databases and therefore cannot be deleted. Entfernen Sie Datenbanken aus dem Pool für elastische Datenbanken, um ihn zu löschen.
40881 16 The elastic pool '%.*ls' has reached its database count limit. The database count limit for the elastic pool cannot exceed (%d) for an elastic pool with (%d) DTUs. Attempting to create or add database to elastic pool when the database count limit of the elastic pool has been reached. Erhöhen Sie nach Möglichkeit die DTU-Anzahl des Pools für elastische Datenbanken, um die Begrenzung für Datenbanken zu steigern, oder entfernen Sie Datenbanken aus dem Pool für elastische Datenbanken.
40889 16 The DTUs or storage limit for the elastic pool '%.*ls' cannot be decreased since that would not provide sufficient storage space for its databases. Attempting to decrease the storage limit of the elastic pool below its storage usage. Reduzieren Sie die Speicherauslastung der einzelnen Datenbanken im Pool für elastische Datenbanken, oder entfernen Sie Datenbanken aus dem Pool, um die DTUs oder Speicherbegrenzung zu verringern.
40891 16 The DTU min per database (%d) cannot exceed the DTU max per database (%d). Attempting to set the DTU min per database higher than the DTU max per database. Stellen Sie sicher, dass die Mindestanzahl von DTUs pro Datenbank nicht die Höchstanzahl von DTUs pro Datenbank überschreitet.
TBD 16 The storage size for an individual database in an elastic pool cannot exceed the max size allowed by '%.*ls' service tier elastic pool. The max size for the database exceeds the max size allowed by the elastic pool service tier. Legen Sie die maximale Größe der Datenbank höchstens auf die maximal zulässige Größe der Dienstebene des Pools für elastische Datenbanken fest.

Der von der Anmeldung angeforderte „Master“ der Datenbank kann nicht geöffnet werden. Die Anmeldung ist fehlgeschlagen.

Dieses Problem tritt auf, weil das Konto keine Zugriffsberechtigungen für die master-Datenbank hat. SQL Server Management Studio (SSMS) versucht jedoch standardmäßig, eine Verbindung mit der master-Datenbank herzustellen.

Gehen Sie folgendermaßen vor, um das Problem zu beheben:

  1. Klicken Sie auf dem Anmeldebildschirm von SSMS auf Optionen und dann auf Verbindungseigenschaften.

  2. Geben Sie in das Feld Verbindung mit Datenbank herstellen den standardmäßigen Datenbanknamen des Benutzers als standardmäßige Anmeldedatenbank ein, und wählen Sie dann Verbinden aus.

    Screenshot des Verbindungsdialogs mit der Registerkarte „Verbindungseigenschaften“.

Schreibschutzfehler

Wenn Sie versuchen, in eine schreibgeschützte Datenbank zu schreiben, erhalten Sie eine Fehlermeldung. In einigen Szenarien ist die Ursache für den Schreibschutz der Datenbank möglicherweise nicht sofort ersichtlich.

Fehler 3906: Fehler beim Aktualisieren der Datenbank „databaseName“, weil die Datenbank schreibgeschützt ist.

Beim Versuch, eine schreibgeschützte Datenbank zu ändern, wird der folgende Fehler ausgelöst.

Msg 3906, Level 16, State 2, Line 1
Failed to update database "%d" because the database is read-only.

Es gibt mehrere mögliche Erklärungen dafür, warum eine Datenbank schreibgeschützt ist.

Nach einem manuellen Failover stellen Anwendungen weiterhin eine Verbindung mit dem alten Replikat her

In Azure SQL-Datenbank kann Ihre Anwendung nach einem Failover zu einem anderen Replikat aufgrund des DNS weiterhin eine Verbindung mit dem vorherigen primären Replikat herstellen. Das Verbindungsrouting der Failovergruppe wird mittels DNS implementiert.

Mögliche Grundursachen:

  1. Während des Failovers werden die Endpunkte der Failovergruppe durch Ändern des Ziels des entsprechenden DNS-Eintrags so aktualisiert, dass sie auf die entsprechenden neuen primären und neuen sekundären Server verweisen. Standardmäßig werden DNS-Einträge mit einer TTL von 30 Sekunden erstellt, was bedeutet, dass DNS-Clients diese Einträge 30 Sekunden lang zwischenspeichern. Daher werden Aktualisierungen der DNS-Einträge nicht sofort weitergegeben; die alten Einträge bleiben erhalten, bis alle Clients und Zwischenknoten ihre Caches aktualisiert haben. Es kann also 0 bis etwa 10 Minuten (je nach Netzwerktopologie) dauern, bis Anmeldungen bei den Endpunkten der Failovergruppe nach einem Failover an ihre neuen Ziele weitergeleitet werden. Duch das Leeren von DNS-Caches kann das Problem behoben werden oder auch nicht, da Zwischennetzwerkknoten, die auf DNS-Anforderungen reagieren, auch DNS-Ergebnisse für eine Zeit zwischenspeichern.

    Die empfohlene Problemumgehung für dieses Problem besteht darin, einfach zu warten, bis die DNS-Einträge auf dem Client aktualisiert sind. Derzeit würde sich das Problem mit dieser Problemumgehung innerhalb von 10 Minuten von selbst beheben.

  2. Einige SQL-Clientbibliotheken haben ein Feature namens „Verbindungspooling“, das Verbindungen mit derselben Datenquelle wiederverwendet, anstatt sie zu schließen und erneut zu öffnen, wenn eine neue Datenbankverbindung erforderlich ist. Insbesondere ist das Verbindungspooling in ADO.NET standardmäßig aktiviert. In Kombination mit dem unter 1) beschriebenen Problem kann das Verbindungspooling dazu führen, dass neu geöffnete Verbindungen eine Verbindung mit der alten Datenbank wiederverwenden, wodurch auf unbestimmte Zeit verhindert wird, dass die Anwendung eine Verbindung mit der neuen primären Datenbank herstellt.

Lösungen :

Es gibt drei mögliche Problemumgehungen für dieses DNS-Problem nach einem Failover der Failovergruppe:

  1. Ändern Sie die Anwendung so, dass SQLConnection.ClearAllPools oder SQLConnection.ClearPool(conn) aufgerufen wird, wenn ein „Schreibschutz“-Fehler auftritt.
  2. Geben Sie in der Verbindungszeichenfolge der Anwendung Pooling=False an, um das Verbindungspoolung zu deaktivieren. Dies sollte getestet werden, da es sich erheblich auf die Leistung auswirken kann, wenn die Anwendung häufig Verbindungen öffnet und schließt.
  3. Eine weitere Möglichkeit, die Verzögerungen bei der DNS-Replikation/Zwischenspeicherung zu vermeiden, besteht darin, für ein gewisses Zeitfenster nach dem Auftreten von 3906 anhand des logischen Servernamens der Azure SQL-Datenbank (des ursprünglichen sekundären Servers, der jetzt der neue primäre Server ist) eine direkte Verbindung herzustellen.

Möglicherweise sind Sie mit einem schreibgeschützten Replikat verbunden

Sowohl bei Azure SQL-Datenbank als auch bei Azure SQL Managed Instance können Sie über ein schreibgeschütztes Replikat mit einer Datenbank verbunden sein. In diesem Fall gibt die folgende Abfrage mit Verwendung der Funktion DATABASEPROPERTYEX()READ_ONLY zurück:

SELECT DATABASEPROPERTYEX(DB_NAME(), 'Updateability');
GO

Wenn Sie eine Verbindung mithilfe von SQL Server Management Studio herstellen, überprüfen Sie, ob Sie auf der Registerkarte Zusätzliche Verbindungsparameterin Ihren Verbindungsoptionen den Parameter ApplicationIntent=ReadOnly angegeben haben.

Wenn die Verbindung über eine Anwendung oder einen Client unter Verwendung einer Verbindungszeichenfolge hergestellt wird, überprüfen Sie, ob in der Verbindungszeichenfolge ApplicationIntent=ReadOnly angegeben wurde. Weitere Informationen finden Sie unter Herstellen einer Verbindung mit einem schreibgeschützten Replikat.

Die Datenbank wurde möglicherweise als schreibgeschützt festgelegt

Wenn Sie Azure SQL-Datenbank verwenden, wurde die Datenbank selbst möglicherweise als schreibgeschützt festgelegt. Sie können den Status der Datenbank mithilfe der folgenden Abfrage überprüfen:

SELECT name, is_read_only
FROM sys.databases
WHERE database_id = DB_ID();

Sie können den schreibgeschützten Status für eine Datenbank in Azure SQL-Datenbank unter Verwendung von ALTER DATABASE Transact-SQL ändern. Derzeit ist es nicht möglich, eine Datenbank in einer verwalteten Instanz als schreibgeschützt festzulegen.

Bestätigen, dass ein Fehler von einem Konnektivitätsproblem verursacht wird

Um zu bestätigen, dass ein Fehler durch ein Verbindungsproblem verursacht wird, überprüfen Sie die Stapelüberwachung für Frames, die Aufrufe zum Öffnen einer Verbindung wie die folgenden anzeigen (beachten Sie den Verweis auf die SqlConnection-Klasse):

System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
 at System.Data.SqlClient.SqlConnection.Open()
 at AzureConnectionTest.Program.Main(String[] args)
ClientConnectionId:<Client connection ID>

Wenn die Ausnahme durch Abfrageprobleme ausgelöst wird, ähnelt der Aufrufstapel dem folgenden (beachten Sie den Verweis auf die SqlCommand-Klasse). Optimieren Sie Ihre Abfragen in dieser Situation.

  at System.Data.SqlClient.SqlCommand.ExecuteReader()
  at AzureConnectionTest.Program.Main(String[] args)
  ClientConnectionId:<Client ID>

Weitere Informationen zur Feinabstimmung der Leistung finden Sie in den folgenden Ressourcen: