Tutorial: Migrar o PostgreSQL para a Base de Dados do Azure para PostgreSQL online com o DMSTutorial: Migrate PostgreSQL to Azure Database for PostgreSQL online using DMS

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 do PostgreSQL local para o banco de dados do Azure para PostgreSQL com 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 obtida 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ê migra o banco de dados de exemplo de aluguel de DVD de uma instância local do PostgreSQL 9,6 para o banco de dados do Azure para PostgreSQL usando a 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, ficará a saber como:In this tutorial, you learn how to:

  • Migre o esquema de exemplo usando o utilitário pg_dump.Migrate the sample schema using pg_dump utility.
  • Criar uma instância do Azure Database Migration Service.Create an instance of the Azure Database Migration Service.
  • Utilizar o Azure Database Migration Service para criar um projeto de migração.Create a migration project by using the Azure Database Migration Service.
  • Executar a migração.Run the migration.
  • Monitorizar a migração.Monitor the migration.

Nota

Usar o serviço de migração de banco de dados do Azure para executar uma migração online requer 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.

Importante

Para uma experiência de migração ideal, 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 que 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 geografias pode retardar 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, precisa de: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 servidor PostgreSQL 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 de banco de dados PostgreSQL com suporte.For more information, see the article Supported PostgreSQL Database Versions.

    Além disso, a versão do PostgreSQL no local tem de corresponder à versão da Base de Dados do Azure para PostgreSQL.In addition, the on-premises PostgreSQL version must match the Azure Database for PostgreSQL version. Por exemplo, o PostgreSQL 9.5.11.5 só pode ser migrado para a Base de Dados do Azure para PostgreSQL 9.5.11 e não para a versão 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.

  • Criar uma instância na Base de Dados do Azure para PostgreSQL.Create an instance in Azure Database for PostgreSQL.

  • Criar uma VNet (rede virtual) do Azure para o serviço de migração de banco de dados do Azure usando o modelo de implantação Azure Resource Manager, que fornece conectividade site a site para seus servidores de origem locais usando o ExpressRoute ou a 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. Para obter mais informações sobre como criar uma VNet, consulte a documentação da rede virtuale especialmente os artigos de início rápido com detalhes passo a passo.For more information about creating a VNet, see the Virtual Network Documentation, and especially the quickstart articles with step-by-step details.

    Nota

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

    • Ponto de extremidade do banco de dados de destino (por exemplo, ponto de extremidade SQL, ponto de extremidade 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 the Azure Database Migration Service lacks internet connectivity.

  • Certifique-se de que suas regras de NSG (grupo de segurança de rede) VNet não bloqueiem as seguintes portas de comunicação de entrada para o serviço de migração de banco de dados do Azure: 443, 53, 9354, 445, 12000.Ensure that your VNet Network Security Group (NSG) rules don't block the following inbound communication ports to Azure Database Migration Service: 443, 53, 9354, 445, 12000. Para obter mais detalhes sobre a filtragem de tráfego NSG VNet do Azure, consulte o artigo filtrar o tráfego de rede com grupos de segurança de rede.For more detail on Azure VNet NSG traffic filtering, see the article Filter network traffic with network security groups.

  • Configurar a sua Firewall do Windows para acesso ao motor de bases 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.

  • Se estiver a utilizar uma aplicação de firewall à frente da base ou bases de dados, poderá ter de adicionar regras de firewall para permitir que o Azure Database Migration Service aceda à base ou bases 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 do servidor para o banco de dados do Azure para PostgreSQL para permitir que o serviço de migração de banco de dados do Azure acesse os 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-rede da VNet usada para o serviço de migração de banco de dados do Azure.Provide the subnet range of the VNet used for Azure Database Migration Service.

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

    • No canto superior direito da 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 comandos para gerir os recursos do Azure.CLI 2.0 is the command-line tool for managing Azure resources.

      Para transferir a CLI, siga as instruções no artigo Instalar a CLI 2.0 do Azure.To download the CLI, follow the instructions in the article Install Azure CLI 2.0. O artigo também indica as plataformas que suportam a CLI 2.0.The article also lists the platforms that support CLI 2.0.

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

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

    • wal_level = logicalwal_level = logical
    • max_replication_slots = [número de Slots], configuração recomendada para 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, definição recomendada de 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 base de dados, como esquemas de tabela, índices e procedimentos armazenados, é necessário extrair o esquema da base de dados de origem e aplicar à base 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. Utilize o comando pg_dump -s para criar um ficheiro de captura de esquema para uma base 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 capturar um ficheiro de esquema para uma base 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 utilizar o utilitário pg_dump, veja os exemplos no tutorial pg-dump.For more information about using the pg_dump utility, see the examples in the pg-dump tutorial.

  2. Crie uma base de dados vazia no ambiente de destino, que é a Base de Dados do Azure para PostgreSQL.Create an empty database in your target environment, which is Azure Database for PostgreSQL.

    Veja o artigo Criar um servidor da Base de Dados do Azure para PostgreSQL no portal do Azure para obter detalhes sobre como ligar e criar uma base de dados.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. Importe o esquema para a base de dados de destino que criou ao restaurar o ficheiro de captura de 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 tiver chaves externas no seu esquema, o carregamento inicial e a sincronização contínua da migração irão falhar.If you have foreign keys in your schema, the initial load and continuous sync of the migration will fail. Execute o seguinte script em PgAdmin ou em psql para extrair o script de remoção de chave de referência e adicionar o script de chave de referência no destino (Base 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 o script de remoção de chave externa (que é a segunda coluna) no resultado da consulta.Run the drop foreign key (which is the second column) in the query result.

  5. Os acionadores nos dados (acionadores de inserção ou adição) irão impor a integridade dos dados no destino antes 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 que você desabilite os gatilhos em todas as tabelas no destino durante a migração e, em seguida, habilite novamente os gatilhos após a conclusão da migraçã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 desativar os acionadores na base de dados de destino, utilize 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 um tipo de dados de enumeração em qualquer tabela, é recomendável atualizá-lo temporariamente para um DataType ' 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 da conclusão da replicação de dados, reverta o tipo de dados para ENUM.After data replication is done, revert the datatype to ENUM.

Aprovisionar uma instância do DMS com a CLIProvisioning an instance of DMS using the CLI

  1. Instale a extensão dms sync:Install the dms sync extension:

    • Inicie sessão no Azure ao executar o seguinte comando:Sign in to Azure by running the following command:

      az login
      
    • Quando lhe for pedido, abra um browser e introduza 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 tal como indicadas.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 tem a extensão dms correta instalada, execute o seguinte comando:To verify you have dms extension installed correct, run the following command:

      az extension list -otable
      

      Deverá ver o resultado seguinte:You should see the following output:

      ExtensionType    Name
      ---------------  ------
      whl              dms
      
    • Em qualquer altura, veja todos os comandos suportados no DMS ao executar:At any time, view all commands supported in DMS by running:

      az dms -h
      
    • Se tiver várias subscrições do Azure, execute o comando seguinte para definir a subscrição com que pretende aprovisionar 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. Aprovisione uma instância do DMS ao executar o seguinte comando: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
    

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

    • Localização: EUA Leste 2Location: East US2
    • Subscrição: 97181df2-909d-420b-ab93-1bff15acb6b7Subscription: 97181df2-909d-420b-ab93-1bff15acb6b7
    • Nome de 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 BusinessCritical_4vCores
    

    Demora cerca de 10 a 12 minutos para criar a instância do serviço DMS.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 que o possa adicionar ao ficheiro pg_hba.conf do Postgres, 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'
    

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

    [
      "172.16.136.18"
    ]
    
  4. Adicione o endereço IP do agente DMS ao ficheiro pg_hba.conf do Postgres.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 aprovisionamento no DMS.Take note of the DMS IP address after you finish provisioning in DMS.

    • Adicione o endereço IP ao ficheiro pg_hba.conf 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 ao executar 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 seguinte cria um projeto que utiliza estes parâmetros:For example, the following command creates a project using these parameters:

    • Localização: EUA Centro-OesteLocation: West Central US

    • Nome de 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 com os seguintes passos.Create a PostgreSQL migration task using the following steps.

    Este passo inclui a utilização do IP de origem, UserID e palavra-passe, IP de destino, UserID, palavra-passe e o tipo de tarefa para estabelecer 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
      

      Para a ligação de origem e de destino, o parâmetro de entrada refere-se a um ficheiro json que tem 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 ligação para ligaçõ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 de base 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 ficheiro json com o Bloco de notas, copie os seguintes comandos e cole-os no ficheiro e, em seguida, guarde o ficheiro 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 ficheiro com o nome target.json e guarde-o 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 ficheiro json de opções de base de dados que liste o inventário como a base de dados a migrar:Create a database options json file that lists inventory as the database to migrate:

      [
          {
              "name": "dvdrental",
              "target_database_name": "dvdrental",
          }
      ]
      
    • Execute o seguinte comando, que aceita a origem, o destino e os ficheiros json de opções de BD.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    
      

      Chegado a este ponto, já submeteu com êxito 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. Pode também consultar o migrationState a na saída de 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"
    

Compreender o estado da tarefa de migraçãoUnderstanding migration task status

No ficheiro de saída, existem diversos parâmetros que indicam o progresso da migração.In the output file, there are several parameters that indicate progress of migration. Por exemplo, veja o ficheiro 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 transferênciaCutover migration task

A base de dados está pronta para transferência quando o carregamento completo estiver concluído.The database is ready for cutover when full load is complete. Consoante o estado de disponibilidade do servidor de origem com novas transações a entrar, a tarefa DMS pode estar ainda 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 garantir que todos os dados são capturados, valide as contagens de linhas entre as bases 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, pode utilizar 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 da base de dados de transferência com 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  --database-name Inventory
    
  2. Para monitorizar o progresso da transferência, 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
    

Limpeza de serviços, projetos, tarefasService, project, task cleanup

Se precisar de cancelar ou eliminar qualquer tarefa, projeto ou serviço do DMS, execute o cancelamento na sequência seguinte:If you need to cancel or delete any DMS task, project, or service, perform the cancellation in the following sequence:

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

    az dms delete -g ProgresDemo -n PostgresCLI
    

Passos seguintesNext steps