Tutorial: Migrar o PostgreSQL para o BD do Azure para PostgreSQL online usando o DMS por meio da CLI do AzureTutorial: Migrate PostgreSQL to Azure DB for PostgreSQL online using DMS via the Azure CLI

Você pode usar o Serviço de Migração de Banco de Dados do Azure para migrar os bancos de dados de uma instância local do PostgreSQL para o Banco de Dados do Azure para PostgreSQL com um tempo de inatividade mínimo.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. Em outras palavras, a migração pode ser feita com o mínimo de tempo de inatividade para o aplicativo.In other words, migration can be achieved with minimal downtime to the application. Neste tutorial, você vai migrar o banco de dados de exemplo DVD Rental de uma instância local do PostgreSQL 9.6 para o Banco de Dados do Azure para PostgreSQL usando uma atividade de migração online no Serviço de Migração de Banco de Dados do Azure.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.

Neste tutorial, você aprenderá como:In this tutorial, you learn how to:

  • Migrar o esquema de exemplo usando o utilitário pg_dump.Migrate the sample schema using pg_dump utility.
  • Criar uma instância do Serviço de Migração de Banco de Dados do Azure.Create an instance of the Azure Database Migration Service.
  • Criar um projeto de migração usando o Serviço de Migração de Banco de Dados do Azure.Create a migration project by using the Azure Database Migration Service.
  • Executar a migração.Run the migration.
  • Monitorar a migração.Monitor the migration.

Observação

Usar o Serviço de Migração de Banco de Dados do Azure para executar uma migração online exige a criação de uma instância com base no tipo de preço Premium.Using Azure Database Migration Service to perform an online migration requires creating an instance based on the Premium pricing tier. Criptografamos o disco para evitar o roubo de dados durante o processo de migração.We encrypt disk to prevent data theft during the process of migration.

Importante

Para obter uma experiência ideal de migração, a Microsoft recomenda a criação de uma instância do Serviço de Migração de Banco de Dados do Azure na mesma região do Azure como o banco de dados de destino.For an optimal migration experience, Microsoft recommends creating an instance of Azure Database Migration Service in the same Azure region as the target database. Mover dados entre regiões ou áreas geográficas pode desacelerar o processo de migração e introduzir erros.Moving data across regions or geographies can slow down the migration process and introduce errors.

Pré-requisitosPrerequisites

