ระบบปฏิบัติการส่งคืนข้อผิดพลาด 21 (อุปกรณ์ไม่พร้อม)


13

ทุกครั้งที่ฉันรีบูท Windows สำหรับฐานข้อมูลบางอย่างฉันจะได้รับข้อผิดพลาดนี้:

ระบบปฏิบัติการส่งคืนข้อผิดพลาด 21 (อุปกรณ์ไม่พร้อม)

  1. ฉันตรวจสอบดิสก์ด้วยchkdsk /r- ไม่มีเซกเตอร์เสีย
  2. ฉันดำเนินการDBCC CHECKDBโดยไม่มีข้อผิดพลาด:

    *(CHECKDB found 0 allocation errors and 0 consistency errors in database)* 
  3. ถ้าฉันรีสตาร์ท SQL Server ข้อผิดพลาดจะหายไป

Windows 10 และ SQL Server 2016 Express

คำตอบ:


15

ทุกครั้งที่ฉันรีบูท Windows สำหรับฐานข้อมูลบางอย่างจะมีข้อผิดพลาดเกิดขึ้น (ข้อผิดพลาดของระบบปฏิบัติการ 21 - อุปกรณ์ไม่พร้อม)

นี่เป็นเพราะดิสก์ที่ออฟไลน์หรือไม่ออนไลน์ในขณะที่ SQL Server เริ่มทำงานหรือมีสถานะการเปลี่ยนแปลงหลังจาก SQL Server ออนไลน์

3. ถ้าฉันรีสตาร์ท SQL Server ข้อผิดพลาดจะหายไป

ใช่เพราะฐานข้อมูลนั้นได้รับการประกอบใหม่ภายใน SQL Server คุณยังสามารถออฟไลน์ฐานข้อมูลออนไลน์ได้เช่นกันและมันจะทำงานถ้าอุปกรณ์ดิสก์ได้รับการแก้ไขแล้ว

สิ่งนี้สามารถทำซ้ำได้อย่างง่ายดายในสภาพแวดล้อมการทดสอบโดยการวางฐานข้อมูลบนดิสก์ปิดการใช้งานดิสก์เรียกใช้แบบสอบถามแบบใช้เลือกข้อมูล (เพื่อรับข้อผิดพลาด) ทำให้ดิสก์กลับมาออนไลน์และสังเกตว่าตัวเลือกยังคงล้มเหลวด้วยข้อผิดพลาดเดียวกัน ฐานข้อมูลจะต้องมีการติดตั้งใหม่เพื่อให้สามารถทำงานได้อีกครั้งและไม่ได้รับข้อผิดพลาด OS 21

คุณควรทำอะไร?

มีใครบางคนติดตามหน้าต่างบางอันเพื่อหาสาเหตุที่ไม่ออนไลน์ในตอนแรกหรือทำไมมันถึงออฟไลน์ (การเปลี่ยนสถานะใด ๆ ) หรือทำไมมันแสดงว่าพร้อมที่จะเป็น windows แต่จริงๆแล้วไม่ใช่ (อาจต้องโหลดไดรเวอร์อื่น ๆ มัน).

นอกจากนี้ตรวจสอบไดรเวอร์ตัวกรองดิสก์ใด ๆ ที่ทันสมัยสำหรับสิ่งต่าง ๆ เช่นแอนตี้ไวรัสการป้องกันการบุกรุกโฮสต์ ฯลฯ เนื่องจากอาจปิดกั้นบริการ / การเริ่มต้น / สถานะ


ฉันมีปัญหาที่คล้ายกันและเพิ่มสคริปต์เพื่อเริ่มบริการ SQLServer / SqlLaunchPad อีกครั้งหลังจาก 5 นาที แต่ไม่ได้ผล เมื่อฉันรีสตาร์ทด้วยตนเองในภายหลังมันทำงานได้ดีโดยไม่มีปัญหา การตั้งค่าเดียวกันใน SQL Server2014 ทำงานได้โดยไม่มีปัญหา
Rajesh

เปลี่ยนโหมดเริ่มจาก Automatic เป็น Delay สิ่งนี้จะทำให้แน่ใจว่า SQLService จะทำงานครั้งสุดท้าย (หลังจากดิสก์เมานต์และทำสิ่งนั้น)
Jonathan Fite

6

ฉันคิดว่าฉันพบสาเหตุแล้ว

ส่วนใหญ่มีแนวโน้มที่เป็นปัญหาเนื่องจากการ"เริ่มต้นอย่างรวดเร็ว" ตัวเลือกด้านพลังงาน

เริ่มต้นอย่างรวดเร็ว

เป็นเทคนิค Windows เพื่อลดเวลาบูต ด่วนเริ่มต้นผสมผสานองค์ประกอบของการปิดเย็นและคุณลักษณะไฮเบอร์เนต

ที่นี่คุณสามารถค้นหาบทความเกี่ยวกับข้อดีข้อเสียอีก

