Contained Databaseとは
Contained Databaseとは、その名の通り「含む」ことのできるデータベースです。「含む」という意味についての詳細については後述しますが、Contained Databaseとして作成したデータベースには、従来SQL Serverインスタンス レベルで管理されていたような情報、例えばログイン情報や照合順序の設定などを「含む」ことができます。つまり、Contained Databaseを使用すると、SQL Serverインスタンスの設定や機能に依存しないデータベースを作成できるようになるのです。
Contained Databaseによる SQL Serverインスタンスとデータベース間の依存関係の分離は、アプリケーション開発者とデータベース管理者 (SQL Serverインスタンスの管理者) 双方に対してメリットをもたらします。アプリケーション開発者は、開発で使用しているデータベースがどのような環境の SQL Serverインスタンスで動作するかを意識せずに開発できますし、データベース管理者は、SQL Serverインスタンスの設定を意識することなく、データベースを容易に別のサーバーへ移動できます。
ユーザー データベースの依存関係
通常 SQL Serverインスタンス上にあるユーザーデータベースは、少なくとも 1 つ以上のデータベースと依存関係があります。例えばデータベースを使用する為にはユーザーが必要ですが、ユーザーはログイン情報と紐づいている必要があります。ログイン情報はmasterシステムデータベースに保存されているため、この時点でユーザーデータベースとmasterシステム データベースとの間には依存関係が生じます。照合順序やリンク サーバー定義などもこうした依存関係の一つです。また、msdbシステムデータベースにはSQL Server Agentジョブに関する情報やレプリケーションに関する情報が保存されていますし、場合によっては、別のユーザーデータベースに対しても依存関係を持つ可能性もあるでしょう。
このような依存関係があると、ユーザーデータベースを別の SQL Serverインスタンスへ移動させたいと思っても、単純にユーザーデータベースをコピー、あるいはリストアしただけでは動作しない可能性が出てきます。別のSQL Serverインスタンスでデータベースを正しく動作させるためには、移動先のmasterデータベースの設定など、インスタンスレベルの情報を意識しないといけないのです。Contained Databaseは、このようなユーザーデータベースとSQL Serverインスタンス間の依存関係によって発生する問題を解決してくれます。