Azure PowerShell を使用して SQL Server データベースを Azure SQL Database に移行する

この記事では、Microsoft Azure PowerShell を使用して、SQL Server 2016 以上のオンプレミス インスタンスに復元された Adventureworks2012 データベースを Azure SQL Database に移行します。 Microsoft Azure PowerShell の Az.DataMigration モジュールを使用して、データベースを SQL Server インスタンスから Azure SQL Database に移行できます。

この記事では、次の方法について説明します。

  • リソース グループを作成します。
  • Azure Database Migration Service のインスタンスを作成する。
  • Azure Database Migration Service インスタンスで移行プロジェクトを作成します。
  • 移行を実行する。

前提条件

これらの手順を完了するには、以下が必要です。

  • SQL Server 2016 以上 (任意のエディション)
  • TCP/IP プロトコルを有効にする (SQL Server Express のインストールでは既定で無効になっています)。 サーバー ネットワーク プロトコルの有効化または無効化に関する記事の説明に従って、TCP/IP プロトコルを有効にする。
  • データベース エンジン アクセス用の Windows Firewall の構成。
  • Azure SQL データベース インスタンス。 Azure SQL Database インスタンスを作成するには、Azure portal での Azure SQL Database の作成に関する記事に従ってください。
  • Data Migration Assistant v3.3 以降。
  • Azure Resource Manager デプロイ モデルを使用した Microsoft Azure 仮想ネットワークの作成。これにより、ExpressRoute または VPN を使用してオンプレミス ソース サーバーへのサイト間接続が Microsoft Azure Database Migration Service に提供されます。
  • SQL Server の移行評価の実行に関する記事に従って、Data Migration Assistant を使用して、オンプレミスのデータベースおよびスキーマの移行の評価を完了させる
  • Install-Module PowerShell コマンドレットを使用して、PowerShell ギャラリーから Az.DataMigration モジュールをダウンロードしてインストールする: [管理者として実行] を使用して PowerShell コマンド ウィンドウを開いていること確認してください。
  • ソースの SQL Server インスタンスへの接続に使用される資格情報に、CONTROL SERVER アクセス許可を含める。
  • ターゲットの Azure SQL DB インスタンスへの接続に使用される資格情報に、ターゲットの Azure SQL Database に対する CONTROL DATABASE アクセス許可が含まれていることを確認する。
  • Azure サブスクリプション。 お持ちでない場合は、開始する前に無料アカウントを作成してください。

Microsoft Azure サブスクリプションにログインする

Azure PowerShell でのログイン」にある手順に従い、PowerShell を使用して Azure サブスクリプションにサインインします。

リソース グループを作成する

Azure リソース グループとは、Azure リソースのデプロイと管理に使用する論理コンテナーです。 仮想マシンを作成する前に、リソース グループを作成する必要があります。

New-AzResourceGroup コマンドを使用してリソース グループを作成します。

次の例では、myResourceGroup という名前のリソース グループを米国東部リージョンに作成します。

New-AzResourceGroup -ResourceGroupName myResourceGroup -Location EastUS

Azure Database Migration Service のインスタンスを作成する

新しい Azure Database Migration Service インスタンスを作成するには、New-AzDataMigrationService コマンドレットを使用します。 このコマンドレットでは、次のパラメーターが必要です。

  • Azure リソース グループ名New-AzResourceGroup コマンドを使用して前述の Azure リソース グループを作成し、パラメーターとしてその名前を指定できます。
  • サービス名。 Azure Database Migration Service に使用する一意のサービス名に対応する文字列。
  • 場所。 サービスの場所を指定します。 米国西部や東南アジアなど、Azure データ センターの場所を指定してください。
  • SKU。 このパラメーターは、DMS SKU 名に対応します。 現在サポートされている SKU 名は GeneralPurpose_4vCores です。
  • 仮想サブネット識別子New-AzVirtualNetworkSubnetConfig コマンドレットを使用して、サブネットを作成できます。

次の例では、MyVNET という仮想ネットワークと MySubnet というサブネットを使用して、"米国東部" リージョンにあるリソース グループ MyDMSResourceGroupMyDMS という名前のサービスを作成します。

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

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

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

