Memigrasikan SQL Server ke SQL Managed Instance offline dengan PowerShell & Azure Database Migration Service

Dalam artikel ini, Anda memigrasikan secara offline database Adventureworks2016 yang dipulihkan ke instans SQL Server 2005 lokal di atasnya ke Azure SQL Managed Instance dengan menggunakan Microsoft Azure PowerShell. Anda dapat memigrasikan database dari instans SQL Server ke SQL Managed Instance dengan menggunakan Az.DataMigration modul di Microsoft Azure PowerShell.

Dalam artikel ini, Anda akan mempelajari cara:

  • Buat grup sumber daya.
  • Buat instans Azure Database Migration Service.
  • Buat proyek migrasi dalam instans Azure Database Migration Service.
  • Menjalankan migrasi offline.

Tip

Di Azure Database Migration Service, Anda dapat memigrasikan database Anda secara offline atau saat database online. Dalam migrasi offline, waktu henti aplikasi dimulai saat migrasi dimulai. Untuk membatasi waktu henti pada waktu yang diperlukan anda untuk memotong ke lingkungan baru setelah migrasi, gunakan migrasi online . Kami menyarankan agar Anda menguji migrasi offline untuk menentukan apakah waktu henti dapat diterima. Jika waktu henti yang diharapkan tidak dapat diterima, lakukan migrasi online.

Artikel ini memberikan langkah-langkah untuk migrasi offline, tetapi juga memungkinkan untuk migrasi online.

Prasyarat

Untuk menyelesaikan langkah-langkah ini, Anda perlu:

  • SQL Server 2016 atau di atasnya (edisi apa pun).
  • Salinan lokal database AdventureWorks2016, yang tersedia untuk diunduh di sini.
  • Untuk mengaktifkan protokol TCP/IP, yang dinonaktifkan secara default dengan penginstalan SQL Server Express. Aktifkan protokol TCP/IP dengan mengikuti artikel Aktifkan atau Nonaktifkan Server Network Protocol.
  • Untuk mengonfigurasi Windows Firewall Anda untuk akses mesin database.
  • Langganan Azure. Jika Anda tidak memilikinya, buat akun gratis sebelum memulai.
  • SQL Managed Instance. Anda dapat membuat SQL Managed Instance dengan mengikuti detail dalam artikel Membuat Azure SQL Managed Instance.
  • Untuk mengunduh dan menginstal Data Migration Assistant v3.3 atau yang lebih baru.
  • Microsoft Azure Virtual Network yang dibuat menggunakan model penyebaran Azure Resource Manager, yang menyediakan Azure Database Migration Service dengan konektivitas situs-ke-situs ke server sumber lokal Anda dengan menggunakan ExpressRoute atau VPN.
  • Penilaian lengkap tentang database lokal dan migrasi skema Anda menggunakan Data Migration Assistant, seperti yang dijelaskan dalam artikel Melakukan penilaian migrasi SQL Server.
  • Untuk mengunduh dan menginstal modul Az.DataMigration (versi 0.7.2 atau yang lebih baru) dari PowerShell Gallery dengan menggunakan cmdlet PowerShell Modul-Instal.
  • Untuk memastikan bahwa kredensial yang digunakan untuk menyambungkan ke instans SQL Server sumber memiliki izin CONTROL SERVER.
  • Untuk memastikan bahwa kredensial yang digunakan untuk terhubung ke SQL Managed Instance target memiliki izin CONTROL DATABASE pada database SQL Managed Instance target.

Masuk ke langganan Microsoft Azure Anda

Masuk ke langganan Azure dengan menggunakan PowerShell. Untuk informasi selengkapnya, lihat artikel Masuk dengan Azure PowerShell.

Buat grup sumber daya

Grup sumber daya Azure adalah kontainer logis yang disebarkan dan dikelola oleh sumber daya Azure.

Membuat grup sumber daya dengan menggunakan perintah New-AzResourceGroup.

Contoh berikut membuat grup sumber daya bernama myResourceGroup di wilayah US Timur.

New-AzResourceGroup -ResourceGroupName myResourceGroup -Location EastUS

Membuat instans Azure Database Migration Service

Anda dapat membuat instans baru Azure Database Migration Service dengan menggunakan New-AzDataMigrationService cmdlet. Cmdlet ini mengharapkan parameter yang diperlukan berikut:

  • Nama Azure Resource Group. Anda dapat menggunakan perintah New-AzResourceGroup untuk membuat grup Sumber Daya Azure seperti yang ditunjukkan sebelumnya dan memberikan namanya sebagai parameter.
  • Nama layanan. String yang sesuai dengan nama layanan unik yang diinginkan untuk Azure Database Migration Service.
  • Lokasi. Menentukan lokasi layanan. Tentukan lokasi pusat data Azure, seperti US Barat atau Asia Tenggara.
  • Sku. Parameter ini sesuai dengan nama Sku DMS. Nama Sku yang didukung saat ini adalah Basic_1vCore, Basic_2vCores, GeneralPurpose_4vCores.
  • Pengidentifikasi Subnet Virtual. Anda dapat menggunakan cmdlet New-AzVirtualNetworkSubnetConfig untuk membuat subnet.

