PowerShell ve Azure Veritabanı Geçiş Hizmeti ile SQL Server'ı çevrimiçi SQL Yönetilen Örneği geçirme

Bu makalede, microsoft Azure PowerShell kullanarak SQL Server 2005 veya üzeri bir şirket içi örneğine geri yüklenen Adventureworks2016 veritabanını bir Azure SQL SQL Yönetilen Örneği çevrimiçi olarak geçirirsiniz. Microsoft Azure PowerShell'deki modülü kullanarak Az.DataMigration veritabanlarını SQL Server örneğinden SQL Yönetilen Örneği geçirebilirsiniz.

Bu makalede şunları öğreneceksiniz:

  • Kaynak grubu oluşturun.
  • Azure Veritabanı Geçiş Hizmeti örneği oluşturun.
  • Azure Veritabanı Geçiş Hizmeti örneğinde geçiş projesi oluşturun.
  • Geçişi çevrimiçi olarak çalıştırın.

Bahşiş

Azure Veritabanı Geçiş Hizmeti veritabanlarınızı çevrimdışı veya çevrimiçiyken geçirebilirsiniz. Çevrimdışı geçişte, geçiş başladığında uygulama kapalı kalma süresi başlar. Kapalı kalma süresini geçişten sonra yeni ortama geçme süresiyle sınırlamak için çevrimiçi geçiş kullanın. Kapalı kalma süresinin kabul edilebilir olup olmadığını belirlemek için çevrimdışı geçişi test etmenizi öneririz. Beklenen kapalı kalma süresi kabul edilebilir değilse çevrimiçi geçiş yapın.

Bu makalede çevrimiçi geçiş için adımlar sağlanmaktadır, ancak çevrimdışı geçiş de mümkündür.

Önkoşullar

Bu adımları tamamlamak için şunlar gerekir:

  • SQL Server 2016 veya üzeri (herhangi bir sürüm).

  • AdventureWorks2016 veritabanının yerel bir kopyasıdır ve buradan indirebilirsiniz.

  • SQL Server Express yüklemesi ile varsayılan olarak devre dışı bırakılan TCP/IP protokollerini etkinleştirmek için. Sunucu Ağ Protokollerini Etkinleştirme veya Devre Dışı Bırakma makalesini izleyerek TCP/IP protokollerini etkinleştirin.

  • Veritabanı altyapısı erişimi için Windows Güvenlik Duvarınızı yapılandırmak için.

  • Azure aboneliği. Aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

  • bir SQL Yönetilen Örneği. A oluşturma SQL Yönetilen Örneği makalesindeki ayrıntıları izleyerek bir SQL Yönetilen Örneği oluşturabilirsiniz.

  • v3.3 veya sonraki Data Migration Yardımcısı indirip yüklemek için.

  • ExpressRoute veya VPN kullanarak şirket içi kaynak sunucularınıza siteden siteye bağlantı sağlayan Azure Resource Manager dağıtım modeli kullanılarak oluşturulmuş bir Microsoft Azure Azure Veritabanı Geçiş Hizmeti Sanal Ağ.

  • SQL Server geçiş değerlendirmesi gerçekleştirme makalesinde açıklandığı gibi, Data Migration Yardımcısı kullanarak şirket içi veritabanınızın ve şema geçişinizin tamamlanmış değerlendirmesi.

  • Install-Module PowerShell cmdlet'ini kullanarak modülü (sürüm 0.7.2 veya üzeri) PowerShell Galerisi indirip yüklemek Az.DataMigration için.

  • Kaynak SQL Server örneğine bağlanmak için kullanılan kimlik bilgilerinin CONTROL SERVER iznine sahip olduğundan emin olmak için.

  • Hedef SQL Yönetilen Örneği bağlanmak için kullanılan kimlik bilgilerinin hedef SQL Yönetilen Örneği veritabanlarında CONTROL DATABASE iznine sahip olduğundan emin olmak için.

    Önemli

    Çevrimiçi geçişler için Microsoft Entra kimlik bilgilerinizi zaten ayarlamış olmanız gerekir. Daha fazla bilgi için portalı kullanarak kaynaklara erişebilen bir Microsoft Entra uygulaması ve hizmet sorumlusu oluşturma makalesine bakın.

Kaynak grubu oluşturma