ฉันได้ปิดการใช้งานและดูเหมือนว่าปัญหาจะได้รับการแก้ไข


ยิ่งใหญ่ นี่เป็นวิธีหนึ่งในการดู สาเหตุที่แท้จริงคือบริการ SQL บางอย่างไม่ได้เริ่มขึ้นตามเวลาที่คุณเห็นข้อผิดพลาด SQL นี้ พวกเขายังไม่ได้เริ่มเพราะวิธีการตั้งค่าเป็น "เริ่มต้น" โดยเฉพาะถ้าคุณใช้ "เริ่มต้นอย่างรวดเร็ว" สำหรับระบบปฏิบัติการ
Chagbert

3

นี่คือข้อสังเกตของฉันและฉันจะแก้ปัญหาได้อย่างไร (เพื่อประโยชน์ของผู้อื่นที่อาจมีปัญหาเดียวกัน)

  • ฉันใช้อินสแตนซ์ amazon ec2 ที่ใช้เซิร์ฟเวอร์ SQL
  • ฉันมีอุปกรณ์ EBS Block ติดอยู่กับอินสแตนซ์ ec2 ที่แมปกับไดรฟ์ D:
  • ข้อมูลและบันทึกของฉันอยู่ในไดรฟ์ D:
  • เมื่อฉันหยุดอินสแตนซ์ ec2 และนำขึ้นมาในภายหลังฉันมักจะพบข้อผิดพลาดของ "อุปกรณ์ไม่พร้อม" และฐานข้อมูลจะไม่เกิดขึ้น
  • ฉันพยายามตั้งค่าบริการ MSSQLSERVER ด้วย "เริ่มต้นล่าช้า"
  • อย่างไรก็ตามจากบันทึกของเซิร์ฟเวอร์ sql ฉันพบว่าความล่าช้านั้นไม่ได้รับเกียรติและ MSSQLSERVER ก็เริ่มต้นขึ้นพร้อมกับการบู๊ต
  • จากผู้ดูเหตุการณ์ฉันสังเกตเห็นเวลาที่ไดรฟ์ D: แข็งแรง
  • จากบันทึกของเซิร์ฟเวอร์ sql ฉันสังเกตเวลาที่ SQL Server เริ่มต้นฐานข้อมูลผู้ใช้ของฉัน
  • ฉันสังเกตเห็นว่า D: ไดรฟ์ใช้ได้หลังจาก 6 วินาทีในภายหลังเท่านั้น และเห็นได้ชัดว่าข้อผิดพลาด "อุปกรณ์ไม่พร้อม" ปรากฏขึ้น
  • ฉันยังกล่าวด้วยว่า "การเริ่มต้นล่าช้า" ไม่ได้รับเกียรติเนื่องจากมีบริการอื่นที่ชื่อว่า "SQL Server LaunchPad" ซึ่งเริ่มต้นขึ้น "MSSQLSERVER"
  • ฉันไม่ต้องการความสามารถในการวิเคราะห์ของ "Launchpad" ดังนั้นฉันจึงปิดใช้งานบริการนั้น
  • ตอนนี้ "MSSQLSERVER" จะเริ่มต้นด้วยความล่าช้าและสามารถค้นหาไฟล์ D: ไดรฟ์

1

ข้อผิดพลาดทั้งหมดที่ฉันได้รับเมื่อเชื่อมต่อกับ MS SQL อินสแตนซ์เริ่มต้นในเครื่อง (2017) ผ่าน MSSMS คือ:

ระบบปฏิบัติการส่งคืนข้อผิดพลาด 21 (อุปกรณ์ไม่พร้อม) ไปยัง SQL Server ระหว่างการอ่านที่ออฟเซ็ต 0x000000000ae000 ในไฟล์ 'D: \ MSSQL \ DATA \ tempdev.mdf' ข้อความเพิ่มเติมในบันทึกข้อผิดพลาด SQL Server และบันทึกข้อผิดพลาดของระบบปฏิบัติการอาจให้รายละเอียดเพิ่มเติม นี่เป็นเงื่อนไขข้อผิดพลาดระดับระบบที่รุนแรงซึ่งคุกคามความสมบูรณ์ของฐานข้อมูลและต้องแก้ไขทันที ทำการตรวจสอบความสอดคล้องของฐานข้อมูลแบบเต็ม (DBCC CHECKDB) ข้อผิดพลาดนี้อาจเกิดจากหลายปัจจัย สำหรับข้อมูลเพิ่มเติมดู SQL Server Books Online (Microsoft SQL Server ข้อผิดพลาด: 823) สำหรับความช่วยเหลือคลิก: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=823&LinkId=20476