Para concluir este tutorial, você precisará:To complete this tutorial, you need to:

  • Baixe e instale o PostgreSQL Community Edition 9.5, 9.6 ou 10.Download and install PostgreSQL community edition 9.5, 9.6, or 10. A versão do PostgreSQL Server de origem deve ser 9.5.11, 9.6.7, 10 ou posterior.The source PostgreSQL Server version must be 9.5.11, 9.6.7, 10, or later. Para obter mais informações, consulte o artigo Versões com suporte do Banco de Dados do PostgreSQL.For more information, see the article Supported PostgreSQL Database Versions.

    Observe também que a versão do Banco de Dados de destino do Azure para PostgreSQL precisa ser igual ou posterior à versão local do PostgreSQL.Also note that the target Azure Database for PostgreSQL version must be equal to or later than the on-premises PostgreSQL version. Por exemplo, o PostgreSQL 9.6 pode somente fazer a migração para o Banco de Dados do Azure para PostgreSQL 9.6, 10 ou 11, mas não para o Banco de Dados do Azure para PostgreSQL 9.5.For example, PostgreSQL 9.6 can only migrate to Azure Database for PostgreSQL 9.6, 10, or 11, but not to Azure Database for PostgreSQL 9.5.

  • Criar uma instância no Banco de Dados do Azure para PostgreSQL ou Criar um Banco de Dados do Azure para PostgreSQL – Hiperescala (Citus).Create an instance in Azure Database for PostgreSQL or Create an Azure Database for PostgreSQL - Hyperscale (Citus) server.

  • Criar uma Rede Virtual do Microsoft Azure para o Serviço de Migração de Banco de Dados do Azure usando o modelo de implantação do Azure Resource Manager, que fornece conectividade site a site aos servidores de origem locais usando o ExpressRoute ou a VPN.Create a Microsoft Azure Virtual Network 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. Para obter mais informações sobre como criar uma rede virtual, confira a Documentação da Rede Virtual e, especificamente, os artigos de Início Rápido com detalhes passo a passo.For more information about creating a virtual network, see the Virtual Network Documentation, and especially the quickstart articles with step-by-step details.

    Observação

    Durante a configuração da rede virtual, se você usar o ExpressRoute com emparelhamento de rede com a Microsoft, adicione os seguintes pontos de extremidade de serviço à sub-rede na qual o serviço será provisionado:During virtual network 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:

    • Ponto de extremidade do banco de dados de destino (por exemplo, ponto de extremidade do SQL, ponto de extremidade do Cosmos DB, e assim por diante)Target database endpoint (for example, SQL endpoint, Cosmos DB endpoint, and so on)
    • Ponto de extremidade de armazenamentoStorage endpoint
    • Ponto de extremidade do barramento de serviçoService bus endpoint

    Essa configuração é necessária porque o Serviço de Migração de Banco de Dados do Azure não tem conectividade com a internet.This configuration is necessary because Azure Database Migration Service lacks internet connectivity.

  • Verifique se as regras do NSG (grupo de segurança de rede) da rede virtual não bloqueiam a porta de saída 443 de ServiceTag para ServiceBus, Storage e AzureMonitor.Ensure that your virtual network Network Security Group (NSG) rules don't block the outbound port 443 of ServiceTag for ServiceBus, Storage, and AzureMonitor. Para obter mais detalhes sobre a filtragem de tráfego do NSG da rede virtual, confira o artigo Filtrar o tráfego de rede com grupos de segurança de rede.For more detail on virtual network NSG traffic filtering, see the article Filter network traffic with network security groups.

  • Configurar o Firewall do Windows para acesso ao mecanismo de banco de dados.Configure your Windows Firewall for database engine access.

  • Abra o firewall do Windows para permitir que o Serviço de Migração de Banco de Dados do Azure acesse o servidor PostgreSQL de origem, que por padrão é a porta 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.

  • Ao usar um dispositivo de firewall na frente de seus bancos de dados de origem, talvez seja necessário adicionar regras de firewall para permitir que o Serviço de Migração de Banco de Dados do Azure acesse os bancos de dados de origem para migração.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.

  • Crie uma regra de firewall no nível de servidor para o Banco de Dados do Azure para PostgreSQL a fim de permitir o acesso do Serviço de Migração de Banco de Dados do Azure aos bancos de dados de destino.Create a server-level firewall rule for Azure Database for PostgreSQL to allow Azure Database Migration Service to access to the target databases. Forneça o intervalo de sub-redes da rede virtual usado para o Serviço de Migração de Banco de Dados do Azure.Provide the subnet range of the virtual network used for Azure Database Migration Service.

  • Há dois métodos para invocar a CLI:There are two methods for invoking the CLI:

    • No canto superior direito do portal do Azure, selecione o botão Cloud Shell:In the upper-right corner of the Azure portal, select the Cloud Shell button:

      Botão Cloud Shell no portal do Azure

    • Instale e execute a CLI localmente.Install and run the CLI locally. A CLI 2.0 é a ferramenta de linha de comando para gerenciar recursos do Azure.CLI 2.0 is the command-line tool for managing Azure resources.

      Para baixar a CLI, siga as instruções no artigo Instalar a CLI do Azure 2.0.To download the CLI, follow the instructions in the article Install Azure CLI 2.0. O artigo também lista as plataformas que dão suporte à CLI 2.0.The article also lists the platforms that support CLI 2.0.

      Para configurar o WSL (Subsistema do Windows para Linux), siga as instruções no Guia de instalação do Windows 10To set up Windows Subsystem for Linux (WSL), follow the instructions in the Windows 10 Installation Guide

  • Habilite a replicação lógica no arquivo postgresql.config e defina os seguintes parâmetros:Enable logical replication in the postgresql.config file, and set the following parameters:

    • wal_level = lógicowal_level = logical
    • max_replication_slots = [número de slots]; é recomendável configurar como cinco slotsmax_replication_slots = [number of slots], recommend setting to five slots
    • max_wal_senders =[número de tarefas simultâneas] – O parâmetro max_wal_senders define o número de tarefas simultâneas que podem ser executadas; é recomendável definir como 10 tarefasmax_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

