Alıştırma: Şirket içi PostgreSQL veritabanını PostgreSQL için Azure Veritabanı geçirme

Tamamlandı

Bu alıştırmada bir PostgreSQL veritabanını Azure'a geçireceksiniz. Sanal makinede çalışan mevcut bir PostgreSQL veritabanını PostgreSQL için Azure Veritabanı geçireceksiniz.

AdventureWorks kuruluşunda veritabanı geliştiricisi olarak çalışıyorsunuz. AdventureWorks on yıldan uzun bir süredir bisiklet ve bisiklet parçalarını doğrudan son tüketiciye ve dağıtımcılara satmıştır. Sistemleri, bilgileri şu anda Bir Azure VM'de PostgreSQL kullanılarak çalışan bir veritabanında depolar. AdventureWorks, donanım rasyonalizasyon alıştırmasının bir parçası olarak veritabanını Azure tarafından yönetilen bir veritabanına taşımak istiyor. Bu geçişi gerçekleştirmeniz istendi.

Önemli

Azure Veri Geçiş Hizmeti, ücretsiz Azure korumalı alan ortamında desteklenmez. Bu adımları kendi kişisel aboneliğinizde gerçekleştirebilir veya veritabanınızı nasıl geçirebileceğinizi anlamak için takip edebilirsiniz.

Ortamı ayarlama

Cloud Shell'de bu Azure CLI komutlarını çalıştırarak Adventureworks veritabanının bir kopyasıyla PostgreSQL çalıştıran bir sanal makine oluşturun. Son komutlar yeni sanal makinenin IP adresini yazdırır.

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

Bu komutların tamamlanması yaklaşık 5 dakika sürer. Beklemeniz gerekmez, aşağıdaki adımlarla devam edebilirsiniz.

PostgreSQL için Azure Veritabanı esnek sunucu oluşturma

  1. Web tarayıcısı kullanarak yeni bir sekme açın ve Azure portalına gidin.

  2. Arama çubuğuna esnek sunucular PostgreSQL için Azure Veritabanı yazın.

  3. PostgreSQL için Azure Veritabanı esnek sunucular sayfasında + Oluştur'u seçin.

  4. Esnek sunucu sayfasında aşağıdaki ayrıntıları girin ve gözden geçir ve oluştur'u seçin:

    Özellik Değer
    Kaynak grubu migrate-postgresql
    Sunucu adı adventureworksnnn, burada nnn , sunucu adını benzersiz hale getirmek için seçtiğiniz bir sonektir
    Konum Size en yakın konumu seçin
    PostgreSQL sürümü 13
    İşlem + depolama Sunucuyu yapılandır'ı seçin, Temel fiyatlandırma katmanını ve ardından Tamam'ı seçin
    Yönetici kullanıcı adı awadmin
    Password Pa55w.rdDemo
    Parolayı onaylayın Pa55w.rdDemo
  5. Gözden Geçir + oluştur sayfasında Oluştur'u seçin. Devam etmeden önce hizmetin oluşturulmasını bekleyin.

  6. Hizmet oluşturulduğunda Kaynağa git'i seçin.

  7. Bağlan ion güvenliği'ne tıklayın.

  8. Bağlan ion güvenlik sayfasında Azure hizmetlerine erişime izin ver seçeneğini Evet olarak ayarlayın.

  9. Güvenlik duvarı kuralları listesinde VM adlı bir kural ekleyin ve START IP ADDRESS ve END IP ADDRESS değerlerini daha önce oluşturduğunuz PostgreSQL sunucusunu çalıştıran sanal makinenin IP adresine ayarlayın.

  10. İstemci makinenizin veritabanına bağlanmasını sağlamak için Geçerli istemci IP adresi ekle'yi seçin.

  11. Güvenlik duvarı kurallarını kaydedin ve güncelleştirilmesini bekleyin.

  12. Cloud Shell isteminde aşağıdaki komutu çalıştırarak PostgreSQL için Azure Veritabanı hizmetinizde yeni bir veritabanı oluşturun. [nnn] değerini, PostgreSQL için Azure Veritabanı hizmetini oluştururken kullandığınız sonekle değiştirin. [resource group] öğesini hizmet için belirttiğiniz kaynak grubunun adıyla değiştirin:

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

    Veritabanı başarıyla oluşturulduysa, aşağıdakine benzer bir ileti görmeniz gerekir:

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

