MSSQLSERVER_5009

适用于:SQL Server

详细信息

属性
产品名称 SQL Server
事件 ID 5009
事件来源 MSSQLSERVER
组件 SQLEngine
符号名称 ALT_BADDISKS
消息正文 找不到或无法初始化语句中列出的一个或多个文件

说明

此错误表示在 ALTER DATABASE 或 DBCC SHRINK* 命令中指定了无法解析的文件名或文件 ID。

考虑以下情况:

  • 你有一个Microsoft SQL Server 数据库,该数据库使用完整或大容量日志恢复模式。
  • 你将一个名为 db_file1 的新数据文件添加到该数据库中
  • 你将 db_file1 文件的文件类型设置为数据。
  • 你意识到你错误地指定了文件类型。
  • 你删除 db_file1 文件,然后备份该数据库的事务日志。
  • 你将一个名为 db_file1 的新日志文件添加到该数据库中
  • 尝试使用 ALTER DATABASE 语句或使用 SQL Server Management Studio 删除名为 db_file1 的日志文件。

在此情况下,你会收到如下所示的错误消息:

消息 5009,级别 16,状态 9,行 1 - 找不到或无法初始化语句中列出的一个或多个文件。

可能的原因

如果尝试删除的文件的逻辑名称在系统目录表中不是唯一的,则会发生此问题。 例如,如果删除了之前存在于数据库中的文件,则会发生此问题。

尝试删除具有相同逻辑名称的文件时,SQL Server 会尝试删除已删除的逻辑文件。 这会导致错误消息。

用户操作

若要解决此问题,请按照以下步骤操作。

注意

这些步骤会导致文件 ID 值被重用。

  1. 使用 ALTER DATABASE 语句新建一个名称不同但数据类型相同的逻辑文件。 例如,将逻辑文件命名为 different_remove_file_name 而不是 db_file1,如以下示例所示:

    ALTER DATABASE [DBNAME] ADD FILE ( NAME = N'different_remove_file_name',
    FILENAME = N'D:\MSSQL.1\MSSQL\DATA\db_file1.ndf', SIZE = 1MB, MAXSIZE = 1MB)
    

    注意

    可使用任何文件名或任何文件路径。

  2. 使用 ALTER DATABASE 语句删除在步骤 1 中创建的逻辑文件,如以下示例所示:

    ALTER DATABASE [DBNAME] REMOVE FILE [different_remove_file_name]
    
  3. 创建数据库的事务日志备份。

  4. 尝试再次删除名为 db_file1 的逻辑文件