主數據庫是否知道使用者 dbs/sql server 在哪裡儲存使用者 dbs 的 precense/路徑?
我嘗試了以下方法:
方法 1. 我從 svr1 的備份中恢復了 svr2 上的主數據庫
Apprpach 2. 我用來自 svr1 的副本替換了 svr2 的主數據庫數據/日誌文件
在這兩種方法中,GUI 都不會在 svr2 上創建使用者 dbs。因此,我想問一下 sql server 究竟在哪裡儲存有關使用者 dbs 是否附加到它及其路徑的資訊。
就像評論中提到的 Learning_DBAdmin 一樣,
master
數據庫只有關於使用者數據庫的元數據。元數據只是描述使用者數據庫的數據(例如他們的文件路徑的字元串),它不儲存使用者數據庫本身的實際文件(具有使用者數據)。因此,僅恢復
master
數據庫不會自動為您創建這些文件。您還需要將使用者數據庫還原到 上的該 SQL Server 實例svr2
。
如果您考慮啟動過程,那麼一切都可能是可以理解的:
- SQL Server 從系統資料庫中找到 master 的兩個數據庫文件的路徑。
- SQL Server 恢復主控。
- SQL Server 有一個系統表(記住這些是對我們隱藏的),每個數據庫只有一行。當你從 sysdatabases 中選擇這個隱藏表的名字是 sys.sysdbreg 時,我們可以從執行計劃中推斷出來。如果我們通過 DAC 連接,我們甚至可以從中選擇。這沒有每個數據庫主文件的路徑,因此我們使用了一些隱藏的內部方法來獲取它。
- SQL Server 恢復模型。
- SQL Server 基於模型和 tempdb 的“文件模板”創建 tempdb(我們通過 sys.master_files 看到)。
- 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 視圖。