Öğretici: Azure CLI aracılığıyla DMS (klasik) kullanarak PostgreSQL'i çevrimiçi PostgreSQL için Azure Veritabanı geçirme
Önemli
Daha kolay ve verimli bir geçiş deneyimi için yeni geçiş hizmetinin PostgreSQL için Azure Veritabanı'de kullanılması önerilir. Bu hizmet, çeşitli kaynak ortamları destekleyerek süreci basitleştirir ve PostgreSQL için Azure Veritabanı sorunsuz bir geçiş sağlar.
Azure Veritabanı Geçiş Hizmeti kullanarak veritabanlarını en düşük kapalı kalma süresiyle şirket içi PostgreSQL örneğinden PostgreSQL için Azure Veritabanı geçirebilirsiniz. Başka bir deyişle, uygulamaya en az kapalı kalma süresiyle geçiş yapılabilir. Bu öğreticide, Azure Veritabanı Geçiş Hizmeti'deki çevrimiçi geçiş etkinliğini kullanarak DVD Kiralama örnek veritabanını PostgreSQL 9.6'nın şirket içi bir örneğinden PostgreSQL için Azure Veritabanı geçirebilirsiniz.
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.
Not
Ç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.
Ayrıca hedef PostgreSQL için Azure Veritabanı sürümünün şirket içi PostgreSQL sürümüne eşit veya bundan sonraki bir sürüm olması gerektiğini unutmayın. Ö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ı'da bir örnek oluşturun veya PostgreSQL için Azure Veritabanı - Hiper Ölçek (Citus) sunucusu 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 bir 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.
Not
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ğini filtreleme hakkında ayrıntılı bilgi için Ağ güvenlik grupları ile ağ trafiğini filtreleme makalesine bakın.
Windows Güvenlik Duvarınızı veritabanı altyapısı erişimi için yapılandırın.
Azure Veritabanı Geçiş Hizmeti'ne kaynak PostgreSQL Server erişimi sağlamak için Windows güvenlik duvarınızı açın. Varsayılan ayarlarda 5432 numaralı TCP bağlantı noktası kullanılır.
Kaynak veritabanlarınızın önünde bir güvenlik duvarı cihazı kullanıyorsanız, Azure Veritabanı Geçiş Hizmeti'nin geçiş amacıyla kaynak veritabanlarına erişmesi için güvenlik duvarı kuralları eklemeniz gerekebilir.
Azure Veritabanı Geçiş Hizmeti'nin hedef veritabanlarına erişmesini sağlama amacıyla PostgreSQL için Azure Veritabanı'na yönelik olarak sunucu düzeyinde 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 istiyorsanız Windows 10 Yükleme Kılavuzu içindeki yönergeleri izleyin
postgresql.config dosyasını düzenleyip aşağıdaki parametreleri ayarlayarak kaynak sunucuda mantıksal çoğaltmayı etkinleştirin:
- wal_level = logical
- max_replication_slots = [yuva sayısı], beş yuvaya ayarlamanızı öneririz
- max_wal_senders =[eşzamanlı görev sayısı] - max_wal_senders parametresi, çalışabilecek eşzamanlı görevlerin sayısını ayarlar; önerilen ayar 10 görevdir
Örnek şemayı geçirme
Tablo şemaları, dizinler ve saklı yordamlar gibi tüm veritabanı nesnelerini tamamlamak için kaynak veritabanındaki şemayı ayıklamamız ve veritabanına uygulamamız gerekir.
Bir veritabanına yönelik şema döküm dosyası oluşturmak için pg_dump -s komutunu kullanın.
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.sql
pg_dump yardımcı programını kullanma hakkında daha fazla bilgi için pg-dump öğreticisindeki örneklere bakın.
Hedef ortamınız olan PostgreSQL için Azure Veritabanı içinde boş bir veritabanı oluşturun.
Veritabanı bağlama ve oluşturma hakkında ayrıntılı bilgi için Azure portalında PostgreSQL için Azure Veritabanı sunucusu oluşturma veya Azure portalında PostgreSQL için Azure Veritabanı - Hiper Ölçek (Citus) sunucusu oluşturma makalesine bakın.
Ş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.sql
Not
Geçiş hizmeti, güvenilir ve sağlam bir veri geçişi sağlamak için yabancı anahtarları etkinleştirme/devre dışı bırakma işlemlerini dahili olarak işler ve tetikler. 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 login
Sorulduğ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-preview
kalmadan 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-preview
zaten yüklü olup olmadığını denetlemek için aşağıdaki komutu çalıştırın:az extension list -o table
Uzantı yüklüyse
dms-preview
, uzantıyı kaldırmak için aşağıdaki komutu çalıştırın:az extension remove --name dms-preview
Uzantıyı
dms-preview
doğru bir şekilde kaldırdığınızdan emin olmak için aşağıdaki komutu çalıştırın ve uzantıyıdms-preview
listede görmemeniz gerekir:az extension list -o table
Önemli
dms-preview
uzantı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 lütfen 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 -h
Birden ç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 97181df2-909d-420b-ab93-1bff15acb6b7
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/{vnet subscription id}/resourceGroups/{vnet resource group}/providers/Microsoft.Network/virtualNetworks/{vnet name}/subnets/{subnet name} –tags tagName1=tagValue1 tagWithNoValue
Örneğin, aşağıdaki komut şurada bir hizmet oluşturur:
- Konum: Doğu ABD2
- Abonelik: 97181df2-909d-420b-ab93-1bff15acb6b7
- Kaynak Grubu Adı: PostgresDemo
- DMS Hizmet Adı: 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
DMS hizmeti örneğini oluşturmak yaklaşık 10-12 dakika sürer.
Postgres pg_hba.conf dosyasına eklemek üzere DMS aracısının IP adresini tanımlamak 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 PostgresDemo --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.conf dosyasına ekleyin.
DMS içinde sağlamayı bitirdikten sonra DMS IP adresini not alın.
IP adresini aşağıdaki girişe benzer şekilde kaynaktaki pg_hba.conf dosyasına 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ı: PostgresDemo
- Hizmet Adı: PostgresCLI
- Proje adı: PGMigration
- Kaynak platform: PostgreSQL
- Hedef platform: AzureDbForPostgreSql
az dms project create -l westcentralus -n PGMigration -g PostgresDemo --service-name PostgresCLI --source-platform PostgreSQL --target-platform AzureDbForPostgreSql
Aş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 -h
Hem 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 veri tabanı seçeneği JSON nesnesinin biçimi aşağıda gösterilmiştir:
[ { "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, örnek olarak aşağıda verilmiştir. Bu sorguyu kullanıyorsanız, geçerli bir JSON dizisi haline getirmek için lütfen son tablo 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ı ile geçirilecek seçili tabloların listesini içeren her veritabanı için bir giriş içeren veritabanı seçenekleri json dosyasını oluşturun. Yukarıdaki SQL sorgusunun çıkışını kullanarak "selectedTables" dizisini doldurabilirsiniz. Seçili tablolar listesi boşsa, hizmetin geçiş için eşleşen şema ve tablo adlarına sahip tüm tabloları içereceğini lütfen unutmayın..
[ { "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 PostgresDemo --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 komutu ç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 PostgresDemo --name runnowtask
Geç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 PostgresDemo --name runnowtask --expand output
-
az dms project task show --service-name PostgresCLI --project-name PGMigration --resource-group PostgresDemo --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 PostgresDemo --name runnowtask --object-name Inventory
Tam 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 PostgresDemo --name runnowtask
Veritabanı geçiş durumu Tamamlandı olarak gösterildiğinde dizileri yeniden oluşturun (varsa) ve uygulamalarınızı yeni hedef PostgreSQL için Azure Veritabanı ö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 PostgresDemo --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 PostgresDemo --name runnowtask
Bir projeyi silmek için aşağıdaki komutu kullanın:
az dms project delete -n PGMigration -g PostgresDemo --service-name PostgresCLI
DMS hizmetini silmek için aşağıdaki komutu kullanın:
az dms delete -g ProgresDemo -n PostgresCLI
Sonraki adımlar
- PostgreSQL için Azure Veritabanı'na yönelik çevrimiçi geçiş gerçekleştirirken karşılaşılan bilinen sorunlar ve sınırlamalar hakkında bilgi için PostgreSQL için Azure Veritabanı geçiş işlemleri ile ilgili bilinen sorunlar ve geçici çözümler başlıklı makaleye bakın.
- Azure Veritabanı Geçiş Hizmeti hakkında bilgi için What is the Azure Database Migration Service? (Azure Veritabanı Geçiş Hizmeti nedir?) başlıklı makaleye bakın.
- PostgreSQL için Azure Veritabanı hakkında bilgi için PostgreSQL için Azure Veritabanı nedir? makalesine bakın.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin