İşletim sistemi 21 numaralı hata döndürdü (Aygıt hazır değil.)


13

Windows'u her yeniden başlattığımda, bazı veritabanları için bu hatayı alıyorum:

İşletim sistemi 21 numaralı hata döndürdü (Aygıt hazır değil.)

  1. Diski kontrol ettim chkdsk /r- kötü sektör yok.
  2. Hatasız DBCC CHECKDByürüttüm:

    *(CHECKDB found 0 allocation errors and 0 consistency errors in database)* 
  3. SQL Server'ı yeniden başlatırsam hatalar kaybolur.

Windows 10 ve SQL Server 2016 Express.

Yanıtlar:


16

Pencereleri her yeniden başlattığımda, bazı veritabanları için bu hata ortaya çıkıyor. (İşletim Sistemi Hatası 21 - Cihaz hazır değil)

Bunun nedeni, bir diskin çevrimdışı olması veya SQL Server başlatıldığı sırada çevrimiçi olmaması veya SQL Server çevrimiçi olduktan sonra geçiş durumları olmasıdır.

SQL Server'ı yeniden başlatırsam hatalar kaybolur

Evet, çünkü veritabanları SQL Server içine yeniden monte edilmiştir. Ayrıca çevrimdışı -> veritabanını çevrimiçi de olabilir ve disk aygıtının sabit olduğu varsayılarak, çalışır.

Bu, bir veritabanına bir disk yerleştirerek, diski devre dışı bırakarak, bir seçme sorgusu çalıştırarak (hatayı almak için), diski yeniden çevrimiçi duruma getirerek ve seçimin hala aynı hatayla başarısız olduğunu fark ederek bir test ortamında kolayca çoğaltılabilir. Veritabanının tekrar çalışması ve işletim sistemi Hatası 21'i almaması için yeniden monte edilmesi gerekir.

Ne yapmalısın?

Birinin neden başlangıçta çevrimiçi olmayacağını veya neden çevrimdışı hale geldiğini (herhangi bir durum geçişi) veya neden pencerelere hazır olduğunu ancak gerçekten değil (belki de diğer sürücülerin yüklenmesi gerektiğini anlamak için bazı pencereler izlemesini isteyin o).

Ayrıca, herhangi bir disk filtresi sürücüsünün virüsten koruma, ana bilgisayar saldırı korumaları vb.


Benzer bir sorun vardı ve SQLServer / SqlLaunchPad hizmetlerini 5 dakika sonra yeniden başlatmak için bir komut dosyası ekledim, ancak bu çalışmıyor. Daha sonra manuel olarak yeniden başlattığımda sorunsuz çalışıyor. SQL Server2014'teki aynı yapılandırma sorunsuz çalışıyor
Rajesh

Başlangıç ​​modunu Otomatik yerine Gecikme olarak değiştirin. Bu, SQLService'in en son şekilde çalışmasını sağlayacaktır (diskler monte edildikten ve işlerini yaptıktan sonra).
Jonathan Fite

7

Sanırım sebebini buldum.

Büyük olasılıkla sorun "Hızlı başlatma" güç seçeneklerinden kaynaklanmaktadır .

Hızlı Başlangıç

Önyükleme süresini azaltmak için bir Windows tekniği; Hızlı Başlangıç, soğuk kapatma ve hazırda bekletme özelliğinin öğelerini birleştirir .

Burada artıları ve eksileri hakkında başka bir makale bulabilirsiniz

Devre dışı bıraktım ve sorun çözülmüş görünüyor.


Harika. Bu, ona bakmanın bir yoludur. Asıl nedeni, bazı SQL hizmetlerinin bu SQL hatasını gördüğünüzde başlatılmamış olmasıdır. Özellikle işletim sistemi için "Hızlı Başlangıç" kullanıyorsanız, "başlangıç" olarak nasıl ayarlandıkları nedeniyle başlamadılar.
Chagbert

3

Bunlar benim gözlemlerim ve problemi nasıl çözdüğüm (aynı problemi olan diğerlerinin yararına)

  • Sql sunucusu çalıştıran amazon ec2 örneği kullanıyordum.
  • D2 sürücüsüyle eşleştirilen ec2 örneğine bağlı bir EBS Block aygıtı vardı.
  • Verilerim ve günlüklerim D: sürücüsündeydi.
  • Ec2 örneğini durdurup daha sonra açtığımda, her zaman "aygıt hazır değil" hatasıyla karşılaştım ve veritabanları gelmeyecekti.
  • MSSQLSERVER hizmetini "Gecikmeli başlatma" ile ayarlamayı denedim.
  • Ancak, sql sunucu günlüklerinden gecikmenin onurlandırılmadığını ve MSSQLSERVER önyükleme ile birlikte başladığını gördüm.
  • Olay görüntüleyiciden D: sürücüsünün sağlıklı olduğu zamanı gözlemledim.
  • Sql sunucu günlüklerinden SQL Server'ın kullanıcı veritabanımı başlattığı zamanı not ettim.
  • D: sürücünün sadece 6 saniye sonra kullanılabileceğini gözlemledim; ve açıkçası "Cihaz hazır değil" hatası görünüyor.
  • "MSSQLSERVER" programını başlatan "SQL SERVER LaunchPad" adında başka bir hizmet olduğu için "Gecikmeli başlatma" seçeneğinin onurlandırılmadığını da belirttim.
  • "Launchpad" in Analytics özelliğine ihtiyacım yok. Bu hizmeti devre dışı bıraktım.
  • Şimdi "MSSQLSERVER" bir gecikme ile başlar ve D: sürücü dosyalarını bulabilirsiniz.