Migrar o esquema de exemploMigrate the sample schema

Para concluir todos os objetos de banco de dados, como procedimentos armazenados, índices e esquemas de tabela, é necessário extrair o esquema do banco de dados de origem e aplicar ao banco de dados.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. Use o comando pg_dump -s para criar um arquivo de despejo de esquema para um banco de dados.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
    

    Por exemplo, para despejar o arquivo de esquema do banco de dados dvdrental:For example, to dump a schema file dvdrental database:

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

    Para obter mais informações sobre como usar o utilitário pg_dump, confira os exemplos do tutorial pg-dump.For more information about using the pg_dump utility, see the examples in the pg-dump tutorial.

  2. Crie um banco de dados vazio no ambiente de destino, que é o Banco de Dados do Azure para PostgreSQL.Create an empty database in your target environment, which is Azure Database for PostgreSQL.

    Para obter detalhes sobre como conectar e criar um banco de dados, confira o artigo Criar um servidor de Banco de Dados do Azure para PostgreSQL no portal do Azure ou Criar um servidor de Banco de Dados do Azure para PostgreSQL – Hiperescala (Citus) no portal do Azure.For details on how to connect and create a database, see the article Create an Azure Database for PostgreSQL server in the Azure portal or Create an Azure Database for PostgreSQL - Hyperscale (Citus) server in the Azure portal.

  3. Importe o esquema para o banco de dados de destino criado restaurando o arquivo de despejo do esquema.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 
    

    Por exemplo:For example:

    psql -h mypgserver-20170401.postgres.database.azure.com  -U postgres -d dvdrental < dvdrentalSchema.sql
    
  4. Se você tiver chaves estrangeiras em seu esquema, o carregamento inicial e a sincronização contínua da migração falharão.If you have foreign keys in your schema, the initial load and continuous sync of the migration will fail. Execute o script a seguir em PgAdmin ou em psql para extrair o script de chave estrangeira de descarte e adicione o script de chave estrangeira ao destino (Banco de Dados do Azure para 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;
    

    Execute a remoção de chave estrangeira (que é a segunda coluna) no resultado da consulta.Run the drop foreign key (which is the second column) in the query result.

  5. Os gatilhos dos dados (gatilho de inserção ou atualização) aplicarão a integridade de dados no destino à frente dos dados replicados da origem.Triggers in the data (insert or update triggers) will enforce data integrity in the target ahead of the replicated data from the source. É recomendável desabilitar os gatilhos em todas as tabelas no destino durante a migração e reabilitar os gatilhos após sua conclusão.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.

    Para desabilitar gatilhos no banco de dados de destino, use o seguinte comando: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. Se houver tipo de dados ENUM em alguma tabela, é recomendável que você a atualize temporariamente para um tipo de dados 'character varying' na tabela de destino.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. Depois que a replicação de dados for feita, reverta o tipo de dados para ENUM.After data replication is done, revert the datatype to ENUM.

Como provisionar uma instância do DMS usando a CLI do AzureProvisioning an instance of DMS using the Azure CLI

  1. Instale a extensão de sincronização do DMS:Install the dms sync extension:

    • Execute o seguinte comando para entrar no Azure:Sign in to Azure by running the following command:

      az login
      
    • Quando solicitado, abra um navegador da Web e insira um código para autenticar o dispositivo.When prompted, open a web browser and enter a code to authenticate your device. Siga as instruções conforme listadas.Follow the instructions as listed.

    • Adicione a extensão dms:Add the dms extension:

      • Para listar as extensões disponíveis, execute o seguinte comando:To list the available extensions, run the following command:

        az extension list-available –otable
        
      • Para instalar a extensão, execute o seguinte comando:To install the extension, run the following command:

        az extension add –n dms-preview
        
    • Para verificar se você tem a extensão dms instalada corretamente, execute o seguinte comando:To verify you have dms extension installed correct, run the following command:

      az extension list -otable
      

      Você deve ver o seguinte resultado:You should see the following output:

      ExtensionType    Name
      ---------------  ------
      whl              dms
      

      Importante

      Verifique se sua versão de extensão é superior à 0.11.0.Make sure that your extension version is above 0.11.0.

    • É possível exibir todos os comandos com suporte no DMS a qualquer momento executando:At any time, view all commands supported in DMS by running:

      az dms -h
      
    • Se você tiver várias assinaturas do Azure, execute o comando a seguir para definir a assinatura que deseja usar para provisionar uma instância do serviço 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. Provisione uma instância do DMS executando o seguinte comando:Provision an instance of DMS by running the following command:

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

    Por exemplo, o seguinte comando criará um serviço em:For example the following command will create a service in:

    • Localização: Leste dos EUA2Location: East US2
    • Assinatura: 97181df2-909d-420b-ab93-1bff15acb6b7Subscription: 97181df2-909d-420b-ab93-1bff15acb6b7
    • Nome do grupo de recursos: PostgresDemoResource Group Name: PostgresDemo
    • Nome do serviço 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 Premium_4vCores
    

    A criação da instância do serviço DMS leva cerca de 10 a 12 minutos.It takes about 10-12 minutes to create the instance of the DMS service.

  3. Para identificar o endereço IP do agente do DMS para e poder adicioná-lo ao arquivo Postgres pg_hba, execute o seguinte comando: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'
    

    Por exemplo:For example:

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

    Você verá um resultado semelhante ao seguinte endereço:You should get a result similar to the following address:

    [
      "172.16.136.18"
    ]
    
  4. Adicione o endereço IP do agente do DMS ao arquivo Postgres pg_hba.Add the IP address of the DMS agent to the Postgres pg_hba.conf file.

    • Anote o endereço IP do DMS depois de concluir o provisionamento no DMS.Take note of the DMS IP address after you finish provisioning in DMS.

    • Adicione o endereço IP ao arquivo pg_hba na origem, semelhante à seguinte entrada: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. Em seguida, crie um projeto de migração do PostgreSQL executando o seguinte comando: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>
    

    Por exemplo, o comando abaixo cria um projeto usando estes parâmetros:For example, the following command creates a project using these parameters:

    • Localização: Centro-oeste dos EUALocation: West Central US

    • Nome do grupo de recursos: PostgresDemoResource Group Name: PostgresDemo

    • Nome do serviço: PostgresCLIService Name: PostgresCLI

    • Nome do projeto: PGMigrationProject name: PGMigration

    • Plataforma de origem: PostgreSQLSource platform: PostgreSQL

    • Plataforma de destino: AzureDbForPostgreSqlTarget platform: AzureDbForPostgreSql

      az dms project create -l westcentralus -n PGMigration -g PostgresDemo --service-name PostgresCLI --source-platform PostgreSQL --target-platform AzureDbForPostgreSql
      
  6. Crie uma tarefa de migração do PostgreSQL usando as etapas a seguir.Create a PostgreSQL migration task using the following steps.

    Esta etapa inclui o uso do IP de origem, da ID de usuário e da senha, do IP de destino, da ID de usuário, da senha e do tipo de tarefa para estabelecer a conectividade.This step includes using the source IP, UserID and password, destination IP, UserID, password, and task type to establish connectivity.

    • Para ver uma lista completa de opções, execute o comando:To see a full list of options, run the command:

      az dms project task create -h
      

      No caso das conexões de origem e de destino, o parâmetro de entrada se refere a um arquivo JSON que contém a lista de objetos.For both source and target connection, the input parameter is referring to a json file that has the object list.

      O formato do objeto JSON de conexão para conexões do PostgreSQL.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
              }
      
    • Há também um arquivo JSON de opção de banco de dados que lista os objetos JSON.There's also a database option json file that lists the json objects. Para o PostgreSQL, o formato do objeto JSON de opções do banco de dados é mostrado abaixo:For PostgreSQL, the format of the database options JSON object is shown below:

      [
          {
              "name": "source database",
              "target_database_name": "target database",
          },
          ...n
      ]
      
    • Crie um arquivo JSON com o Bloco de Notas, copie os comandos a seguir, cole-os no arquivo e salve o arquivo em 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                
             }
      
    • Crie outro arquivo denominado target.json e salve como C:\DMS\target.json.Create another file named target.json and save as C:\DMS\target.json. Inclua os seguintes comandos:Include the following commands:

      {
              "userName": " dms@builddemotarget",    
              "password": null,           
              "serverName": " builddemotarget.postgres.database.azure.com",
              "databaseName": "inventory", 
              "port": 5432                
          }
      
    • Crie um arquivo JSON de opções do banco de dados que lista o inventário como o banco de dados a ser migrado:Create a database options json file that lists inventory as the database to migrate:

      [
          {
              "name": "dvdrental",
              "target_database_name": "dvdrental",
          }
      ]
      
    • Execute o comando a seguir, que usa a origem, o destino e os arquivos JSON de opções do banco de dados.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    
      

      Neste ponto, você enviou com sucesso uma tarefa de migração.At this point, you've successfully submitted a migration task.

  7. Para mostrar o progresso da tarefa, execute o seguinte comando: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
    

    OUOR

    az dms project task show --service-name PostgresCLI --project-name PGMigration --resource-group PostgresDemo --name Runnowtask --expand output
    
  8. Você também pode consultar o migrationState na saída da expansão: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"
    

