チュートリアル:DMS を使用して PostgreSQL をオンラインで Azure Database for PostgreSQ に移行するTutorial: Migrate PostgreSQL to Azure Database for PostgreSQL online using DMS

Azure Database Migration Service を使用して、最小限のダウンタイムでデータベースをオンプレミスの PostgreSQL インスタンスから Azure Database for PostgreSQL に移行できます。You can use Azure Database Migration Service to migrate the databases from an on-premises PostgreSQL instance to Azure Database for PostgreSQL with minimal downtime. つまり、アプリケーションにとって最小限のダウンタイムで移行を実現できます。In other words, migration can be achieved with minimal downtime to the application. このチュートリアルでは、Azure Database Migration Service のオンライン移行アクティビティを使用して、DVD Rental サンプル データベースを PostgreSQL 9.6 のオンプレミス インスタンスから Azure Database for PostgreSQL に移行します。In this tutorial, you migrate the DVD Rental sample database from an on-premises instance of PostgreSQL 9.6 to Azure Database for PostgreSQL by using the online migration activity in Azure Database Migration Service.

このチュートリアルでは、以下の内容を学習します。In this tutorial, you learn how to:

  • pg_dump ユーティリティを使用してサンプル スキーマを移行する。Migrate the sample schema using pg_dump utility.
  • Azure Database Migration Service のインスタンスを作成する。Create an instance of the Azure Database Migration Service.
  • Azure Database Migration Service を使用して移行プロジェクトを作成する。Create a migration project by using the Azure Database Migration Service.
  • 移行を実行する。Run the migration.
  • 移行を監視する。Monitor the migration.

注意

Azure Database Migration Service を使用してオンライン移行を実行するには、Premium 価格レベルに基づいてインスタンスを作成する必要があります。Using Azure Database Migration Service to perform an online migration requires creating an instance based on the Premium pricing tier.

重要

最適な移行エクスペリエンスのために、ターゲット データベースと同じ Azure リージョンに Azure Database Migration Service のインスタンスを作成することをお勧めします。For an optimal migration experience, Microsoft recommends creating an instance of Azure Database Migration Service in the same Azure region as the target database. リージョンや地域をまたいでデータを移動する場合、移行プロセスが遅くなり、エラーが発生する可能性があります。Moving data across regions or geographies can slow down the migration process and introduce errors.

前提条件Prerequisites

