Hệ điều hành trả về lỗi 21 (Thiết bị chưa sẵn sàng.)


12

Mỗi lần tôi khởi động lại Windows, đối với một số cơ sở dữ liệu tôi gặp lỗi này:

Hệ điều hành trả về lỗi 21 (Thiết bị chưa sẵn sàng.)

  1. Tôi đã kiểm tra đĩa với chkdsk /r- không có thành phần xấu.
  2. Tôi đã thực hiện DBCC CHECKDBkhông có lỗi:

    *(CHECKDB found 0 allocation errors and 0 consistency errors in database)* 
  3. Nếu tôi khởi động lại SQL Server, các lỗi sẽ biến mất.

Windows 10 và SQL Server 2016 Express.

Câu trả lời:


13

Mỗi lần tôi khởi động lại windows, đối với một số cơ sở dữ liệu sẽ xuất hiện lỗi này. (Lỗi hệ điều hành 21 - Thiết bị chưa sẵn sàng)

Điều này là do đĩa ngoại tuyến hoặc không trực tuyến tại thời điểm SQL Server khởi động hoặc đã chuyển trạng thái sau khi SQL Server trực tuyến.

3.Nếu tôi khởi động lại SQL Server, các lỗi sẽ biến mất

Có, bởi vì các cơ sở dữ liệu đã được gửi lại bên trong SQL Server. Bạn cũng có thể ngoại tuyến-> trực tuyến cơ sở dữ liệu và nó sẽ hoạt động, giả sử thiết bị đĩa đã được sửa.

Điều này có thể dễ dàng được sao chép trong môi trường kiểm tra bằng cách đặt cơ sở dữ liệu vào đĩa, vô hiệu hóa đĩa, chạy truy vấn chọn (để nhận lỗi), đưa đĩa trở lại trực tuyến và nhận thấy rằng lựa chọn vẫn thất bại với cùng một lỗi. Cơ sở dữ liệu sẽ cần phải được kết nối lại để hoạt động trở lại và không gặp Lỗi hệ điều hành 21.

Những gì bạn nên làm?

Có ai đó thực hiện một số dấu vết cửa sổ để tìm hiểu lý do tại sao ban đầu nó không trực tuyến hoặc tại sao nó lại ngoại tuyến (bất kỳ chuyển đổi trạng thái nào) hoặc tại sao nó hiển thị sẵn sàng cho các cửa sổ nhưng thực sự không (có thể các trình điều khiển khác cần được tải cho nó).

Ngoài ra, hãy kiểm tra bất kỳ trình điều khiển bộ lọc đĩa nào được cập nhật để biết những thứ như chống vi-rút, bảo vệ xâm nhập máy chủ, v.v., vì những trình điều khiển này cũng có thể đang chặn dịch vụ / khởi động / trạng thái.


Tôi gặp vấn đề tương tự và đã thêm một tập lệnh để khởi động lại dịch vụ SQLServer / SqlLaunchPad sau 5 phút, nhưng điều đó không hiệu quả. Khi tôi tự khởi động lại sau đó nó hoạt động tốt mà không có vấn đề. Cấu hình tương tự trong SQL Server2014 hoạt động mà không gặp sự cố
Rajesh

Thay đổi chế độ bắt đầu từ Tự động sang Trì hoãn. Điều này sẽ đảm bảo rằng SQLService xuất hiện lần cuối (sau khi các ổ đĩa gắn kết và thực hiện công việc của chúng).
Jonathan Fite

6

Tôi nghĩ rằng tôi đã tìm thấy nguyên nhân.

Nhiều khả năng vấn đề là do tùy chọn năng lượng "Khởi động nhanh" .

Khởi động nhanh

Đó là một kỹ thuật Windows để giảm thời gian khởi động; Khởi động nhanh kết hợp các yếu tố của tắt máy lạnh và tính năng ngủ đông .

Ở đây bạn có thể tìm thấy một bài viết khác về ưu và nhược điểm