Azure kaynak grubu, Azure kaynaklarının dağıtıldığı ve yönetildiği mantıksal bir kapsayıcıdır.

komutunu kullanarak New-AzResourceGroup bir kaynak grubu oluşturun.

Aşağıdaki örnek, Doğu ABD bölgesinde myResourceGroup adlı bir kaynak grubu oluşturur.

New-AzResourceGroup -ResourceGroupName myResourceGroup -Location EastUS

DMS örneği oluşturma

cmdlet'ini kullanarak New-AzDataMigrationService yeni Azure Veritabanı Geçiş Hizmeti örneği oluşturabilirsiniz. Bu cmdlet aşağıdaki gerekli parametreleri bekler:

  • Azure Kaynak Grubu adı. Komutunu kullanarak New-AzResourceGroup daha önce gösterildiği gibi bir Azure Kaynak grubu oluşturabilir ve adını parametre olarak sağlayabilirsiniz.
  • Hizmet adı. Azure Veritabanı Geçiş Hizmeti için istenen benzersiz hizmet adına karşılık gelen dize.
  • Konum. Hizmetin konumunu belirtir. Batı ABD veya Güneydoğu Asya gibi bir Azure veri merkezi konumu belirtin.
  • Sku. Bu parametre DMS Sku adına karşılık gelir. Şu anda desteklenen Sku adları Basic_1vCore, Basic_2vCores GeneralPurpose_4vCores.
  • Sanal Alt Ağ Tanımlayıcısı. Bir alt ağ oluşturmak için cmdlet'ini New-AzVirtualNetworkSubnetConfig kullanabilirsiniz.

Aşağıdaki örnek, MyVNET adlı bir sanal ağı ve MySubnet adlı bir alt ağı kullanarak Doğu ABD bölgesinde bulunan MyDMSResourceGroup kaynak grubunda MyDMS adlı bir hizmet oluşturur.

$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`

Geçiş projesi oluşturma

Azure Veritabanı Geçiş Hizmeti örneği oluşturduktan sonra bir geçiş projesi oluşturun. Azure Veritabanı Geçiş Hizmeti projesi hem kaynak hem de hedef örnekler için bağlantı bilgilerinin yanı sıra projenin bir parçası olarak geçirmek istediğiniz veritabanlarının listesini gerektirir. Kaynak ve hedef bağlantı bağlantı dizesi tanımlayın.

Aşağıdaki betik, kaynak SQL Server bağlantı ayrıntılarını tanımlar:

# Source connection properties
$sourceDataSource = "<mysqlserver.domain.com/privateIP of source SQL>"
$sourceUserName = "domain\user"
$sourcePassword = "mypassword"

Aşağıdaki betik, hedef SQL Yönetilen Örneği bağlantı ayrıntılarını tanımlar:

# Target MI connection properties
$targetMIResourceId = "/subscriptions/<subid>/resourceGroups/<rg>/providers/Microsoft.Sql/managedInstances/<myMI>"
$targetUserName = "<user>"
$targetPassword = "<password>"

Kaynak ve hedef veritabanı eşlemesini tanımlama

Bu geçiş projesinde geçirilecek veritabanlarını sağlayın

Aşağıdaki betik, kaynak veritabanını hedef SQL Yönetilen Örneği belirtilen adla ilgili yeni veritabanıyla eşler.

# Selected databases (Source database name to target database name mapping)
$selectedDatabasesMap = New-Object System.Collections.Generic.Dictionary"[String,String]" 
$selectedDatabasesMap.Add("<source  database name>", "<target database name> ")

Birden çok veritabanı için, aşağıdaki biçimi kullanarak veritabanları listesini yukarıdaki betike ekleyin:

$selectedDatabasesMap = New-Object System.Collections.Generic.Dictionary"[String,String]" 
$selectedDatabasesMap.Add("<source  database name1>", "<target database name1> ")
$selectedDatabasesMap.Add("<source  database name2>", "<target database name2> ")

DMS projesi oluşturma

DMS örneğinde bir Azure Veritabanı Geçiş Hizmeti projesi oluşturabilirsiniz.

# Create DMS project
$project = New-AzDataMigrationProject `
  -ResourceGroupName $dmsResourceGroupName `
  -ServiceName $dmsServiceName `
  -ProjectName $dmsProjectName `
  -Location $dmsLocation `
  -SourceType SQL `
  -TargetType SQLMI `

