Yük devretmek için önce Transact-SQL (T-SQL) kullanarak SQL Server örneğini çoğaltma modları arasında geçiş yapmanız gerekir.
Ardından PowerShell'i kullanarak yük devredebilir ve roller arasında geçiş yapabilirsiniz.
Çoğaltma modunu değiştirme (SQL MI'ye yük devretme)
SQL Server ile SQL Yönetilen Örneği arasında çoğaltma varsayılan olarak zaman uyumsuzdur. SQL Server'dan Azure SQL Yönetilen Örneği yük devrediyorsanız, veritabanınızın yükünü devretmeden önce Transact-SQL (T-SQL) kullanarak bağlantıyı SQL Server'da zaman uyumlu moda geçirin.
Not
- SQL Yönetilen Örneği'den SQL Server 2022'ye yük devredecekseniz bu adımı atlayın.
- Büyük ağ uzaklıkları arasında zaman uyumlu çoğaltma, birincil çoğaltmadaki işlemleri yavaşlatabilir.
Dağıtılmış kullanılabilirlik grubunun çoğaltma modunu zaman uyumsuzdan eşitlemeye değiştirmek için SQL Server'da aşağıdaki T-SQL betiğini çalıştırın. Değiştirmek:
-
<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önetilen örneğinizin adıyla birlikte.
-- 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. Sonuçlar durumu SYNCHRONOUS_COMMIT
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'ı zaman uyumlu işleme moduna geçirdiğinizden, iki örnek arasındaki çoğaltma zaman uyumlu olur. Bu durumu tersine çevirmeniz gerekiyorsa, aynı adımları izleyin ve olarak AVAILABILITY_MODE
ASYNCHRONOUS_COMMIT
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, ikincilye çoğaltmanın tamamlandığını onaylayı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ştirme:
-
<DatabaseName>
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>'
Veritabanınız için en son sağlamlaştırılmış LSN'yi okumak için SQL Yönetilen Örneği aşağıdaki T-SQL sorgusunu kullanın. değerini veritabanınızın adıyla değiştirin <DatabaseName>
.
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 veya az sql mi link show Azure CLI komutunu kullanarak
Ö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 örnekteki kararlı LSN'ler kuyruk günlüğünün ikincil günlüğe çoğaltıldığını ve iş yükünün etkili 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 çoğaltmadan planlı yük devretme gerçekleştirebilirsiniz. Zorlamalı yük devretme yapmak için ikincil çoğaltmaya bağlanın.
SQL Server sürümünden bağımsız olarak veritabanınızda yük devretme yaptığınızda veya veritabanınızı geçirirken 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 yakalaması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 verileri kaybedebilirsiniz.
- SQL Server 2019 ve önceki sürümlerde bir veritabanının yük devretmesi iki çoğaltma arasındaki bağlantıyı keser ve kaldırır. İlk birincil birincile 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ştirme:
-
<ManagedInstanceName>
yönetilen örneğinizin adıyla birlikte.
-
<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ı bırakılır ve artık yoktur. 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 başarıyla yük devretme işleminden 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ı dizesi SQL yönetilen örneği FQDN'sine el ile yeniden belirleyin.
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