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] 具有錯誤訊息中所提及之資料庫檔案的必要許可權。 如需詳細資訊,請參閱設定 資料庫引擎 存取的文件系統許可權。 確定 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 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 會在卸離資料庫時重設檔案許可權。 當您嘗試重新附加資料庫時,因為共用許可權有限,就會發生失敗。
若要解決此問題,請遵循下列步驟:
使用 -T 啟動選項啟動 SQL Server。 使用此啟動選項在 SQL Server 組態管理員 中開啟追蹤旗標 1802(如需 1802 的資訊,請參閱追蹤旗標)。 如需如何變更啟動參數的詳細資訊,請參閱 資料庫引擎 服務啟動選項。
使用下列命令卸離資料庫。
exec sp_detach_db DatabaseName go
使用下列命令重新附加資料庫。
exec sp_attach_db DatabaseName, '\\Network-attached storage_Path\DatabaseMDFFile.mdf', '\\Network-attached storage_Path\DatabaseLDFFile.ldf' go