Contoh berikut membuat layanan bernama MyDMS di grup sumber daya MyDMSResourceGroup yang terletak di wilayah US Timur menggunakan jaringan virtual bernama MyVNET dan subnet bernama MySubnet.

$vNet = Get-AzVirtualNetwork -ResourceGroupName MyDMSResourceGroup -Name MyVNET

$vSubNet = Get-AzVirtualNetworkSubnetConfig -VirtualNetwork $vNet -Name MySubnet

$service = New-AzDms -ResourceGroupName myResourceGroup `
  -ServiceName MyDMS `
  -Location EastUS `
  -Sku Basic_2vCores `
  -VirtualSubnetId $vSubNet.Id`

Membuat proyek migrasi

Setelah membuat instans Azure Database Migration Service, buat proyek migrasi. Proyek Azure Database Migration Service memerlukan informasi koneksi untuk instans sumber dan target, serta daftar database yang ingin Anda migrasikan sebagai bagian dari proyek.

Membuat objek Info Koneksi Database untuk koneksi sumber dan target

Anda dapat membuat objek Info Koneksi Database dengan menggunakan cmdlet New-AzDmsConnInfo, yang mengharapkan parameter berikut:

  • ServerType. Jenis koneksi database yang diminta, misalnya, SQL, Oracle, atau MySQL. Gunakan SQL untuk SQL Server dan Azure SQL.
  • DataSource. Nama IP instans SQL Server atau instans Azure SQL Database.
  • AuthType. Jenis autentikasi untuk koneksi, yang dapat berupa SqlAuthentication atau WindowsAuthentication.
  • TrustServerCertificate. Parameter ini menetapkan nilai yang menunjukkan apakah saluran dienkripsi saat melewati rantai sertifikat untuk memvalidasi kepercayaan. Nilai dapat berupa $true atau $false.

Contoh berikut membuat objek Info Koneksi untuk SQL Server sumber yang disebut MySourceSQLServer yang menggunakan autentikasi sql:

$sourceConnInfo = New-AzDmsConnInfo -ServerType SQL `
  -DataSource MySourceSQLServer `
  -AuthType SqlAuthentication `
  -TrustServerCertificate:$true

Contoh berikutnya menunjukkan pembuatan Info Koneksi ion untuk Azure SQL Managed Instance bernama 'targetmanagedinstance':

$targetResourceId = (Get-AzSqlInstance -Name "targetmanagedinstance").Id
$targetConnInfo = New-AzDmsConnInfo -ServerType SQLMI -MiResourceId $targetResourceId

Menyediakan database untuk proyek migrasi

Buat daftar objek AzDataMigrationDatabaseInfo yang menentukan database sebagai bagian dari proyek Azure Database Migration Service yang dapat disediakan sebagai parameter untuk pembuatan proyek. Anda dapat menggunakan cmdlet New-AzDataMigrationDatabaseInfo untuk membuat AzDataMigrationDatabaseInfo.

Contoh berikut membuat proyek AzDataMigrationDatabaseInfo untuk database AdventureWorks2016 dan menambahkannya ke daftar yang akan disediakan sebagai parameter untuk pembuatan proyek.

$dbInfo1 = New-AzDataMigrationDatabaseInfo -SourceDatabaseName AdventureWorks
$dbList = @($dbInfo1)

Membuat objek proyek

Terakhir, Anda dapat membuat proyek Azure Database Migration Service yang disebut MyDMSProject yang berlokasi di US Timur menggunakan New-AzDataMigrationProject dan menambahkan koneksi sumber dan target yang dibuat sebelumnya serta daftar database yang akan dimigrasikan.

$project = New-AzDataMigrationProject -ResourceGroupName myResourceGroup `
  -ServiceName $service.Name `
  -ProjectName MyDMSProject `
  -Location EastUS `
  -SourceType SQL `
  -TargetType SQLMI `
  -SourceConnection $sourceConnInfo `
  -TargetConnection $targetConnInfo `
  -DatabaseInfo $dbList

Membuat dan memulai tugas migrasi

Selanjutnya, buat dan mulai tugas Azure Database Migration Service. Tugas ini memerlukan informasi kredensial koneksi untuk sumber dan target, serta daftar tabel database yang akan dimigrasikan dan informasi yang sudah disediakan bersama proyek yang dibuat sebagai prasyarat.

