🐡
Azure SQL Database Managed Instance での包括データベース作成手順
包括データベースについては以下のドキュメントを参照してください。
https://docs.microsoft.com/ja-jp/sql/relational-databases/databases/contained-databases
Azure SQL Database Managed Instnace (以下 SQL MI) で包括データベースを作成する際には、以下の手順で作成する必要があります。
- CREATE DATABASE ステートメントで非包括データベースを作成
- ALTER DATABASE ステートメントで包括データベースに変更
SQL MI の CREATE DATABASE ステートメントでは CONTAINMENT オプションがサポートされていないため、このような手順を取る必要があります。
具体的な SQL ステートメントは以下になります。
CREATE DATABASE <データベース名> COLLATE <照合順序>
GO
ALTER DATABASE <データベース名> SET CONTAINMENT = PARTIAL
GO
なお、ALTER DATABASE ステートメント実行時に
ALTER DATABASE failed because a lock could not be placed on database
というエラーがでることがあります。包括データベースに変更する時には排他ロックを取得する必要があるのですが、他のアクティブなプロセスがデータベースのロックを保持しているときに、このエラーが発生します。ロックが解放されるのを待って ALTER DATABASE ステートメントを再実行してください。ロックの有無を確認するには、以下のクエリが使用できます。
SELECT
resource_type, resource_database_id, request_mode, request_type, request_status, request_session_id
FROM
sys.dm_tran_locks
WHERE
resource_database_id = DB_ID('<データベース名>')
Discussion