Tôi đã vô hiệu hóa nó và vấn đề dường như được giải quyết.


Tuyệt quá. Đây là một cách nhìn vào nó. Nguyên nhân thực sự là một số dịch vụ SQL chưa bắt đầu khi bạn gặp lỗi SQL này. Họ chưa bắt đầu vì cách họ được đặt thành "khởi động", đặc biệt nếu bạn thực sự đang sử dụng "Khởi động nhanh" cho HĐH.
Chagbert

3

Đây là những quan sát của tôi và cách tôi giải quyết vấn đề (vì lợi ích của những người khác có thể có cùng vấn đề)

  • Tôi đã sử dụng ví dụ amazon ec2 chạy máy chủ Sql.
  • Tôi đã có một thiết bị Khối EBS được gắn vào phiên bản ec2, được ánh xạ tới ổ D :.
  • Dữ liệu và nhật ký của tôi nằm trong ổ D :.
  • Khi tôi dừng phiên bản ec2 và đưa nó lên sau, tôi luôn gặp phải lỗi "thiết bị chưa sẵn sàng" và cơ sở dữ liệu sẽ không xuất hiện.
  • Tôi đã thử cài đặt dịch vụ MSSQLSERVER với "Khởi động trễ".
  • Tuy nhiên, từ nhật ký máy chủ sql tôi thấy rằng độ trễ không được thực hiện và MSSQLSERVER đã khởi động ngay cùng với khởi động.
  • Từ người xem sự kiện, tôi đã quan sát thời gian mà ổ D: trở nên khỏe mạnh.
  • Từ nhật ký máy chủ sql, tôi lưu ý thời gian SQL Server khởi động cơ sở dữ liệu người dùng của tôi.
  • Tôi quan sát thấy rằng, ổ D: chỉ khả dụng sau 6 giây sau; và rõ ràng là lỗi "Thiết bị chưa sẵn sàng" xuất hiện.
  • Tôi cũng lưu ý rằng "Khởi động trễ" không được vinh danh vì có một dịch vụ khác có tên "SQL SERVER LaunchPad" khởi động "MSSQLSERVER".
  • Tôi không cần khả năng Analytics của "Launchpad". Vì vậy, tôi đã vô hiệu hóa dịch vụ đó.
  • Bây giờ "MSSQLSERVER" khởi động với độ trễ và có thể tìm thấy các tệp ổ đĩa D :.

1

Lỗi đầy đủ tôi gặp phải khi kết nối với phiên bản MS SQL mặc định cục bộ (2017) qua MSSMS là:

Hệ điều hành đã trả về lỗi 21 (Thiết bị chưa sẵn sàng.) Cho SQL Server trong khi đọc ở offset 0x000000000ae000 trong tệp 'D: \ MSSQL \ DATA \ tempdev.mdf'. Thông báo bổ sung trong nhật ký lỗi SQL Server và nhật ký lỗi hệ điều hành có thể cung cấp chi tiết hơn. Đây là một tình trạng lỗi cấp hệ thống nghiêm trọng đe dọa tính toàn vẹn của cơ sở dữ liệu và phải được sửa chữa ngay lập tức. Hoàn thành kiểm tra tính nhất quán cơ sở dữ liệu đầy đủ (DBCC CHECKDB). Lỗi này có thể được gây ra bởi nhiều yếu tố; để biết thêm thông tin, hãy xem SQL Server Books Online. (Microsoft SQL Server, Lỗi: 823) Để được trợ giúp, hãy nhấp: http://go.microsoft.com/fwlink?ProdName=Microsoft%20Query%20Server&EvtSrc=MSQueryServer&EvtID=823&LinkId=20476

