Tutorial: Onlinemigration von PostgreSQL zu Azure Database for PostgreSQL mit Database Migration Service über die Azure-BefehlszeilenschnittstelleTutorial: Migrate PostgreSQL to Azure DB for PostgreSQL online using DMS via the Azure CLI

Mit Azure Database Migration Service können Sie die Datenbanken mit minimaler Ausfallzeit von einer lokalen PostgreSQL-Instanz zu Azure Database for PostgreSQL migrieren.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. Somit kommt es bei der Migration nur zu einer geringen Ausfallzeit für die Anwendung.In other words, migration can be achieved with minimal downtime to the application. In diesem Tutorial migrieren Sie die Beispieldatenbank DVD Rental von einer lokalen Instanz von PostgreSQL 9.6 zu Azure Database for PostgreSQL. Zu diesem Zweck verwenden Sie die Onlinemigrationsaktivität in 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.

In diesem Tutorial lernen Sie Folgendes:In this tutorial, you learn how to:

  • Migrieren des Beispielschemas mit dem Hilfsprogramm pg_dumpMigrate the sample schema using pg_dump utility.
  • Erstellen einer Instanz von Azure Database Migration ServiceCreate an instance of the Azure Database Migration Service.
  • Erstellen Sie ein Migrationsprojekt mithilfe von Azure Database Migration Service.Create a migration project by using the Azure Database Migration Service.
  • Ausführen der MigrationRun the migration.
  • Überwachen der MigrationMonitor the migration.

Hinweis

Die Verwendung von Azure Database Migration Service zum Ausführen einer Onlinemigration erfordert das Erstellen einer Instanz auf der Grundlage des Premium-Tarifs.Using Azure Database Migration Service to perform an online migration requires creating an instance based on the Premium pricing tier. Wir verschlüsseln den Datenträger, um Datendiebstahl während der Migration zu verhindern.We encrypt disk to prevent data theft during the process of migration.

Wichtig

Für eine optimale Migration empfiehlt Microsoft die Erstellung einer Azure Database Migration Service-Instanz in derselben Azure-Region, in der sich auch die Zieldatenbank befindet.For an optimal migration experience, Microsoft recommends creating an instance of Azure Database Migration Service in the same Azure region as the target database. Die Verschiebung von Daten zwischen Regionen oder Geografien kann den Migrationsvorgang verlangsamen und Fehler verursachen.Moving data across regions or geographies can slow down the migration process and introduce errors.

VoraussetzungenPrerequisites

