Tutorial: Migración de PostgreSQL a Azure DB for PostgreSQL en línea mediante DMS a través de la CLI de AzureTutorial: Migrate PostgreSQL to Azure DB for PostgreSQL online using DMS via the Azure CLI

Puede usar Azure Database Migration Service para migrar las bases de datos de una instancia de PostgreSQL local a Azure Database for PostgreSQL con un tiempo de inactividad 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. En otras palabras, la migración se puede completar con un tiempo de inactividad mínimo para la aplicación.In other words, migration can be achieved with minimal downtime to the application. En este tutorial, va a migrar la base de datos de ejemplo DVD Rental de una instancia local de PostgreSQL 9.6 a Azure Database for PostgreSQL mediante la actividad de migración en línea de Azure Database Migration Service.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.

En este tutorial, aprenderá a:In this tutorial, you learn how to:

  • Migre el esquema de ejemplo mediante la utilidad pg_dump.Migrate the sample schema using pg_dump utility.
  • Crear una instancia de Azure Database Migration Service.Create an instance of the Azure Database Migration Service.
  • Crear un proyecto de migración mediante Azure Database Migration Service.Create a migration project by using the Azure Database Migration Service.
  • Ejecutar la migración.Run the migration.
  • Supervisar la migraciónMonitor the migration.

Nota

El uso de Azure Database Migration Service para realizar una migración en línea requiere la creación de una instancia basada en el plan de tarifa Premium.Using Azure Database Migration Service to perform an online migration requires creating an instance based on the Premium pricing tier. El disco se cifra para impedir el robo de datos durante el proceso de migración.We encrypt disk to prevent data theft during the process of migration.

Importante

Para disfrutar de una experiencia de migración óptima, Microsoft recomienda crear una instancia de Azure Database Migration Service en la misma región de Azure que la base de datos 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. Si los datos se transfieren entre diferentes regiones o ubicaciones geográficas, el proceso de migración puede verse afectado y pueden producirse errores.Moving data across regions or geographies can slow down the migration process and introduce errors.

PrerrequisitosPrerequisites

