找不到sys.database_files中数据库'mydatabase'的文件'mydatabase'。该文件不存在或被删除

时间:2012-09-28 16:59:55

标签: sql-server sql-server-2008

dbcc shrinkfile('mydatabase',113311)因以下错误而失败

找不到sys.database_files中数据库'mydatabase'的文件'mydatabase'。该文件不存在或被删除

随机失败一次。我有夜间任务执行dbcc shrinkfile。大多数时候工作正常。逻辑文件名等没有问题...... 我的逻辑文件名是'mydatabase'。我已使用以下查询验证了我的逻辑名称。

DBCC FILEHEADER (mydatabase)

select * from mydatabase.dbo.sysfiles 

Select * from master..sysaltfiles

这真的很奇怪,因为我找不到任何根本原因。 SQL 2008R2 SP2

3 个答案:

答案 0 :(得分:3)

我在sql server 2012中遇到了同样的问题。快速修复你可以使用文件ID而不是逻辑名来缩小文件。其次,检查master_files和database_files中的逻辑名称。 master_files与database_files中的不同。因此,您只需运行alter database再次设置文件的逻辑名称,然后就可以了。

答案 1 :(得分:0)

dbcc shrinkfile('mydatabase',113311)

请注意,'mydatabase'应为逻辑名称。

您可以从数据库属性窗口下的文件选项卡中找到逻辑名称。

答案 2 :(得分:0)

我尝试了上述所有内容并仍然遇到了问题。数据库称为clientdatabase,日志文件称为clientdatabase_log。

我设法通过重命名日志文件的逻辑名来解决它:

USE [clientdatabase];
ALTER DATABASE clientdatabase MODIFY FILE 
(NAME = clientdatabase_log, NEWNAME = clientdatabase_log_1);

运行脚本

USE [clientTdatawarehouse]
GO
DBCC SHRINKFILE (clientTDataWarehouse_log_1, 1024)
GO 

现在工作了。

我在这里写了博客:

https://hybriddbablog.com/answer-to-could-not-locate-file-xxx_log-for-database-xxx-in-sys-database_files/