Há vários parâmetros que indicam o progresso da migração no arquivo de saída.In the output file, there are several parameters that indicate progress of migration. Por exemplo, confira o arquivo de saída abaixo: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"

Tarefa de migração de substituiçãoCutover migration task

O banco de dados estará pronto para substituição quando o carregamento completo terminar.The database is ready for cutover when full load is complete. Dependendo do estado de ocupação do servidor de origem com as novas transações, a tarefa do DMS poderá continuar a aplicar as alterações após a conclusão do carregamento completo.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.

Para verificar se todos os dados estão atualizados, valide as contagens de linhas entre os bancos de dados de origem e de destino.To ensure all data is caught up, validate row counts between the source and target databases. Por exemplo, você pode usar o seguinte comando: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. Execute a tarefa de migração de substituição do banco de dados usando o seguinte comando:Perform the cutover database migration task by using the following command:

    az dms project task cutover -h
    

    Por exemplo:For example:

    az dms project task cutover --service-name PostgresCLI --project-name PGMigration --resource-group PostgresDemo --name Runnowtask  --object-name Inventory
    
  2. Para monitorar o progresso da substituição, execute o seguinte comando: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
    
  3. Quando o status da migração de banco de dados mostrar Concluído, recrie sequências (se aplicável) e conecte seus aplicativos à nova instância do Banco de Dados do Azure para PostgreSQL de destino.When the database migration status shows Completed, recreate sequences (if applicable), and connect your applications to the new target instance of Azure Database for PostgreSQL.

Limpeza de tarefa, projeto, serviçoService, project, task cleanup

Se você precisar cancelar ou excluir uma tarefa, um projeto ou um serviço DMS, execute o cancelamento na sequência a seguir:If you need to cancel or delete any DMS task, project, or service, perform the cancellation in the following sequence:

  • Cancelar as tarefas em execuçãoCancel any running task
  • Excluir a tarefaDelete the task
  • Excluir o projetoDelete the project
  • Excluir o serviço DMSDelete DMS service
  1. Para cancelar uma tarefa em execução, use o seguinte comando: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. Para excluir uma tarefa em execução, use o seguinte comando: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. Para cancelar um projeto em execução, use o seguinte comando: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. Para excluir um projeto em execução, use o seguinte comando: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. Para excluir o serviço DMS, use o seguinte comando:To delete DMS service, use the following command:

    az dms delete -g ProgresDemo -n PostgresCLI
    

Próximas etapasNext steps