Für dieses Tutorial benötigen Sie Folgendes:To complete this tutorial, you need to:

  • Laden Sie PostgreSQL Community Edition 9.5, 9.6 oder 10 herunter, und installieren Sie die Edition.Download and install PostgreSQL community edition 9.5, 9.6, or 10. Die PostgreSQL-Version des Quellservers muss 9.5.11, 9.6.7, 10 oder höher sein.The source PostgreSQL Server version must be 9.5.11, 9.6.7, 10, or later. Weitere Informationen finden Sie im Artikel Unterstützte PostgreSQL-Datenbankversionen.For more information, see the article Supported PostgreSQL Database Versions.

    Beachten Sie auch, dass die Azure Database for PostgreSQL-Zielversion höher als die lokale PostgreSQL-Version sein oder dieser entsprechen muss.Also note that the target Azure Database for PostgreSQL version must be equal to or later than the on-premises PostgreSQL version. Beispiel: PostgreSQL 9.6 kann nur zu Azure Database for PostgreSQL 9.6, 10 oder 11 migriert werden, nicht aber zu 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.

  • Erstellen einer Instanz in Azure Database for PostgreSQL-Server oder Erstellen eines Azure Database for PostgreSQL-Servers – Hyperscale (Citus).Create an instance in Azure Database for PostgreSQL or Create an Azure Database for PostgreSQL - Hyperscale (Citus) server.

  • Erstellen Sie ein virtuelles Microsoft Azure-Netzwerk für Azure Database Migration Service mithilfe des Azure Resource Manager-Bereitstellungsmodells, das Site-to-Site-Konnektivität für Ihre lokalen Quellserver über ExpressRoute oder über VPN bereitstellt.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. Weitere Informationen zum Erstellen eines virtuellen Netzwerks finden Sie in der Dokumentation zu Virtual Network und insbesondere in den Schnellstartartikeln mit Schritt-für-Schritt-Anleitungen.For more information about creating a virtual network, see the Virtual Network Documentation, and especially the quickstart articles with step-by-step details.

    Hinweis

    Fügen Sie bei Verwendung von ExpressRoute mit Netzwerkpeering zu Microsoft während des Setups des virtuellen Netzwerks die folgenden Dienstendpunkte zu dem Subnetz hinzu, in dem der Dienst bereitgestellt werden soll: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:

    • Zieldatenbankendpunkt (z. B. SQL-Endpunkt, Cosmos DB-Endpunkt usw.)Target database endpoint (for example, SQL endpoint, Cosmos DB endpoint, and so on)
    • SpeicherendpunktStorage endpoint
    • Service Bus-EndpunktService bus endpoint

    Diese Konfiguration ist erforderlich, weil Azure Database Migration Service über keine Internetverbindung verfügt.This configuration is necessary because Azure Database Migration Service lacks internet connectivity.

  • Stellen Sie sicher, dass die NSG-Regeln (Netzwerksicherheitsgruppen) des virtuellen Netzwerks nicht die folgenden Ports für ausgehende Kommunikation in Azure Database Migration Service blockieren: 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. Ausführlichere Informationen zur NSG-Datenverkehrsfilterung in einem virtuellen Netzwerk finden Sie im Artikel Filtern des Netzwerkdatenverkehrs mit Netzwerksicherheitsgruppen.For more detail on virtual network NSG traffic filtering, see the article Filter network traffic with network security groups.

  • Konfigurieren Sie Ihre Windows-Firewall für Datenbank-Engine-Zugriff.Configure your Windows Firewall for database engine access.

  • Öffnen Sie Ihre Windows-Firewall, damit Azure Database Migration Service auf die PostgreSQL Server-Quellinstanz zugreifen kann (standardmäßig TCP-Port 5432).Open your Windows firewall to allow Azure Database Migration Service to access the source PostgreSQL Server, which by default is TCP port 5432.

  • Wenn Sie eine Firewall-Appliance vor Ihren Quelldatenbanken verwenden, müssen Sie möglicherweise Firewallregeln hinzufügen, damit Azure Database Migration Service auf die Quelldatenbanken für die Migration zugreifen kann.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.

  • Erstellen Sie für Azure Database for PostgreSQL eine Firewallregel auf Serverebene, um Azure Database Migration Service den Zugriff auf die Zieldatenbanken zu ermöglichen.Create a server-level firewall rule for Azure Database for PostgreSQL to allow Azure Database Migration Service to access to the target databases. Geben Sie den Subnetzbereich des für Azure Database Migration Service verwendeten virtuellen Netzwerks an.Provide the subnet range of the virtual network used for Azure Database Migration Service.

  • Es gibt zwei Methoden zum Aufrufen der CLI:There are two methods for invoking the CLI:

    • Wählen Sie im Azure-Portal rechts oben die Cloud Shell-Schaltfläche aus:In the upper-right corner of the Azure portal, select the Cloud Shell button:

      Cloud Shell-Schaltfläche im Azure-Portal

    • Installieren Sie die CLI lokal, und führen Sie sie aus.Install and run the CLI locally. CLI 2.0 ist das Befehlszeilentool zum Verwalten von Azure-Ressourcen.CLI 2.0 is the command-line tool for managing Azure resources.

      Um die Befehlszeilenschnittstelle herunterzuladen, befolgen Sie die Anweisungen im Artikel Installieren von Azure CLI 2.0.To download the CLI, follow the instructions in the article Install Azure CLI 2.0. In dem Artikel werden außerdem die Plattformen aufgelistet, die CLI 2.0 unterstützen.The article also lists the platforms that support CLI 2.0.

      Um das Windows-Subsystem für Linux (WSL) einzurichten, befolgen Sie die Anweisungen im Windows 10-Installationshandbuch.To set up Windows Subsystem for Linux (WSL), follow the instructions in the Windows 10 Installation Guide

  • Aktivieren Sie die logische Replikation in der postgresql.config-Datei, und legen Sie die folgenden Parameter fest:Enable logical replication in the postgresql.config file, and set the following parameters:

    • wal_level = logicalwal_level = logical
    • max_replication_slots = [Anzahl von Slots], empfohlene Einstellung: 5 Slotsmax_replication_slots = [number of slots], recommend setting to five slots
    • max_wal_senders = [Anzahl gleichzeitiger Aufgaben] – Der max_wal_senders-Parameter legt die Anzahl von Aufgaben fest, die gleichzeitig ausgeführt werden können; empfohlene Einstellung: 10 Aufgabenmax_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

