Ssms

從預設位置移動 SQL Server LocalDB 實例的文件夾

  • June 15, 2021

我遇到了多個錯誤LocalDB啟動錯誤無法從 SQL Server Management Studio 創建數據庫以及嘗試恢復備份時出現多個 問題)並且我發現的所有修復都沒有任何幫助。在我看來,所有錯誤的根源都在於權限設置不正確。

現在,一個簡單的 DDL 表創建腳本可以在 SQL Server Management Studio 中正常工作,並在我的使用者帳戶文件夾的根目錄中創建數據庫(如此處所述)。然而,Instances 文件夾(D:\Users\[My name]\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances儘管在安裝帶有高級服務的 SQL Server Express 時,我在另一個位置指定了 DATA 文件夾 - 僅儲存標準 SQL Server Express.mdf文件,但不儲存LocalDB實例)在權限方面似乎存在問題(與帳戶相反root) 因此,為了讓我的數據庫文件位於我的項目中的某個位置,我想將 Instances 文件夾移動到另一個位置。這可能嗎?我什至沒有找到相應的系統資料庫項。

我正在使用 SQL Server Express 2012 以及相同版本的 SSMS(已安裝最新更新)。


數據庫設置頁面給我帶來了一個錯誤,無法編輯也無法在那裡看到任何配置。我讓 Windows Update 再次檢查更新,並且有一些未安裝的 SQL Server Express 更新(儘管我確定我之前選擇了要安裝的所有內容),所以我安裝了它們。這使我可以進入設置頁面。

我嘗試將 LocalDB 實例的根文件夾設置到其他位置,但我嘗試的每個文件夾都收到拒絕訪問錯誤,即

更改設置“Microsoft.SqlServer.Management.Smo.ObjectKeyBase”失敗。(Microsoft.SqlServer.Smo)

                              • 附加資訊:

執行 Transact-SQL 語句或批處理時發生異常。(Microsoft.SqlServer.ConnectionInfo)


RegCreateKeyEx() 返回錯誤 5,“訪問被拒絕。” (Microsoft SQL Server,錯誤:22002)

即使文件夾為每個人設置了完全控制,我也會得到這個!更有趣的是唯一有效的文件夾,一個被設置為預設值的文件夾(使用者帳戶的根目錄)沒有應用任何特殊權限——只有我的使用者擁有的那些(就像我嘗試設置的任何其他文件夾一樣)。實際上,這意味著我所有的 LocalDB 數據庫文件都保存到我帳戶的根文件夾中。

我使用 Process Monitor 來跟踪系統資料庫訪問,並發現它在嘗試寫入時被拒絕訪問:

3:16:40.8405491 PM  
sqlservr.exe 8756   
RegCreateKey    
HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11E.LOCALDB\MSSQLServer   
ACCESS DENIED   
Desired Access: Write

我通過打開系統資料庫編輯器並讓每個人都可以完全訪問HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11E.LOCALDB\MSSQLServer. 然後我更改了預設位置,並在完成後刪除了“所有人”訪問權限。這產生了以下以前沒有的額外鍵:

  • 預設數據
  • 預設日誌
  • 備份目錄

引用自:https://dba.stackexchange.com/questions/39410