Alıştırma: Şirket içi PostgreSQL veritabanını PostgreSQL için Azure Veritabanı geçirme
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
Web tarayıcısı kullanarak yeni bir sekme açın ve Azure portalına gidin.
Arama çubuğuna esnek sunucular PostgreSQL için Azure Veritabanı yazın.
PostgreSQL için Azure Veritabanı esnek sunucular sayfasında + Oluştur'u seçin.
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 Gözden Geçir + oluştur sayfasında Oluştur'u seçin. Devam etmeden önce hizmetin oluşturulmasını bekleyin.
Hizmet oluşturulduğunda Kaynağa git'i seçin.
Bağlan ion güvenliği'ne tıklayın.
Bağlan ion güvenlik sayfasında Azure hizmetlerine erişime izin ver seçeneğini Evet olarak ayarlayın.
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.
İstemci makinenizin veritabanına bağlanmasını sağlamak için Geçerli istemci IP adresi ekle'yi seçin.
Güvenlik duvarı kurallarını kaydedin ve güncelleştirilmesini bekleyin.
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.
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
SSH kullanarak eski veritabanı sunucunuza Bağlan. Parola için Pa55w.rdDemo girin.
ssh azureuser@$SQLIP
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
Azureuser'a çoğaltma izni verme:
ALTER ROLE azureuser REPLICATION;
\q komutuyla psql yardımcı programını kapatın.
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
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
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;
\q komutuyla psql yardımcı programını kapatın.
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.
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
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
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.
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
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];
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.
\q komutuyla psql yardımcı programını kapatın.
Veritabanı Geçiş Hizmeti kullanarak çevrimiçi geçiş gerçekleştirme
Azure portalına geri dönün.
Tüm hizmetler'i, Abonelikler'i ve ardından aboneliğinizi seçin.
Abonelik sayfanızdaki Ayarlar altında Kaynak sağlayıcıları'yı seçin.
Ada göre filtrele kutusuna DataMigration yazın ve Microsoft.DataMigration'ı seçin.
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.
Kaynak oluştur'u seçin, Markette Ara kutusuna Azure Veritabanı Geçiş Hizmeti yazın ve Enter tuşuna basın.
Azure Veritabanı Geçiş Hizmeti sayfasında Oluştur'u seçin.
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 Ağ sayfasında postgresqlvnet/posgresqlvmSubnet sanal ağını seçin. Bu ağ, kurulumun bir parçası olarak oluşturulmuştur.
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.
Hizmet oluşturulduğunda Kaynağa git'i seçin.
Yeni Geçiş Projesi'ni seçin.
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 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 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 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.
Tabloları seçin sayfasında İleri: Geçiş ayarlarını>> yapılandırma'yı seçin.
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.
Özet sayfasındaki Etkinlik adı kutusuna AdventureWorks_Migration_Activity yazın ve geçişi başlat'ı seçin.
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.
Cloud Shell'e geri dönün.
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
Azure portalında AdventureWorks_Migration_Activity sayfasına dönün.
adventureworks veritabanını seçin.
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.
Cloud Shell'e geri dönün.
Sanal makinede PostgreSQL kullanarak çalışan adventureworks veritabanına bağlanmak için aşağıdaki komutu çalıştırın:
psql adventureworks
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);
\q komutuyla psql yardımcı programını kapatın.
Azure portalında adventureworks sayfasına dönün ve Yenile'yi seçin. 32 değişikliğin uygulandığını doğrulayın.
Tam Geçişi Başlat'ı seçin.
Tam geçişi tamamla sayfasında Onayla'yı ve ardından Uygula'yı seçin. Durum Tamamlandı olarak değişene kadar bekleyin.
Cloud Shell'e dönün.
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.
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;
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.
\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.
- Cloud Shell'i kullanarak şu komutu çalıştırarak kaynak grubunu silin:
az group delete --name migrate-postgresql