SQL Server 2017 lumpuh saat mencadangkan karena filepath salah

25

Saya mencoba mengembalikan database saya dan SQL Server terus mogok. Saya akan mendapatkan pesan di SSMS yang mengatakan ada kesalahan transport jaringan (koneksi terputus karena crash). Saya memeriksa log dan menemukan tidak lebih dari SQL Server ditutup secara tak terduga. Saya kemudian harus pergi dan memulai kembali layanan.

Saya mempersempit masalah ke skrip yang GUI coba jalankan. Masalahnya adalah ketika ia mengambil cadangan log ekor, jalur ke file cadangan salah. HarusD:\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

Saya punya dua pertanyaan.

  1. Bagaimana cara memperbaiki jalur ini? Saya mencoba masuk ke pengaturan server dan jalur cadangan D:tanpa garis miring. Jika saya menambahkan garis miring gui menghapusnya. Ini adalah SSMS v17.9.1. Saya bisa memilih D:\mapbenefits\dan itu berhasil tetapi saya mauD:\DATABASE\...

  2. Apakah ini bug? Haruskah SQL server macet hanya karena jalan yang salah ketik? Setelah saya memperbaiki jalur file tidak ada masalah. Saya dapat mereproduksi kapan saja hanya dengan menyadap filepath.

Jika saya menjalankan kueri untuk memeriksa versi saya mendapatkan CU13, tetapi jika saya masuk ke pengaturan saya melihat versi 14.0.1000.169.

Sepertinya ini adalah bug dan dapat direproduksi jadi saya mempostingnya di sini: https://feedback.azure.com/forums/908035-sql-server/suggestions/36920542-incorrect-filepath-with-backup-log-command- penyebab

Rick
sumber

Jawaban:

25

Saya bisa mereproduksi ini.

Pada 2016, jika saya meletakkan jalur yang tidak valid seperti itu, saya mendapatkan pesan ini:

Tidak dapat membuka perangkat cadangan 'D: mapbenefits_LogBackup_2019-02-21_13-58-24.bak'. Kesalahan sistem operasi 3 (Sistem tidak dapat menemukan jalur yang ditentukan.)

Pada 2017 CU 13 (14.0.3048.4), itu mengakibatkan layanan mogok. Anda telah menyebutkan bahwa dalam perbaikan terbaru terbaru (14.0.3049.1), layanan tidak macet, tetapi sesi ini mati.

Saya telah mengkonfirmasi perilaku yang sama persis berlaku RESTORE DATABASEjuga - melewati jalur seperti "D: Backups" (dengan backslash yang hilang) atau "D :: \ Backups" (titik dua tambahan) crash contoh SQL Server (terima kasih Michael K Campbell untuk membicarakan hal ini).

Jika saya meletakkan jalur "valid" yang tidak ada, saya mendapatkan perilaku yang benar ("tidak dapat menemukan jalur yang ditentukan") pada tahun 2017.

Ini adalah bug - di CU 13 dan hotfix build. Melewati parameter yang salah ke BACKUPatau RESTOREperintah seharusnya tidak merusak layanan atau mematikan sesi Anda. Anda dapat melaporkannya di situs umpan balik .

Catatan: versi layanan-crash bug ini dapat direproduksi dalam versi pratinjau publik SQL Server 2019 (CTP2.2 - terima kasih kepada Denis Rubashkin untuk menunjukkan ini)


Melihat ini di debugger, sepertinya kode validasi jalur benar-benar rusak. Itu akhirnya menyebabkan stack overflow dengan memanggil secara rekursif sqlmin!CheckFileStreamReservedsetelah pemeriksaan normal (dan cukup luas) pada jalur yang disediakan gagal untuk memahaminya. Stack overflow menurunkan layanan pada build 3048. Hal yang sama terjadi pada 3049 kecuali serangkaian pelanggaran akses saat mencoba menangani stack overflow alih-alih memutus koneksi daripada menghentikan seluruh server.


Perbaikan untuk bug ini dirilis di SQL Server 2017 CU 15:

PERBAIKI: SQL Server 2017 lumpuh karena stack overflow ketika Anda mencoba mencadangkan master database ke disk

Masalah ini juga diatasi dalam SQL Server 2019 CTP 3.0.

Josh Darnell
sumber