概要
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 インスタンスにユーザーを作成します。