SQL Server システム データベース (モデル、マスターなど) を復元することの重要性は何ですか?

SQL Server システム データベース (モデル、マスターなど) を復元することの重要性は何ですか?

いくつかの運用データベースを同じ Microsoft SQL Server 2005 マシン上の別のドライブに復元する必要がありました。これは問題なく機能し、データベースを使用するアプリケーションはオンラインに戻りました。

ただし、SQL Server が独自に作成するシステム (または既定の?) データベース (モデル、マスターなど) は復元していません。質問は、これらのデータベースの役割は何ですか? また、それらを復元することはどの程度重要ですか?

答え1

マスターと msdb ストアには、システム全体を定義するプロシージャ、関数、テーブル、ビュー、およびその他のオブジェクトが含まれています。たとえば、マスターには、ログインに関する情報、データベースのファイルの場所、システム ストアド プロシージャ、およびその他の多くのものが含まれています。msdb は、もともと主にジョブやアラートに関するものでした。dbmail 構成情報やその他の多くのものが、長年にわたって追加されてきました。

モデルは、新しいデータベースを作成するときに開始点として機能するサンプル データベースのようなものです。モデル内のオブジェクトは、新しいデータベースにコピーされます。以前は (10 年前や 15 年前など)、この動作を頻繁に利用して、作成したすべてのデータベースに特定のプロシージャまたはテーブルを含めることができていましたが、これには問題があり、使用されなくなりました。ただし、付録のようなもので、モデルはそれほど悪くはありませんが、それでも必要です。

tempdb は、一時テーブル (#sometablename および ##someothertablename)、テーブル変数 (十分な大きさの場合)、並べ替え操作およびグループ化操作 (GROUP BY や DISTINCT など)、およびおそらくその他のより難解な操作のための一時的なストレージを提供するデータベースです。通常、tempdb を復元することはありません。サーバーを再起動するたびに、tempdb は最初から再構築されます。

最近のバージョンの SQL Server には、「リソース データベース」と呼ばれる別の隠しシステム データベースがあります。これをいじる必要はありません。

ご参考までに、「pubs」、Adventurworks、AdventurworksDW はシステム データベースではなく、単なる例として機能する通常のユーザー データベースであり、サーバーの動作に影響を与えることなく削除できます。

システム データベースは、通常、ディスク クラッシュやデータ センターの火災など、何らかの壊滅的な障害が発生した場合にのみ復元されます。また、あるサーバーから別のサーバーに移行し、ログイン、ジョブ、dbmail、その他の構成を維持する必要がある場合にも、システム データベースを復元することがあります (ただし、これを行うには、おそらく他の、より優れた方法があります)。

マスター、モデル、および msdb をバックアップします。リソース データベースまたは tempdb をバックアップする必要はありません。ジョブ機能の 1 つが「dba」である場合は、システム データベースの復元はユーザー データベースの復元よりも複雑であるため、これらのデータベースを復元するために実行する必要がある可能性のある操作を確認することをお勧めします (MSKB の記事に記載されています)。実際に緊急事態になったときに初めてこれらの KB 記事を読むことは避けてください。

ユーザー データベースを復元する場合、システム データベースを復元する必要はありません。ユーザー データベースを復元する際の注意点は、データベースに記述されているユーザーがサーバーのログイン (マスター データベースに格納されている) と一致していることを確認する必要があることです。そのために sp_change_users_login システム プロシージャがあります。

関連情報