共用方式為


MSSQLSERVER_5120

適用於:SQL Server

詳細資料

屬性
產品名稱 SQL Server
事件識別碼 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] 具有錯誤訊息中所提及之資料庫檔案的必要許可權。 如需詳細資訊,請參閱 設定 Database Engine 存取 的檔案系統許可權。 確定 Windows 群組實際上包含 SQL Server 服務啟動帳戶或服務 SID。

  • 檢閱目前執行 SQL Server 服務的使用者帳戶。 您可以使用 Windows 工作管理員來取得此資訊。 尋找可執行檔 「sqlservr.exe」 的 「User Name」 值。 此外,如果您最近變更 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 Files\Microsoft SQL Server\MSSQL13.SQL2016\MSSQL\DATA\attach_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: DomainName\UserName
    

附加位於網路連接儲存體上的檔案

如果您無法重新連結位於網路連接儲存體上的資料庫,則可能會在應用程式記錄檔中記錄類似這樣的訊息。

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

發生此問題的原因是 SQL Server 會在卸離資料庫時重設檔案許可權。 當您嘗試重新附加資料庫時,因為共用許可權有限,就會發生失敗。

若要解決,請遵循下列步驟:

  1. 使用 -T 啟動選項啟動 SQL Server。 使用此啟動選項在 SQL Server 組態管理員 開啟追蹤旗標 1802(如需 1802 的資訊,請參閱 追蹤旗 標)。 如需如何變更啟動參數的詳細資訊,請參閱 Database Engine 服務啟動選項

  2. 使用下列命令卸離資料庫。

     exec sp_detach_db DatabaseName
     go 
    
  3. 使用下列命令重新附加資料庫。

    exec sp_attach_db DatabaseName, '\\Network-attached storage_Path\DatabaseMDFFile.mdf', '\\Network-attached storage_Path\DatabaseLDFFile.ldf'
    go