Migrieren des BeispielschemasMigrate the sample schema

Zum Fertigstellen aller Datenbankobjekte wie Tabellenschemas, Indizes und gespeicherter Prozeduren muss das Schema aus der Quelldatenbank extrahiert und auf die Datenbank angewendet werden.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. Verwenden Sie den Befehl „pg_dump -s“, um eine Schemasicherungsdatei für eine Datenbank zu erstellen.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
    

    Geben Sie beispielsweise Folgendes ein, um eine Schemadatei-dvdrental-Datenbank zu sichern:For example, to dump a schema file dvdrental database:

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

    Weitere Informationen zur Verwendung des Dienstprogramms „pg_dump“ finden Sie in den Beispielen des pg-dump-Tutorials.For more information about using the pg_dump utility, see the examples in the pg-dump tutorial.

  2. Erstellen Sie eine leere Datenbank in der Zielumgebung, Azure Database for PostgreSQL.Create an empty database in your target environment, which is Azure Database for PostgreSQL.

    Ausführliche Anleitungen zum Erstellen und Verbinden einer Datenbank finden Sie unter Erstellen eines Azure Database for PostgreSQL-Servers im Azure-Portal und unter Erstellen eines Azure Database for PostgreSQL-Servers – Hyperscale (Citus) über das 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. Importieren Sie das Schema in die Zieldatenbank, die Sie erstellt haben, indem Sie die Schemasicherungsdatei wiederherstellen.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 
    

    Beispiel:For example:

    psql -h mypgserver-20170401.postgres.database.azure.com  -U postgres -d dvdrental < dvdrentalSchema.sql
    
  4. Enthält das Schema Fremdschlüssel, tritt beim ersten Ladevorgang und bei der fortlaufenden Synchronisierung der Migration ein Fehler auf.If you have foreign keys in your schema, the initial load and continuous sync of the migration will fail. Führen Sie das folgende Skript in „PgAdmin“ oder „psql“ aus, um das Skript zum Löschen von Fremdschlüsseln zu extrahieren, und fügen Sie das Fremdschlüsselskript am Ziel hinzu (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;
    

    Führen Sie „drop foreign key“ (zweite Spalte) im Abfrageergebnis aus.Run the drop foreign key (which is the second column) in the query result.

  5. Trigger in den Daten (INSERT- oder UPDATE-Trigger) erzwingen die Datenintegrität am Ziel vor den replizierten Daten aus der Quelle.Triggers in the data (insert or update triggers) will enforce data integrity in the target ahead of the replicated data from the source. Während der Migration sollten Sie die Trigger in allen Tabellen der Zieldatenbank deaktivieren und die Trigger nach Abschluss der Migration wieder aktivieren.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.

    Führen Sie zum Deaktivieren von Triggern in der Zieldatenbank den folgenden Befehl aus: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. Wenn der ENUM-Datentyp in Tabellen vorhanden ist, sollten Sie ihn vorübergehend in der Zieltabelle in den Datentyp „character varying“ ändern.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. Setzen Sie den Datentyp nach Abschluss der Datenreplikation wieder auf ENUM zurück.After data replication is done, revert the datatype to ENUM.

Bereitstellung einer DMS-Instanz mithilfe der BefehlszeilenschnittstelleProvisioning an instance of DMS using the CLI

  1. Installieren der DMS-Synchronisierungserweiterung:Install the dms sync extension:

    • Melden Sie sich mithilfe des folgenden Befehls bei Azure an:Sign in to Azure by running the following command:

      az login
      
    • Wenn Sie aufgefordert werden, öffnen Sie einen Webbrowser, und geben Sie einen Code ein, um Ihr Gerät zu authentifizieren.When prompted, open a web browser and enter a code to authenticate your device. Befolgen Sie die Anweisungen gemäß der Auflistung.Follow the instructions as listed.

    • Fügen Sie die DMS-Erweiterung hinzu:Add the dms extension:

      • Um die verfügbaren Erweiterungen aufzulisten, führen Sie den folgenden Befehl aus:To list the available extensions, run the following command:

        az extension list-available –otable
        
      • Führen Sie zum Installieren der Erweiterung den folgenden Befehl aus:To install the extension, run the following command:

        az extension add –n dms-preview
        
    • Um zu überprüfen, ob Sie die DMS-Erweiterung richtig installiert haben, führen Sie den folgenden Befehl aus:To verify you have dms extension installed correct, run the following command:

      az extension list -otable
      

      Die folgende Ausgabe wird angezeigt.You should see the following output:

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

      Wichtig

      Stellen Sie sicher, dass Ihre Erweiterungsversion höher als 0.11.0 ist.Make sure that your extension version is above 0.11.0.

    • Jederzeit können Sie alle in DMS unterstützten Befehle anzeigen, indem Sie Folgendes ausführen:At any time, view all commands supported in DMS by running:

      az dms -h
      
    • Wenn Sie über mehrere Azure-Abonnements verfügen, führen Sie den folgenden Befehl aus, um das Abonnement festzulegen, mit dem Sie eine Instanz des DMS-Diensts bereitstellen möchten.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. Stellen Sie eine Instanz von DMS bereit, indem Sie den folgenden Befehl ausführen: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
    

    Der folgende Befehl erstellt z.B. einen Dienst in:For example the following command will create a service in:

    • Standort: USA (Ost 2)Location: East US2
    • Abonnement: 97181df2-909d-420b-ab93-1bff15acb6b7Subscription: 97181df2-909d-420b-ab93-1bff15acb6b7
    • Ressourcengruppenname: PostgresDemoResource Group Name: PostgresDemo
    • DMS-Dienstname: 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
    

    Es dauert ungefähr 10 bis 12 Minuten, um die Instanz des DMS-Diensts zu erstellen.It takes about 10-12 minutes to create the instance of the DMS service.

  3. Um die IP-Adresse des DMS-Agent zu identifizieren, damit Sie ihn der Postgres-Datei „pg_hba.conf“ hinzufügen können, führen Sie den folgenden Befehl aus: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'
    

    Beispiel:For example:

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

    Das Ergebnis sollte in etwa der folgenden Adresse entsprechen:You should get a result similar to the following address:

    [
      "172.16.136.18"
    ]
    
  4. Fügen Sie die IP-Adresse des DMS-Agent der Postgres-Datei „pg_hba.conf“ hinzu.Add the IP address of the DMS agent to the Postgres pg_hba.conf file.

    • Notieren Sie sich die DMS-IP-Adresse nach Abschluss der Bereitstellung in DMS.Take note of the DMS IP address after you finish provisioning in DMS.

    • Fügen Sie die IP-Adresse der Datei „pg_hba.conf“ auf dem Quellcomputer ähnlich dem folgenden Eintrag hinzu: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. Erstellen Sie als Nächstes ein PostgreSQL-Migrationsprojekt mithilfe des folgenden Befehls: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>
    

    Der folgende Befehl erstellt z.B. ein Projekt mit folgenden Parametern:For example, the following command creates a project using these parameters:

    • Standort: USA, Westen-MitteLocation: West Central US

    • Ressourcengruppenname: PostgresDemoResource Group Name: PostgresDemo

    • Servicename: PostgresCLIService Name: PostgresCLI

    • Projektname: PGMigrationProject name: PGMigration

    • Quellplattform: PostgreSQLSource platform: PostgreSQL

    • Zielplattform: AzureDbForPostgreSqlTarget platform: AzureDbForPostgreSql

      az dms project create -l westcentralus -n PGMigration -g PostgresDemo --service-name PostgresCLI --source-platform PostgreSQL --target-platform AzureDbForPostgreSql
      
  6. Erstellen Sie mit den folgenden Schritten eine PostgreSQL-Migrationsaufgabe.Create a PostgreSQL migration task using the following steps.

    Dieser Schritt umfasst die Quell-IP, Benutzer-ID und Kennwort, Ziel-IP, Benutzer-ID, Kennwort und Aufgabentyp, um eine Verbindung herzustellen.This step includes using the source IP, UserID and password, destination IP, UserID, password, and task type to establish connectivity.

    • Um eine vollständige Liste der Optionen anzuzeigen, führen Sie diesen Befehl aus:To see a full list of options, run the command:

      az dms project task create -h
      

      Sowohl für die Quell- als auch Zielverbindung verweist der Eingabeparameter auf eine JSON-Datei, die die Objektliste enthält.For both source and target connection, the input parameter is referring to a json file that has the object list.

      Das Format des JSON-Verbindungsobjekts für PostgreSQL-Verbindungen.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
              }
      
    • Es gibt auch eine Datenbankoptions-JSON-Datei, die die JSON-Objekte auflistet.There's also a database option json file that lists the json objects. Für PostgreSQL ist das Format des Datenbankoptions-JSON-Objekts unten dargestellt:For PostgreSQL, the format of the database options JSON object is shown below:

      [
          {
              "name": "source database",
              "target_database_name": "target database",
          },
          ...n
      ]
      
    • Erstellen Sie eine JSON-Datei mit dem Editor, kopieren Sie die folgenden Befehle, fügen Sie sie in die Datei ein, und speichern Sie die Datei unter „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                
             }
      
    • Erstellen Sie eine andere Datei mit dem Namen „target.json“, und speichern Sie sie unter „C:\DMS\target.json“.Create another file named target.json and save as C:\DMS\target.json. Beziehen Sie die folgenden Befehle ein:Include the following commands:

      {
              "userName": " dms@builddemotarget",    
              "password": null,           
              "serverName": " builddemotarget.postgres.database.azure.com",
              "databaseName": "inventory", 
              "port": 5432                
          }
      
    • Erstellen Sie eine Datenbankoptions-JSON-Datei, in der Bestand wie die zu migrierende Datenbank aufgeführt ist:Create a database options json file that lists inventory as the database to migrate:

      [
          {
              "name": "dvdrental",
              "target_database_name": "dvdrental",
          }
      ]
      
    • Führen Sie den folgenden Befehl aus, der Quelle, Ziel und Datenbankoptions-JSON-Dateien akzeptiert.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    
      

      An diesem Punkt haben Sie erfolgreich eine Migrationsaufgabe gesendet.At this point, you've successfully submitted a migration task.

  7. Um den Fortschritt der Aufgabe anzuzeigen, führen Sie den folgenden Befehl aus: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
    

    oderOR

    az dms project task show --service-name PostgresCLI --project-name PGMigration --resource-group PostgresDemo --name Runnowtask --expand output
    
  8. Sie können den migrationState auch über „expand output“ abfragen: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"
    

