概览
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 实例上创建用户,然后再启动迁移作业。