Sistem operasi mengembalikan kesalahan 21 (Perangkat tidak siap.)

13

Setiap kali saya reboot Windows, untuk beberapa database saya mendapatkan kesalahan ini:

Sistem operasi mengembalikan kesalahan 21 (Perangkat tidak siap.)

  1. Saya memeriksa disk dengan chkdsk /r- tidak ada bad sector.
  2. Saya dieksekusi DBCC CHECKDBtanpa kesalahan:

    *(CHECKDB found 0 allocation errors and 0 consistency errors in database)* 
  3. Jika saya me-restart SQL Server kesalahan hilang.

Windows 10 dan SQL Server 2016 Express.

Maks
sumber

Jawaban:

14

Setiap kali saya reboot windows, untuk beberapa database keluar kesalahan ini. (Kesalahan OS 21 - Perangkat tidak siap)

Ini karena disk sedang offline atau tidak sedang online baik pada saat SQL Server dimulai, atau telah beralih status setelah SQL Server telah online.

3.Jika saya me-restart SQL Server kesalahan hilang

Ya, karena basis data telah di-remount di dalam SQL Server. Anda juga dapat offline-> online database juga dan itu akan berfungsi, dengan asumsi perangkat disk telah diperbaiki.

Ini dapat dengan mudah direproduksi dalam lingkungan pengujian dengan meletakkan basis data pada disk, menonaktifkan disk, menjalankan kueri pemilihan (untuk mendapatkan kesalahan), membawa disk kembali online dan memperhatikan bahwa pilih masih gagal dengan kesalahan yang sama. Basis data perlu di-remount agar dapat berfungsi kembali dan tidak mendapatkan OS Error 21.

Apa yang harus kamu lakukan

Mintalah seseorang melakukan penelusuran windows untuk mencari tahu mengapa itu tidak datang online pada awalnya atau mengapa itu akan offline (setiap transisi negara) atau mengapa itu menunjukkan siap ke windows tetapi sebenarnya tidak (mungkin driver lain perlu dimuat untuk Itu).

Selain itu, periksa semua driver filter disk yang mutakhir untuk hal-hal seperti anti-virus, perlindungan intrusi host, dll., Karena mereka mungkin juga memblokir layanan / startup / keadaan.

Sean Gallardy
sumber
Saya memiliki masalah yang sama dan menambahkan skrip untuk me-restart layanan SQLServer / SqlLaunchPad setelah 5 menit, tetapi itu tidak berhasil. Ketika saya me-restart nanti secara manual maka itu berfungsi dengan baik tanpa masalah. Konfigurasi yang sama di SQL Server2014 bekerja tanpa masalah
Rajesh
Ubah mode mulai dari Otomatis ke Tunda. Ini akan memastikan bahwa SQLService datang terakhir (setelah disk mount dan melakukan hal mereka).
Jonathan Fite
6

Saya pikir saya telah menemukan penyebabnya.

Kemungkinan besar masalahnya adalah karena opsi daya "Start cepat" .

Startup Cepat

Ini adalah teknik Windows untuk mengurangi waktu boot; Fast Startup menggabungkan elemen cold shutdown dan fitur hibernate .

Di sini Anda dapat menemukan artikel lain tentang pro dan kontra

Saya telah menonaktifkannya dan masalahnya tampaknya telah diatasi.

Maks
sumber
Bagus. Ini adalah salah satu cara untuk melihatnya. Penyebab sebenarnya adalah bahwa beberapa layanan SQL belum dimulai pada saat Anda melihat kesalahan SQL ini. Mereka belum memulai karena cara mereka diatur ke "startup" terutama jika Anda memang menggunakan "Fast Startup" untuk OS.
Chagbert
3

Ini adalah pengamatan saya dan bagaimana saya memecahkan masalah (untuk kepentingan orang lain yang mungkin memiliki masalah yang sama)

  • Saya menggunakan amazon ec2 misalnya menjalankan Sql server.
  • Saya memiliki perangkat EBS Block yang terpasang pada instance ec2, yang dipetakan ke drive D :.
  • Data dan log saya ada di drive D :.
  • Ketika saya menghentikan instance EC2 dan memunculkannya nanti, saya selalu mengalami kesalahan "perangkat tidak siap" dan basis data tidak akan muncul.
  • Saya mencoba mengatur layanan MSSQLSERVER dengan "Delayed startup".
  • Namun, dari log server sql saya menemukan bahwa penundaan itu tidak dihormati dan MSSQLSERVER memulai tepat bersamaan dengan boot.
  • Dari eventviewer saya mengamati waktu di mana drive D: menjadi sehat.
  • Dari log server sql, saya mencatat waktu di mana SQL Server memulai database pengguna saya.
  • Saya mengamati bahwa, drive D: hanya tersedia setelah 6 detik kemudian; dan jelas kesalahan "Perangkat tidak siap" muncul.
  • Saya juga mencatat bahwa "Delayed start" tidak dihormati karena ada layanan lain bernama "SQL SERVER LaunchPad" yang memulai "MSSQLSERVER".
  • Saya tidak memerlukan kemampuan Analytics dari "Launchpad". Jadi saya menonaktifkan layanan itu.
  • Sekarang "MSSQLSERVER" dimulai dengan penundaan dan dapat menemukan file drive D :.
