Sql-Server
DBCC SHRINKFILE 適用於 file_id 但不適用於邏輯名稱
我正在嘗試縮小數據庫文件,但遇到了錯誤。
使用文件中的 file_id
sys.database_files
,但使用邏輯文件名會產生錯誤。兩個語句中的邏輯文件名相同,因此這不是問題。此外,正在連接的數據庫是相同的。以下按預期工作:
declare @fileId as int = (select file_id from sys.database_files where name = 'XY') DBCC SHRINKFILE (@fileId, 0, TRUNCATEONLY)
然而下面…
DBCC SHRINKFILE ('XY' , 0, TRUNCATEONLY)
…將導致錯誤 8985:
消息 8985,級別 16,狀態 1,第 1
行在 sys.database_files 中找不到數據庫“<我的數據庫>”的文件“XY”。該文件不存在或已被刪除。
修改了我的答案,測試並未顯示為它不起作用的正當理由。
幾件事要檢查
- 文件名中是否有前導或尾隨空格?
- 您最近有沒有偶然升級到 SP3?
嘗試將恢復模式從完全切換到簡單,然後再切換回完全。更新到 SP3 時有一個明顯的錯誤。更改恢復模式將重置日誌序列號,並且無論出於何種原因可以清除問題,至少是暫時的。
查看@Cougar9000 提供的答案和連結後:是的,我們最近升級到了SP3!然後,我將恢復模式從簡單切換到完整,然後再切換回簡單。然後聲明
DBCC SHRINKFILE ('XY' , 0, TRUNCATEONLY)
作品。
有人知道這裡發生了什麼嗎?那是一個錯誤嗎?