Hedef veritabanında kullanılacak şemayı dışarı aktarma

Şimdi veritabanı şemanızı dışarı aktarmak için Cloud Shell'i kullanarak mevcut PostgreSQL VM'nize bağlanacaksınız.

  1. Mevcut VM'nizin IP adresini görmek için bu Azure CLI komutunu çalıştırın.

    SQLIP="$(az vm list-ip-addresses \
        --resource-group migrate-postgresql \
        --name postgresqlvm \
        --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
        --output tsv)"
    
    echo $SQLIP
    
  2. SSH kullanarak eski veritabanı sunucunuza Bağlan. Parola için Pa55w.rdDemo girin.

    ssh azureuser@$SQLIP
    
  3. Sanal makinedeki veritabanına bağlanmak için aşağıdaki komutu çalıştırın. Sanal makinede çalışan PostgreSQL sunucusundaki azureuser kullanıcısının parolası Pa55w.rd'dir:

    psql adventureworks
    
  4. Azureuser'a çoğaltma izni verme:

    ALTER ROLE azureuser REPLICATION;
    
  5. \q komutuyla psql yardımcı programını kapatın.

  6. Bash isteminde aşağıdaki komutu çalıştırarak adventureworks veritabanının şemasını adventureworks_schema.sql adlı bir dosyaya aktarın

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

Şemayı hedef veritabanına aktarma

  1. azureadventureworks[nnn] sunucusuna bağlanmak için aşağıdaki komutu çalıştırın. [nnn] öğesinin iki örneğini hizmetinizin sonekiyle değiştirin. Kullanıcı adının @adventureworks[nnn] soneki olduğunu unutmayın. Parola isteminde Pa55w.rdDemo girin.

    psql -h adventureworks[nnn].postgres.database.azure.com -U awadmin@adventureworks[nnn] -d postgres
    
  2. Aşağıdaki komutları çalıştırarak azureuser adlı bir kullanıcı oluşturun ve bu kullanıcının parolasını Pa55w.rd olarak ayarlayın. Üçüncü deyim, azureuser kullanıcısına azureadventureworks veritabanında nesne oluşturmak ve yönetmek için gerekli ayrıcalıkları verir. azure_pg_admin rolü, azureuser kullanıcısının veritabanına uzantı yüklemesini ve kullanmasını sağlar.

    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. \q komutuyla psql yardımcı programını kapatın.

  4. Adventureworks veritabanının şemasını PostgreSQL için Azure Veritabanı hizmetinizde çalışan azureadventureworks veritabanına aktarın. İçeri aktarma işlemini azureuser olarak gerçekleştirdiğinizden, istendiğinde Pa55w.rd parolasını girin.

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

    Her öğe oluşturulurken bir dizi ileti görürsünüz. Betik hatasız tamamlanmalıdır.

  5. Aşağıdaki komutu çalıştırın. findkeys.sql betiği, azureadventureworks veritabanındaki tablolardan tüm yabancı anahtarları kaldıracak dropkeys.sql adlı başka bir SQL betiği oluşturur. Dropkeys.sql betiğini kısa süre sonra çalıştıracaksınız:

    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. Aşağıdaki komutu çalıştırın. createkeys.sql betiği, tüm yabancı anahtarları yeniden oluşturacak addkeys.sql adlı başka bir SQL betiği oluşturur. Veritabanını geçirdikten sonra addkeys.sql betiğini çalıştıracaksınız:

    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. dropkeys.sql betiğini çalıştırın:

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

    Yabancı anahtarlar bırakıldığında bir dizi ALTER TABLE iletisi görüntülenir.

  8. psql yardımcı programını yeniden belirtin ve azureadventureworks veritabanına bağlanın.

    psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks
    
  9. Kalan yabancı anahtarların ayrıntılarını bulmak için aşağıdaki sorguyu çalıştırın:

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

    Bu sorgu boş bir sonuç kümesi döndürmelidir. Ancak, herhangi bir yabancı anahtar hala varsa, her yabancı anahtar için aşağıdaki komutu çalıştırın:

    ALTER TABLE [table_schema].[table_name] DROP CONSTRAINT [constraint_name];
    
  10. Kalan yabancı anahtarları kaldırdıktan sonra, tetikleyicileri veritabanında görüntülemek için aşağıdaki SQL deyimini yürütebilirsiniz:

    SELECT trigger_name
    FROM information_schema.triggers;
    

    Bu sorgu, veritabanının tetikleyici içermediğini belirten boş bir sonuç kümesi de döndürmelidir. Veritabanında tetikleyiciler varsa, verileri geçirmeden önce bunları devre dışı bırakmanız ve daha sonra yeniden etkinleştirmeniz gerekir.

  11. \q komutuyla psql yardımcı programını kapatın.