このチュートリアルを完了するには、以下を実行する必要があります。To complete this tutorial, you need to:

  • PostgreSQL コミュニティ エディション 9.5、9.6、または 10 をダウンロードしてインストールします。Download and install PostgreSQL community edition 9.5, 9.6, or 10. ソースの PostgreSQL サーバーのバージョンが 9.5.11、9.6.7、10、またはそれ以降のバージョンである必要がありますThe source PostgreSQL Server version must be 9.5.11, 9.6.7, 10, or later. 詳しくは、「サポートされている PostgreSQL Database バージョン」の記事をご覧ください。For more information, see the article Supported PostgreSQL Database Versions.

    また、オンプレミスの PostgreSQL のバージョンが、Azure Database for PostgreSQL のバージョンと一致する必要があります。In addition, the on-premises PostgreSQL version must match the Azure Database for PostgreSQL version. たとえば、PostgreSQL 9.5.11.5 は Azure Database for PostgreSQL 9.5.11 にのみ移行でき、 バージョン 9.6.7 には移行できません。For example, PostgreSQL 9.5.11.5 can only migrate to Azure Database for PostgreSQL 9.5.11 and not to version 9.6.7.

    注意

    PostgreSQL バージョン 10 では、現在、バージョン 10.3 から Azure Database for PostgreSQL への移行をサポートしているのは DMS のみです。For PostgreSQL version 10, currently DMS only supports migration of version 10.3 to Azure Database for PostgreSQL.

  • Azure Database for PostgreSQL のインスタンスを作成しますCreate an instance in Azure Database for PostgreSQL.

  • Azure Resource Manager デプロイ モデルを使用して、Azure Database Migration Service 用の Azure 仮想ネットワーク (VNet) を作成します。これで、ExpressRoute または VPN を使用したオンプレミスのソース サーバーへのサイト間接続が提供されます。Create an Azure Virtual Network (VNet) for Azure Database Migration Service by using the Azure Resource Manager deployment model, which provides site-to-site connectivity to your on-premises source servers by using either ExpressRoute or VPN. VNet の作成方法の詳細については、Virtual Network のドキュメント、特に詳細な手順を提供するクイックスタートの記事を参照してください。For more information about creating a VNet, see the Virtual Network Documentation, and especially the quickstart articles with step-by-step details.

    注意

    VNet のセットアップ中、Microsoft へのネットワーク ピアリングに ExpressRoute を使用する場合は、サービスのプロビジョニング先となるサブネットに、次のサービス エンドポイントを追加してください。During VNet setup, if you use ExpressRoute with network peering to Microsoft, add the following service endpoints to the subnet in which the service will be provisioned:

    • ターゲット データベース エンドポイント (SQL エンドポイント、Cosmos DB エンドポイントなど)Target database endpoint (for example, SQL endpoint, Cosmos DB endpoint, and so on)
    • ストレージ エンドポイントStorage endpoint
    • サービス バス エンドポイントService bus endpoint

    Azure Database Migration Service にはインターネット接続がないため、この構成が必要となります。This configuration is necessary because the Azure Database Migration Service lacks internet connectivity.

  • VNet のネットワーク セキュリティ グループ (NSG) 規則によって Azure Database Migration Service への以下のインバウンド通信ポートがブロックされないことを確認します: 443、53、9354、445、12000。Ensure that your VNet Network Security Group (NSG) rules do not block the following inbound communication ports to Azure Database Migration Service: 443, 53, 9354, 445, 12000. Azure VNet NSG トラフィックのフィルター処理の詳細については、ネットワーク セキュリティ グループによるネットワーク トラフィックのフィルター処理に関する記事を参照してください。For more detail on Azure VNet NSG traffic filtering, see the article Filter network traffic with network security groups.

  • データベース エンジン アクセスのために Windows ファイアウォールを構成します。Configure your Windows Firewall for database engine access.

  • Azure Database Migration Service がソース PostgreSQL サーバーにアクセスできるように Windows ファイアウォールを開きます。既定では TCP ポート 5432 です。Open your Windows firewall to allow Azure Database Migration Service to access the source PostgreSQL Server, which by default is TCP port 5432.

  • ソース データベースの前でファイアウォール アプライアンスを使用する場合は、Azure Database Migration Service が移行のためにソース データベースにアクセスできるように、ファイアウォール規則を追加することが必要な場合があります。When using a firewall appliance in front of your source database(s), you may need to add firewall rules to allow the Azure Database Migration Service to access the source database(s) for migration.

  • Azure Database for PostgreSQL のサーバーレベルのファイアウォール規則を作成して、Azure Database Migration Service がターゲット データベースにアクセスできるようにします。Create a server-level firewall rule for Azure Database for PostgreSQL to allow Azure Database Migration Service to access to the target databases. Azure Database Migration Service に使用される VNet のサブネット範囲を指定します。Provide the subnet range of the VNet used for Azure Database Migration Service.

  • CLI を呼び出すには、次の 2 つの方法があります。There are two methods for invoking the CLI:

    • Azure Portal の右上隅にある [Cloud Shell] ボタンを選択します。In the upper-right corner of the Azure postal, select the Cloud Shell button:

      Azure Portal の [Cloud Shell] ボタン

    • CLI をローカルにインストールして実行します。Install and run the CLI locally. CLI 2.0 は、Azure リソースを管理するためのコマンドライン ツールです。CLI 2.0 is the command-line tool for managing Azure resources.

      CLI をダウンロードするには、「Azure CLI 2.0 のインストール」の記事の手順に従ってください。To download the CLI, follow the instructions in the article Install Azure CLI 2.0. この記事には、CLI 2.0 をサポートするプラットフォームも一覧表示されています。The article also lists the platforms that support CLI 2.0.

      Windows Subsystem for Linux (WSL) を設定するには、Windows 10 インストール ガイドの指示に従います。To set up Windows Subsystem for Linux (WSL), follow the instructions in the Windows 10 Installation Guide

  • postgresql.config ファイルで論理レプリケーションを有効にし、次のパラメーターを設定します。Enable logical replication in the postgresql.config file, and set the following parameters:

    • wal_level = logicalwal_level = logical
    • max_replication_slots = [スロットの数]、 5 スロットに設定することをお勧めしますmax_replication_slots = [number of slots], recommend setting to 5 slots
    • max_wal_senders = [同時実行タスク数] - max_wal_senders パラメーターでは同時に実行できるタスクの数を設定します、10 タスクに設定することをお勧めしますmax_wal_senders =[number of concurrent tasks] - The max_wal_senders parameter sets the number of concurrent tasks that can run, recommend setting to 10 tasks

