Sql-Server

DBCC SHRINKFILE 適用於 file_id 但不適用於邏輯名稱

  • March 26, 2017

我正在嘗試縮小數據庫文件,但遇到了錯誤。

使用文件中的 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”。該文件不存在或已被刪除。

修改了我的答案,測試並未顯示為它不起作用的正當理由。

幾件事要檢查

  1. 文件名中是否有前導或尾隨空格?
  2. 您最近有沒有偶然升級到 SP3?

嘗試將恢復模式從完全切換到簡單,然後再切換回完全。更新到 SP3 時有一個明顯的錯誤。更改恢復模式將重置日誌序列號,並且無論出於何種原因可以清除問題,至少是暫時的。

關於此的 social.msdn 對話

查看@Cougar9000 提供的答案和連結後:是的,我們最近升級到了SP3!然後,我將恢復模式從簡單切換到完整,然後再切換回簡單。然後聲明

DBCC SHRINKFILE ('XY' , 0, TRUNCATEONLY)

作品。

有人知道這裡發生了什麼嗎?那是一個錯誤嗎?

引用自:https://dba.stackexchange.com/questions/43932