Tôi bắt đầu nhận được điều này khi tôi chuyển tempdb sang ổ D mới. Thực hiện bắt đầu / dừng dịch vụ SQL sẽ loại bỏ lỗi. Không bao giờ gặp lỗi này khi mọi thứ đều xảy ra C. Cả hai ổ đĩa của tôi đều là SSD và được mã hóa bằng Bitlocker, không chắc đó có phải là sự cố không, có thể ổ C được mở khóa rất sớm vì hệ điều hành cần nó và ổ D được mở khóa sau .

  1. Theo câu trả lời của Max ( https://dba.stackexchange.com/a/175115 ), việc vô hiệu hóa "Khởi động nhanh" đã khắc phục vấn đề của tôi. Theo bài viết, Max liên kết đến ( https://www.howtogeek.com/243901/the-pros-and-cons-of-windows-10s-fast-startup-mode/ ) thật khó hiểu khi tìm thấy, trong " Chọn những gì các nút nguồn làm "và sau đó" Thay đổi cài đặt hiện không khả dụng ".
  2. Không giống như câu trả lời của Venvig ( https://dba.stackexchange.com/a/226115 ), đặt dịch vụ "Máy chủ SQL" thành Loại khởi động = "Tự động (Khởi động trễ) cũng đã khắc phục sự cố của tôi (với Khởi động lại Windows'Fast kích hoạt).

0

Tôi đã gặp cùng một vấn đề nhiều lần và nghĩ rằng tôi nên chia sẻ giải pháp của mình (mặc dù câu trả lời đã được cung cấp):

Vì vậy, tôi có hai phiên bản SQL (SQL 2008 và SQL 2017). Lỗi không biểu hiện trong Trường hợp SQL08 của tôi mà trên SQl17. Điều này được gây ra bởi "Thông tin tài khoản" được cung cấp trong quá trình Cài đặt / thiết lập từng phiên bản SQL:

nhập mô tả hình ảnh ở đây

Điều này có thể được nhìn thấy trong Windows Services. SQL08 được đặt để sử dụng "Tài khoản hệ thống cục bộ" trong khi SQL17 bị lỗi được đặt thành "TÀI KHOẢN MẠNG" trong khi thiết lập. Vì vậy, chỉ cần thay đổi điều đó và khởi động lại dịch vụ SQL tại đây (hoặc khởi động lại phiên bản trong trình duyệt SQL).

Phần thứ hai của vấn đề này là duy nhất đối với SQL Server 2017 CTP 2.0 khi sử dụng SQL Server Management Studio V17, trong trường hợp SMO chuyển sang sử dụng " sys.dm_os_enum Cả_fixed_drive " thay vì " xp_fixeddrive " cũ để lấy thông tin không gian trống của đĩa cục bộ của bạn . Để khắc phục điều này, hãy truy cập THIẾT BỊ QUẢN LÝ và tạm thời vô hiệu hóa ổ đĩa được trích dẫn (trong trường hợp của tôi là ổ đĩa "G" chỉ là ổ đĩa DVD-ROM của tôi).


0

Vấn đề này đã làm tôi khó chịu. Tôi có 5 dbs được nối vào phiên bản SQL Server của tôi, 3 trong số đó đang hoạt động tốt, nhưng 2 trong số đó phàn nàn

Hệ điều hành đã trả về lỗi 21 (Thiết bị chưa sẵn sàng.) Cho SQL Server trong khi đọc ở offset 0x00000000204000 trong tệp 'E: \ xxxxxxxx.mdf'

Đây là giải pháp của tôi.

  1. Bật Services.msc , xác định vị trí dịch vụ có tên SQL Server (tên ví dụ) , nhấp chuột phải và khởi động lại nó.
  2. Quay trở lại ssms, làm mới db của bạn và mọi thứ sẽ hoạt động.

Bên cạnh đó, tôi đã thử dùng phương thức ngoại tuyến / trực tuyến db. Nó không hoạt động trong trường hợp của tôi. Brute Force khởi động lại dịch vụ sqlserver hoạt động độc đáo. đây có thể là một vấn đề đối với những người có tỷ lệ lấy tất cả các dbs ngoại tuyến quá cao. Tuy nhiên, nếu bạn chỉ đang phát triển địa phương như tôi, thì giải pháp này sẽ ổn thôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.