サンプル スキーマを移行するMigrate the sample schema

テーブル スキーマ、インデックス、ストアド プロシージャなどのすべてのデータベース オブジェクトを完了するには、ソース データベースからスキーマを抽出し、データベースに適用する必要があります。To complete all the database objects like table schemas, indexes and stored procedures, we need to extract schema from the source database and apply to the database.

  1. pg_dump -s コマンドを使用して、データベースのスキーマ ダンプ ファイルを作成します。Use pg_dump -s command to create a schema dump file for a database.

    pg_dump -o -h hostname -U db_username -d db_name -s > your_schema.sql
    

    たとえば、スキーマ ファイル dvdrental データベースをダンプするには:For example, to dump a schema file dvdrental database:

    pg_dump -o -h localhost -U postgres -d dvdrental -s  > dvdrentalSchema.sql
    

    pg_dump ユーティリティの使用方法の詳細については、 pg-dump チュートリアルの例を参照してください。For more information about using the pg_dump utility, see the examples in the pg-dump tutorial.

  2. ターゲット環境に空のデータベース (Azure Database for PostgreSQL) を作成します。Create an empty database in your target environment, which is Azure Database for PostgreSQL.

    データベースの接続と作成の詳細については、「Azure Portal で Azure Database for PostgreSQL サーバーを作成する」の記事を参照してください。Refer to the article Create an Azure Database for PostgreSQL server in the Azure portal for details on how to connect and create a database.

  3. スキーマ ダンプ ファイルを復元して作成したターゲット データベースに、スキーマをインポートします。Import the schema into the target database you created by restoring the schema dump file.

    psql -h hostname -U db_username -d db_name < your_schema.sql 
    

    例:For example:

    psql -h mypgserver-20170401.postgres.database.azure.com  -U postgres -d dvdrental < dvdrentalSchema.sql
    
  4. スキーマに外部キーが含まれている場合、移行の初回の読み込みと継続的同期は失敗します。If you have foreign keys in your schema, the initial load and continuous sync of the migration will fail. PgAdmin または psql で次のスクリプトを実行して、ドロップ外部キー スクリプトを抽出し、同期先 (Azure Database for PostgreSQL) に外部キースクリプトを追加します。Execute the following script in PgAdmin or in psql to extract the drop foreign key script and add foreign key script at the destination (Azure Database for PostgreSQL).

    SELECT Queries.tablename
           ,concat('alter table ', Queries.tablename, ' ', STRING_AGG(concat('DROP CONSTRAINT ', Queries.foreignkey), ',')) as DropQuery
                ,concat('alter table ', Queries.tablename, ' ',
                                                STRING_AGG(concat('ADD CONSTRAINT ', Queries.foreignkey, ' FOREIGN KEY (', column_name, ')', 'REFERENCES ', foreign_table_name, '(', foreign_column_name, ')' ), ',')) as AddQuery
        FROM
        (SELECT
        tc.table_schema,
        tc.constraint_name as foreignkey,
        tc.table_name as tableName,
        kcu.column_name,
        ccu.table_schema AS foreign_table_schema,
        ccu.table_name AS foreign_table_name,
        ccu.column_name AS foreign_column_name
    FROM
        information_schema.table_constraints AS tc
        JOIN information_schema.key_column_usage AS kcu
          ON tc.constraint_name = kcu.constraint_name
          AND tc.table_schema = kcu.table_schema
        JOIN information_schema.constraint_column_usage AS ccu
          ON ccu.constraint_name = tc.constraint_name
          AND ccu.table_schema = tc.table_schema
    WHERE constraint_type = 'FOREIGN KEY') Queries
      GROUP BY Queries.tablename;
    

    クエリの結果内の外部キー削除 (2 列目) を実行します。Run the drop foreign key (which is the second column) in the query result.

  5. データ内のトリガー (insert または update トリガー) により、ソースからのデータのレプリケート前に先立って、ターゲットにデータの整合性が適用されます。Triggers in the data (insert or update triggers) will enforce data integrity in the target ahead of the replicated data from the source. 移行時はターゲットのすべてのテーブル内のトリガーを無効にし、移行の完了後にトリガーを再度有効にすることをお勧めします。It's recommended that you disable triggers in all the tables at the target during migration and then re-enable the triggers after migration is complete.

    ターゲット データベース内のトリガーを無効にするには、次のコマンドを使用します。To disable triggers in target database, use the following command:

    select concat ('alter table ', event_object_table, ' disable trigger ', trigger_name)
    from information_schema.triggers;
    
  6. テーブル内に ENUM データ型がある場合は、ターゲット テーブルでそれを一時的に 'character varying' データ型に更新することをお勧めします。If there are ENUM data type in any tables, it's recommended that you temporarily update it to a ‘character varying’ datatype in the target table. データのレプリケーションが完了したら、データ型を ENUM に戻します。After data replication is done, revert the datatype to ENUM.

