SQL Server 2022 では、システムデータベースのディレクトリに、次のデータベース用のファイルが格納されています。
- model_replicatedmaster
- model_replicatedmaster.mdf
- model_replicatedmaster.ldf
- model_msdb
- model_msdbdata.mdf
- model_msdblog.ldf
これらのファイルは、SQL Server 2019 でも存在していたのですが、通常のインスタンスでは使用されていませんでした。
- SQL2019 with SQLENGINE installation 4 new system files are showing but no new system databases in SSMS
- model_replicatedmaster.ldf move to another drive
SQL Server 2022 になると、状況が変わり、これらのファイルが使用されているデータベースとして model_replicatedmaster / model_msdb というデータベースが SSMS や DMV では表示されませんが内部的に存在するようになり、基本構成としてファイルが使用されるようになりました。
現状、これらのデータベースの情報が公開されているものはないのですが、2022 で新しく追加されたシステムデータベースとなるため、本投稿で現在調べられていることをまとめておきたいと思います。
Contents
model_replicatedmaster / model_msdb とは?
冒頭に記載したようにこれらのデータベース用のファイルは SQL Server 2019 から存在するようになりましたが、実際に使用されているのは特定の構成の場合のみで、それ以外の構成では使用されていなかったかと思います。
実際にシングルインスタンスの SQL Server 2019 では、これらのファイルを使用されたデータベースは存在していません。
SQL Server 2019 でこれらのデータベースが使用されていたのは、Big Data Cluster (BDC) の高可用性環境を使用した場合となります。
SQL Server 2022 では BDC は廃止されましたので、この構成をみることはないと思いますが、BDC では SQL Server 2022 の新機能である「包含可用性グループ」の前身となる機能が含まれており、この機能の中で model_replicatedmaster / model_msdb が使用されていました。
つまり、model_replicatedmaster / model_msdb は SQL Server 2022 では包含データベースで使用されるデータベースとなります。
SQL Server 2022 の不可視データベース
SQL Server では不可視のデータベースとして以前から「mssqlsystemresource (Resource データベース)」が存在していました。
このデータベースは、SSMS から確認することはできないのですが、内部的には、DBID 32767 の msssqlsystemresource というデータベースとして存在していました。
SQL Server 2022 ではこの不可視のデータベースとして、本投稿のデータベースが追加されています。SQL Server 2022 では次のデータベースが不可視のデータベースとして内部的に認識している状態となります。
- DBID 32761: model_msdb
- DBID 32762: model_replicatedmaster
- DBID 32767: mssqlsystemresource
SQL Server 2019 の通常のインスタンスでは、データベースとしては認識していないがファイルは存在している状態となっていました。
しかし、SQL Server 2022 では構成にかかわらずデフォルトでシステムデータベースとして認識している状態となり、内部的にはデータベースが存在している状態になっています。(これは、sys.sysdbreg / sys.sysbrickfiles から確認することができます)
包含可用性グループ作成時のシステムデータベース作成の流れ
model_replicatedmaster / model_msdb は前述のとおり SQL Server 2022 で包含データベースを作成する際に使用されるデータベースとなります。
包含可用性グループでは、包含システム データベース という可用性グループ向けのシステムデータベースとして
- 可用性グループ名_master
- 可用性グループ名_msdb
という二つのデータベースが作成されます。
このデータベースのテンプレートとなるのが model_replicatedmaster / model_msdb となります。
包含可用性グループを作成した際には、可用性グループ用のシステムデータベースが作成され、このデータベースに対して model_replicatedmaster / model_msdb の内容が複製されるような動作となっています。
model_replicatedmaster / model_msdb は不可視のデータベースではあるのですが、mssqlsystemresource とは異なり、USE で接続ができるので、
USE [model_replicatedmaster] USE [model_msdb]
等で実際に接続することができます。
実際に使用する機会はなさそうですが、これらのシステムデータベースにオブジェクトを作成しておくと、包含可用性グループを作成した際の包含システムデータベースにオブジェクトが作成された状態で可用性グループを構築することができます。
バックアップを取得する必要はあるか?
model_replicatedmaster / model_msdb はシステムデータベースの扱いではあるのですが、投稿を書いている時点では、次の情報には記載がされていません。
model_replicatedmaster / model_msdb 用のファイルが存在していなくても SQL Server のインスタンスは起動することができるので、データベースが破損していたとしてもインスタンスは起動することができるようです。
しかし、包含可用性グループを使用する際にはエラーとなるため、一度はバックアップを取得しておいたほうが良いのではないでしょうか。
USE [master] BACKUP DATABASE [model_replicatedmaster] TO DISK = N'model_replicatedmaster.bak' WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO BACKUP DATABASE [model_msdb] TO DISK = N'model_msdb.bak' WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO USE [master] RESTORE DATABASE [model_replicatedmaster] FROM DISK = N'model_replicatedmaster.bak' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 5 GO USE [master] RESTORE DATABASE [model_msdb] FROM DISK = N'model_msdb.bak' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 5 GO
このようなクエリでバックアップ / リストアを行うことができました。
現時点ではメンテナンスプランのシステムデータベースのバックアップ取得ではバックアップは取得されないので、バックアップを取得する場合は明示的に取得する必要があるようでした。
現時点では CU が提供されていないので、CU 適用ごとにバックアップを取得するかどうかは悩ましいところではありますが、システム環境が変わった際にバックアップを取得しておけば当面は問題ないのではないでしょうか。
まとめ
SQL Server 2022 の情報が増えてくれば本投稿で触れたデータベースの運用についても情報が公開されてくると思いますが現状は、model_replicatedmaster / model_msdb については、
- SQL Server 2022 で追加されたシステムデータベース
- インスタンスの構成にかかわらずデフォルトで構成されている不可視のデータベース
- 可用性グループを使用しない場合にはファイルが存在していなくてもインスタンスを起動することは可能
- ただし、ERRORLOG にエラーが出力されるのでインスタンスとしては正常ではない状態
- 包含可用性データベースの包含システムデータベースのテンプレート
- バックアップ / リストアは手動で実施することが可能
ということを意識しておく必要があるのではないでしょうか。
SQL Server 2022 の情報が整備されれば、次のドキュメントの情報も拡充されると思いますので、これらの情報も定期的に確認しておくとよさそうです。