Oefening: Een on-premises PostgreSQL-database migreren naar Azure Database for PostgreSQL

Voltooid

In deze oefening migreert u een PostgreSQL-database naar Azure. U migreert een bestaande PostgreSQL-database die op een virtuele machine wordt uitgevoerd naar Azure Database for PostgreSQL.

U werkt als databaseontwikkelaar voor de AdventureWorks-organisatie. AdventureWorks verkoopt al meer dan tien jaar fietsen en fietsonderdelen rechtstreeks aan eindgebruikers en distributeurs. Hun systemen slaan gegevens op in een database die momenteel wordt uitgevoerd met PostgreSQL op een Azure-VM. Als onderdeel van een hardware rationaliseringsoefening wil AdventureWorks de database verplaatsen naar een beheerde Azure-database. U bent gevraagd deze migratie uit te voeren.

Belangrijk

Azure Data Migration Service wordt niet ondersteund in de gratis Azure-sandboxomgeving. U kunt deze stappen uitvoeren in uw eigen persoonlijke abonnement of gewoon volgen om te begrijpen hoe u uw database migreert.

De omgeving instellen

Voer deze Azure CLI-opdrachten uit in De Cloud Shell om een virtuele machine te maken met PostgreSQL, met een kopie van de adventureworks-database. Met de laatste opdrachten wordt het IP-adres van de nieuwe virtuele machine afgedrukt.

az account list-locations -o table

az group create \
    --name migrate-postgresql \
    --location <CHOOSE A LOCATION FROM ABOVE NEAR YOU>

az vm create \
    --resource-group migrate-postgresql \
    --name postgresqlvm \
    --admin-username azureuser \
    --admin-password Pa55w.rdDemo \
    --image Ubuntu2204 \
    --public-ip-address-allocation static \
    --public-ip-sku Standard \
    --vnet-name postgresqlvnet \
    --nsg ""

az vm run-command invoke \
    --resource-group migrate-postgresql \
    --name postgresqlvm \
    --command-id RunShellScript \
    --scripts "
# Install PostgreSQL
sudo echo deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main > /etc/apt/sources.list.d/pgdg.list
sudo wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get -y update
sudo apt-get -y install postgresql-10
# Clone exercise code
sudo git clone https://github.com/MicrosoftLearning/DP-070-Migrate-Open-Source-Workloads-to-Azure.git /home/azureuser/workshop    
# Configure PostgreSQL
sudo service postgresql stop
sudo bash << EOF
    printf \"listen_addresses = '*'\nwal_level = logical\nmax_replication_slots = 5\nmax_wal_senders = 10\n\" >> /etc/postgresql/10/main/postgresql.conf
    printf \"host    all             all             0.0.0.0/0               md5\n\" >> /etc/postgresql/10/main/pg_hba.conf
EOF
sudo service postgresql start

# Add the azureuser role and adventure works
sudo bash << EOF
su postgres << EOC
printf \"create role azureuser with login;alter role azureuser createdb;alter role azureuser password 'Pa55w.rd';alter role azureuser superuser;create database adventureworks;grant all privileges on database adventureworks to azureuser; \" | psql
EOC
EOF

PGPASSWORD=Pa55w.rd psql -h localhost -U azureuser adventureworks -E -q -f /home/azureuser/workshop/migration_samples/setup/postgresql/adventureworks/adventureworks.sql
"

az vm open-port \
    --resource-group migrate-postgresql \
    --name postgresqlvm \
    --priority 200 \
    --port '22'

az vm open-port \
    --resource-group migrate-postgresql \
    --name postgresqlvm \
    --priority 300 \
    --port '5432'

echo Setup Complete

SQLIP="$(az vm list-ip-addresses \
    --resource-group migrate-postgresql \
    --name postgresqlvm \
    --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
    --output tsv)"

echo $SQLIP

Het duurt ongeveer 5 minuten voordat deze opdrachten zijn voltooid. U hoeft niet te wachten. U kunt doorgaan met de onderstaande stappen.

