Hata durumunda devretme işlemi için, önce Transact-SQL (T-SQL) kullanarak SQL Server örneğinizin çoğaltma modlarını değiştirmelisiniz.
Ardından PowerShell'i kullanarak yük devredebilir ve roller arasında geçiş yapabilirsiniz.
Çoğaltma modunu değiştirme (SQL MI'ye geçiş yapma)
SQL Server ile SQL Yönetilen Örneği arasında çoğaltma varsayılan olarak asenkron çalışır. Azure SQL Yönetilen Örneği'ne SQL Server'dan yük devri yapıyorsanız, veritabanınızın yükünü devretmeden önce bağlantıyı SQL Server'da Transact-SQL (T-SQL) kullanarak zaman uyumlu moda geçirin.
Not
- SQL Yönetilen Örneğinden SQL Server 2022'ye yük devredecekseniz bu adımı atlayın.
- Büyük ağ mesafeleri üzerinde senkron çoğaltma, birincil replika üzerindeki işlemleri yavaşlatabilir.
Dağıtılmış kullanılabilirlik grubunun çoğaltma modunu zaman uyumsuz moddan senkron moda değiştirmek için SQL Server'da aşağıdaki T-SQL betiğini çalıştırın. Değiştirilecek:
-
<DAGName> dağıtılmış kullanılabilirlik grubunun adıyla (bağlantıyı oluşturmak için kullanılır).
-
<AGName> sql server'da oluşturulan kullanılabilirlik grubunun adıyla (bağlantıyı oluşturmak için kullanılır).
-
<ManagedInstanceName>'yı yönetilen örneğinizin adıyla değiştirin.
-- Run on SQL Server
-- Sets the distributed availability group to a synchronous commit.
-- ManagedInstanceName example: 'sqlmi1'
USE master
GO
ALTER AVAILABILITY GROUP [<DAGName>]
MODIFY
AVAILABILITY GROUP ON
'<AGName>' WITH
(AVAILABILITY_MODE = SYNCHRONOUS_COMMIT),
'<ManagedInstanceName>' WITH
(AVAILABILITY_MODE = SYNCHRONOUS_COMMIT);
Bağlantının çoğaltma modunu başarıyla değiştirdiğinizden emin olmak için aşağıdaki dinamik yönetim görünümünü kullanın.
SYNCHRONOUS_COMMIT durumu sonuçları gösterir.
-- Run on SQL Server
-- Verifies the state of the distributed availability group
SELECT
ag.name, ag.is_distributed, ar.replica_server_name,
ar.availability_mode_desc, ars.connected_state_desc, ars.role_desc,
ars.operational_state_desc, ars.synchronization_health_desc
FROM
sys.availability_groups ag
join sys.availability_replicas ar
on ag.group_id=ar.group_id
left join sys.dm_hadr_availability_replica_states ars
on ars.replica_id=ar.replica_id
WHERE
ag.is_distributed=1
SQL Server'ı eşzamanlı işleme moduna geçirdiğinizden, iki örnek arasındaki çoğaltma eşzamanlı hale gelir. Eğer bu durumu tersine çevirmeniz gerekiyorsa, aynı adımları izleyin ve AVAILABILITY_MODE öğesini ASYNCHRONOUS_COMMIT olarak ayarlayın.
Hem SQL Server'da hem de SQL Yönetilen Örneği LSN değerlerini denetleyin
Yük devretmeyi veya geçişi tamamlamak için, yedek sunucuya çoğaltmanın tamamlandığını doğrulayın. Bunun için hem SQL Server hem de SQL Yönetilen Örneği günlük kayıtlarındaki günlük dizisi numaralarının (LSN) aynı olduğundan emin olun.
Başlangıçta, birincil üzerindeki LSN'nin ikincildeki LSN'den daha yüksek olması beklenir. Ağ gecikmesi, çoğaltmanın birincil değerden biraz geri kalmasına neden olabilir. İş yükü birincil sunucuda durdurulduğu için LSN'ler eşleşir ve bir süre sonra değişmeyi durdurur.
Son kaydedilen işlem günlüğünün LSN'sini okumak için SQL Server'da aşağıdaki T-SQL sorgusunu kullanın. Değiştir:
-
<DatabaseName> yerine veritabanı adınızla değiştirin ve son sağlamlaştırılmış LSN numarasını arayın.
-- Run on SQL Server
-- Obtain the last hardened LSN for the database on SQL Server.
SELECT
ag.name AS [Replication group],
db.name AS [Database name],
drs.database_id AS [Database ID],
drs.group_id,
drs.replica_id,
drs.synchronization_state_desc AS [Sync state],
drs.end_of_log_lsn AS [End of log LSN],
drs.last_hardened_lsn AS [Last hardened LSN]
FROM
sys.dm_hadr_database_replica_states drs
inner join sys.databases db on db.database_id = drs.database_id
inner join sys.availability_groups ag on drs.group_id = ag.group_id
WHERE
ag.is_distributed = 1 and db.name = '<DatabaseName>'
En son sağlamlaştırılmış LSN'yi okumak için, SQL Yönetilen Örneği üzerindeki aşağıdaki T-SQL sorgusunu kullanın. Veritabanı adınızla <DatabaseName> öğesini değiştirin.
Bu sorgu Genel Amaçlı SQL Yönetilen Örneği üzerinde çalışır. İş Açısından Kritik SQL Yönetilen Örneği için betiğin and drs.is_primary_replica = 1 sonundaki açıklamayı kaldırın. İş Açısından Kritik hizmet katmanında bu filtre, ayrıntıların yalnızca birincil çoğaltmadan okunmasını sağlar.
-- Run on SQL managed instance
-- Obtain the LSN for the database on SQL Managed Instance.
SELECT
db.name AS [Database name],
drs.database_id AS [Database ID],
drs.group_id,
drs.replica_id,
drs.synchronization_state_desc AS [Sync state],
drs.end_of_log_lsn AS [End of log LSN],
drs.last_hardened_lsn AS [Last hardened LSN]
FROM
sys.dm_hadr_database_replica_states drs
inner join sys.databases db on db.database_id = drs.database_id
WHERE
db.name = '<DatabaseName>'
-- for Business Critical, add the following as well
-- AND drs.is_primary_replica = 1
Alternatif olarak, Get-AzSqlInstanceLink PowerShell komutunu veya az sql mi link show Azure CLI komutunu kullanarak, SQL Managed Instance üzerindeki bağlantınız için LastHardenedLsn özelliğini alabilir ve önceki T-SQL sorgusuyla aynı bilgileri sağlayabilirsiniz.
Önemli
İş yükünüzün birincil sunucuda durdurulduğunu bir kez daha doğrulayın. Hem SQL Server'da hem de SQL Yönetilen Örneği üzerindeki LSN'lerin eşleşip eşleşmediğini ve bunların bir süre boyunca eşleştirilip değiştirilmediğini denetleyin. Her iki örnekte bulunan sabit LSN'ler, kuyruk günlüğünün ikincil örneğe çoğaltıldığını ve iş yükünün etkin bir şekilde durdurulduğunu gösterir.
Veritabanının yük devretmesi
Bağlantıyı sürdürürken SQL Server 2022 ile SQL Yönetilen Örneği arasında bir veritabanının yükünü devretmek veya SQL Server'ın herhangi bir sürümü için veri kaybıyla yük devretme gerçekleştirmek için PowerShell kullanmak istiyorsanız, ortamınız için betiği oluşturmak üzere SSMS'deki SQL Server ile Yönetilen Örnek arasında yük devretme sihirbazını kullanın. Birincil veya ikincil replikadan planlı geçiş gerçekleştirebilirsiniz. Zorunlu yük devretme yapmak için ikincil kopyaya bağlanın.
SQL Server sürümünden bağımsız olarak veritabanınızda yük devretme veya veritabanınızı geçirme sırasında bağlantıyı kesmek ve çoğaltmayı durdurmak için Remove-AzSqlInstanceLink PowerShell veya az sql mi link delete Azure CLI komutunu kullanın.
Dikkat
- Yük devretmeden önce, çoğaltılan veritabanının veri kaybı olmadan tamamen senkronize olmasına ve yük devretmesine izin vermek için kaynak veritabanındaki iş yükünü durdurun. Zorlamalı yük devretme gerçekleştirirseniz veya LSN'ler eşleşmeden bağlantıyı keserseniz, verilerin kaybolmasına neden olabilirsiniz.
- SQL Server 2019 ve önceki sürümlerde bir veritabanının devretme işlemi, iki çoğaltma arasındaki bağlantıyı keser ve kaldırır. Başlangıçtaki birinci sisteme geri dönemezsiniz.
Aşağıdaki örnek betik bağlantıyı keser ve çoğaltmalarınız arasındaki çoğaltmayı sona erdirerek veritabanının her iki örnekte de okuma/yazma yapmasını sağlar. Değiştir:
-
<ManagedInstanceName>'yı yönetilen örneğinizin adıyla değiştirin.
-
<DAGName>yük devretmekte olduğunuz bağlantının adıyla (yukarıda daha önce yürütülen komuttan Name özelliğinin Get-AzSqlInstanceLink çıktısı).
# Run in Azure Cloud Shell (select PowerShell console)
# =============================================================================
# POWERSHELL SCRIPT TO FAIL OVER OR MIGRATE DATABASE TO AZURE
# ===== Enter user variables here ====
# Enter your managed instance name – for example, "sqlmi1"
$ManagedInstanceName = "<ManagedInstanceName>"
$LinkName = "<DAGName>"
# ==== Do not customize the following cmdlet ====
# Find out the resource group name
$ResourceGroup = (Get-AzSqlInstance -InstanceName $ManagedInstanceName).ResourceGroupName
# Failover the specified link
Remove-AzSqlInstanceLink -ResourceGroupName $ResourceGroup |
-InstanceName $ManagedInstanceName -Name $LinkName -Force
Yük devretme başarılı olduğunda bağlantı kesilir ve artık var olmaz. SQL Server veritabanı ve SQL Yönetilen Örneği veritabanı artık tamamen bağımsız oldukları için okuma/yazma iş yüklerini yürütebilir.
Önemli
SQL Yönetilen Örneği'ne başarılı bir şekilde yük devrettikten sonra, geçiş veya yük devretme işlemini tamamlamak ve Azure'da çalışmaya devam etmek için, uygulamalarınızın bağlantı dizelerini SQL Yönetilen Örneği'nin Tam Nitelikli Etki Alanı Adı'na (FQDN) el ile yeniden yönlendirin.
Bağlantı bırakıldıktan sonra kullanılabilirlik grubunu SQL Server'da tutabilirsiniz, ancak SQL Server'dan bağlantı meta verilerini kaldırmak için dağıtılmış kullanılabilirlik grubunu bırakmanız gerekir. SSMS bu eylemi sizin için gerçekleştirdiğinden bu ek adım yalnızca PowerShell kullanılarak yük devredilirken gereklidir.
Dağıtılmış kullanılabilirlik grubunuzu bırakmak için aşağıdaki değeri değiştirin ve ardından örnek T-SQL kodunu çalıştırın:
-
<DAGName> sql server'da dağıtılmış kullanılabilirlik grubunun adıyla (bağlantıyı oluşturmak için kullanılır).
-- Run on SQL Server
USE MASTER
GO
DROP AVAILABILITY GROUP <DAGName>
GO