Membuat parameter kredensial untuk sumber dan target

Buat kredensial keamanan koneksi sebagai objek PSCredential.

Contoh berikut menunjukkan pembuatan objek PSCredential untuk koneksi sumber dan target, menyediakan kata sandi sebagai variabel string sourcePassword dan $targetPassword.

$secpasswd = ConvertTo-SecureString -String $sourcePassword -AsPlainText -Force
$sourceCred = New-Object System.Management.Automation.PSCredential ($sourceUserName, $secpasswd)
$secpasswd = ConvertTo-SecureString -String $targetPassword -AsPlainText -Force
$targetCred = New-Object System.Management.Automation.PSCredential ($targetUserName, $secpasswd)

Membuat objek FileShare cadangan

Sekarang buat objek FileShare yang mewakili berbagi jaringan SMB lokal yang dapat digunakan Azure Database Migration Service untuk mengambil cadangan database sumber menggunakan cmdlet New-AzDmsFileShare.

$backupPassword = ConvertTo-SecureString -String $password -AsPlainText -Force
$backupCred = New-Object System.Management.Automation.PSCredential ($backupUserName, $backupPassword)

$backupFileSharePath="\\10.0.0.76\SharedBackup"
$backupFileShare = New-AzDmsFileShare -Path $backupFileSharePath -Credential $backupCred

Membuat objek database yang dipilih

Langkah berikutnya adalah memilih database sumber dan target dengan menggunakan cmdlet New-AzDmsSelectedDB.

Contoh berikut adalah untuk memigrasikan database tunggal dari SQL Server ke Azure SQL Managed Instance:

$selectedDbs = @()
$selectedDbs += New-AzDmsSelectedDB -MigrateSqlServerSqlDbMi `
  -Name AdventureWorks2016 `
  -TargetDatabaseName AdventureWorks2016 `
  -BackupFileShare $backupFileShare `

Jika seluruh instans SQL Server memerlukan lift-and-shift ke Azure SQL Managed Instance, maka perulangan untuk mengambil semua database dari sumber disediakan di bawah ini. Dalam contoh berikut, untuk $Server, $SourceUserName, dan $SourcePassword, berikan detail SQL Server sumber Anda.