De flexibele Azure Database for PostgreSQL-server maken

  1. Open in een webbrowser een nieuw tabblad en navigeer naar Azure Portal.

  2. Typ in de zoekbalk flexibele servers van Azure Database for PostgreSQL.

  3. Selecteer + Maken op de pagina Flexibele Servers van Azure Database for PostgreSQL.

  4. Voer op de pagina Flexibele server de volgende gegevens in en selecteer Beoordelen en maken:

    Eigenschappen Weergegeven als
    Resourcegroep migrate-postgresql
    Servernaam adventureworksnnn, waarbij nnn een achtervoegsel van uw keuze is om de servernaam uniek te maken
    Locatie Selecteer de dichtstbijzijnde locatie
    PostgreSQL-versie 13
    Berekening en opslag Selecteer Server configureren, selecteer de prijscategorie Basic en selecteer vervolgens OK
    Gebruikersnaam van beheerder awadmin
    Password Pa55w.rdDemo
    Wachtwoord bevestigen Pa55w.rdDemo
  5. Selecteer Maken op de pagina Beoordelen en maken. Wacht totdat de service is gemaakt voordat u doorgaat.

  6. Wanneer de service is gemaakt, selecteert u Ga naar de resource.

  7. Selecteer Verbinding maken ionbeveiliging.

  8. Stel op de pagina Verbinding maken ionbeveiliging toegang tot Azure-services toestaan in op Ja.

  9. Voeg in de lijst met firewallregels een regel met de naam VM toe en stel het BEGIN-IP-ADRES en HET EIND-IP-ADRES in op het IP-adres van de virtuele machine waarop de PostgreSQL-server wordt uitgevoerd die u eerder hebt gemaakt.

  10. Selecteer Huidig IP-adres van client toevoegen om uw clientcomputer in staat te stellen verbinding te maken met de database.

  11. Sla op en wacht totdat de firewallregels zijn bijgewerkt.

  12. Voer bij de Cloud Shell-prompt de volgende opdracht uit om een nieuwe database te maken in uw Azure Database for PostgreSQL-service. Vervang [nnn] door het achtervoegsel dat u hebt gebruikt bij het maken van de Azure Database for PostgreSQL-service. Vervang [resourcegroep] door de naam van de resourcegroep die u hebt opgegeven voor de service:

    az postgres flexible-server create \
      --name azureadventureworks \
      --resource-group migrate-postgresql
    

    Als de database is gemaakt, ziet u een bericht dat er ongeveer als volgt uitziet:

    {
      "charset": "UTF8",
      "collation": "English_United States.1252",
      "name": "azureadventureworks",
      "resourceGroup": "migrate-postgresql",
      "type": "Microsoft.DBforPostgreSQL/servers/databases"
    }
    

Het schema exporteren dat moet worden gebruikt voor de doeldatabase

U maakt nu verbinding met uw bestaande PostgreSQL-VM met behulp van de Cloud Shell om uw databaseschema te exporteren.

  1. Voer deze Azure CLI-opdracht uit om het IP-adres voor uw bestaande VM te zien.

    SQLIP="$(az vm list-ip-addresses \
        --resource-group migrate-postgresql \
        --name postgresqlvm \
        --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
        --output tsv)"
    
    echo $SQLIP
    
  2. Verbinding maken naar uw oude databaseserver met behulp van SSH. Voer Pa55w.rdDemo in voor het wachtwoord.

    ssh azureuser@$SQLIP
    
  3. Voer de volgende opdracht uit om verbinding te maken met de database op de virtuele machine. Het wachtwoord voor de azureuser-gebruiker in de PostgreSQL-server die op de virtuele machine wordt uitgevoerd, is Pa55w.rd:

    psql adventureworks
    
  4. Replicatiemachtigingen verlenen aan azureuser:

    ALTER ROLE azureuser REPLICATION;
    
  5. Sluit het hulpprogramma psql met de opdracht \q .

  6. Voer bij de bash-prompt de volgende opdracht uit om het schema voor de adventureworks-database te exporteren naar een bestand met de naam adventureworks_schema.sql

    pg_dump -o  -d adventureworks -s > adventureworks_schema.sql
    