ฉันเริ่มรับสิ่งนี้เมื่อฉันย้าย tempdb ไปยังไดรฟ์ D ใหม่ของฉัน การเริ่ม / หยุดบริการ SQL ลบข้อผิดพลาด ไม่เคยได้รับข้อผิดพลาดนี้เมื่อทุกอย่างอยู่ใน C ทั้งไดรฟ์ของฉันเป็น SSD และเข้ารหัสด้วย Bitlocker ไม่แน่ใจว่าเป็นปัญหาหรือไม่ไดรฟ์ C อาจถูกปลดล็อกเร็วมากเนื่องจากระบบปฏิบัติการต้องการและไดรฟ์ D ถูกปลดล็อคในภายหลัง .

  1. ตามคำตอบของ Max ( https://dba.stackexchange.com/a/175115 ) การปิดใช้งาน "Fast Startup" ช่วยแก้ปัญหาของฉันได้ ตามบทความลิงก์สูงสุดไปที่ ( https://www.howtogeek.com/243901/the-pros-and-cons-of-windows-10s-fast-startup-mode/ ) มันค่อนข้างคลุมเครือในการค้นหาใน " เลือกสิ่งที่ปุ่มเพาเวอร์ทำ "จากนั้น" เปลี่ยนการตั้งค่าที่ไม่สามารถใช้งานได้ในปัจจุบัน "
  2. ซึ่งแตกต่างจากคำตอบของ Venvig ( https://dba.stackexchange.com/a/226115 ) การตั้งค่าบริการ "SQL Server" เป็น Startup Type = "Automatic (Delayed Start)" ก็แก้ไขปัญหาของฉันได้ (ด้วย Windows'Fast Startup อีกครั้ง - เปิดใช้งาน)

0

ฉันเจอปัญหาเดียวกันหลายครั้งและคิดว่าฉันควรแบ่งปันวิธีแก้ปัญหาของฉัน (แม้ว่าจะมีคำตอบที่ให้ไปแล้ว):

ดังนั้นฉันมีสองอินสแตนซ์ของ SQL (SQL 2008 และ SQL 2017) ข้อผิดพลาดไม่ปรากฏในอินสแตนซ์ของ SQL08 แต่ใน SQl17 สิ่งนี้เกิดจาก "ข้อมูลบัญชี" ที่ระบุในระหว่างการติดตั้ง / ตั้งค่าของอินสแตนซ์ SQL แต่ละรายการ:

ป้อนคำอธิบายรูปภาพที่นี่

สามารถดูได้ภายใต้บริการของ Windows SQL08 ถูกตั้งค่าให้ใช้ "บัญชีระบบภายในเครื่อง" ในขณะที่ SQL17 ที่ล้มเหลวถูกตั้งค่าเป็น "NETWORK ACCOUNT" ระหว่างการตั้งค่า ดังนั้นเพียงแค่เปลี่ยนและเริ่มบริการ SQL ใหม่ที่นี่ (หรือรีสตาร์ทอินสแตนซ์ในเบราว์เซอร์ SQL)

ส่วนที่สองของปัญหานี้ไม่ซ้ำกับ SQL Server 2017 CTP 2.0 เมื่อใช้ SQL Server Management Studio V17 ในกรณีที่ SMO เปลี่ยนไปใช้ " sys.dm_os_enumerate_fixed_drives " แทนที่จะเป็น " xp_fixeddrives " ในพื้นที่ว่างของคุณ . หากต้องการแก้ไขปัญหานี้ให้ไปที่อุปกรณ์ผู้จัดการและปิดใช้งานไดรฟ์ที่อ้างถึงชั่วคราว (ในกรณีของฉันคือไดรฟ์ "G" ซึ่งเป็นเพียงไดรฟ์ DVD-ROM ของฉัน)


0

ปัญหานี้ก็ทำให้ฉันหงุดหงิดเช่นกัน ฉันมี 5 dbs ติดอยู่กับอินสแตนซ์ของ SQL Server ของฉัน 3 ซึ่งทำงานได้ดี แต่ 2 ที่บ่น

ระบบปฏิบัติการส่งคืนข้อผิดพลาด 21 (อุปกรณ์ไม่พร้อม) ไปยัง SQL Server ระหว่างการอ่านที่ออฟเซ็ต 0x00000000204000 ในไฟล์ 'E: \ xxxxxxxx.mdf'

นี่คือทางออกของฉัน

  1. เปิดServices.mscค้นหาบริการที่เรียกว่าSQL Server (ชื่ออินสแตนซ์) , คลิกขวาและรีสตาร์ทมัน
  2. กลับไปที่ ssms รีเฟรช db ของคุณและสิ่งต่างๆควรใช้งานได้

ในหมายเหตุด้านข้างฉันลองใช้ db ออฟไลน์ / วิธีออนไลน์ มันไม่ทำงานในกรณีของฉัน กำลังเริ่มต้นบริการ sqlserver อย่างฉลาดทำงานได้ดี นี่อาจเป็นปัญหาสำหรับผู้ที่มีส่วนได้ส่วนเสียในการทำออฟไลน์ทั้งหมดสูงเกินไป อย่างไรก็ตามหากคุณเพียงแค่ทำการพัฒนาในท้องถิ่นเช่นฉันแล้ววิธีนี้ควรจะดี

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