Veritabanı Geçiş Hizmeti kullanarak çevrimiçi geçiş gerçekleştirme

  1. Azure portalına geri dönün.

  2. Tüm hizmetler'i, Abonelikler'i ve ardından aboneliğinizi seçin.

  3. Abonelik sayfanızdaki Ayarlar altında Kaynak sağlayıcıları'yı seçin.

  4. Ada göre filtrele kutusuna DataMigration yazın ve Microsoft.DataMigration'ı seçin.

  5. Microsoft.DataMigration kayıtlı değilse Kaydet'i seçin ve Durum'un Kayıtlı olarak değişmesini bekleyin. Durum değişikliğini görmek için Yenile'yi seçmeniz gerekebilir.

  6. Kaynak oluştur'u seçin, Markette Ara kutusuna Azure Veritabanı Geçiş Hizmeti yazın ve Enter tuşuna basın.

  7. Azure Veritabanı Geçiş Hizmeti sayfasında Oluştur'u seçin.

  8. Geçiş Hizmeti Oluştur sayfasında, aşağıdaki ayrıntıları girin ve İleri: Ağ'ı>> seçin.

    Özellik Değer
    Kaynak grubu seçme migrate-postgresql
    Service name adventureworks_migration_service
    Konum Size en yakın konumu seçin
    Hizmet modu Azure
    Fiyatlandırma katmanı Premium, 4 sanal çekirdek ile
  9. sayfasında postgresqlvnet/posgresqlvmSubnet sanal ağını seçin. Bu ağ, kurulumun bir parçası olarak oluşturulmuştur.

  10. Gözden Geçir + oluştur’u ve sonra da Oluştur’u seçin. Veritabanı Geçiş Hizmeti oluşturulurken bekleyin. Bu işlem birkaç dakika alır.

  11. Hizmet oluşturulduğunda Kaynağa git'i seçin.

  12. Yeni Geçiş Projesi'ni seçin.

  13. Yeni geçiş projesi sayfasında aşağıdaki ayrıntıları girin ve ardından Etkinlik oluştur ve çalıştır'ı seçin.

    Özellik Değer
    Proje adı adventureworks_migration_project
    Kaynak sunucu türü PostgreSQL
    PostgreSQL için Hedef Veritabanı PostgreSQL için Azure Veritabanı
    Etkinlik türünü seçin Çevrimiçi veri geçişi
  14. Geçiş Sihirbazı başladığında, Kaynak seç sayfasında aşağıdaki ayrıntıları girin ve İleri: Hedefi>> seçin'i seçin.

    Özellik Değer
    Kaynak sunucu adı nn.nn.nn.nn (PostgreSQL çalıştıran Azure sanal makinesinin IP adresi)
    Sunucu bağlantı noktası 5432
    Veritabanı Adventureworks
    Kullanıcı Adı azureuser
    Password Pa55w.rd
    Sunucu sertifikasına güven Seçili
    Bağlantıyı şifrele Seçili
  15. Hedef seç sayfasında aşağıdaki ayrıntıları girin ve İleri: Veritabanlarını>> seçin'i seçin.

    Özellik Değer
    Azure PostgreSQL adventureworks[nnn]
    Veritabanı azureadventureworks
    Kullanıcı Adı azureuser@adventureworks[nnn]
    Password Pa55w.rd
  16. Veritabanlarını seçin sayfasında adventureworks veritabanını seçin ve azureadventureworks ile eşleyin. postgres veritabanının seçimini kaldırın. İleri: Tabloları>> seçin'i seçin.

  17. Tabloları seçin sayfasında İleri: Geçiş ayarlarını>> yapılandırma'yı seçin.

  18. Geçiş ayarlarını yapılandır sayfasında adventureworks açılan listesini genişletin, Gelişmiş çevrimiçi geçiş ayarları açılan listesini genişletin, Paralel olarak yüklenecek örnek sayısı üst sınırının 5 olarak ayarlandığını doğrulayın ve ardından İleri: Özet'i>> seçin.

  19. Özet sayfasındaki Etkinlik adı kutusuna AdventureWorks_Migration_Activity yazın ve geçişi başlat'ı seçin.

  20. AdventureWorks_Migration_Activity sayfasında 15 saniyelik aralıklarla yenile'yi seçin. Devam ederken geçiş işleminin durumunu görürsünüz. MIGRATION DETAILS sütunu Tam geçişe hazır olarak değişene kadar bekleyin.

  21. Cloud Shell'e geri dönün.

  22. Azureadventureworks veritabanında yabancı anahtarları yeniden oluşturmak için aşağıdaki komutu çalıştırın. Addkeys.sql betiğini daha önce oluşturmıştınız:

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

    Yabancı anahtarlar eklendikçe bir dizi ALTER TABLE deyimi görürsünüz. Şimdilik yoksayabileceğiniz SpecialOfferProduct tablosuyla ilgili bir hata görebilirsiniz. Bunun nedeni, doğru şekilde aktarılamayan BENZERSİz kısıtlamasıdır. Gerçek dünyada, aşağıdaki sorguyu kullanarak bu kısıtlamanın ayrıntılarını kaynak veritabanından almanız gerekir:

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

    Daha sonra bu kısıtlamayı PostgreSQL için Azure Veritabanı hedef veritabanında el ile yeniden getirebilirsiniz.

    Başka hata olmamalıdır.

