SQLServer 错误 5120 表错误:无法打开物理文件 “%.*ls”。 操作系统错误 %d: “%ls”。

详细信息

Attribute
产品名称 SQL Server
事件 ID 5120
事件源 MSSQLSERVER
组件 SQLEngine
符号名称 DSK_FCB_FAILURE
消息正文 表错误:无法打开物理文件 “%.*ls”。 操作系统错误 %d: “%ls”。

说明

SQL Server 无法打开数据库文件。 消息中提供的操作系统错误指向更具体的根本失败原因。 通常,你会看到此错误与其他错误一起出现,如 17204 或 17207。

用户操作

诊断并更正该操作系统错误,然后重试操作。 有多种状态可帮助 Microsoft 缩小产品中出现错误的范围。

拒绝访问

如果收到 Access is Denied 操作系统错误 = 5,请考虑使用以下方法:

  • 通过在 Windows 资源管理器中查看文件的属性,检查文件的权限设置。 SQL Server 使用 Windows 组对各种文件资源预配访问控制。 确保相应的组[名称类似于 SQLServerMSSQLUser$ComputerName$MSSQLSERVER 或 SQLServerMSSQLUser$ComputerName$InstanceName]具有对错误消息中提及的数据库文件的必要权限。 有关更多详细信息,请参阅配置数据库引擎访问的文件系统权限。 确保 Windows 组实际包含 SQL Server 服务启动帐户或服务 SID。

  • 查看当前正在运行 SQL Server 服务的用户帐户。 可以使用 Windows 任务管理器来获取此信息。 查找可执行文件“sqlservr.exe”的“用户名”值。 另外,如果你最近更改了 SQL Server 服务帐户,请注意,支持执行此操作的方法是使用 SQL Server 配置管理器实用工具。

  • 根据操作类型(在服务器启动期间打开数据库、附加数据库、还原数据库等),用于模拟和访问数据库文件的帐户可能会有所不同。 请查看保护数据和日志文件主题,了解哪些操作为哪些帐户设置了哪些权限。 使用 Windows SysInternals 进程监视器这样的工具,了解是否在 SQL Server 实例服务启动帐户[或服务 SID] 或模拟帐户的安全上下文中执行了文件访问。

    如果 SQL Server 正在模拟可执行 ALTER DATABASE 或 CREATE DATABASE 操作的登录用户凭据,你将在进程监视器工具(示例)中注意到以下信息。

    Date & Time:      3/27/2010 8:26:08 PM
    Event Class:        File System
    Operation:          CreateFile
    Result:                ACCESS DENIED
    Path:                  C:Program FilesMicrosoft SQL ServerMSSQL13.SQL2016MSSQLDATAattach_test.mdf
    TID:                   4288
    Duration:             0.0000366
    Desired Access:Generic Read/Write
    Disposition:        Open
    Options:            Synchronous IO Non-Alert, Non-Directory File, Open No Recall
    Attributes:          N
    ShareMode:       Read
    AllocationSize:   n/a
    Impersonating: DomainNameUserName
    

附加位于网络连接存储上的文件

如果无法重新附加位于网络连接存储上的数据库,可能会在应用程序日志中记录类似如下的消息。

Msg 5120, Level 16, State 101, Line 1 Unable to open the physical file "\servernamesharenamefilename.mdf". Operating system error 5: (Access is denied.).

之所以出现此问题,是因为 SQL Server 在分离数据库时会重置文件权限。 当你尝试重新附加数据库时,将出现失败,因为共享权限受限。

若要解决此问题,请执行以下步骤:

  1. 使用 -T 启动选项启动 SQL Server。 使用此启动选项可在 SQL Server 配置管理器中打开跟踪标志 1802(有关 1802 的详细信息,请参阅 跟踪标志)。 若要详细了解如何更改启动参数,请参阅数据库引擎服务启动选项。

  2. 使用以下命令拆离数据库。

     exec sp_detach_db DatabaseName
     go 
    
  3. 使用以下命令重新附加数据库。

    exec sp_attach_db DatabaseName, '\Network-attached storage_PathDatabaseMDFFile.mdf', '\Network-attached storage_PathDatabaseLDFFile.ldf'
    go
    

你可能感兴趣的