Eva*_*oll 5 sql-server linux database-internals sql-server-2017
在我在 Linux 上默认安装的 SQL Server 2017 中,/var/opt/mssql/data
我看到以下数据库,
master.mdf
- master 数据库- 记录 SQL Server 实例的所有系统级信息。model.mdf
-模型数据库- 用作在 SQL Server 实例上创建的所有数据库的模板。对模型数据库所做的修改,例如数据库大小、排序规则、恢复模型和其他数据库选项,将应用于之后创建的任何数据库。msdbdata.mdf
- msdb 数据库- SQL Server 代理使用它来安排警报和作业。tempdb.mdf
- tempdb 数据库- 是用于保存临时对象或中间结果集的工作区。所有这些数据库实际上都有很好的文档记录。然而,我的安装对资源数据库的遗漏很突出。Resource Database 的描述似乎表明它是自己的数据库,
资源数据库是一个只读数据库,其中包含 SQL Server 附带的所有系统对象。SQL Server 系统对象(例如 sys.objects)在物理上持久保存在 Resource 数据库中,但它们在逻辑上出现在每个数据库的 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)
Run Code Online (Sandbox Code Playgroud)
我没有看到这些.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)
Run Code Online (Sandbox Code Playgroud)
当我以单用户模式启动数据库时,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.
Run Code Online (Sandbox Code Playgroud)
我已确认此资源数据库/opt/mssql/lib/sqlservr.sfp
与Binn
. 所以问题的答案是它驻留在sfp
档案中。更多答案,您可以使用此处的方法提取sfp
该内容,创建一个包含内容的新文件,
/opt/mssql/lib/sqlservr/Content/binn/mssqlsystemresource.mdf
Run Code Online (Sandbox Code Playgroud)
所以那里的内容很可能在吊桥层中被虚拟化为
d:\dbs\sh\s17o\1116_092427_2\cmd\43\obj\x64retail\sql\mkmastr\databases\mkmastr.proj\mssqlsystemresource.mdf
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
330 次 |
最近记录: |