Het schema importeren in de doeldatabase

  1. Voer de volgende opdracht uit om verbinding te maken met de azureadworks[nnn]-server. Vervang de twee exemplaren van [nnn] door het achtervoegsel voor uw service. Houd er rekening mee dat de gebruikersnaam het achtervoegsel @adventureworks[nnn] heeft. Voer pa55w.rdDemo in bij de wachtwoordprompt.

    psql -h adventureworks[nnn].postgres.database.azure.com -U awadmin@adventureworks[nnn] -d postgres
    
  2. Voer de volgende opdrachten uit om een gebruiker met de naam azureuser te maken en het wachtwoord voor deze gebruiker in te stellen op Pa55w.rd. De derde instructie geeft de azureuser-gebruiker de benodigde bevoegdheden voor het maken en beheren van objecten in de azureadworks-database. Met de rol azure_pg_admin kan de azureuser-gebruiker extensies in de database installeren en gebruiken.

    CREATE ROLE azureuser WITH LOGIN;
    ALTER ROLE azureuser PASSWORD 'Pa55w.rd';
    GRANT ALL PRIVILEGES ON DATABASE azureadventureworks TO azureuser;
    GRANT azure_pg_admin TO azureuser;
    
  3. Sluit het hulpprogramma psql met de opdracht \q .

  4. Importeer het schema voor de adventureworks-database naar de azureadworks-database die wordt uitgevoerd in uw Azure Database for PostgreSQL-service. U voert de import uit als azureuser, dus voer het wachtwoord Pa55w.rd in wanneer u hierom wordt gevraagd.

    psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks -E -q -f adventureworks_schema.sql
    

    U ziet een reeks berichten wanneer elk item wordt gemaakt. Het script moet zonder fouten worden voltooid.

  5. Voer de volgende opdracht uit. Met het script findkeys.sql wordt een ander SQL-script met de naam dropkeys.sql gegenereerd waarmee alle refererende sleutels uit de tabellen in de azureadworks-database worden verwijderd. U voert binnenkort het script dropkeys.sql uit:

    psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks -f workshop/migration_samples/setup/postgresql/adventureworks/findkeys.sql -o dropkeys.sql -t
    
  6. Voer de volgende opdracht uit. Het script createkeys.sql genereert een ander SQL-script met de naam addkeys.sql waarmee alle refererende sleutels opnieuw worden gemaakt. U voert het script addkeys.sql uit nadat u de database hebt gemigreerd:

    psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks -f workshop/migration_samples/setup/postgresql/adventureworks/createkeys.sql -o addkeys.sql -t
    
  7. Voer het script dropkeys.sql uit:

    psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks -f dropkeys.sql
    

    Er wordt een reeks ALTER TABLE-berichten weergegeven, omdat de refererende sleutels worden verwijderd.

  8. Stat het psql-hulpprogramma opnieuw en maak verbinding met de azureadworks-database .

    psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks
    
  9. Voer de volgende query uit om de details van de resterende refererende sleutels te vinden:

    SELECT constraint_type, table_schema, table_name, constraint_name
    FROM information_schema.table_constraints
    WHERE constraint_type = 'FOREIGN KEY';
    

    Deze query moet een lege resultatenset retourneren. Als er echter nog steeds refererende sleutels bestaan, voert u voor elke refererende sleutel de volgende opdracht uit:

    ALTER TABLE [table_schema].[table_name] DROP CONSTRAINT [constraint_name];
    
  10. Nadat u de resterende refererende sleutels hebt verwijderd, voert u de volgende SQL-instructie uit om de triggers in de database weer te geven:

    SELECT trigger_name
    FROM information_schema.triggers;
    

    Deze query moet ook een lege resultatenset retourneren, waarmee wordt aangegeven dat de database geen triggers bevat. Als de database triggers bevat, moet u ze uitschakelen voordat u de gegevens migreert en ze later opnieuw inschakelen.

  11. Sluit het hulpprogramma psql met de opdracht \q .