VenVig
sumber
1

Kesalahan penuh yang saya dapatkan ketika menghubungkan ke instance MS SQL default lokal saya (2017) melalui MSSMS adalah:

Sistem operasi mengembalikan kesalahan 21 (Perangkat tidak siap.) Ke SQL Server selama pembacaan pada offset 0x000000000ae000 dalam file 'D: \ MSSQL \ DATA \ tempdev.mdf'. Pesan tambahan dalam log kesalahan SQL Server dan log kesalahan sistem operasi dapat memberikan lebih detail. Ini adalah kondisi kesalahan tingkat sistem yang parah yang mengancam integritas basis data dan harus segera diperbaiki. Lengkapi pemeriksaan konsistensi database lengkap (DBCC CHECKDB). Kesalahan ini dapat disebabkan oleh banyak faktor; untuk informasi lebih lanjut, lihat SQL Server Books Online. (Microsoft SQL Server, Kesalahan: 823) Untuk bantuan, klik: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=823&LinkId=20476

Saya mulai mendapatkan ini setelah saya memindahkan tempdb ke drive D baru saya. Melakukan start / stop dari layanan SQL menghilangkan kesalahan. Tidak pernah mendapatkan kesalahan ini ketika semuanya dalam C. Kedua drive saya adalah SSD dan dienkripsi dengan Bitlocker, tidak yakin apakah itu bisa menjadi masalah, mungkin drive C dibuka sangat awal karena sistem operasi membutuhkannya, dan drive D akan dibuka kunci nanti .

  1. Sesuai jawaban Max ( https://dba.stackexchange.com/a/175115 ), menonaktifkan "Fast Startup" memperbaiki masalah saya. Sesuai artikel, Max link ke ( https://www.howtogeek.com/243901/the-pros-and-cons-of-windows-10s-fast-startup-mode/ ) cukup tidak jelas untuk menemukan, di " Pilih apa yang dilakukan tombol daya "dan kemudian" Ubah pengaturan yang saat ini tidak tersedia ".
  2. Tidak seperti jawaban Venvig ( https://dba.stackexchange.com/a/226115 ), mengatur layanan "SQL Server" ke Startup Type = "Automatic (Delayed Start)" juga memperbaiki masalah saya (dengan Windows'Fast Startup kembali diaktifkan).
Thierry_S
sumber
0

Saya telah menemukan masalah yang sama berkali-kali dan berpikir saya harus membagikan solusi saya (terlepas dari jawaban yang sudah disediakan):

Jadi saya punya dua contoh SQL (SQL 2008 dan SQL 2017). Kesalahan tidak terwujud dalam SQL08 Instance saya, tetapi pada SQl17. Ini disebabkan oleh "Kredensial akun" yang diberikan selama Instalasi / pengaturan setiap contoh SQL:

masukkan deskripsi gambar di sini

Ini dapat dilihat di bawah Layanan Windows. SQL08 ditetapkan untuk menggunakan "Akun Sistem Lokal" sementara SQL17 yang gagal ditetapkan ke "ACCOUNT JARINGAN" selama penyiapan. Jadi ubah saja dan mulai ulang layanan SQL di sini (atau mulai ulang contoh di browser SQL).

Bagian kedua dari masalah ini adalah unik untuk SQL Server 2017 CTP 2.0 saat menggunakan SQL Server Management Studio V17 dalam hal ini SMO beralih menggunakan " sys.dm_os_enumerate_fixed_drives " alih-alih " xp_fixeddrives " lama untuk mendapatkan informasi ruang kosong dari disk lokal Anda . Untuk mengatasinya, buka DEVICE MANAGER dan nonaktifkan sementara drive yang dikutip (dalam kasus saya adalah drive "G" yang hanya drive DVD-ROM saya).

Chagbert
sumber
0

Masalah ini juga membuat saya jengkel. Saya punya 5 dbs terhubung ke contoh SQL Server saya, 3 di antaranya bekerja dengan baik, tetapi 2 di antaranya mengeluh

Sistem operasi mengembalikan kesalahan 21 (Perangkat tidak siap.) Ke SQL Server saat membaca di offset 0x000000002020000 dalam file 'E: \ xxxxxxxx.mdf'

Ini solusinya.

  1. Aktifkan Services.msc , cari layanan yang disebut SQL Server (nama contoh) , klik kanan dan mulai ulang .
  2. Kembali ke ssms, segarkan db Anda, dan semuanya akan berfungsi.

Di samping catatan, saya memang mencoba mengambil metode db offline / online. Tidak berhasil dalam kasus saya. Brute force memulai kembali layanan sqlserver bekerja dengan baik. ini mungkin menjadi masalah bagi mereka yang sahamnya mengambil semua dbs offline terlalu tinggi. Namun, jika Anda hanya melakukan pengembangan lokal seperti saya, maka solusi ini seharusnya baik-baik saja.

Ji_in_coding
sumber