CLI を使用した DMS のインスタンスのプロビジョニングProvisioning an instance of DMS using the CLI

  1. dms の同期の拡張機能をインストールします。Install the dms sync extension:

    • 次のコマンドを実行して Azure にサインインします。Sign in to Azure by running the following command:

      az login
      
    • プロンプトが表示されたら、Web ブラウザーを開き、デバイスを認証するためのコードを入力します。When prompted, open a web browser and enter a code to authenticate your device. 記載されている手順に従います。Follow the instructions as listed.

    • dms の拡張機能を追加します。Add the dms extension:

      • 使用可能な拡張機能を一覧表示するには、次のコマンドを実行します。To list the available extensions, run the following command:

        az extension list-available –otable
        
      • 拡張機能をインストールするには、次のコマンドを実行します。To install the extension, run the following command:

        az extension add –n dms-preview
        
    • dms の拡張機能が正しくインストールされていることを確認するには、次のコマンドを実行します。To verify you have dms extension installed correct, run the following command:

      az extension list -otable
      

      次の出力が表示されます。You should see the following output:

      ExtensionType    Name
      ---------------  ------
      whl              dms
      
    • DMS でサポートされているすべてのコマンドを表示するには、次のコマンドを実行します。At any time, view all commands supported in DMS by running:

      az dms -h
      
    • 複数の Azure サブスクリプションがある場合は、次のコマンドを実行して、DMS サービスのインスタンスのプロビジョニングに使用するサブスクリプションを設定します。If you have multiple Azure subscriptions, run the following command to set the subscription that you want to use to provision an instance of the DMS service.

      az account set -s 97181df2-909d-420b-ab93-1bff15acb6b7
      
  2. 次のコマンドを実行して、DMS のインスタンスをプロビジョニングします。Provision an instance of DMS by running the following command:

    az dms create -l [location] -n <newServiceName> -g <yourResourceGroupName> --sku-name BusinessCritical_4vCores --subnet/subscriptions/{vnet subscription id}/resourceGroups/{vnet resource group}/providers/Microsoft.Network/virtualNetworks/{vnet name}/subnets/{subnet name} –tags tagName1=tagValue1 tagWithNoValue
    

    たとえば、次の設定でサービスを作成するには、下記のコマンドを実行します。For example the following command will create a service in:

    • 場所:米国東部 2Location: East US2
    • サブスクリプション:97181df2-909d-420b-ab93-1bff15acb6b7Subscription: 97181df2-909d-420b-ab93-1bff15acb6b7
    • リソース グループ名:PostgresDemoResource Group Name: PostgresDemo
    • DMS サービス名:PostgresCLIDMS Service Name: PostgresCLI
    az dms create -l eastus2 -g PostgresDemo -n PostgresCLI --subnet /subscriptions/97181df2-909d-420b-ab93-1bff15acb6b7/resourceGroups/ERNetwork/providers/Microsoft.Network/virtualNetworks/AzureDMS-CORP-USC-VNET-5044/subnets/Subnet-1 --sku-name BusinessCritical_4vCores
    

    DMS サービスのインスタンスを作成するには、約 10 ~ 12 分かかります。It takes about 10-12 minutes to create the instance of the DMS service.

  3. DMS エージェントの IP アドレスを特定して Postgres pg_hba.conf ファイルに追加できるようにするには、次のコマンドを実行します。To identify the IP address of the DMS agent so that you can add it to the Postgres pg_hba.conf file, run the following command:

    az network nic list -g <ResourceGroupName>--query '[].ipConfigurations | [].privateIpAddress'
    

    例:For example:

    az network nic list -g PostgresDemo --query '[].ipConfigurations | [].privateIpAddress'
    

    次のアドレスのような結果が表示されます。You should get a result similar to the following address:

    [
      "172.16.136.18"
    ]
    
  4. Postgres pg_hba.conf ファイルに、DMS エージェントの IP アドレスを追加します。Add the IP address of the DMS agent to the Postgres pg_hba.conf file.

    • DMS でのプロビジョニングが完了したら、DMS の IP アドレスをメモしておきます。Take note of the DMS IP address after you finish provisioning in DMS.

    • 次のエントリのように、ソース上の pg_hba.conf ファイルに IP アドレスを追加します。Add the IP address to pg_hba.conf file on the source, similar to the following entry:

      host    all     all     172.16.136.18/10    md5
      host    replication     postgres    172.16.136.18/10    md5
      
  5. 次に、以下のコマンドを実行して、PostgreSQL の移行プロジェクトを作成します。Next, create a PostgreSQL migration project by running the following command:

    az dms project create -l <location> -g <ResourceGroupName> --service-name <yourServiceName> --source-platform PostgreSQL --target-platform AzureDbforPostgreSQL -n <newProjectName>
    

    たとえば、次のパラメーターを使用してプロジェクトを作成するには、下記のコマンドを実行します。For example, the following command creates a project using these parameters:

    • 場所:米国中西部Location: West Central US

    • リソース グループ名:PostgresDemoResource Group Name: PostgresDemo

    • サービス名:PostgresCLIService Name: PostgresCLI

    • プロジェクト名:PGMigrationProject name: PGMigration

    • ソース プラットフォーム:PostgreSQLSource platform: PostgreSQL

    • ターゲット プラットフォーム:AzureDbForPostgreSqlTarget platform: AzureDbForPostgreSql

      az dms project create -l westcentralus -n PGMigration -g PostgresDemo --service-name PostgresCLI --source-platform PostgreSQL --target-platform AzureDbForPostgreSql
      
  6. 次の手順を使用して PostgreSQL 移行タスクを作成します。Create a PostgreSQL migration task using the following steps.

    この手順では、接続元 IP、ユーザー ID とパスワード、接続先 IP、ユーザー ID、パスワード、およびタスクの種類を使用して接続を確立します。This step includes using the source IP, UserID and password, destination IP, UserID, password, and task type to establish connectivity.

    • オプションの完全な一覧を表示するには、次のコマンドを実行します。To see a full list of options, run the command:

      az dms project task create -h
      

      接続元と接続先の両方について、入力パラメーターはオブジェクトの一覧を含む json ファイルを参照します。For both source and target connection, the input parameter is referring to a json file that has the object list.

      PostgreSQL の接続に対する接続 JSON オブジェクトの形式。The format of the connection JSON object for PostgreSQL connections.

      {
                  "userName": "user name",    // if this is missing or null, you will be prompted
                  "password": null,           // if this is missing or null (highly recommended) you will
              be prompted
                  "serverName": "server name",
                  "databaseName": "database name", // if this is missing, it will default to the 'postgres'
              server
                  "port": 5432                // if this is missing, it will default to 5432
              }
      
    • json オブジェクトを一覧表示するデータベース オプションの json ファイルもあります。There's also a database option json file that lists the json objects. PostgreSQL の場合、データベース オプションの JSON オブジェクトの形式は次のとおりです。For PostgreSQL, the format of the database options JSON object is shown below:

      [
          {
              "name": "source database",
              "target_database_name": "target database",
          },
          ...n
      ]
      
    • メモ帳で json ファイルを作成し、次のコマンドをコピーしてこのファイルに貼り付け、C:\DMS\source.json にこのファイルを保存します。Create a json file with Notepad, copy the following commands and paste them into the file, and then save the file in C:\DMS\source.json.

      {
                 "userName": "postgres",    
                 "password": null,           
             be prompted
                 "serverName": "13.51.14.222",
                 "databaseName": "dvdrental", 
                 "port": 5432                
             }
      
    • target.json という別のファイルを作成し、C:\DMS\target.json として保存します。Create another file named target.json and save as C:\DMS\target.json. 次のコマンドを含めます。Include the following commands:

      {
              "userName": " dms@builddemotarget",    
              "password": null,           
              "serverName": " builddemotarget.postgres.database.azure.com",
              "databaseName": "inventory", 
              "port": 5432                
          }
      
    • 移行するデータベースとしてインベントリを一覧表示する、データベース オプションの json ファイルを作成します。Create a database options json file that lists inventory as the database to migrate:

      [
          {
              "name": "dvdrental",
              "target_database_name": "dvdrental",
          }
      ]
      
    • 次のコマンドを実行します。このコマンドは、接続元、接続先、および DB オプションの json ファイルを取り込みます。Run the following command, which takes in the source, destination, and the DB option json files.

      az dms project task create -g PostgresDemo --project-name PGMigration --source-platform postgresql --target-platform azuredbforpostgresql --source-connection-json c:\DMS\source.json --database-options-json C:\DMS\option.json --service-name PostgresCLI --target-connection-json c:\DMS\target.json –task-type OnlineMigration -n runnowtask    
      

      この時点で、移行タスクが正常に送信されました。At this point, you've successfully submitted a migration task.

  7. タスクの進行状況を表示するには、次のコマンドを実行します。To show progress of the task, run the following command:

    az dms project task show --service-name PostgresCLI --project-name PGMigration --resource-group PostgresDemo --name Runnowtask
    

    またはOR

    az dms project task show --service-name PostgresCLI --project-name PGMigration --resource-group PostgresDemo --name Runnowtask --expand output
    
  8. 展開の出力から migrationState をクエリすることもできます。You can also query for the migrationState from the expand output:

    az dms project task show --service-name PostgresCLI --project-name PGMigration --resource-group PostgresDemo --name Runnowtask --expand output --query 'properties.output[].migrationState | [0]' "READY_TO_COMPLETE"
    

