web-dev-qa-db-ja.com

SQL Server 2017(Linux)では、リソースデータベースはどこに永続化されますか(ディスク上にあります)?

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.
5
Evan Carroll

このリソースデータベースがアーカイブ/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
5
Evan Carroll