SQL Server 2017 ล้มเหลวเมื่อสำรองข้อมูลเนื่องจาก filepath ไม่ถูกต้อง


25

ฉันพยายามกู้คืนฐานข้อมูลและ SQL Server หยุดทำงาน ฉันจะได้รับข้อความใน SSMS ที่กล่าวว่ามีข้อผิดพลาดในการส่งผ่านเครือข่าย (การเชื่อมต่อลดลงเมื่อเกิดข้อผิดพลาด) ฉันตรวจสอบบันทึกและพบว่าไม่มีอะไรมากไปกว่า SQL Server ปิดโดยไม่คาดหมาย ฉันจะต้องไปและเริ่มบริการใหม่

ฉันลดปัญหาให้แคบลงจนถึงสคริปต์ที่ GUI พยายามเรียกใช้ ปัญหาคือเมื่อมันทำการสำรองหางบันทึกเส้นทางไปยังแฟ้มสำรองข้อมูลไม่ถูกต้อง มันควรจะเป็นD:\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

ฉันมีสองคำถาม

  1. ฉันจะแก้ไขเส้นทางนี้ได้อย่างไร ฉันพยายามไปที่การตั้งค่าเซิร์ฟเวอร์และเส้นทางการสำรองข้อมูลD:โดยไม่มีเครื่องหมายทับ ถ้าฉันเพิ่มเครื่องหมายสแลช gui จะลบออก นี่คือ SSMS v17.9.1 ฉันสามารถเลือกD:\mapbenefits\และใช้งานได้ แต่ฉันต้องการD:\DATABASE\...

  2. นี่เป็นข้อบกพร่องหรือไม่? เซิร์ฟเวอร์ SQL ควรผิดพลาดเพียงเพราะพิมพ์เส้นทางไม่ถูกต้องหรือไม่ เมื่อฉันแก้ไขพา ธ ไฟล์มันก็ไม่มีปัญหา ฉันสามารถทำซ้ำได้ตลอดเวลาเพียงแค่ทำการลากไฟล์

ถ้าฉันเรียกใช้แบบสอบถามเพื่อตรวจสอบรุ่นที่ฉันได้รับ CU13 แต่ถ้าฉันไปที่การตั้งค่าฉันเห็นรุ่น 14.0.1000.169

ดูเหมือนว่านี่เป็นข้อผิดพลาดและสามารถทำซ้ำได้ดังนั้นฉันโพสต์ไว้ที่นี่: https://feedback.azure.com/forums/908035-sql-server/suggestions/36920542-incorrect-filepath-with-backup-log-command- สาเหตุ

คำตอบ:


25

ฉันสามารถทำซ้ำสิ่งนี้

ในปี 2559 ถ้าฉันใส่เส้นทางที่ไม่ถูกต้องฉันจะได้รับข้อความนี้:

ไม่สามารถเปิดอุปกรณ์สำรองข้อมูล 'D: mapbenefits_LogBackup_2019-02-21_13-58-24.bak' ข้อผิดพลาดของระบบปฏิบัติการ 3 (ระบบไม่สามารถค้นหาเส้นทางที่ระบุ)

เมื่อวันที่ 2017 CU 13 (14.0.3048.4) จะส่งผลให้บริการขัดข้อง คุณได้กล่าวไปแล้วว่าในโปรแกรมแก้ไขด่วนล่าสุด (14.0.3049.1) บริการไม่ผิดพลาด แต่เซสชันถูกฆ่า

ฉันได้ยืนยันพฤติกรรมที่แน่นอนเช่นเดียวกันนี้แล้วRESTORE DATABASEเช่นกัน - ผ่านเส้นทางเช่น "D: Backups" (ด้วยแบ็กสแลชที่หายไป) หรือ "D :: \ Backups" (โคลอนเสริม) ล่มอินสแตนซ์ของ SQL Server (ขอบคุณMichael K Campbellสำหรับการนำสิ่งนี้ขึ้นมา)

ถ้าฉันใส่เส้นทาง "ถูกต้อง" ที่ไม่มีอยู่ฉันจะได้รับพฤติกรรมที่ถูกต้อง ("ไม่สามารถหาเส้นทางที่ระบุ") ในปี 2560

นี่เป็นข้อผิดพลาด - ทั้งใน CU 13 และโครงสร้างของโปรแกรมแก้ไขด่วน การส่งพารามิเตอร์ที่ไม่ถูกต้องไปยังคำสั่งBACKUPหรือRESTOREไม่ควรทำให้บริการขัดข้องหรือทำให้เซสชันของคุณเสียหาย คุณสามารถรายงานบนเว็บไซต์ของข้อเสนอแนะ

หมายเหตุ: ข้อผิดพลาดรุ่นบริการขัดข้องนี้สามารถทำซ้ำในรุ่นตัวอย่างสาธารณะของ SQL Server 2019 (CTP2.2 - ขอบคุณDenis Rubashkinสำหรับการชี้จุดนี้)


ดูที่นี่ในตัวดีบักดูเหมือนว่ารหัสการตรวจสอบเส้นทางจะใช้งานไม่ได้ มันทำให้เกิดการล้นสแต็คโดยเรียกซ้ำsqlmin!CheckFileStreamReservedหลังจากการตรวจสอบปกติ (และค่อนข้างมาก) บนเส้นทางที่ให้มาล้มเหลวที่จะทำให้ความรู้สึกของมัน สแต็คโอเวอร์โฟลว์จะลดการให้บริการลงบนบิลด์ 3048 สิ่งเดียวกันนี้เกิดขึ้นใน 3049 ยกเว้นลำดับของการละเมิดการเข้าถึงในขณะที่พยายามจัดการสแต็กโอเวอร์โฟลว์แทนการเชื่อมต่อแทนที่จะหยุดเซิร์ฟเวอร์ทั้งหมด


การแก้ไขข้อผิดพลาดนี้เผยแพร่ใน SQL Server 2017 CU 15:

การแก้ไข: SQL Server 2017 ขัดข้องเนื่องจากกองมากเกินไปเมื่อคุณพยายามสำรองข้อมูลต้นแบบฐานข้อมูลไปยังดิสก์

ปัญหาได้รับการแก้ไขใน SQL Server 2019 CTP 3.0 ด้วย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.