移行タスクの状態の理解Understanding migration task status

出力ファイルには、移行の進行状況を示すいくつかのパラメーターがあります。In the output file, there are several parameters that indicate progress of migration. たとえば、次の出力ファイルを参照してください。For example, see the output file below:

```
"output": [                                 Database Level
      {
        "appliedChanges": 0,        //Total incremental sync applied after full load
        "cdcDeleteCounter": 0       // Total delete operation  applied after full load
        "cdcInsertCounter": 0,      // Total insert operation applied after full load
        "cdcUpdateCounter": 0,      // Total update operation applied after full load
        "databaseName": "inventory",
        "endedOn": null,
        "fullLoadCompletedTables": 2,   //Number of tables completed full load
        "fullLoadErroredTables": 0, //Number of tables that contain migration error
        "fullLoadLoadingTables": 0, //Number of tables that are in loading status
        "fullLoadQueuedTables": 0,  //Number of tables that are in queued status
        "id": "db|inventory",
        "incomingChanges": 0,       //Number of changes after full load
        "initializationCompleted": true,
        "latency": 0,
        "migrationState": "READY_TO_COMPLETE",  //Status of migration task. READY_TO_COMPLETE means the database is ready for cutover
        "resultType": "DatabaseLevelOutput",
        "startedOn": "2018-07-05T23:36:02.27839+00:00"
      },
      {
        "databaseCount": 1,
        "endedOn": null,
        "id": "dd27aa3a-ed71-4bff-ab34-77db4261101c",
        "resultType": "MigrationLevelOutput",
        "sourceServer": "138.91.123.10",
        "sourceVersion": "PostgreSQL",
        "startedOn": "2018-07-05T23:36:02.27839+00:00",
        "state": "PENDING",
        "targetServer": "builddemotarget.postgres.database.azure.com",
        "targetVersion": "Azure Database for PostgreSQL"
      },
      {                                     Table 1
        "cdcDeleteCounter": 0,
        "cdcInsertCounter": 0,
        "cdcUpdateCounter": 0,
        "dataErrorsCount": 0,
        "databaseName": "inventory",
        "fullLoadEndedOn": "2018-07-05T23:36:20.740701+00:00",  //Full load completed time
        "fullLoadEstFinishTime": "1970-01-01T00:00:00+00:00",
        "fullLoadStartedOn": "2018-07-05T23:36:15.864552+00:00",    //Full load started time
        "fullLoadTotalRows": 10,                    //Number of rows loaded in full load
        "fullLoadTotalVolumeBytes": 7056,               //Volume in Bytes in full load
        "id": "or|inventory|public|actor",          
        "lastModifiedTime": "2018-07-05T23:36:16.880174+00:00",
        "resultType": "TableLevelOutput",
        "state": "COMPLETED",                   //State of migration for this table
        "tableName": "public.catalog",              //Table name
        "totalChangesApplied": 0                //Total sync changes that applied after full load
      },
      {                                     Table 2
        "cdcDeleteCounter": 0,
        "cdcInsertCounter": 50,
        "cdcUpdateCounter": 0,
        "dataErrorsCount": 0,
        "databaseName": "inventory",
        "fullLoadEndedOn": "2018-07-05T23:36:23.963138+00:00",
        "fullLoadEstFinishTime": "1970-01-01T00:00:00+00:00",
        "fullLoadStartedOn": "2018-07-05T23:36:19.302013+00:00",
        "fullLoadTotalRows": 112,
        "fullLoadTotalVolumeBytes": 46592,
        "id": "or|inventory|public|address",
        "lastModifiedTime": "2018-07-05T23:36:20.308646+00:00",
        "resultType": "TableLevelOutput",
        "state": "COMPLETED",
        "tableName": "public.orders",
        "totalChangesApplied": 0
      }
    ],                          DMS migration task state
    "state": "Running", //Migration task state – Running means it is still listening to any changes that might come in                  
    "taskType": null
  },
  "resourceGroup": "PostgresDemo",
  "type": "Microsoft.DataMigration/services/projects/tasks"
```

