Membuat dan menjalankan tugas migrasi SQL Server yang berisi metadata dengan klausa EXECUTE AS

Ringkasan

Tugas migrasi SQL Server tidak memigrasikan data login server dan pengguna database. Oleh karena itu, sumber yang berisi objek yang ditentukan oleh pengguna dengan klausa EXECUTE AS '[database_user_name]' tidak akan dimigrasikan ke replika Cloud SQL baru, karena pengguna belum ada di sana. Akibatnya, keseluruhan proses migrasi akan gagal.

Contoh:

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

Prosedur tersimpan ini tidak akan dimigrasikan karena pengguna some_user tidak dapat dimigrasikan. Hal ini karena pengguna tidak ada di database target.

Untuk mengidentifikasi objek mana yang menggunakan klausa EXECUTE AS '[database_user_name]' di database sumber, gunakan kueri ini dan periksa apakah ada pengguna untuk objek tersebut di database tujuan.

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

Untuk menjalankan tugas migrasi dari sumber yang menyertakan metadata tersebut, buat pengguna di instance Cloud SQL tujuan sebelum memulai tugas migrasi.