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