Sql-Server

在 SQL Server 2017 (Linux) 上,資源數據庫保存在哪裡(位於磁碟上)?

  • December 22, 2017

在我在 Linux 上預設安裝的 SQL Server 2017 中,/var/opt/mssql/data我看到以下數據庫,

  • master.mdf-主數據庫- 記錄 SQL Server 實例的所有系統級資訊。
  • model.mdf-模型數據庫- 用作在 SQL Server 實例上創建的所有數據庫的模板。對模型數據庫所做的修改(例如數據庫大小、排序規則、恢復模型和其他數據庫選項)將應用於之後創建的任何數據庫。
  • msdbdata.mdf- msdb 數據庫- 由 SQL Server 代理用於調度警報和作業。
  • tempdb.mdf- tempdb 數據庫- 是用於保存臨時對像或中間結果集的工作空間。

所有這些數據庫實際上都有很好的文件記錄。然而,我的安裝遺漏了資源數據庫。Resource Database 的描述似乎表明它是它自己的數據庫,

Resource 數據庫是一個只讀數據庫,其中包含 SQL Server 附帶的所有系統對象。SQL Server 系統對象,例如 sys.objects,物理上持久保存在 Resource database中,但它們在邏輯上出現在每個數據庫的 sys 架構中。資源數據庫不包含使用者數據或使用者元數據。

更令人困惑的是,對於SQL Server 2012,文件說,(不是我正在執行的 2017)

資源的物理性質

Resource 數據庫的物理文件名是 mssqlsystemresource.mdf 和 mssqlsystemresource.ldf。這些文件位於<drive>:\Program Files\Microsoft SQL Server\MSSQL11.<instance_name>\MSSQL\Binn\. 每個 SQL Server 實例都有一個且只有一個關聯的 mssqlsystemresource.mdf 文件,並且實例不共享此文件。

我沒有看到mssqlsystemresource.mdf任何地方。這個數據庫儲存在哪裡?這是編譯到伺服器本身嗎?

檢查出來,我以單使用者模式啟動數據庫並連接mssqlsystemresource並開始探勘,

1> USE mssqlsystemresource
2> GO
Changed database context to 'mssqlsystemresource'.
1> SELECT type, type_desc, physical_name FROM sys.database_files;
2> GO
type type_desc                                                    physical_name                                                                                                                                                                                                                                                       
---- ------------------------------------------------------------ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  0 ROWS                                                         d:\dbs\sh\s17o\1116_092427_2\cmd\43\obj\x64retail\sql\mkmastr\databases\mkmastr.proj\mssqlsystemresource.mdf                                                                                                                                                        
  1 LOG                                                          d:\dbs\sh\s17o\1116_092427_2\cmd\43\obj\x64retail\sql\mkmastr\databases\mkmastr.proj\mssqlsystemresource.ldf                                                                                                                                                        

(2 rows affected)

我沒有看到這些.ldf.mdf任何地方。而且,作為一個 Linux 安裝,我猜d:\dbs\sh\s17o\1116_092427_2\cmd\43\obj\x64retail\sql\mkmastr\databases\mkmastr.proj\是一個虛擬化的內部目錄。

進一步sys.master_files缺乏數據庫

1> SELECT LEFT(name,20), LEFT(physical_name,35) FROM sys.master_files WHERE name LIKE 'ms%';
2> GO

-------------------- -----------------------------------
MSDBData             /var/opt/mssql/data/MSDBData.mdf   
MSDBLog              /var/opt/mssql/data/MSDBLog.ldf    
(2 rows affected)

當我以單使用者模式啟動數據庫時,sudo -u mssql /opt/mssql/bin/sqlservr -m我看到了這個,

spid9s   Starting up database 'mssqlsystemresource'.
spid9s   The resource database build version is 14.00.3008. This is an informational message only. No user action is required.

我已確認此資源數據庫/opt/mssql/lib/sqlservr.sfpBinn. 所以這個問題的答案是它存在於sfp檔案中。更多答案,您可以使用此處的方法提取它sfp,創建一個包含內容的新文件,

/opt/mssql/lib/sqlservr/Content/binn/mssqlsystemresource.mdf

所以那裡的內容很可能在吊橋層中被虛擬化為

d:\dbs\sh\s17o\1116_092427_2\cmd\43\obj\x64retail\sql\mkmastr\databases\mkmastr.proj\mssqlsystemresource.mdf

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