移行プロジェクトを作成する

Azure Database Migration Service インスタンスを作成した後、移行プロジェクトを作成します。 Azure Database Migration Service プロジェクトでは、ソースとターゲットの両方のインスタンスの接続情報に加え、プロジェクトの一部として移行するデータベースの一覧が必要です。

ソースとターゲットの接続用のデータベース接続情報オブジェクトを作成する

データベース接続情報オブジェクトを作成するには、New-AzDmsConnInfo コマンドレットを使用します。 このコマンドレットでは、次のパラメーターが必要です。

  • ServerType。 要求するデータベース接続の種類 (SQL、Oracle、MySQL など)。 SQL Server と Azure SQL には SQL を使用します。
  • DataSource。 SQL Server インスタンスや Azure SQL Database の名前または IP。
  • AuthType。 接続の認証の種類。SqlAuthentication または WindowsAuthentication を指定できます。
  • TrustServerCertificate パラメーターは、信頼関係を検証するための証明書チェーンのウォークをバイパスする間にチャネルを暗号化するかどうかを示す値を設定します。 値には true または false を指定できます。

次の例では、SQL 認証を使用する MySourceSQLServer という名前のソース SQL Server の接続情報オブジェクトが作成されます。

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

注意

ソース DataSource をパブリック IP アドレスまたは SQL Server の DNS として指定するときに移行がエラーで終了する場合は、SQL Serverを実行している Azure VM の名前を使用します。

次の例で、SQL 認証を使用する SQLAzureTarget という名前のサーバーの接続情報を作成する方法を示します。

