Sql-Server

主數據庫是否知道使用者 dbs/sql server 在哪裡儲存使用者 dbs 的 precense/路徑?

  • May 8, 2022

我嘗試了以下方法:

方法 1. 我從 svr1 的備份中恢復了 svr2 上的主數據庫

Apprpach 2. 我用來自 svr1 的副本替換了 svr2 的主數據庫數據/日誌文件

在這兩種方法中,GUI 都不會在 svr2 上創建使用者 dbs。因此,我想問一下 sql server 究竟在哪裡儲存有關使用者 dbs 是否附加到它及其路徑的資訊。

就像評論中提到的 Learning_DBAdmin 一樣,master數據庫只有關於使用者數據庫的元數據。元數據只是描述使用者數據庫的數據(例如他們的文件路徑的字元串),它不儲存使用者數據庫本身的實際文件(具有使用者數據)。

因此,僅恢復master數據庫不會自動為您創建這些文件。您還需要將使用者數據庫還原到 上的該 SQL Server 實例svr2

如果您考慮啟動過程,那麼一切都可能是可以理解的:

  1. SQL Server 從系統資料庫中找到 master 的兩個數據庫文件的路徑。
  2. SQL Server 恢復主控。
  3. SQL Server 有一個系統表(記住這些是對我們隱藏的),每個數據庫只有一行。當你從 sysdatabases 中選擇這個隱藏表的名字是 sys.sysdbreg 時,我們可以從執行計劃中推斷出來。如果我們通過 DAC 連接,我們甚至可以從中選擇。這沒有每個數據庫主文件的路徑,因此我們使用了一些隱藏的內部方法來獲取它。
  4. SQL Server 恢復模型。
  5. SQL Server 基於模型和 tempdb 的“文件模板”創建 tempdb(我們通過 sys.master_files 看到)。
  6. SQL 伺服器恢復彼此的數據庫。

即,SQL Server 擁有master 中每個數據庫的MDF 文件的路徑。MDF 文件又具有該數據庫的其他文件的路徑。

步驟 (4,5) 和 (6) 可以並行執行,而不一定要按此順序執行。如果任何步驟 (1-2)、4 或 5 失敗,則 SQL Server 將關閉(“啟動失敗”)。

sys.master_files 存在的原因是如果您失去了某些數據庫的 mdf 文件,您希望能夠對該數據庫進行尾日誌備份。當 master 中不存在每個數據庫的非 mdf 的冗餘資訊時,這在 7.0 中是不可能的。(當 MSSQL 不知道 ldf 文件在哪裡時,它如何進行尾部日誌備份?)即,在 2000 年,MS 為此添加了一個系統表,當時稱為 sysaltfiles。來自 sysaltfiles 的資訊轉化為我們現在看到的 sys.master_files 視圖。

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