一括移行タスクCutover migration task

全体の読み込みが完了すると、データベースの一括移行の準備が整います。The database is ready for cutover when full load is complete. 新しいトランザクションによるソース サーバーのビジー状態によっては、DMS タスクで、全体の読み込みが完了した後でも変更が適用されている可能性があります。Depending on how busy the source server is with new transactions is coming in, the DMS task might be still applying changes after the full load is complete.

すべてのデータを確実に取り込むには、ソース データベースとターゲット データベース間の行数を検証します。To ensure all data is caught up, validate row counts between the source and target databases. たとえば、次のコマンドを使用できます。For example, you can use the following command:

"migrationState": "READY_TO_COMPLETE", //Status of migration task. READY_TO_COMPLETE means database is ready for cutover
 "incomingChanges": 0,  //continue to check for a period of 5-10 minutes to make sure no new incoming changes that need to be applied to the target server
   "fullLoadTotalRows": 10, //full load for table 1
    "cdcDeleteCounter": 0,  //delete, insert and update counter on incremental sync after full load
    "cdcInsertCounter": 50,
    "cdcUpdateCounter": 0,
     "fullLoadTotalRows": 112,  //full load for table 2
  1. 次のコマンドを使用して、データベースの一括移行タスクを実行します。Perform the cutover database migration task by using the following command:

    az dms project task cutover -h
    

    例:For example:

    az dms project task cutover --service-name PostgresCLI --project-name PGMigration --resource-group PostgresDemo --name Runnowtask  --database-name Inventory
    
  2. 一括移行の進行状況を監視するには、次のコマンドを実行します。To monitor the cutover progress, run the following command:

    az dms project task show --service-name PostgresCLI --project-name PGMigration --resource-group PostgresDemo --name Runnowtask
    