Een onlinemigratie uitvoeren met behulp van de Database Migration Service

  1. Ga terug naar de Azure-portal.

  2. Selecteer Alle services, selecteer Abonnementen en selecteer vervolgens uw abonnement.

  3. Selecteer resourceproviders onder Instellingen op uw abonnementspagina.

  4. Typ DataMigration in het vak Filteren op naam en selecteer Vervolgens Microsoft.DataMigration.

  5. Als Microsoft.DataMigration niet is geregistreerd, selecteert u Registreren en wacht u totdat de status is gewijzigd in Geregistreerd. Mogelijk moet u Vernieuwen selecteren om de statuswijziging te zien.

  6. Selecteer Een resource maken, typ azure Database Migration Service in het vak Marketplace doorzoeken en druk op Enter.

  7. Selecteer Maken op de pagina Azure Database Migration Service.

  8. Voer op de pagina Migratieservice maken de volgende details in en selecteer vervolgens Volgende: Netwerken>>.

    Eigenschappen Weergegeven als
    Een resourcegroep selecteren migrate-postgresql
    Servicenaam adventureworks_migration_service
    Locatie Selecteer de dichtstbijzijnde locatie
    Servicemodus Azure
    Prijscategorie Premium, met 4 vCores
  9. Selecteer op de pagina Netwerken het virtuele netwerk postgresqlvnet/posgresqlvmSubnet . Dit netwerk is gemaakt als onderdeel van de installatie.

  10. Selecteer Controleren en maken en selecteer vervolgens Maken. Wacht totdat de Database Migration Service is gemaakt. Dit kan enkele minuten duren.

  11. Wanneer de service is gemaakt, selecteert u Ga naar de resource.

  12. Selecteer Nieuw migratieproject.

  13. Voer op de pagina Nieuw migratieproject de volgende details in en selecteer vervolgens Activiteit maken en uitvoeren.

    Eigenschappen Weergegeven als
    Projectnaam adventureworks_migration_project
    Type bronserver PostgreSQL
    Doeldatabase voor PostgreSQL Azure Database for PostgreSQL
    Het type activiteit kiezen Onlinegegevensmigratie
  14. Wanneer de wizard Migratie wordt gestart, voert u op de pagina Bron selecteren de volgende gegevens in en selecteert u Volgende: Doel selecteren>>.

    Eigenschappen Weergegeven als
    Naam van de bronserver nn.nn.nn.nn (het IP-adres van de virtuele Azure-machine waarop PostgreSQL wordt uitgevoerd)
    Serverpoort 5432
    Database adventureworks
    Gebruikersnaam azureuser
    Password Pa55w.rd
    Servercertificaat vertrouwen Geselecteerde
    Verbinding versleutelen Geselecteerde
  15. Voer op de pagina Doel selecteren de volgende gegevens in en selecteer vervolgens Volgende: Databases selecteren>>.

    Eigenschappen Weergegeven als
    Azure PostgreSQL adventureworks[nnn]
    Database azureadworks
    Gebruikersnaam azureuser@adventureworks[nnn]
    Password Pa55w.rd
  16. selecteer op de pagina Databases selecteren de adventureworks-database en wijs deze toe aan azureadworks. De selectie van de postgres-database opheffen. Selecteer Volgende: Tabellen selecteren>>.

  17. Selecteer volgende op de pagina Tabellen selecteren de optie Volgende: Migratie-instellingen>> configureren.

  18. Vouw op de pagina Migratie-instellingen configureren de vervolgkeuzelijst Adventureworks uit, vouw de vervolgkeuzelijst Geavanceerde onlinemigratie-instellingen uit, controleer of het maximum aantal exemplaren dat parallel moet worden geladen, is ingesteld op 5 en selecteer vervolgens Volgende: Samenvatting>>.

  19. Typ op de pagina Samenvatting in het vak Naam van activiteit AdventureWorks_Migration_Activity en selecteer Migratie starten.

  20. Selecteer op de pagina AdventureWorks_Migration_Activity vernieuwen met intervallen van 15 seconden. Tijdens de voortgang ziet u de status van de migratiebewerking. Wacht totdat de kolom MIGRATIEDETAILS is gewijzigd in Ready to cutover.

  21. Ga terug naar Cloud Shell.

  22. Voer de volgende opdracht uit om de refererende sleutels opnieuw te maken in de azureadworks-database . U hebt het script addkeys.sql eerder gegenereerd:

    psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks -f addkeys.sql
    

    U ziet een reeks ALTER TABLE-instructies wanneer de refererende sleutels worden toegevoegd. Mogelijk ziet u een fout met betrekking tot de tabel SpecialOfferProduct , die u voorlopig kunt negeren. Dit komt door een UNIEKE beperking die niet correct wordt overgedragen. In de praktijk moet u de details van deze beperking ophalen uit de brondatabase met behulp van de volgende query:

    SELECT constraint_type, table_schema, table_name, constraint_name
    FROM information_schema.table_constraints
    WHERE constraint_type = 'UNIQUE';
    

    U kunt deze beperking vervolgens handmatig opnieuw instellen in de doeldatabase in Azure Database for PostgreSQL.

    Er mogen geen andere fouten optreden.

