Azure SQL Database の CREATE DATABASE AS COPY OF の罠

Azure SQL Database で使える CREATE DATABASE AS COPY OF は、裏で geo レプリケーションが行われている。その geo レプリケーションが完了する前に、ソースのデータベースをリネームしようとすると、下記の例外が発生する。

The operation cannot be performed since the database 'データベース名' is in a replication relationship.

geo レプリケーション有効にした記憶ないし、Azure Portal で確認しても、やっぱりレプリカ存在しないし。データベースのコピーが同じ仕組みだったとはね。納得。

コピーの状態は sys.dm_operation_status で確認できる。このシステムビューに対して、下記のような SQL を間隔をあけて実行し、終わるまで監視するのが良さそう。

SELECT *
FROM sys.dm_operation_status
WHERE major_resource_id = N'データベース名'
  AND resource_type_desc = N'Database'
  AND operation = N'CREATE DATABASE COPY'
  AND state = 1;