1

MSSMS aracılığıyla yerel varsayılan MS SQL örneğime (2017) bağlanırken aldığım tam hata:

İşletim sistemi, 'D: \ MSSQL \ DATA \ tempdev.mdf' dosyasındaki 0x000000000ae000 değerindeki bir okuma sırasında SQL Server'a 21 hatası verdi (aygıt hazır değil.). SQL Server hata günlüğündeki ve işletim sistemi hata günlüğündeki ek iletiler daha fazla ayrıntı sağlayabilir. Bu, veritabanı bütünlüğünü tehdit eden ve derhal düzeltilmesi gereken ciddi bir sistem düzeyi hata durumudur. Tam bir veritabanı tutarlılık denetimi (DBCC CHECKDB) tamamlayın. Bu hata birçok faktörden kaynaklanabilir; daha fazla bilgi için, bkz. Çevrimiçi SQL Server Kitapları. (Microsoft SQL Server, Hata: 823) Yardım için şu bağlantıyı tıklatın: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=823&LinkId=20476

Tempdb'imi yeni D sürücüme taşıdıktan sonra bunu almaya başladım. SQL hizmetinin başlatılması / durdurulması hatayı kaldırır. Her şey açıkken bu hatayı asla almadım. Her iki sürücüm de SSD ve Bitlocker ile şifrelenmiş, sorunun olup olmadığından emin değilim, belki işletim sisteminin ihtiyaç duyduğu için C sürücüsünün kilidi çok erken ve D sürücüsünün kilidi daha sonra açılır .

  1. Max'in cevabına göre ( https://dba.stackexchange.com/a/175115 ), "Hızlı Başlangıç" özelliğini devre dışı bırakmak sorunumu çözdü. Max'in ( https://www.howtogeek.com/243901/the-pros-and-cons-of-windows-10s-fast-startup-mode/ ) bağlantısını yaptığı makaleye göre , " Güç düğmelerinin ne yapacağını seçin "ve ardından" Şu anda kullanılamayan ayarları değiştirin ".
  2. Venvig'in cevabından ( https://dba.stackexchange.com/a/226115 ) farklı olarak , "SQL Server" hizmetini Başlangıç ​​Türü = "Otomatik (Gecikmeli Başlatma)" olarak ayarlamak da sorunumu çözdü (Windows'Fast Startup yeniden etkin).

0

Aynı soruna birçok kez rastladım ve çözümümü paylaşmam gerektiğini düşündüm (zaten verilen cevaplara rağmen):

İki SQL örneğim var (SQL 2008 ve SQL 2017). Hata SQL08 örneğimde değil, SQl17'de gösteriliyor. Bu, her SQL örneğinin yüklenmesi / kurulumu sırasında sağlanan "hesap kimlik bilgileri" nden kaynaklanır:

resim açıklamasını buraya girin

Bu, Windows Hizmetleri altında görülebilir. SQL08, "Yerel Sistem Hesabı" kullanacak şekilde ayarlanmış, başarısız SQL17 ise kurulum sırasında "AĞ HESABI" olarak ayarlanmıştır. Yani bunu değiştirin ve burada SQL hizmetini yeniden başlatın (veya örneği SQL tarayıcısında yeniden başlatın).

Bu sorunun ikinci bölümü kullanırken, SQL Server Management Studio V17 bu durumda SMO "kullanarak geçiş SQL Server 2017 CTP 2.0 özgüdür sys.dm_os_enumerate_fixed_drives " yerine eski " xp_fixeddrives yerel diskinizde boş alan bilgi almak için" . Bu sorunu çözmek için, CİHAZ YÖNETİCİSİ'ne gidin ve belirtilen sürücüyü geçici olarak devre dışı bırakın (benim durumumda sadece DVD-ROM sürücüm olan "G" sürücüsü).


0

Bu sorun beni de rahatsız etti. SQL Server örneğime takılan 5 dbs var, bunlardan 3'ü iyi çalışıyor, ancak 2 tanesi şikayet ediyor

İşletim sistemi, 'E: \ xxxxxxxx.mdf' dosyasındaki 0x00000000204000 numaralı okunan okuma sırasında SQL Server'a 21 numaralı hata (aygıt hazır değil.) Döndürdü

İşte benim çözümüm.

  1. Services.msc'yi açın, SQL Server (örnek adı) adlı hizmeti bulun , sağ tıklayın ve yeniden başlatın .
  2. SSMS'ye geri dönün, db'nizi yenileyin ve işler işe yarayacaktır.

Bir yan not, ben çevrimdışı / çevrimiçi yöntem db alarak denediniz. Benim durumumda işe yaramadı. Sqlserver hizmetini yeniden başlatan kaba kuvvet güzel çalıştı. Bu, tüm dbs çevrimdışı alma hissesi çok yüksek olanlar için bir sorun olabilir. Ancak, sadece benim gibi yerel kalkınma yapıyorsanız, bu çözüm iyi olmalıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.