Linux上のSQL Server 2017のデフォルトのインストールでは、/var/opt/mssql/data
の下に次のデータベースが表示されます。
master.mdf
-master Database-SQL Serverのインスタンスのすべてのシステムレベルの情報を記録します。model.mdf
-model Database-SQL Serverのインスタンスで作成されたすべてのデータベースのテンプレートとして使用されます。データベースのサイズ、照合順序、復旧モデル、その他のデータベースオプションなど、モデルデータベースに加えられた変更は、後で作成されるすべてのデータベースに適用されます。msdbdata.mdf
-msdbデータベース-SQL Serverエージェントがアラートとジョブのスケジュールに使用します。tempdb.mdf
-tempdbデータベース-一時オブジェクトまたは中間結果セットを保持するためのワークスペースです。これらのデータベースはすべて 実際にはかなり文書化されています です。しかし、私のインストールでのResource Databaseの省略が際立っています。リソースデータベースの説明は、それが独自のデータベースであることを示しているようです。
リソースデータベースは、SQL Serverに含まれているすべてのシステムオブジェクトを含む読み取り専用データベースです。 sys.objectsなどのSQL Serverシステムオブジェクトは物理的にリソースデータベースに永続化されますが、論理的にはすべてのデータベースのsysスキーマに表示されます。リソースデータベースには、ユーザーデータまたはユーザーメタデータは含まれません。
さらに混乱します SQL Server 2012のドキュメントによると (2017ではなく、私が実行しているものです)
リソースの物理プロパティ
リソースデータベースの物理ファイル名は、mssqlsystemresource.mdfおよびmssqlsystemresource.ldfです。これらのファイルは
<drive>:\Program Files\Microsoft SQL Server\MSSQL11.<instance_name>\MSSQL\Binn\
にあります。 SQL Serverの各インスタンスには、mssqlsystemresource.mdfファイルが1つだけ関連付けられており、インスタンスはこのファイルを共有しません。
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
にもdbがありません
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.sfp
およびBinn
の残りのファイルにパックされていることを確認しました。したがって、質問に対する答えは、それがsfp
アーカイブに存在することです。答えの詳細は、 ここのメソッドでsfp
を抽出 内容で新しいファイルを作成し、
/opt/mssql/lib/sqlservr/Content/binn/mssqlsystemresource.mdf
したがって、そこにあるコンテンツは、おそらくDrawbridgeレイヤーで仮想化されます。
d:\dbs\sh\s17o\1116_092427_2\cmd\43\obj\x64retail\sql\mkmastr\databases\mkmastr.proj\mssqlsystemresource.mdf