In der Ausgabedatei gibt es mehrere Parameter, die den Status der Migration angeben.In the output file, there are several parameters that indicate progress of migration. Betrachten Sie z.B. die folgende Ausgabedatei: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"

ÜbernahmemigrationsaufgabeCutover migration task

Die Datenbank ist zur Übernahme bereit, wenn die Ladung vollständig abgeschlossen ist.The database is ready for cutover when full load is complete. Je nach Auslastung des Quellservers mit neuen Transaktionen könnte die DMS-Aufgabe möglicherweise weiterhin nach Abschluss des Ladevorgangs Änderungen anwenden.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.

Um sicherzustellen, dass alle Daten erfasst sind, vergleichen Sie die Zeilenanzahl in Quell- und Zieldatenbank.To ensure all data is caught up, validate row counts between the source and target databases. Verwenden Sie z.B. den folgenden Befehl: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. Führen Sie die Übernahmemigrationsaufgabe mit dem folgenden Befehl durch:Perform the cutover database migration task by using the following command:

    az dms project task cutover -h
    

    Beispiel:For example:

    az dms project task cutover --service-name PostgresCLI --project-name PGMigration --resource-group PostgresDemo --name Runnowtask  --object-name Inventory
    
  2. Überwachen Sie den Übernahmefortschritt mithilfe des folgenden Befehls :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. Wenn der Status der Datenbankmigration als Abgeschlossen angezeigt wird, erstellen Sie Sequenzen neu (sofern erforderlich), und stellen Sie eine Verbindung zwischen Ihren Anwendungen und der neuen Azure Database for PostgreSQL-Zielinstanz her.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.

Dienst, Projekt, AufgabenbereinigungService, project, task cleanup

Wenn Sie DMS-Aufgaben, -Projekte oder -Dienste abbrechen oder löschen müssen, führen Sie den Abbruch in der folgenden Reihenfolge durch:If you need to cancel or delete any DMS task, project, or service, perform the cancellation in the following sequence:

  • Abbrechen einer ausgeführten AufgabeCancel any running task
  • Löschen der AufgabeDelete the task
  • Löschen des ProjektsDelete the project
  • Löschen des DMS-DienstsDelete DMS service
  1. Um eine momentan ausgeführte Aufgabe abzubrechen, verwenden Sie den folgenden Befehl: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. Um eine momentan ausgeführte Aufgabe zu löschen, verwenden Sie den folgenden Befehl: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. Um ein momentan ausgeführtes Projekt abzubrechen, verwenden Sie den folgenden Befehl: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. Um ein momentan ausgeführtes Projekt zu löschen, verwenden Sie den folgenden Befehl: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. Um einen DMS-Dienst zu löschen, verwenden Sie den folgenden Befehl:To delete DMS service, use the following command:

    az dms delete -g ProgresDemo -n PostgresCLI
    

Nächste SchritteNext steps