Para completar este tutorial, necesita:To complete this tutorial, you need to:

  • Descargue e instale PostgreSQL community edition 9.5, 9.6 o 10.Download and install PostgreSQL community edition 9.5, 9.6, or 10. La versión del servidor PostgreSQL Server de origen debe ser la 9.5.11, 9.6.7, 10 o una posterior.The source PostgreSQL Server version must be 9.5.11, 9.6.7, 10, or later. Para más información, consulte el artículo acerca de las versiones de base de datos admitidas de PostgreSQL.For more information, see the article Supported PostgreSQL Database Versions.

    Tenga en cuenta también que la versión de Azure Database for PostgreSQL de destino debe ser igual o posterior a la versión local de PostgreSQL.Also note that the target Azure Database for PostgreSQL version must be equal to or later than the on-premises PostgreSQL version. Por ejemplo, PostgreSQL 9.6 solo puede migrarse a Azure Database for PostgreSQL 9.6, 10 u 11, pero no a Azure Database for 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.

  • Cree una instancia de Azure Database for PostgreSQL o cree una instancia de Azure Database for PostgreSQL: servidor de Hiperescala (Citus).Create an instance in Azure Database for PostgreSQL or Create an Azure Database for PostgreSQL - Hyperscale (Citus) server.

  • Cree una instancia de Azure Virtual Network para Azure Database Migration Service mediante el modelo de implementación de Azure Resource Manager, que proporciona conectividad de sitio a sitio a los servidores de origen local mediante ExpressRoute o 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 más información sobre la creación de una red virtual, consulte la documentación de Virtual Networky, especialmente, los artículos de inicio rápido con detalles paso a paso.For more information about creating a virtual network, see the Virtual Network Documentation, and especially the quickstart articles with step-by-step details.

    Nota

    Durante la configuración de la red virtual, si usa ExpressRoute con emparejamiento de red a Microsoft, agregue los siguientes puntos de conexión de servicio a la subred en la que se aprovisionará el servicio: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:

    • Punto de conexión de base de datos de destino (por ejemplo, punto de conexión de SQL, punto de conexión de Cosmos DB, etc.)Target database endpoint (for example, SQL endpoint, Cosmos DB endpoint, and so on)
    • Punto de conexión de StorageStorage endpoint
    • Punto de conexión de Service BusService bus endpoint

    Esta configuración es necesaria porque Azure Database Migration Service no tiene conexión a Internet.This configuration is necessary because Azure Database Migration Service lacks internet connectivity.

  • Asegúrese de que las reglas del grupo de seguridad de red (NSG) de la red virtual no bloqueen los siguientes puertos de comunicación de salida a Azure Database Migration Service: 443, 53, 9354, 445, 12000.Ensure that your virtual network Network Security Group (NSG) rules don't block the following outbound communication ports to Azure Database Migration Service: 443, 53, 9354, 445, 12000. Para más información sobre el filtrado del tráfico con grupos de seguridad de red para redes virtuales, vea el artículo Filtrado del tráfico de red con grupos de seguridad de red.For more detail on virtual network NSG traffic filtering, see the article Filter network traffic with network security groups.

  • Configurar su Firewall de Windows para acceder al motor de base de datos.Configure your Windows Firewall for database engine access.

  • Abra el Firewall de Windows para permitir que Azure Database Migration Service tenga acceso al servidor PostgreSQL de origen que, de manera predeterminada, es el puerto 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.

  • Cuando se usa un dispositivo de firewall frente a las bases de datos de origen, puede que sea necesario agregar reglas de firewall para permitir que Azure Database Migration Service acceda a las bases de datos de origen para realizar la migración.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.

  • Cree una regla de firewall en el nivel de servidor para que Azure Database for PostgreSQL permita a Azure Database Migration Service tener acceso a las bases de datos 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. Proporcione el rango de subred de la red virtual que se usa para Azure Database Migration Service.Provide the subnet range of the virtual network used for Azure Database Migration Service.

  • Hay dos métodos para invocar la CLI:There are two methods for invoking the CLI:

    • En la esquina superior derecha de Azure Portal, seleccione el botón Cloud Shell:In the upper-right corner of the Azure portal, select the Cloud Shell button:

      Botón Cloud Shell en Azure Portal

    • Instale y ejecute la CLI localmente.Install and run the CLI locally. CLI 2.0 es una herramienta de línea de comandos para administrar recursos de Azure.CLI 2.0 is the command-line tool for managing Azure resources.

      Para descargar la CLI, siga las instrucciones del artículo Instalación de la CLI de Azure.To download the CLI, follow the instructions in the article Install Azure CLI 2.0. En el artículo también se enumeran las plataformas que admiten CLI 2.0.The article also lists the platforms that support CLI 2.0.

      Para configurar el subsistema Windows para Linux (WSL), siga las instrucciones de la guía de instalación de Windows 10To set up Windows Subsystem for Linux (WSL), follow the instructions in the Windows 10 Installation Guide

  • Habilite la replicación lógica en el archivo postgresql.config y establezca los parámetros siguientes:Enable logical replication in the postgresql.config file, and set the following parameters:

    • wal_level = logicalwal_level = logical
    • max_replication_slots = [número de ranuras], se recomienda establecer en cinco ranurasmax_replication_slots = [number of slots], recommend setting to five slots
    • max_wal_senders = [número de tareas simultáneas]; el parámetro max_wal_senders establece el número de tareas simultáneas que puede ejecutar; se recomienda establecerlo en 10 tareasmax_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

Migración del esquema de ejemploMigrate the sample schema