# Create selected databases object
$selectedDatabases = @();
foreach ($sourceDbName in $selectedDatabasesMap.Keys){
    $targetDbName = $($selectedDatabasesMap[$sourceDbName])
    $selectedDatabases += New-AzDmsSelectedDB -MigrateSqlServerSqlDbMi `
      -Name $sourceDbName `
      -TargetDatabaseName $targetDbName `
      -BackupFileShare $backupFileShare `
}

Yedek FileShare nesnesi oluşturma

Şimdi, Azure Veritabanı Geçiş Hizmeti New-AzDmsFileShare cmdlet'ini kullanarak kaynak veritabanı yedeklerini alabildiği yerel SMB ağ paylaşımını temsil eden bir FileShare nesnesi oluşturun.

# SMB Backup share properties
$smbBackupSharePath = "\\shareserver.domain.com\mybackup"
$smbBackupShareUserName = "domain\user"
$smbBackupSharePassword = "<password>"

# Create backup file share object
$smbBackupSharePasswordSecure = ConvertTo-SecureString -String $smbBackupSharePassword -AsPlainText -Force
$smbBackupShareCredentials = New-Object System.Management.Automation.PSCredential ($smbBackupShareUserName, $smbBackupSharePasswordSecure)
$backupFileShare = New-AzDmsFileShare -Path $smbBackupSharePath -Credential $smbBackupShareCredentials

Azure Depolama tanımlama

Geçiş için kullanılacak Azure Depolama Kapsayıcısı'na tıklayın:

# Storage resource id
$storageAccountResourceId = "/subscriptions/<subscriptionname>/resourceGroups/<rg>/providers/Microsoft.Storage/storageAccounts/<mystorage>"

Microsoft Entra Uygulamasını Yapılandırma

Çevrimiçi SQL Yönetilen Örneği geçişi için Microsoft Entra Id için gerekli ayrıntıları sağlayın:

# AAD properties
$AADAppId = "<appid-guid>"
$AADAppKey = "<app-key>"

# Create AAD object
$AADAppKeySecure = ConvertTo-SecureString $AADAppKey -AsPlainText -Force
$AADApp = New-AzDmsAadApp -ApplicationId $AADAppId -AppKey $AADAppKeySecure

Geçiş görevi oluşturma ve başlatma

Ardından bir Azure Veritabanı Geçiş Hizmeti görevi oluşturun ve başlatın. Değişkenleri kullanarak kaynağı ve hedefi çağırın ve geçirilecek veritabanı tablolarını listeleyin:

# Managed Instance online migration properties
$dmsTaskName = "testmigration1"

# Create source connection info
$sourceConnInfo = New-AzDmsConnInfo -ServerType SQL `
  -DataSource $sourceDataSource `
  -AuthType WindowsAuthentication `
  -TrustServerCertificate:$true
$sourcePasswordSecure = ConvertTo-SecureString -String $sourcePassword -AsPlainText -Force
$sourceCredentials = New-Object System.Management.Automation.PSCredential ($sourceUserName, $sourcePasswordSecure)

# Create target connection info
$targetConnInfo = New-AzDmsConnInfo -ServerType SQLMI `
    -MiResourceId $targetMIResourceId
$targetPasswordSecure = ConvertTo-SecureString -String $targetPassword -AsPlainText -Force
$targetCredentials = New-Object System.Management.Automation.PSCredential ($targetUserName, $targetPasswordSecure)

Aşağıdaki örnek bir çevrimiçi geçiş görevi oluşturur ve başlatır:

# Create DMS migration task
$migTask = New-AzDataMigrationTask -TaskType MigrateSqlServerSqlDbMiSync `
  -ResourceGroupName $dmsResourceGroupName `
  -ServiceName $dmsServiceName `
  -ProjectName $dmsProjectName `
  -TaskName $dmsTaskName `
  -SourceConnection $sourceConnInfo `
  -SourceCred $sourceCredentials `
  -TargetConnection $targetConnInfo `
  -TargetCred $targetCredentials `
  -SelectedDatabase  $selectedDatabases `
  -BackupFileShare $backupFileShare `
  -AzureActiveDirectoryApp $AADApp `
  -StorageResourceId $storageAccountResourceId

Daha fazla bilgi için bkz . New-AzDataMigrationTask.