$Query = "(select name as Database_Name from master.sys.databases where Database_id>4)";
$Databases= (Invoke-Sqlcmd -ServerInstance "$Server" -Username $SourceUserName
-Password $SourcePassword -database master -Query $Query)
$selectedDbs=@()
foreach($DataBase in $Databases.Database_Name)
    {
      $SourceDB=$DataBase
      $TargetDB=$DataBase

$selectedDbs += New-AzureRmDmsSelectedDB -MigrateSqlServerSqlDbMi `
                                              -Name $SourceDB `
                                              -TargetDatabaseName $TargetDB `
                                              -BackupFileShare $backupFileShare
      }

URI SAS untuk Kontainer Azure Storage

Buat variabel yang berisi URI SAS yang menyediakan Azure Database Migration Service dengan akses ke kontainer akun penyimpanan tempat layanan mengunggah file cadangan.

$blobSasUri="https://mystorage.blob.core.windows.net/test?st=2018-07-13T18%3A10%3A33Z&se=2019-07-14T18%3A10%3A00Z&sp=rwdl&sv=2018-03-28&sr=c&sig=qKlSA512EVtest3xYjvUg139tYSDrasbftY%3D"

Catatan

Azure Database Migration Service tidak mendukung penggunaan token SAS tingkat akun. Anda harus menggunakan URI SAS untuk kontainer akun penyimpanan. Pelajari cara mendapatkan URI SAS untuk kontainer blob.

Persyaratan konfigurasi tambahan

Ada beberapa persyaratan tambahan yang perlu Anda lakukan:

  • Pilih masuk. Buat daftar masuk yang akan dimigrasikan seperti yang ditunjukkan dalam contoh berikut:

    $selectedLogins = @("user1", "user2")
    

    Penting

    Saat ini, Azure Database Migration Service hanya mendukung migrasi masuk SQL.

  • Pilih pekerjaan agen. Buat daftar pekerjaan agen yang akan dimigrasikan seperti yang ditunjukkan dalam contoh berikut:

    $selectedAgentJobs = @("agentJob1", "agentJob2")
    

    Penting

    Saat ini, Azure Database Migration Service hanya mendukung pekerjaan dengan langkah-langkah pekerjaan subsistem T-SQL.

Membuat dan memulai tugas migrasi

Gunakan cmdlet New-AzDataMigrationTask untuk membuat dan memulai tugas migrasi.

Menentukan parameter

Cmdlet New-AzDataMigrationTask mengharapkan parameter berikut:

  • TaskType. Jenis tugas migrasi yang akan dibuat untuk SQL Server ke jenis migrasi Azure SQL Managed Instance MigrateSqlServerSqlDbMi diharapkan.
  • Nama Grup Sumber Daya. Nama grup sumber daya Azure untuk membuat tugas.
  • ServiceName. Instans Azure Database Migration Service untuk membuat tugas.
  • ProjectName. Nama proyek Azure Database Migration Service untuk membuat tugas.
  • TaskName. Nama tugas yang akan dibuat.
  • SourceConnection. Objek AzDmsConnInfo mewakili koneksi SQL Server sumber.
  • TargetConnection. Objek AzDmsConnInfo mewakili koneksi Azure SQL Managed Instance target.
  • SourceCred. Objek PSCredential untuk menyambungkan ke server sumber.
  • TargetCred. Objek PSCredential untuk menyambungkan ke server target.
  • SelectedDatabase. Objek AzDataMigrationSelectedDB mewakili pemetaan database sumber dan target.
  • BackupFileShare. Objek FileShare mewakili berbagi jaringan lokal yang dapat digunakan Azure Database Migration Service untuk mengambil cadangan database sumber.
  • BackupBlobSasUri. URI SAS yang menyediakan Azure Database Migration Service dengan akses ke kontainer akun penyimpanan tempat layanan mengunggah file cadangan. Pelajari cara mendapatkan URI SAS untuk kontainer blob.
  • SelectedLogins. Daftar masuk yang dipilih untuk dimigrasikan.
  • SelectedAgentJobs. Daftar pekerjaan agen yang dipilih untuk dimigrasikan.
  • SelectedLogins. Daftar masuk yang dipilih untuk dimigrasikan.
  • SelectedAgentJobs. Daftar pekerjaan agen yang dipilih untuk dimigrasikan.

Membuat dan memulai tugas migrasi

Contoh berikut membuat dan memulai tugas migrasi offline bernama myDMSTask:

$migTask = New-AzDataMigrationTask -TaskType MigrateSqlServerSqlDbMi `
  -ResourceGroupName myResourceGroup `
  -ServiceName $service.Name `
  -ProjectName $project.Name `
  -TaskName myDMSTask `
  -SourceConnection $sourceConnInfo `
  -SourceCred $sourceCred `
  -TargetConnection $targetConnInfo `
  -TargetCred $targetCred `
  -SelectedDatabase  $selectedDbs `
  -BackupFileShare $backupFileShare `
  -BackupBlobSasUri $blobSasUri `
  -SelectedLogins $selectedLogins `
  -SelectedAgentJobs $selectedJobs `

Memantau migrasi

Untuk memantau migrasi, jalankan tugas berikut.

  1. Konsolidasikan semua detail migrasi ke variabel bernama $CheckTask.

    Untuk menggabungkan detail migrasi seperti informasi properti, status, dan database yang terkait dengan migrasi, gunakan cuplikan kode berikut:

    $CheckTask = Get-AzDataMigrationTask -ResourceGroupName myResourceGroup `
                                         -ServiceName $service.Name `
                                         -ProjectName $project.Name `
                                         -Name myDMSTask `
                                         -ResultType DatabaseLevelOutput `
                                         -Expand
    Write-Host ‘$CheckTask.ProjectTask.Properties.Output’
    
  2. Gunakan variabel $CheckTask untuk mendapatkan status tugas migrasi saat ini.

    Untuk menggunakan variabel $CheckTask guna mendapatkan status tugas migrasi saat ini, Anda dapat memantau tugas migrasi yang berjalan dengan mengkueri properti status tugas, seperti yang ditunjukkan dalam contoh berikut:

    if (($CheckTask.ProjectTask.Properties.State -eq "Running") -or ($CheckTask.ProjectTask.Properties.State -eq "Queued"))
    {
      Write-Host "migration task running"
    }
    else if($CheckTask.ProjectTask.Properties.State -eq "Succeeded")
    {
      Write-Host "Migration task is completed Successfully"
    }
    else if($CheckTask.ProjectTask.Properties.State -eq "Failed" -or $CheckTask.ProjectTask.Properties.State -eq "FailedInputValidation" -or $CheckTask.ProjectTask.Properties.State -eq "Faulted")
    {
      Write-Host "Migration Task Failed"
    }
    

Menghapus instans Azure Database Migration Service

Setelah migrasi selesai, Anda dapat menghapus instans Azure Database Migration Service:

Remove-AzDms -ResourceGroupName myResourceGroup -ServiceName MyDMS

Langkah berikutnya

Cari tahu selengkapnya tentang Azure Database Migration Service dalam artikel Apa itu Azure Database Migration Service?.

Untuk informasi tentang skenario migrasi tambahan (pasangan sumber/target), lihat Panduan Migrasi Database Microsoft.