Para completar todos los objetos de base de datos como esquemas de tabla, índices y procedimientos almacenados, se debe extraer el esquema de la base de datos de origen y aplicarlo a la base de datos.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 el comando pg_dump -s para crear un archivo de volcado de esquema para una base de datos.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 ejemplo, para volcar una base de datos dvdrental de archivo de esquema:For example, to dump a schema file dvdrental database:

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

    Para más información sobre el uso de la utilidad pg_dump, vea los ejemplos del tutorial pg volcado.For more information about using the pg_dump utility, see the examples in the pg-dump tutorial.

  2. Cree una base de datos vacía en el entorno de destino, que es Azure Database for PostgreSQL.Create an empty database in your target environment, which is Azure Database for PostgreSQL.

    Para más información sobre cómo crear una base de datos y conectarse a ella, consulte el artículo Inicio rápido: Creación de un servidor de Azure Database for PostgreSQL en Azure Portal o Inicio rápido: Creación de una instancia de Hiperescala (Citus) de Azure Database for PostgreSQL en Azure Portal.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 el esquema en la base de datos de destino que creó restaurando el archivo de volcado 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 ejemplo:For example:

    psql -h mypgserver-20170401.postgres.database.azure.com  -U postgres -d dvdrental < dvdrentalSchema.sql
    
  4. Si tiene claves externas en el esquema, se producirá un error en la carga inicial y la sincronización continua de la migración.If you have foreign keys in your schema, the initial load and continuous sync of the migration will fail. Ejecute el siguiente script en PgAdmin o en psql para extraer el script de clave externa que desea eliminar y agregue el script de clave externa en el destino (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;
    

    Ejecute la clave externa que desea eliminar (que es la segunda columna) en el resultado de la consulta.Run the drop foreign key (which is the second column) in the query result.

  5. Los desencadenadores de los datos (desencadenadores de inserción o de actualización), aplicarán la integridad de datos en el destino antes que en los datos replicados desde el origen.Triggers in the data (insert or update triggers) will enforce data integrity in the target ahead of the replicated data from the source. Se recomienda deshabilitar los desencadenadores en todas las tablas del destino durante la migración y, cuando haya terminado esta, volver a habilitar los desencadenadores.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 deshabilitar los desencadenadores en la base de datos de destino, use el siguiente 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. Si hay un tipo de datos ENUM en todas las tablas, se recomienda actualizar temporalmente a un tipo de datos "character varying" en la tabla 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. Una vez realizada la replicación de datos, revierta el tipo de datos a ENUM.After data replication is done, revert the datatype to ENUM.

Aprovisionamiento de una instancia de DMS mediante la CLIProvisioning an instance of DMS using the CLI

  1. Instale la extensión de sincronización de dms:Install the dms sync extension:

    • Inicie sesión en Azure ejecutando el siguiente comando:Sign in to Azure by running the following command:

      az login
      
    • Cuando se le pida, abra un explorador web y escriba un código para autenticar el dispositivo.When prompted, open a web browser and enter a code to authenticate your device. Siga las instrucciones según se indican.Follow the instructions as listed.

    • Agregue la extensión de dms:Add the dms extension:

      • Para enumerar las extensiones disponibles, ejecute el siguiente comando:To list the available extensions, run the following command:

        az extension list-available –otable
        
      • Para instalar la extensión, ejecute el comando siguiente:To install the extension, run the following command:

        az extension add –n dms-preview
        
    • Para comprobar que ha instalado la extensión de dms correcta, ejecute el siguiente comando:To verify you have dms extension installed correct, run the following command:

      az extension list -otable
      

      Debería ver la siguiente salida:You should see the following output:

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

      Importante

      Asegúrese de que la versión de la extensión es posterior a la 0.11.0.Make sure that your extension version is above 0.11.0.

    • En cualquier momento, vea todos los comandos admitidos en DMS ejecutando:At any time, view all commands supported in DMS by running:

      az dms -h
      
    • Si tiene varias suscripciones de Azure, ejecute el siguiente comando para establecer la suscripción que desea usar para aprovisionar una instancia del servicio 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. Aprovisionar una instancia de DMS, ejecute el comando siguiente: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 ejemplo, el comando siguiente creará un servicio en:For example the following command will create a service in:

    • Ubicación: Este de EE. UU. 2Location: East US2
    • Suscripción: 97181df2-909d-420b-ab93-1bff15acb6b7Subscription: 97181df2-909d-420b-ab93-1bff15acb6b7
    • Nombre del grupo de recursos: PostgresDemoResource Group Name: PostgresDemo
    • Nombre del servicio 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
    

    La instancia del servicio DMS tarda en crearse entre 10 y 12 minutos aproximadamente.It takes about 10-12 minutes to create the instance of the DMS service.

  3. Para identificar la dirección IP del agente DMS para que se pueda agregar al archivo pg_hba.conf de Postgres, ejecute el siguiente 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 ejemplo:For example:

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

    Debe obtener un resultado similar a la siguiente dirección:You should get a result similar to the following address:

    [
      "172.16.136.18"
    ]
    
  4. Agregue la dirección IP del agente DMS al archivo pg_hba.conf de Postgres.Add the IP address of the DMS agent to the Postgres pg_hba.conf file.

    • Anote la dirección IP de DMS cuando termine el aprovisionamiento en DMS.Take note of the DMS IP address after you finish provisioning in DMS.

    • Agregue la dirección IP al archivo pg_hba.conf en el origen, de forma similar a la entrada siguiente: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. A continuación, cree un proyecto de migración de PostgreSQL ejecutando el comando siguiente: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 ejemplo, el comando siguiente crea un proyecto mediante estos parámetros:For example, the following command creates a project using these parameters:

    • Ubicación: Centro-Oeste de EE. UU.Location: West Central US

    • Nombre del grupo de recursos: PostgresDemoResource Group Name: PostgresDemo

    • Nombre del servicio: PostgresCLIService Name: PostgresCLI

    • Nombre del proyecto: PGMigrationProject name: PGMigration

    • Plataforma de origen: 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. Cree una tarea de migración de PostgreSQL mediante los siguientes pasos.Create a PostgreSQL migration task using the following steps.

    Este paso incluye el uso de la dirección IP de origen, el identificador de usuario y la contraseña, la dirección IP de destino, el identificador de usuario, la contraseña y el tipo de tarea para establecer la conectividad.This step includes using the source IP, UserID and password, destination IP, UserID, password, and task type to establish connectivity.

    • Para ver una lista completa de opciones, ejecute el comando:To see a full list of options, run the command:

      az dms project task create -h
      

      Para la conexión de origen y destino, el parámetro de entrada hace referencia a un archivo json que tiene la lista de objetos.For both source and target connection, the input parameter is referring to a json file that has the object list.

      El formato del objeto JSON de conexión para las conexiones de 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
              }
      
    • También hay un archivo json de opción de base de datos que enumera los objetos json.There's also a database option json file that lists the json objects. Para PostgreSQL, el formato del objeto JSON de las opciones de base de datos se muestra a continuación:For PostgreSQL, the format of the database options JSON object is shown below:

      [
          {
              "name": "source database",
              "target_database_name": "target database",
          },
          ...n
      ]
      
    • Cree un archivo json con el Bloc de notas, copie los comandos siguientes y péguelos en el archivo y luego guarde el archivo en 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                
             }
      
    • Cree otro archivo denominado target.json y guarde como C:\DMS\target.json.Create another file named target.json and save as C:\DMS\target.json. Incluya los comandos siguientes:Include the following commands:

      {
              "userName": " dms@builddemotarget",    
              "password": null,           
              "serverName": " builddemotarget.postgres.database.azure.com",
              "databaseName": "inventory", 
              "port": 5432                
          }
      
    • Cree un archivo json de opciones de base de datos que enumere el inventario como la base de datos para migrar:Create a database options json file that lists inventory as the database to migrate:

      [
          {
              "name": "dvdrental",
              "target_database_name": "dvdrental",
          }
      ]
      
    • Ejecute el siguiente comando, que toma el origen, el destino y los archivos json de opción de base de datos.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    
      

      Llegados a este punto, ha enviado correctamente una tarea de migración.At this point, you've successfully submitted a migration task.

  7. Para mostrar el progreso de la tarea, ejecute el siguiente 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
    

    O BIENOR

    az dms project task show --service-name PostgresCLI --project-name PGMigration --resource-group PostgresDemo --name Runnowtask --expand output
    
  8. También puede consultar migrationState desde la salida de expansión: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"
    