Geçişi izleme

Geçişi izlemek için aşağıdaki görevleri gerçekleştirin.

Görevin durumunu denetleme

# Get migration task status details
$migTask = Get-AzDataMigrationTask `
                    -ResourceGroupName $dmsResourceGroupName `
                    -ServiceName $dmsServiceName `
                    -ProjectName $dmsProjectName `
                    -Name $dmsTaskName `
                    -ResultType DatabaseLevelOutput `
                    -Expand

# Task state will be either of 'Queued', 'Running', 'Succeeded', 'Failed', 'FailedInputValidation' or 'Faulted'
$taskState = $migTask.ProjectTask.Properties.State

# Display task state
$taskState | Format-List

Hataların listesini almak için aşağıdakileri kullanın:-

# Get task errors
$taskErrors = $migTask.ProjectTask.Properties.Errors

# Display task errors
foreach($taskError in $taskErrors){
    $taskError |  Format-List
}


# Get database level details
$databaseLevelOutputs = $migTask.ProjectTask.Properties.Output

# Display database level details
foreach($databaseLevelOutput in $databaseLevelOutputs){

    # This is the source database name.
    $databaseName = $databaseLevelOutput.SourceDatabaseName;

    Write-Host "=========="
    Write-Host "Start migration details for database " $databaseName
    # This is the status for that database - It will be either of:
    # INITIAL, FULL_BACKUP_UPLOADING, FULL_BACKUP_UPLOADED, LOG_FILES_UPLOADING,
    # CUTOVER_IN_PROGRESS, CUTOVER_INITIATED, CUTOVER_COMPLETED, COMPLETED, CANCELLED, FAILED
    $databaseMigrationState = $databaseLevelOutput.MigrationState;

    # Details about last restored backup. This contains file names, LSN, backup date, etc 
    $databaseLastRestoredBackup = $databaseLevelOutput.LastRestoredBackupSetInfo
        
    # Details about last restored backup. This contains file names, LSN, backup date, etc 
    $databaseLastRestoredBackup = $databaseLevelOutput.LastRestoredBackupSetInfo

    # Details about last Currently active/most recent backups. This contains file names, LSN, backup date, etc 
    $databaseActiveBackpusets = $databaseLevelOutput.ActiveBackupSets

    # Display info
    $databaseLevelOutput | Format-List

    Write-Host "Currently active/most recent backupset details:"
    $databaseActiveBackpusets  | select BackupStartDate, BackupFinishedDate, FirstLsn, LastLsn -ExpandProperty ListOfBackupFiles | Format-List

    Write-Host "Last restored backupset details:"
    $databaseLastRestoredBackupFiles  | Format-List

    Write-Host "End migration details for database " $databaseName
    Write-Host "=========="
}

Tam geçişi gerçekleştirme

Çevrimiçi geçişle veritabanlarının tam yedeklemesi ve geri yüklemesi gerçekleştirilir ve ardından BackupFileShare'de depolanan İşlem Günlüklerini geri yükleme işlemi devam eder.

Azure SQL Yönetilen Örneği veritabanı en son verilerle güncelleştirildiğinde ve kaynak veritabanıyla eşitlendiğinde tam geçiş gerçekleştirebilirsiniz.

Aşağıdaki örnek tam geçiş işlemini tamamlar. Kullanıcılar kendi takdirlerine bağlı olarak bu komutu çağırır.

$command = Invoke-AzDmsCommand -CommandType CompleteSqlMiSync `
                               -ResourceGroupName myResourceGroup `
                               -ServiceName $service.Name `
                               -ProjectName $project.Name `
                               -TaskName myDMSTask `
                               -DatabaseName "Source DB Name"

Azure Veritabanı Geçiş Hizmeti örneğini silme

Geçiş tamamlandıktan sonra Azure Veritabanı Geçiş Hizmeti örneğini silebilirsiniz:

Remove-AzDms -ResourceGroupName myResourceGroup -ServiceName MyDMS

Ek kaynaklar

Ek geçiş senaryoları (kaynak/hedef çiftler) hakkında bilgi için bkz. Microsoft Veritabanı Geçiş Kılavuzu.

Sonraki adımlar

Azure Veritabanı Geçiş Hizmeti nedir? makalesinde Azure Veritabanı Geçiş Hizmeti hakkında daha fazla bilgi edinin.