$targetConnInfo = New-AzDmsConnInfo -ServerType SQL `
  -DataSource "sqlazuretarget.database.windows.net" `
  -AuthType SqlAuthentication `
  -TrustServerCertificate:$false

移行プロジェクト用のデータベースを指定する

Azure Database Migration プロジェクトの一部としてデータベースを指定する AzDataMigrationDatabaseInfo オブジェクトの一覧を作成します。これはプロジェクト作成用のパラメーターとして指定できます。 AzDataMigrationDatabaseInfo の作成にはコマンドレット New-AzDataMigrationDatabaseInfo を使用できます。

次の例では、AdventureWorks2016 データベース用の AzDataMigrationDatabaseInfo プロジェクトが作成され、プロジェクト作成用のパラメーターとして指定される一覧に追加されます。

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

プロジェクト オブジェクトを作成する

最後に、New-AzDataMigrationProject を使用し、以前に作成したソースとターゲットの接続と、移行するデータベースの一覧を追加することで、MyDMSProject という名前の Azure Database Migration プロジェクトを米国東部で作成できます。

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

移行タスクを作成して開始する

最後に、Azure Database Migration タスクを作成して開始します。 Azure Database Migration タスクには、前提条件として作成されたプロジェクトで提供済みの情報に加えて、ソースとターゲットと両方の接続の資格情報と、移行するデータベース テーブルの一覧が必要です。

ソースとターゲットの資格情報パラメーターを作成する

接続のセキュリティ資格情報は PSCredential オブジェクトとして作成できます。

次の例は、ソースとターゲットの両方の接続用の PSCredential オブジェクトを作成し、パスワードを文字列変数 $sourcePassword および $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)

テーブル マップを作成し、移行用のソースとターゲットのパラメーターを選択する

移行に必要なもう一つのパラメーターは、移行するソースからターゲットへのテーブル マッピングです。 移行用のソースとターゲット テーブル間のマッピングを指定するテーブルのディクショナリを作成します。 次の例は、AdventureWorks 2016 データベース用のソースとターゲット テーブルの HumanResources スキーマ間のマッピングを示しています。

$tableMap = New-Object 'system.collections.generic.dictionary[string,string]'
$tableMap.Add("HumanResources.Department", "HumanResources.Department")
$tableMap.Add("HumanResources.Employee","HumanResources.Employee")
$tableMap.Add("HumanResources.EmployeeDepartmentHistory","HumanResources.EmployeeDepartmentHistory")
$tableMap.Add("HumanResources.EmployeePayHistory","HumanResources.EmployeePayHistory")
$tableMap.Add("HumanResources.JobCandidate","HumanResources.JobCandidate")
$tableMap.Add("HumanResources.Shift","HumanResources.Shift")

次の手順は、次の例のように New-AzDmsSelectedDB コマンドレットを使用して、ソースとターゲット データベースを選択し、移行するテーブル マッピングをパラメーターとして指定することです。

$selectedDbs = New-AzDmsSelectedDB -MigrateSqlServerSqlDb -Name AdventureWorks2016 `
  -TargetDatabaseName AdventureWorks2016 `
  -TableMap $tableMap

移行タスクを作成して開始する

移行タスクを作成して開始するには、New-AzDataMigrationTask コマンドレットを使用します。 このコマンドレットでは、次のパラメーターが必要です。

  • TaskType。 作成する移行タスクの種類。SQL Server から Microsoft Azure SQL Database への移行では、MigrateSqlServerSqlDb が必要です。
  • ResourceGroupName。 タスクを作成する Azure リソース グループの名前。
  • ServiceName。 タスクを作成する Azure Database Migration Service インスタンス。
  • ProjectName。 タスクを作成する Azure Database Migration Service プロジェクトの名前。
  • TaskName。 作成するタスクの名前。
  • SourceConnection。 ソース SQL Server 接続を表す AzDmsConnInfo オブジェクト。
  • TargetConnection。 ターゲット Azure SQL Database 接続を表す AzDmsConnInfo オブジェクト。
  • SourceCred。 ソース サーバーに接続するための PSCredential オブジェクト。
  • TargetCred。 ターゲット サーバーに接続するための PSCredential オブジェクト。
  • SelectedDatabase。 ソースとターゲット データベースのマッピングを表す AzDataMigrationSelectedDB オブジェクト。
  • SchemaValidation。 (省略可能、スイッチ パラメーター) 移行の後、ソースとターゲットの間でスキーマ情報の比較を実行します。
  • DataIntegrityValidation。 (省略可能、スイッチ パラメーター) 移行の後、ソースとターゲットの間でチェックサム ベースのデータ整合性検証を実行します。
  • QueryAnalysisValidation。 (省略可能、スイッチ パラメーター) 移行の後、ソース データベースからクエリを取得することによって迅速なインテリジェント クエリ分析を実行し、それらをターゲットで実行します。

次の例では、myDMSTask という名前の移行タスクが作成されて開始します。

$migTask = New-AzDataMigrationTask -TaskType MigrateSqlServerSqlDb `
  -ResourceGroupName myResourceGroup `
  -ServiceName $service.Name `
  -ProjectName $project.Name `
  -TaskName myDMSTask `
  -SourceConnection $sourceConnInfo `
  -SourceCred $sourceCred `
  -TargetConnection $targetConnInfo `
  -TargetCred $targetCred `
  -SelectedDatabase  $selectedDbs `

次の例では、上と同じ移行タスクを作成して開始しますが、3 つの検証もすべて実行します。

$migTask = New-AzDataMigrationTask -TaskType MigrateSqlServerSqlDb `
  -ResourceGroupName myResourceGroup `
  -ServiceName $service.Name `
  -ProjectName $project.Name `
  -TaskName myDMSTask `
  -SourceConnection $sourceConnInfo `
  -SourceCred $sourceCred `
  -TargetConnection $targetConnInfo `
  -TargetCred $targetCred `
  -SelectedDatabase  $selectedDbs `
  -SchemaValidation `
  -DataIntegrityValidation `
  -QueryAnalysisValidation `

移行を監視する

次の例で示すように、タスクの状態プロパティを照会することにより、実行中の移行タスクを監視することができます。

if (($mytask.ProjectTask.Properties.State -eq "Running") -or ($mytask.ProjectTask.Properties.State -eq "Queued"))
{
  write-host "migration task running"
}

DMS インスタンスの削除

移行が完了したら、Azure DMS インスタンスを削除できます。

Remove-AzDms -ResourceGroupName myResourceGroup -ServiceName MyDMS

次のステップ