En el archivo de salida, hay varios parámetros que indican el progreso de la migración.In the output file, there are several parameters that indicate progress of migration. Por ejemplo, vea el archivo de salida siguiente: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"

Tarea de migración totalCutover migration task

La base de datos está lista para la migración total cuando se complete la carga total.The database is ready for cutover when full load is complete. Dependiendo de lo ocupado que esté el servidor de origen con las nuevas transacciones, la tarea DMS podría seguir aplicando cambios una vez completada la carga total.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 garantizar que todos los datos estén al día, valide los recuentos de filas entre las bases de datos de origen y destino.To ensure all data is caught up, validate row counts between the source and target databases. Por ejemplo, puede usar el siguiente 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. Realice la tarea de migración de base de datos de transición mediante el comando siguiente:Perform the cutover database migration task by using the following command:

    az dms project task cutover -h
    

    Por ejemplo:For example:

    az dms project task cutover --service-name PostgresCLI --project-name PGMigration --resource-group PostgresDemo --name Runnowtask  --object-name Inventory
    
  2. Para supervisar el progreso de transición, ejecute el comando siguiente: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. Cuando aparezca el estado Completado de la migración de base de datos, recree las secuencias (si procede) y conecte las aplicaciones a la nueva instancia de destino de Azure Database for PostgreSQL.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.

Limpieza de servicios, proyectos y tareasService, project, task cleanup

Si necesita cancelar o eliminar cualquier tarea, proyecto o servicio de DMS, realice la cancelación en la siguiente secuencia:If you need to cancel or delete any DMS task, project, or service, perform the cancellation in the following sequence:

  • Cancelar todas las tareas en ejecuciónCancel any running task
  • Eliminar la tareaDelete the task
  • Eliminar el proyectoDelete the project
  • Eliminar el servicio DMSDelete DMS service
  1. Para cancelar una tarea en ejecución, utilice el siguiente 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 una tarea en ejecución, utilice el siguiente 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 un proyecto en ejecución, utilice el siguiente 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 un proyecto en ejecución, utilice el siguiente 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 un servicio DMS, utilice el siguiente comando:To delete DMS service, use the following command:

    az dms delete -g ProgresDemo -n PostgresCLI
    

Pasos siguientesNext steps