Checkdb 為 master 數據庫提供錯誤
當我在主數據庫上執行 dbcc checkdb 時,出現類似錯誤
Msg 5030, Level 16, State 12, Line 1 The database could not be exclusively locked to perform the operation. Msg 7926, Level 16, State 1, Line 1 Check statement aborted. The database could not be checked as a database snapshot could not be created and the database or table could not be locked. See Books Online for details of when this behavior is expected and what workarounds exist. Also see previous errors for more details.
當我搜尋它時,我得到了很多連結,指出當數據庫具有隻讀文件組或文件位於 FAT32 文件系統中時會發生這種情況。但是當我檢查主數據庫不在只讀文件組中時。但是 mdf 文件在 FAT32 文件系統中。所以解決方案是使用 TABLOCK 和 checkdb 命令。所以我嘗試了
dbcc checkdb With Tablock
。但我正在接受同樣的錯誤資訊。那麼這個錯誤的原因是什麼。我正在使用 sql server 2008 R2 express(服務包 2)。
FAT32 是這裡的原因。而且您不能
TABLOCK
在 Master 數據庫上執行 CHECKDB。WITH TABLOCK
將數據庫置於只讀模式 - 您不能對 Master 數據庫執行此操作,因為系統操作需要在 Master 數據庫上執行和執行。您可以通過在同一文件系統上創建新使用者數據庫然後嘗試 CHECKDB,看到相同的錯誤,然後使用該選項在該
TABLOCK
選項上執行 CHECKDB 來輕鬆驗證這一點。我的猜測是沒有選項你會得到同樣的錯誤,並且在指定選項時你不會得到錯誤(只要你沒有意外打開到數據庫的連接)不幸的是,在您解決此問題之前,您無法在 Master 上執行正常 CHECKDB。
同時你可以做這個過程(有點痛苦,但它有效)
- 確保連接到 SQL Server 的所有服務都關閉/停止(這包括 SSIS、SQL VSS 編寫器等服務)
- 使用 -m 啟動參數(在此處描述)以單使用者模式重新啟動 SQL Server
- 以單個使用者身份連接,然後使用指定的TABLOCK執行您的 CHECKDB 。
我剛剛在我的 SQL Server 2012 實例上嘗試過這個並且它有效。只有這樣你才能做到這一點。
**對我來說,這裡最大的問題是 - 為什麼你的文件系統是 FAT32?**這是在什麼作業系統上?您所有的數據庫都是 FAT32 嗎?可以使用 FAT32,但建議使用 NTFS 卷。在 FAT32 上,您不會獲得在 NTFS 上獲得的某些權限優勢 - 將一些文件打開以進行操作並導致問題,顯然是這個 CHECKDB 問題。