DBCC CheckDB 作業系統回傳錯誤21(設備尚未準備好。)

DBCC CheckDB 作業系統回傳錯誤21(設備尚未準備好。)

在檔案「E:\SQL Database\S*****d\NewAdvWorks.mdf」中的偏移量 0x0000000001c000 處讀取時,作業系統向 SQL Server 傳回錯誤 21(裝置未就緒。)。 SQL Server 錯誤日誌和系統事件日誌中的其他訊息可能會提供更多詳細資訊。這是嚴重的系統級錯誤情況,威脅資料庫完整性,必須立即修正。完成完整的資料庫一致性檢查 (DBCC CHECKDB)。此錯誤可能由多種因素引起;有關詳細信息,請參閱 SQL Server 線上叢書。

答案1

對我有用的:

alter database [database_name] set offline

....等幾秒鐘...

alter database [database_name] set online 

這比重新啟動 SQL Server 更好,因為重新啟動 SQL Server 會使所有資料庫離線(而不僅僅是無法存取的資料庫)。

答案2

我今天遇到了同樣的錯誤。重新啟動 SQL Server 服務即可解決此問題。

SQL Server 錯誤日誌和 Windows 事件日誌顯示相同的錯誤:

在讀取檔案「blah.mdf」中偏移量 0x00000000026000 時,作業系統向 SQL Server 傳回錯誤 21(裝置未就緒。)。 SQL Server 錯誤日誌和系統事件日誌中的其他訊息可能會提供更多詳細資訊。這是嚴重的系統級錯誤情況,威脅資料庫完整性,必須立即修正。完成完整的資料庫一致性檢查 (DBCC CHECKDB)。此錯誤可能由多種因素引起;有關詳細信息,請參閱 SQL Server 線上叢書。

和:

錯誤:823,嚴重性:24,狀態:2

閱讀 Robert van den Berg 的答案後,如果您還有其他需要保持在線的資料庫,我會嘗試先使資料庫離線,然後再在線。

答案3

首先閱讀錯誤訊息中指示的日誌。

然後嘗試重置伺服器,然後DBCC CheckDB再次運行。

答案4

就我而言,我能夠使用

exec sp_detach_db [dbName];

其次是

exec sp_attach_db [dbName] , @filename1 = N'U:\mdf\dbName.mdf' , @filename2 = N'G:\ldf\dbName_log.ldf';

對於 SQL 2017 下的 30 個資料庫。

我在開始分開之前使用過 select db_name(database_id), * from sys.master_files ,因此我可以編寫附加過程的腳本,因為我有 30 個處於這種狀態的資料庫。

我在我的案例中找到了催化劑。前一天晚上我已經「擴展」了兩卷。磁碟管理報告當時無法擴充磁碟區。我決定等待維護時段再試一次,目前還沒有錯誤。

五小時後,開始使用 VSS 進行備份。我確信失敗的“擴展卷”和 VSS 快照的組合使卷處於異常狀態。

相關內容