總覽
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 執行個體上建立使用者,再開始執行遷移工作。