Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Önemli
Daha kolay ve verimli bir geçiş deneyimi için PostgreSQL için Azure Veritabanı'nda yeni geçiş hizmetini kullanmanızı öneririz. Bu hizmet, çeşitli kaynak ortamlarını destekleyerek süreci basitleştirir ve PostgreSQL için Azure Veritabanı'na sorunsuz bir geçiş sağlar.
Veritabanlarını şirket içi bir PostgreSQL örneğinden PostgreSQL için Azure Veritabanı'na en düşük kapalı kalma süresiyle geçirmek için Azure Veritabanı Geçiş Hizmeti'ni (DMS) kullanabilirsiniz. Başka bir deyişle, uygulamaya en az kapalı kalma süresiyle geçiş yapılabilir. Bu öğreticide, Azure Veritabanı Geçiş Hizmeti'daki çevrimiçi geçiş etkinliğini kullanarak örnek veritabanını PostgreSQL 9.6'nın şirket içi örneğinden PostgreSQL için Azure Veritabanı'a geçirirsinizDVD Rental.
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- pg_dump yardımcı programını kullanarak örnek şemayı geçirin.
- Azure Veritabanı Geçiş Hizmeti örneği oluşturma.
- Azure Veritabanı Geçiş Hizmeti'ni kullanarak geçiş projesi oluşturma.
- Geçişi çalıştırma.
- Geçişi izleme.
Çevrimiçi geçiş gerçekleştirmek için Azure Veritabanı Geçiş Hizmeti kullanmak için Premium fiyatlandırma katmanını temel alan bir örnek oluşturmanız gerekir. Geçiş işlemi sırasında veri hırsızlığını önlemek için diski şifreleriz.
Önemli
En iyi geçiş deneyimi için Microsoft, hedef veritabanıyla aynı Azure bölgesinde bir Azure Veritabanı Geçiş Hizmeti örneği oluşturmanızı önerir. Verileri bölgeler veya coğrafyalar arasında taşımak, geçiş sürecini yavaşlatabilir ve hatalara neden olabilir.
Önkoşullar
Bu öğreticiyi tamamlamak için aşağıdakileri yapmanız gerekir:
PostgreSQL topluluk sürümü 9.4, 9.5, 9.6 veya 10'u indirin ve yükleyin. Kaynak PostgreSQL Sunucusu sürümü 9.4, 9.5, 9.6, 10, 11, 12 veya 13 olmalıdır. Daha fazla bilgi için bkz . Desteklenen PostgreSQL veritabanı sürümleri.
Hedef PostgreSQL için Azure Veritabanı sürümü, şirket içi PostgreSQL sürümüne eşit veya bundan sonraki bir sürüm olmalıdır. Örneğin, PostgreSQL 9.6 yalnızca PostgreSQL için Azure Veritabanı 9.6, 10 veya 11'e geçirilebilir, ancak 9.5 PostgreSQL için Azure Veritabanı geçirilmez.
PostgreSQL için Azure Veritabanı - Esnek sunucuda bir örnek oluşturun.
ExpressRoute veya VPN kullanarak şirket içi kaynak sunucularınıza siteden siteye bağlantı sağlayan Azure Resource Manager dağıtım modelini kullanarak Azure Veritabanı Geçiş Hizmeti için Microsoft Azure Sanal Ağı oluşturun. Sanal ağ oluşturma hakkında daha fazla bilgi için , Sanal Ağ Belgeleri'ne ve özellikle adım adım ayrıntıları içeren hızlı başlangıç makalelerine bakın.
Sanal ağ kurulumu sırasında ExpressRoute'u Microsoft ile ağ eşlemesi ile kullanıyorsanız hizmetin sağlanacağı alt ağa aşağıdaki hizmet uç noktalarını ekleyin:
- Hedef veritabanı uç noktası (örneğin, SQL uç noktası, Azure Cosmos DB uç noktası, vb.)
- Depolama uç noktası
- Service Bus uç noktası
Azure Veritabanı Geçiş Hizmeti'nin İnternet bağlantısı olmadığından bu yapılandırma gereklidir.
Sanal ağ Ağ Güvenlik Grubu (NSG) kurallarınızın ServiceBus, Depolama ve AzureMonitor için ServiceTag'in 443 numaralı giden bağlantı noktasını engellemediğinden emin olun. Sanal ağ NSG trafiği filtreleme hakkında daha fazla ayrıntı için Ağ trafiğini ağ güvenlik gruplarıyla filtreleme makalesine bakın.
Veritabanı altyapısı erişimi için Windows Güvenlik Duvarınızı yapılandırın.
Azure Veritabanı Geçiş Hizmeti varsayılan olarak TCP bağlantı noktası 5432 olan postgreSQL sunucusuna erişmesine izin vermek için Windows Güvenlik Duvarınızı açın.
Kaynak veritabanlarınızın önünde bir güvenlik duvarı gereci kullanırken, Azure Veritabanı Geçiş Hizmeti geçiş için kaynak veritabanlarına erişmesine izin vermek için güvenlik duvarı kuralları eklemeniz gerekebilir.
Azure Veritabanı Geçiş Hizmeti'nin hedef veritabanlarına erişmesine izin vermek için PostgreSQL için Azure Veritabanı için sunucu düzeyinde bir güvenlik duvarı kuralı oluşturun. Azure Veritabanı Geçiş Hizmeti için kullanılan sanal ağın alt ağ aralığını belirtin.
CLI’yi çağırmak için iki yöntem vardır:
Azure portalının sağ üst köşesinde Cloud Shell düğmesini seçin:
CLI’yi yerel olarak yükleyip çalıştırın. Bu geçiş için gereken Azure kaynaklarını yönetmek için komut satırı aracının CLI 2.18 veya üzeri sürümü gereklidir.
CLI'yı indirmek için Azure CLI'yı yükleme makalesindeki yönergeleri izleyin. Makalede Azure CLI'yi destekleyen platformlar da listelenir.
Linux için Windows Alt Sistemi'ni (WSL) ayarlamak için Windows 10 Yükleme Kılavuzu'ndaki yönergeleri izleyin
Dosyayı düzenleyip aşağıdaki parametreleri ayarlayarak kaynak sunucuda mantıksal çoğaltmayı
postgresql.configetkinleştirin:wal_level=logical-
max_replication_slots= [yuva sayısı]. Önerilen ayar5yuva şeklindedir. -
max_wal_senders= [eşzamanlı görev sayısı]. parametresi,max_wal_sendersçalışabilecek eşzamanlı görevlerin sayısını ayarlar. Önerilen ayar10görevleridir.
Örnek şemayı geçirme
Tablo şemaları, dizinler ve saklı yordamlar gibi tüm veritabanı nesnelerini tamamlamak için kaynak veritabanından şema ayıklamamız ve veritabanına uygulamamız gerekir.
Bir veritabanı için şema döküm dosyası oluşturmak için komutunu kullanın
pg_dump -s.pg_dump -O -h hostname -U db_username -d db_name -s > your_schema.sqlÖrneğin, dvdrental veritabanındaki bir şema dosyasının dökümünü çıkarmak için:
pg_dump -O -h localhost -U postgres -d dvdrental -s > dvdrentalSchema.sqlpg_dump yardımcı programını kullanma hakkında daha fazla bilgi için pg-dump öğreticisindeki örneklere bakın.
Hedef ortamınızda PostgreSQL için Azure Veritabanı - Esnek sunucu olan boş bir veritabanı oluşturun.
Şema döküm dosyasını geri yükleyerek, şemayı oluşturduğunuz hedef veritabanına aktarın.
psql -h hostname -U db_username -d db_name < your_schema.sqlÖrneğin:
psql -h mypgserver-20170401.postgres.database.azure.com -U postgres -d dvdrental < dvdrentalSchema.sqlNot
Geçiş hizmeti, güvenilir ve sağlam bir veri geçişi sağlamak için yabancı anahtarların ve tetikleyicilerin etkinleştirilmesini ve devre dışı bırakılmasını dahili olarak işler. Sonuç olarak, hedef veritabanı şemasında herhangi bir değişiklik yapma konusunda endişelenmeniz gerekmez.
Azure CLI kullanarak DMS örneği sağlama
DMS eşitleme uzantısını yükleyin:
Aşağıdaki komutu çalıştırarak Azure'da oturum açın:
az loginSorulduğunda bir web tarayıcısı açın ve cihazınızın kimliğini doğrulamak için bir kod girin. Listelenen yönergeleri uygulayın.
PostgreSQL çevrimiçi geçişi artık uzantıya gerek
dms-previewkalmadan normal CLI paketinde (sürüm 2.18.0 ve üzeri) kullanılabilir. Uzantıyı geçmişte yüklediyseniz, aşağıdaki adımları kullanarak uzantıyı kaldırabilirsiniz:Uzantının
dms-previewzaten yüklü olup olmadığını denetlemek için aşağıdaki komutu çalıştırın:az extension list -o tableUzantı yüklüyse
dms-preview, uzantıyı kaldırmak için aşağıdaki komutu çalıştırın:az extension remove --name dms-previewUzantıyı
dms-previewdoğru bir şekilde kaldırdığınızdan emin olmak için aşağıdaki komutu çalıştırın ve uzantıyıdms-previewlistede görmemeniz gerekir:az extension list -o table
Önemli
dms-previewuzantısı, Azure DMS tarafından desteklenen diğer geçiş yolları için hala gerekli olabilir. Uzantının gerekli olup olmadığını belirlemek için belirli geçiş yolunun belgelerine bakın. Bu belge, PostgreSQL'e özel olarak çevrimiçi PostgreSQL için Azure Veritabanı için uzantı gereksinimini kapsar.Dilediğiniz zaman aşağıdaki komutu çalıştırarak desteklenen tüm komutları görüntüleyin:
az dms -hBirden çok Azure aboneliğiniz varsa, DMS hizmetinin bir örneğini sağlamak için kullanmak istediğiniz aboneliği ayarlamak üzere aşağıdaki komutu çalıştırın.
az account set -s <SubscriptionID>
Aşağıdaki komutu çalıştırarak bir DMS örneğini sağlayın:
az dms create -l <location> -n <newServiceName> -g <yourResourceGroupName> --sku-name Premium_4vCores --subnet/subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroupName>/providers/Microsoft.Network/virtualNetworks/<VirtualNetwork>/subnets/<SubnetName> –tags tagName1=tagValue1 tagWithNoValueÖrneğin, aşağıdaki komut bir hizmet oluşturur. ,
<SubscriptionID>ve<ResourceGroupName>değerlerini geçerli değerlerle kullanın<VirtualNetwork>.- Konum: Doğu ABD2
-
Abonelik:
<SubscriptionID> -
Kaynak grubu adı:
<ResourceGroupName> -
DMS hizmet adı:
PostgresCLI
az dms create -l eastus2 -g <ResourceGroupName> -n PostgresCLI --subnet /subscriptions/<SubscriptionID>/resourceGroups/ERNetwork/providers/Microsoft.Network/virtualNetworks/<VirtualNetwork>/subnets/Subnet-1 --sku-name Premium_4vCoresDMS hizmetinin örneğinin oluşturulması yaklaşık 10 dakika sürer.
DMS aracısını Postgres
pg_hba.confdosyasına ekleyebilmek için IP adresini belirlemek için aşağıdaki komutu çalıştırın:az network nic list -g <ResourceGroupName> --query '[].ipConfigurations | [].privateIpAddress'Örneğin:
az network nic list -g <resource-group> --query '[].ipConfigurations | [].privateIpAddress'Aşağıdaki adrese benzer bir sonuç almalısınız:
[ "172.16.136.18" ]DMS aracısının IP adresini Postgres
pg_hba.confdosyasına ekleyin.DMS içinde sağlamayı bitirdikten sonra DMS IP adresini not alın.
Ip adresini aşağıdaki girişe
pg_hba.confbenzer şekilde kaynak dosyaya ekleyin:host all all 172.16.136.18/10 md5 host replication postgres 172.16.136.18/10 md5
Ardından, aşağıdaki komutu çalıştırarak bir PostgreSQL geçiş projesi oluşturun:
az dms project create -l <location> -g <ResourceGroupName> --service-name <yourServiceName> --source-platform PostgreSQL --target-platform AzureDbforPostgreSQL -n <newProjectName>Örneğin, aşağıdaki komut bu parametreleri kullanarak bir proje oluşturur:
- Konum: Orta Batı ABD
-
Kaynak grubu adı:
<ResourceGroupName> - Hizmet adı: PostgresCLI
- Proje adı: PGMigration
- Kaynak platform: PostgreSQL
- Hedef platform: AzureDbForPostgreSql
az dms project create -l westcentralus -n PGMigration -g <ResourceGroupName> --service-name PostgresCLI --source-platform PostgreSQL --target-platform AzureDbForPostgreSqlAşağıdaki adımları kullanarak bir PostgreSQL geçiş görevi oluşturun.
Bu adım, bağlantı kurmak için kaynak IP, UserID ve parola, hedef IP, UserID, parola ve görev türünü kullanmayı içerir.
Seçeneklerin tam listesini görmek için komutu çalıştırın:
az dms project task create -hHem kaynak hem de hedef bağlantı için giriş parametresi, nesne listesini içeren bir json dosyasına başvurur.
PostgreSQL bağlantıları için bağlantı JSON nesnesinin biçimi.
{ // if this is missing or null, you will be prompted "userName": "user name", // if this is missing or null (highly recommended) you will be prompted "password": null, "serverName": "server name", // if this is missing, it will default to the 'postgres' database "databaseName": "database name", // if this is missing, it will default to 5432 "port": 5432 }Ayrıca json nesnelerini listeleyen bir veritabanı seçeneği json dosyası da vardır. PostgreSQL için veritabanı seçenekleri JSON nesnesinin biçimi aşağıdaki gibi gösterilir:
[ { "name": "source database", "target_database_name": "target database", "selectedTables": [ "schemaName1.tableName1", ...n ] }, ...n ]Kaynak bağlantı json'unu oluşturmak için Not Defteri'ni açın ve aşağıdaki json dosyasını kopyalayıp dosyaya yapıştırın. Dosyayı kaynak sunucunuza göre değiştirdikten sonra C:\DMS\source.json kaydedin.
{ "userName": "postgres", "password": null, "serverName": "13.51.14.222", "databaseName": "dvdrental", "port": 5432 }Hedef bağlantı json'unu oluşturmak için Not Defteri'ni açın ve aşağıdaki json dosyasını kopyalayıp dosyaya yapıştırın. Dosyayı hedef sunucunuza göre değiştirdikten sonra C:\DMS\target.json'a kaydedin.
{ "userName": " dms@builddemotarget", "password": null, "serverName": " builddemotarget.postgres.database.azure.com", "databaseName": "inventory", "port": 5432 }Geçirecek veritabanlarının envanterini ve eşlemesini listeleyen bir veritabanı seçenekleri json dosyası oluşturun:
Geçirilecek tabloların listesini oluşturun veya bir SQL sorgusu kullanarak listeyi kaynak veritabanından oluşturabilirsiniz. Tablo listesini oluşturmak için örnek bir sorgu aşağıda verilmiştir. Bu sorguyu kullanıyorsanız, geçerli bir JSON dizisi yapmak için soyad adının sonundaki son virgülleri kaldırmayı unutmayın.
SELECT FORMAT('%s,', REPLACE(FORMAT('%I.%I', schemaname, tablename), '"', '\"')) AS SelectedTables FROM pg_tables WHERE schemaname NOT IN ('pg_catalog', 'information_schema');Kaynak ve hedef veritabanı adlarına ve geçirilecek seçili tabloların listesine sahip her veritabanı için bir giriş içeren veritabanı seçenekleri JSON dosyasını oluşturun. Diziyi doldurmak için önceki SQL sorgusunun çıkışını
selectedTableskullanabilirsiniz.Not
Seçili tablolar listesi boşsa, hizmet, eşleşen şema ve tablo adlarına sahip tüm geçiş tablolarını içerir.
[ { "name": "dvdrental", "target_database_name": "dvdrental", "selectedTables": [ "schemaName1.tableName1", "schemaName1.tableName2", ... "schemaNameN.tableNameM" ] }, ... n ]
Kaynak bağlantı, hedef bağlantı ve veritabanı seçenekleri json dosyalarını alan aşağıdaki komutu çalıştırın.
az dms project task create -g <ResourceGroupName> --project-name PGMigration --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
Bu noktada, bir geçiş görevini başarıyla gönderdiniz.
Görevin ilerleme durumunu göstermek için aşağıdaki komutları çalıştırın.
Genel görev durumunu kısaca görmek için:
az dms project task show --service-name PostgresCLI --project-name PGMigration --resource-group <ResourceGroupName> --name runnowtaskGeçiş ilerleme durumu bilgileri de dahil olmak üzere ayrıntılı görev durumunu görmek için:
az dms project task show --service-name PostgresCLI --project-name PGMigration --resource-group <ResourceGroupName> --name runnowtask --expand outputJMESPath sorgu biçimini yalnızca genişletilmiş çıktıdan ayıklamak
migrationStateiçin de kullanabilirsiniz:az dms project task show --service-name PostgresCLI --project-name PGMigration --resource-group <ResourceGroupName> --name runnowtask --expand output --query 'properties.output[].migrationState'Çıktıda, farklı geçiş adımlarının ilerleme durumunu gösteren çeşitli parametreler vardır. Örneğin, aşağıdaki çıkışa bakın:
{ "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, //Status of migration task "migrationState": "READY_TO_COMPLETE", //READY_TO_COMPLETE => 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", //Running => service is still listening to any changes that might come in "taskType": null }
Tam geçiş görevi
Tam yükleme tamamlandığında veritabanı tam geçiş için hazırdır. Kaynak sunucunun gelen yeni işlemlerle ne kadar meşgul olduğuna bağlı olarak, tam yükleme tamamlandıktan sonra DMS görevi hala değişiklikleri uyguluyor olabilir.
Tüm verilerin yakalandığından emin olmak için kaynak ve hedef veritabanları arasındaki satır sayılarını doğrulayın. Örneğin, durum çıkışından aşağıdaki ayrıntıları doğrulayabilirsiniz:
Database Level
"migrationState": "READY_TO_COMPLETE" => Status of migration task. READY_TO_COMPLETE means database is ready for cutover
"incomingChanges": 0 => Check for a period of 5-10 minutes to ensure no new incoming changes need to be applied to the target server
Table Level (for each table)
"fullLoadTotalRows": 10 => The row count matches the initial row count of the table
"cdcDeleteCounter": 0 => Number of deletes after the full load
"cdcInsertCounter": 50 => Number of inserts after the full load
"cdcUpdateCounter": 0 => Number of updates after the full load
Aşağıdaki komutu kullanarak tam veritabanı geçiş görevini gerçekleştirin:
az dms project task cutover -hÖrneğin, aşağıdaki komut 'Inventory' veritabanı için kesme işlemini başlatır:
az dms project task cutover --service-name PostgresCLI --project-name PGMigration --resource-group <ResourceGroupName> --name runnowtask --object-name InventoryTam geçişin ilerleme durumunu izlemek için aşağıdaki komutu çalıştırın:
az dms project task show --service-name PostgresCLI --project-name PGMigration --resource-group <ResourceGroupName> --name runnowtaskVeritabanı geçiş durumu Tamamlandı olarak gösterildiğinde dizileri yeniden oluşturun (varsa) ve uygulamalarınızı PostgreSQL için Azure Veritabanı'nın yeni hedef örneğine bağlayın.
Hizmet, proje, görev temizleme
Herhangi bir DMS görevini, projesini veya hizmetini iptal etmeniz ya da silmeniz gerekirse iptal işlemini aşağıdaki sırayla gerçekleştirin:
- Çalışan tüm görevleri iptal edin
- Görevi silin
- Projeyi silin
- DMS hizmetini silin
Çalışan bir görevi iptal etmek için aşağıdaki komutu kullanın:
az dms project task cancel --service-name PostgresCLI --project-name PGMigration --resource-group <ResourceGroupName> --name runnowtaskÇalışan bir görevi silmek için aşağıdaki komutu kullanın:
az dms project task delete --service-name PostgresCLI --project-name PGMigration --resource-group <ResourceGroupName> --name runnowtaskBir projeyi silmek için aşağıdaki komutu kullanın:
az dms project delete -n PGMigration -g <ResourceGroupName> --service-name PostgresCLIDMS hizmetini silmek için aşağıdaki komutu kullanın:
az dms delete -g <ResourceGroupName> -n PostgresCLI