Gegevens wijzigen en naar de nieuwe database knippen

  1. Ga terug naar de pagina AdventureWorks_Migration_Activity in Azure Portal.

  2. Selecteer de adventureworks-database .

  3. Controleer op de pagina Adventureworks of de voltooide waarde voor volledige belasting 66 is en of alle andere waarden 0 zijn.

  4. Ga terug naar Cloud Shell.

  5. Voer de volgende opdracht uit om verbinding te maken met de adventureworks-database die wordt uitgevoerd met PostgreSQL op de virtuele machine:

    psql adventureworks
    
  6. Voer de volgende SQL-instructies uit om weer te geven en verwijder vervolgens orders 43659, 43660 en 43661 uit de database. Houd er rekening mee dat in de database een trapsgewijze verwijdering wordt geïmplementeerd in de tabel salesorderheader , waardoor de bijbehorende rijen automatisch uit de tabel salesorderdetail worden verwijderd.

    SELECT * FROM sales.salesorderheader WHERE salesorderid IN (43659, 43660, 43661);
    SELECT * FROM sales.salesorderdetail WHERE salesorderid IN (43659, 43660, 43661);
    DELETE FROM sales.salesorderheader WHERE salesorderid IN (43659, 43660, 43661);
    
  7. Sluit het hulpprogramma psql met de opdracht \q .

  8. Ga terug naar de pagina AdventureWorks in Azure Portal en selecteer Vernieuwen. Controleer of 32 wijzigingen zijn toegepast.

  9. Selecteer Cutover starten.

  10. Selecteer Bevestigen op de pagina Complete cutover en vervolgens Toepassen. Wacht totdat de status is gewijzigd in Voltooid.

  11. Keer terug naar Cloud Shell.

  12. Voer de volgende opdracht uit om verbinding te maken met de azureadworks-database die wordt uitgevoerd met behulp van uw Azure Database for PostgreSQL-service:

    psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks
    

    Het wachtwoord is Pa55w.rd.

  13. Voer de volgende SQL-instructies uit om de orders en ordergegevens in de database weer te geven. Sluit af na de eerste pagina van elke tabel. Het doel van deze query's is om aan te geven dat de gegevens zijn overgedragen:

    SELECT * FROM sales.salesorderheader;
    SELECT * FROM sales.salesorderdetail;
    
  14. Voer de volgende SQL-instructies uit om de orders en details voor orders 43659, 43660 en 43661 weer te geven.

    SELECT * FROM sales.salesorderheader WHERE salesorderid IN (43659, 43660, 43661);
    SELECT * FROM sales.salesorderdetail WHERE salesorderid IN (43659, 43660, 43661);
    

    Beide query's moeten 0 rijen retourneren.

  15. Sluit het hulpprogramma psql met de opdracht \q .

De resources opschonen die u hebt gemaakt

Belangrijk

Als u deze stappen in uw eigen persoonlijke abonnement hebt uitgevoerd, kunt u de resources afzonderlijk verwijderen of de resourcegroep verwijderen om de hele set resources te verwijderen. Resources die actief blijven, kunnen u geld kosten.

  1. Voer met behulp van Cloud Shell deze opdracht uit om de resourcegroep te verwijderen:
az group delete --name migrate-postgresql