SQL Server 2017 stürzt beim Sichern ab, weil der Dateipfad falsch ist

25

Ich habe versucht, meine Datenbank wiederherzustellen, und SQL Server ist immer wieder abgestürzt. In SSMS wurde die Meldung angezeigt, dass ein Netzwerk-Transportfehler aufgetreten ist (die Verbindung wurde aufgrund des Absturzes getrennt). Ich habe die Protokolle überprüft und festgestellt, dass nichts anderes als SQL Server unerwartet geschlossen wurde. Ich müsste dann gehen und den Dienst neu starten.

Ich habe das Problem auf das Skript eingegrenzt, das die GUI ausführen wollte. Das Problem ist, dass der Pfad zu den Sicherungsdateien falsch ist, wenn eine Endprotokollsicherung durchgeführt wird. Es sollte seinD:\mapbenefits\...

BACKUP LOG [mapbenefits]
TO  DISK = N'D:mapbenefits_LogBackup_2019-02-21_13-58-24.bak'
WITH NOFORMAT, NOINIT,  NAME = N'mapbenefits_LogBackup_2019-02-21_13-58-24',
    NOSKIP, NOREWIND, NOUNLOAD,  NORECOVERY ,  STATS = 5

Ich habe zwei Fragen.

  1. Wie behebe ich diesen Pfad? Ich habe versucht, in die Servereinstellungen zu gehen, und der Sicherungspfad ist D:ohne Schrägstrich. Wenn ich den Schrägstrich hinzufüge, wird er von der GUI entfernt. Dies ist SSMS v17.9.1. Ich kann auswählen D:\mapbenefits\und das funktioniert, aber ich willD:\DATABASE\...

  2. Ist das ein Bug? Sollte SQL Server abstürzen, nur weil ein Pfad falsch eingegeben wurde? Sobald ich den Dateipfad repariert habe, hat es keine Probleme. Ich kann jederzeit reproduzieren, indem ich den Dateipfad aufmische.

Wenn ich eine Abfrage durchführe, um die Version zu überprüfen, erhalte ich CU13, aber wenn ich in die Einstellungen gehe, sehe ich Version 14.0.1000.169.

Es sieht so aus, als wäre dies ein Fehler, der reproduzierbar ist. Deshalb habe ich ihn hier gepostet: https://feedback.azure.com/forums/908035-sql-server/suggestions/36920542-incorrect-filepath-with-backup-log-command- Ursachen

Rick
quelle

Antworten:

25

Ich konnte das reproduzieren.

Wenn ich im Jahr 2016 einen ungültigen Pfad wie diesen eingebe, erhalte ich die folgende Meldung:

Das Sicherungsgerät 'D: mapbenefits_LogBackup_2019-02-21_13-58-24.bak' kann nicht geöffnet werden. Betriebssystemfehler 3 (Das System kann den angegebenen Pfad nicht finden.)

In 2017 CU 13 (14.0.3048.4) führt dies zum Absturz des Dienstes. Sie haben bereits erwähnt, dass der Dienst im neuesten Hotfix (14.0.3049.1) nicht abstürzt, die Sitzung jedoch beendet wird.

Ich habe bestätigt, dass dasselbe Verhalten auch für gilt RESTORE DATABASE- das Übergeben eines Pfads wie "D: Backups" (mit fehlendem Backslash) oder "D :: \ Backups" (zusätzlicher Doppelpunkt) stürzt die SQL Server-Instanz ab (danke Michael K Campbell) dafür).

Wenn ich einen "gültigen" Pfad eingebe, der nicht existiert, erhalte ich 2017 das richtige Verhalten ("kann den angegebenen Pfad nicht finden").

Dies ist ein Fehler - sowohl in CU 13 als auch im Hotfix-Build. Die Übergabe falscher Parameter an die Befehle BACKUPoder RESTOREsollte den Dienst nicht zum Absturz bringen oder Ihre Sitzung beenden. Sie können es auf der Feedback-Site melden .

Hinweis: Die Service-Crash-Version dieses Fehlers kann in einer öffentlichen Vorschau-Version von SQL Server 2019 (CTP2.2 - danke an Denis Rubashkin für diesen Hinweis) reproduziert werden.


Betrachtet man dies in einem Debugger, scheint es, dass der Pfadüberprüfungscode einfach kaputt ist. Dies führt schließlich zu einem Stapelüberlauf, indem rekursiv aufgerufen wird, sqlmin!CheckFileStreamReservednachdem die normalen (und recht umfangreichen) Überprüfungen des angegebenen Pfads keinen Sinn ergeben. Der Stapelüberlauf bringt den Dienst in Build 3048 zum Erliegen. Dasselbe passiert in 3049 mit Ausnahme einer Folge von Zugriffsverletzungen, während versucht wird, den Stapelüberlauf zu behandeln, statt die Verbindung zu unterbrechen, anstatt den gesamten Server zu stoppen.


Ein Update für diesen Fehler wurde in SQL Server 2017 CU 15 veröffentlicht:

UPDATE: SQL Server 2017 stürzt aufgrund eines Stapelüberlaufs ab, wenn Sie versuchen, den Datenbankmaster auf der Festplatte zu sichern

Das Problem wurde auch in SQL Server 2019 CTP 3.0 behoben.

Josh Darnell
quelle