サービス、プロジェクト、タスクのクリーンアップService, project, task cleanup

DMS タスク、プロジェクト、またはサービスをキャンセルまたは削除する必要がある場合は、次の順序でキャンセルを実行します。If you need to cancel or delete any DMS task, project, or service, perform the cancellation in the following sequence:

  • 実行中のタスクを取り消すCancel any running task
  • ジョブを削除するDelete the task
  • プロジェクトを削除するDelete the project
  • DMS サービスを削除するDelete DMS service
  1. 実行中のタスクをキャンセルするには、次のコマンドを使用します。To cancel a running task, use the following command:

    az dms project task cancel --service-name PostgresCLI --project-name PGMigration --resource-group PostgresDemo --name Runnowtask
    
  2. 実行中のタスクを削除するには、次のコマンドを使用します。To delete a running task, use the following command:

    az dms project task delete --service-name PostgresCLI --project-name PGMigration --resource-group PostgresDemo --name Runnowtask
    
  3. 実行中のプロジェクトをキャンセルするには、次のコマンドを使用します。To cancel a running project, use the following command:

    az dms project task cancel -n runnowtask --project-name PGMigration -g PostgresDemo --service-name PostgresCLI
    
  4. 実行中のプロジェクトを削除するには、次のコマンドを使用します。To delete a running project, use the following command:

    az dms project task delete -n runnowtask --project-name PGMigration -g PostgresDemo --service-name PostgresCLI
    
  5. DMS サービスを削除するには、次のコマンドを使用します。To delete DMS service, use the following command:

    az dms delete -g ProgresDemo -n PostgresCLI
    

次の手順Next steps