Verileri değiştirin ve yeni veritabanına geçiş yapın

  1. Azure portalında AdventureWorks_Migration_Activity sayfasına dönün.

  2. adventureworks veritabanını seçin.

  3. Adventureworks sayfasında, Tam yükleme tamamlandı değerinin 66 olduğunu ve diğer tüm değerlerin 0 olduğunu doğrulayın.

  4. Cloud Shell'e geri dönün.

  5. Sanal makinede PostgreSQL kullanarak çalışan adventureworks veritabanına bağlanmak için aşağıdaki komutu çalıştırın:

    psql adventureworks
    
  6. Görüntülemek için aşağıdaki SQL deyimlerini yürüterek 43659, 43660 ve 43661 siparişlerini veritabanından kaldırın. Veritabanının salesorderdetail tablosundan karşılık gelen satırları otomatik olarak silen salesorderdetail tablosuna basamaklı silme uyguladığını unutmayın.

    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. \q komutuyla psql yardımcı programını kapatın.

  8. Azure portalında adventureworks sayfasına dönün ve Yenile'yi seçin. 32 değişikliğin uygulandığını doğrulayın.

  9. Tam Geçişi Başlat'ı seçin.

  10. Tam geçişi tamamla sayfasında Onayla'yı ve ardından Uygula'yı seçin. Durum Tamamlandı olarak değişene kadar bekleyin.

  11. Cloud Shell'e dönün.

  12. PostgreSQL için Azure Veritabanı hizmetinizi kullanarak çalışan azureadventureworks veritabanına bağlanmak için aşağıdaki komutu çalıştırın:

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

    Parola Pa55w.rd şeklindedir.

  13. Veritabanında siparişleri ve sipariş ayrıntılarını görüntülemek için aşağıdaki SQL deyimlerini yürütür. Her tablonun ilk sayfasından sonra çıkın. Bu sorguların amacı, verilerin aktarıldığını göstermektir:

    SELECT * FROM sales.salesorderheader;
    SELECT * FROM sales.salesorderdetail;
    
  14. 43659, 43660 ve 43661 siparişlerinin siparişlerini ve ayrıntılarını görüntülemek için aşağıdaki SQL deyimlerini çalıştırın.

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

    Her iki sorgu da 0 satır döndürmelidir.

  15. \q komutuyla psql yardımcı programını kapatın.

Oluşturduğunuz kaynakları temizleme

Önemli

Bu adımları kendi kişisel aboneliğinizde gerçekleştirdiyseniz, kaynakları tek tek silebilir veya kaynak grubunu silip kaynak kümesinin tamamını silebilirsiniz. Çalışır durumda bırakılan kaynaklar maliyetlerin artmasına neden olabilir.

  1. Cloud Shell'i kullanarak şu komutu çalıştırarak kaynak grubunu silin:
az group delete --name migrate-postgresql