EXECUTE AS 句でメタデータを含む SQL Server 移行ジョブを作成して実行する

概要

SQL Server の移行ジョブでは、データベース ユーザーとサーバー ログインデータは移行されません。そのため、ユーザーが EXECUTE AS '[database_user_name]' 句で定義したオブジェクトを含む ソースは、新しい Cloud SQL レプリカに移行されません。これは、ユーザーがまだ 存在しないためです。その結果、移行プロセス全体が失敗します。

例:

CREATE OR ALTER PROCEDURE dbo.example
WITH EXECUTE AS 'some_user'
AS BEGIN
…
END

このストアド プロシージャは、some_user ユーザーを移行できないため、移行されません。これは、ユーザーがターゲット データベースに存在しないためです。

ソース データベースで EXECUTE AS '[database_user_name]' 句を使用しているオブジェクトを特定するには、次のクエリを使用して、 移行先データベースにそれらのユーザーが存在するかどうかを確認します。

SELECT s.name AS schema_name, o.name AS object_name, p.name AS user_name
FROM sys.sql_modules m  
INNER JOIN sys.objects o ON o.object_id = m.object_id
INNER JOIN sys.schemas s ON s.schema_id = o.schema_id
INNER JOIN sys.database_principals p ON p.principal_id = m.execute_as_principal_id

このようなメタデータを含むソースから移行ジョブを実行するには、移行ジョブを開始する前に、移行先 Cloud SQL インスタンスにユーザーを作成します。