Betiklerle bağlantıyı yapılandırma - Azure SQL Yönetilen Örneği

Şunlar için geçerlidir:Azure SQL Yönetilen Örneği

Bu makalede Transact-SQL ve PowerShell veya Azure CLI betikleriyle SQL Server ile Azure SQL Yönetilen Örneği arasında nasıl bağlantı yapılandırabileceğiniz öğretildi. Bağlantıyla, ilk birincil kopyanızdaki veritabanları neredeyse gerçek zamanlı olarak ikincil çoğaltmanıza çoğaltılır.

Bağlantı oluşturulduktan sonra, geçiş veya olağanüstü durum kurtarma amacıyla ikincil çoğaltmanıza yük devredebilirsiniz.

Not

  • Bağlantıyı SQL Server Management Studio (SSMS) ile yapılandırmak da mümkündür.
  • İlk birincil Azure SQL Yönetilen Örneği yapılandırma şu anda önizleme aşamasındadır ve yalnızca SQL Server 2022 CU10'dan itibaren desteklenir.

Genel bakış

Veritabanlarını ilk birincil kopyanızdan ikincil çoğaltmanıza çoğaltmak için bağlantı özelliğini kullanın. SQL Server 2022 için, ilk birincil SQL Server veya Azure SQL Yönetilen Örneği olabilir. SQL Server 2019 ve önceki sürümler için ilk birincil sunucu SQL Server olmalıdır. Bağlantı yapılandırıldıktan sonra, ilk birincildeki veritabanları ikincil çoğaltmaya çoğaltılır.

Birincil ve ikincil çoğaltma arasındaki karma bir ortamda sürekli veri çoğaltması için bağlantıyı yerinde bırakmayı seçebilir veya veritabanını ikincil çoğaltmaya, Azure'a geçirmek veya olağanüstü durum kurtarma için yük devredebilirsiniz. SQL Server 2019 ve önceki sürümlerde Azure SQL Yönetilen Örneği yük devretme işlemi bağlantıyı keser ve yeniden çalışma desteklenmez. SQL Server 2022 ile bağlantıyı koruma ve iki çoğaltma arasında ileri geri çalışma seçeneğiniz vardır. Bu özellik şu anda önizleme aşamasındadır.

İkincil yönetilen örneğinizi yalnızca olağanüstü durum kurtarma için kullanmayı planlıyorsanız karma yük devretme avantajını etkinleştirerek lisanslama maliyetlerinden tasarruf edebilirsiniz.

SQL Server ile Azure SQL Yönetilen Örneği arasındaki bağlantıyı el ile ayarlamak için bu makaledeki yönergeleri kullanın. Bağlantı oluşturulduktan sonra kaynak veritabanınız hedef ikincil çoğaltmanızda salt okunur bir kopya alır.

İpucu

  • Ortamınız için doğru parametrelerle T-SQL betiklerini kullanmayı basitleştirmek için, bağlantıyı oluşturmak üzere bir betik oluşturmak üzere SQL Server Management Studio'da (SSMS) Yönetilen Örnek bağlantı sihirbazını kullanmanızı kesinlikle öneririz. Yeni Yönetilen Örnek bağlantı penceresinin Özet sayfasında Son yerine Betik'iseçin.

Önkoşullar

Not

Bağlantının bazı işlevleri genel kullanıma sunulurken, bazıları şu anda önizleme aşamasındadır. Daha fazla bilgi edinmek için sürüm desteklenebilirliğini gözden geçirin.

Veritabanlarınızı çoğaltmak için aşağıdaki önkoşullara ihtiyacınız vardır:

Aşağıdakileri göz önünde bulundurun:

  • Bağlantı özelliği, bağlantı başına bir veritabanını destekler. Bir örnekte birden çok veritabanını çoğaltmak için her bir veritabanı için bir bağlantı oluşturun. Örneğin, 10 veritabanını SQL Yönetilen Örneği çoğaltmak için 10 ayrı bağlantı oluşturun.
  • SQL Server ile SQL Yönetilen Örneği arasındaki harmanlama aynı olmalıdır. Harmanlamadaki bir uyuşmazlık, sunucu adı büyük/küçük harflerinde uyuşmazlığa neden olabilir ve SQL Server'dan SQL Yönetilen Örneği bağlantının başarılı olmasını engelleyebilir.
  • İlk SQL Server birincil dosyanızda hata 1475, seçeneği olmadan COPY ONLY tam yedekleme oluşturarak yeni bir yedekleme zinciri başlatmanız gerektiğini gösterir.

İzinler

SQL Server için sysadmin izinlerine sahip olmanız gerekir.

Azure SQL Yönetilen Örneği için, SQL Yönetilen Örneği Katkıda Bulunanı üyesi olmanız veya aşağıdaki özel rol izinlerine sahip olmanız gerekir:

Microsoft.Sql/ kaynağı Gerekli izinler
Microsoft.Sql/managedInstances /read, /write
Microsoft.Sql/managedInstances/hybridCertificate /eylem
Microsoft.Sql/managedInstances/databases /read, /delete, /write, /completeRestore/action, /readBackups/action, /restoreDetails/read
Microsoft.Sql/managedInstances/distributedAvailabilityGroups /read, /write, /delete, /setRole/action
Microsoft.Sql/managedInstances/endpointCertificates /Okuma
Microsoft.Sql/managedInstances/hybridLink /read, /write, /delete
Microsoft.Sql/managedInstances/serverTrustCertificates /write, /delete, /read

Terminoloji ve adlandırma kuralları

Bu kullanıcı kılavuzunda betikleri çalıştırırken SQL Server ve SQL Yönetilen Örneği adlarında tam etki alanı adları (FQDN) hatalarının olmaması önemlidir. Aşağıdaki tabloda, çeşitli adların tam olarak neyi temsil ettiği ve değerlerini nasıl edinecekleri açıklanmaktadır:

Terminoloji Açıklama Nasıl öğren bulunur
İlk birincil 1 VERITABANınızı ikincil çoğaltmaya çoğaltmak için başlangıçta bağlantı oluşturduğunuz SQL Server veya SQL Yönetilen Örneği.
Birincil çoğaltma Şu anda birincil veritabanını barındıran SQL Server veya SQL Yönetilen Örneği.
İkincil çoğaltma Geçerli birincil çoğaltmadan neredeyse gerçek zamanlı çoğaltılmış veriler alan SQL Server veya SQL Yönetilen Örneği.
SQL Server adı Kısa, tek sözcüklü SQL Server adı. Örneğin: sqlserver1. T-SQL'den çalıştırın SELECT @@SERVERNAME .
SQL Server FQDN SQL Server'ınızın tam etki alanı adı (FQDN). Örneğin: sqlserver1.domain.com. Şirket içi ağ (DNS) yapılandırmanıza veya Azure sanal makinesi (VM) kullanıyorsanız sunucu adına bakın.
SQL Yönetilen Örneği adı Kısa, tek sözcüklü SQL Yönetilen Örneği adı. Örneğin: managedinstance1. Azure portalında yönetilen örneğinizin adına bakın.
SQL Yönetilen Örneği FQDN SQL Yönetilen Örneği tam etki alanı adı (FQDN). Örneğin: managedinstance1.6d710bcf372b.database.windows.net. Azure portalındaki SQL Yönetilen Örneği genel bakış sayfasında ana bilgisayar adına bakın.
Çözümlenebilir etki alanı adı BIR IP adresine çözümlenebilen DNS adı. Örneğin, çalıştırma nslookup sqlserver1.domain.com 10.0.0.1 gibi bir IP adresi döndürmelidir. Komut isteminden komutunu çalıştırın nslookup .
SQL Server IP SQL Server'ınızın IP adresi. SQL Server'da birden çok IP olması durumunda Azure'dan erişilebilen IP adresini seçin. SQL Server'ı çalıştıran ana bilgisayar işletim sisteminin komut isteminden komutunu çalıştırın ipconfig .

1 İlk birincil Azure SQL Yönetilen Örneği yapılandırma şu anda önizleme aşamasındadır ve yalnızca SQL Server 2022 CU10 ile başlayarak desteklenir.

Veritabanı kurtarma ve yedeklemeyi ayarlama

SQL Server ilk birincil sunucunuzsa, bağlantı aracılığıyla çoğaltılacak veritabanlarının tam kurtarma modelinde olması ve en az bir yedeklemeye sahip olması gerekir. Azure SQL Yönetilen Örneği yedeklemeleri otomatik olarak aldığından, SQL Yönetilen Örneği ilk birincil dosyanızsa bu adımı atlayın. birincil

Çoğaltmak istediğiniz tüm veritabanları için SQL Server'da aşağıdaki kodu çalıştırın. değerini gerçek veritabanı adınızla değiştirin <DatabaseName> .

-- Run on SQL Server
-- Set full recovery model for all databases you want to replicate.
ALTER DATABASE [<DatabaseName>] SET RECOVERY FULL
GO

-- Execute backup for all databases you want to replicate.
BACKUP DATABASE [<DatabaseName>] TO DISK = N'<DiskPath>'
GO

Daha fazla bilgi için bkz . Tam Veritabanı Yedeklemesi Oluşturma.

Not

Bağlantı yalnızca kullanıcı veritabanlarının çoğaltılabilmesini destekler. Sistem veritabanlarının çoğaltılma işlemi desteklenmez. Örnek düzeyindeki nesneleri çoğaltmak için (veya msdb veritabanlarında master depolanır), bunları betik olarak çalıştırmanızı ve hedef örnekte T-SQL betiklerini çalıştırmanızı öneririz.

Örnekler arasında güven oluşturma

İlk olarak, iki örnek arasında güven oluşturmalı ve ağ üzerinden veri iletişim kurmak ve şifrelemek için kullanılan uç noktaların güvenliğini sağlamalısınız. Dağıtılmış kullanılabilirlik grupları, kendi ayrılmış uç noktalarına sahip olmak yerine mevcut kullanılabilirlik grubu veritabanı yansıtma uç noktasını kullanır. Bu nedenle, kullanılabilirlik grubu veritabanı yansıtma uç noktası aracılığıyla iki örnek arasında güvenlik ve güvenin yapılandırılması gerekir.

Not

Bağlantı Always On kullanılabilirlik grubu teknolojisini temel alır. Veritabanı yansıtma uç noktası, diğer örneklerden bağlantı almak için yalnızca kullanılabilirlik grupları tarafından kullanılan özel amaçlı bir uç noktadır. Veritabanı yansıtma uç noktası terimi eski SQL Server veritabanı yansıtma özelliğiyle yanlış olmamalıdır.

SERTIFIKA tabanlı güven, SQL Server ve SQL Yönetilen Örneği için veritabanı yansıtma uç noktalarının güvenliğini sağlamanın desteklenen tek yoludur. Windows kimlik doğrulamasını kullanan mevcut kullanılabilirlik gruplarınız varsa, ikincil kimlik doğrulama seçeneği olarak mevcut yansıtma uç noktasına sertifika tabanlı güven eklemeniz gerekir. Bunu, bu makalenin ilerleyen bölümlerinde gösterildiği gibi deyimini ALTER ENDPOINT kullanarak yapabilirsiniz.

Önemli

Sertifikalar son kullanma tarihi ve saatiyle oluşturulur. Süresi dolmadan önce yenilenmeleri ve döndürülmeleri gerekir.

Aşağıda hem SQL Server hem de SQL Yönetilen Örneği için veritabanı yansıtma uç noktalarının güvenliğini sağlama işlemine genel bakış listelenmiştir:

  1. SQL Server'da bir sertifika oluşturun ve ortak anahtarını alın.
  2. SQL Yönetilen Örneği sertifikasının ortak anahtarını alın.
  3. SQL Server ile SQL Yönetilen Örneği arasında ortak anahtarları değiştirme.
  4. Azure tarafından güvenilen kök sertifika yetkilisi anahtarlarını SQL Server'a aktarma

Aşağıdaki bölümlerde bu adımlar ayrıntılı olarak açıklanmaktadır.

SQL Server'da sertifika oluşturma ve ortak anahtarını SQL Yönetilen Örneği

İlk olarak, henüz yoksa veritabanında veritabanı ana anahtarını master oluşturun. Parolanızı aşağıdaki betiğin <strong_password> yerine ekleyin ve gizli ve güvenli bir yerde saklayın. SQL Server'da bu T-SQL betiğini çalıştırın:

-- Run on SQL Server
-- Create a master key encryption password
-- Keep the password confidential and in a secure place
USE MASTER
IF NOT EXISTS (SELECT * FROM sys.symmetric_keys WHERE symmetric_key_id = 101)
BEGIN
    PRINT 'Creating master key.' + CHAR(13) + 'Keep the password confidential and in a secure place.'
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong_password>'
END
ELSE
    PRINT 'Master key already exists.'
GO

Ardından SQL Server'da bir kimlik doğrulama sertifikası oluşturun. Aşağıdaki betikte değiştirin:

  • @cert_expiry_date ile istenen sertifika son kullanma tarihi (gelecekteki tarih).

Bağlantının sürekli çalıştığından emin olmak için bu tarihi kaydedin ve SQL server sertifikasını son kullanma tarihinden önce döndürmek (güncelleştirmek) için bir anımsatıcı ayarlayın.

Önemli

Bu betikten otomatik olarak oluşturulan sertifika adını kullanmanız kesinlikle önerilir. SQL Server'da kendi sertifika adınızı özelleştirmeye izin verilirken, ad herhangi bir \ karakter içermemelidir.

-- Create the SQL Server certificate for the instance link
USE MASTER

-- Customize SQL Server certificate expiration date by adjusting the date below
DECLARE @cert_expiry_date AS varchar(max)='03/30/2025'

-- Build the query to generate the certificate
DECLARE @sqlserver_certificate_name NVARCHAR(MAX) = N'Cert_' + @@servername  + N'_endpoint'
DECLARE @sqlserver_certificate_subject NVARCHAR(MAX) = N'Certificate for ' + @sqlserver_certificate_name
DECLARE @create_sqlserver_certificate_command NVARCHAR(MAX) = N'CREATE CERTIFICATE [' + @sqlserver_certificate_name + '] ' + char (13) +
'    WITH SUBJECT = ''' + @sqlserver_certificate_subject + ''',' + char (13) +
'    EXPIRY_DATE = '''+ @cert_expiry_date + ''''+ char (13)
IF NOT EXISTS (SELECT name from sys.certificates WHERE name = @sqlserver_certificate_name)
BEGIN
    PRINT (@create_sqlserver_certificate_command)
    -- Execute the query to create SQL Server certificate for the instance link
    EXEC sp_executesql @stmt = @create_sqlserver_certificate_command
END
ELSE
    PRINT 'Certificate ' + @sqlserver_certificate_name + ' already exists.'
GO

Ardından, sertifikanın oluşturulduğunu doğrulamak için SQL Server'da aşağıdaki T-SQL sorgusunu kullanın:

-- Run on SQL Server
USE MASTER
GO
SELECT * FROM sys.certificates WHERE pvt_key_encryption_type = 'MK'

Sorgu sonuçlarında sertifikanın ana anahtarla şifrelendiğini göreceksiniz.

Artık SQL Server'da oluşturulan sertifikanın ortak anahtarını alabilirsiniz:

-- Run on SQL Server
-- Show the name and the public key of generated SQL Server certificate
USE MASTER
GO
DECLARE @sqlserver_certificate_name NVARCHAR(MAX) = N'Cert_' + @@servername  + N'_endpoint'
DECLARE @PUBLICKEYENC VARBINARY(MAX) = CERTENCODED(CERT_ID(@sqlserver_certificate_name));
SELECT @sqlserver_certificate_name as 'SQLServerCertName'
SELECT @PUBLICKEYENC AS SQLServerPublicKey;

Sertifikayı SQLServerCertName içeri aktarırken sonraki adımda gerek duyacağınız için çıkıştan ve SQLServerPublicKey değerlerini kaydedin.

İlk olarak Azure'da oturum açtığınızdan ve yönetilen örneğinizin barındırıldığı aboneliği seçtiğinizden emin olun. Hesabınızda birden fazla Azure aboneliği varsa uygun aboneliği seçmek özellikle önemlidir.

<SubscriptionID> öğesini Azure abonelik kimliğinizle değiştirin.

# Run in Azure Cloud Shell (select PowerShell console)

# Enter your Azure subscription ID
$SubscriptionID = "<SubscriptionID>"

# Login to Azure and select subscription ID
if ((Get-AzContext ) -eq $null)
{
    echo "Logging to Azure subscription"
    Login-AzAccount
}
Select-AzSubscription -SubscriptionName $SubscriptionID

Ardından, aşağıdaki PowerShell örneği gibi kimlik doğrulama sertifikasının ortak anahtarını SQL Server'dan Azure'a yüklemek için New-AzSqlInstanceServerTrustCertificate PowerShell veya az sql mi partner-cert create Azure CLI komutunu kullanın.

Gerekli kullanıcı bilgilerini doldurun, kopyalayın, yapıştırın ve betiği çalıştırın. Değiştirme:

  • <SQLServerPublicKey> sql server sertifikasının bir önceki adımda kaydettiğiniz ikili biçimdeki ortak bölümüyle. ile 0xbaşlayan uzun bir dize değeridir.
  • <SQLServerCertName> önceki adımda kaydettiğiniz SQL Server sertifika adıyla.
  • <ManagedInstanceName> yönetilen örneğinizin kısa adıyla.
# Run in Azure Cloud Shell (select PowerShell console)
# ===============================================================================
# POWERSHELL SCRIPT TO IMPORT SQL SERVER PUBLIC CERTIFICATE TO SQL MANAGED INSTANCE
# ===== Enter user variables here ====

# Enter the name for the server SQLServerCertName certificate – for example, "Cert_sqlserver1_endpoint"
$CertificateName = "<SQLServerCertName>"

# Insert the certificate public key blob that you got from SQL Server – for example, "0x1234567..."
$PublicKeyEncoded = "<SQLServerPublicKey>"

# Enter your managed instance short name – for example, "sqlmi"
$ManagedInstanceName = "<ManagedInstanceName>"

# ==== Do not customize the below cmdlets====

# Find out the resource group name
$ResourceGroup = (Get-AzSqlInstance -InstanceName $ManagedInstanceName).ResourceGroupName

# Upload the public key of the authentication certificate from SQL Server to Azure.
New-AzSqlInstanceServerTrustCertificate -ResourceGroupName $ResourceGroup -InstanceName $ManagedInstanceName -Name $CertificateName -PublicKey $PublicKeyEncoded 

Bu işlemin sonucu, Azure'a yüklenen SQL Server sertifikasının özetidir.

Yönetilen örneğe yüklenen tüm SQL Server sertifikalarını görmeniz gerekiyorsa Azure Cloud Shell'de Get-AzSqlInstanceServerTrustCertificate PowerShell veya az sql mi partner-cert list Azure CLI komutunu kullanın. SQL yönetilen örneğine yüklenen SQL Server sertifikasını kaldırmak için Azure Cloud Shell'de Remove-AzSqlInstanceServerTrustCertificate PowerShell veya az sql mi partner-cert delete Azure CLI komutunu kullanın.

sertifika ortak anahtarını SQL Yönetilen Örneği alın ve SQL Server'a aktarın

Bağlantı uç noktasının güvenliğini sağlamak için sertifika Azure SQL Yönetilen Örneği otomatik olarak oluşturulur. Sertifika ortak anahtarını SQL Yönetilen Örneği alın ve Get-AzSqlInstanceEndpointCertificate PowerShell veya az sql mi endpoint-cert show Azure CLI komutunu kullanarak sql Server'a aktarın( örneğin, aşağıdaki PowerShell örneği).

Dikkat

Azure CLI kullanırken, sonraki adımlarda kullanırken PublicKey çıkışının önüne el ile eklemeniz 0x gerekir. Örneğin, PublicKey "0x3082033E30..." gibi görünür.

Aşağıdaki betiği çalıştırın. Değiştirme:

  • <SubscriptionID> azure abonelik kimliğiniz ile birlikte.
  • <ManagedInstanceName> yönetilen örneğinizin kısa adıyla.
# Run in Azure Cloud Shell (select PowerShell console)
# ===============================================================================
# POWERSHELL SCRIPT TO EXPORT MANAGED INSTANCE PUBLIC CERTIFICATE
# ===== Enter user variables here ====

# Enter your managed instance short name – for example, "sqlmi"
$ManagedInstanceName = "<ManagedInstanceName>"

# ==== Do not customize the following cmdlet ====

# Find out the resource group name
$ResourceGroup = (Get-AzSqlInstance -InstanceName $ManagedInstanceName).ResourceGroupName

# Fetch the public key of the authentication certificate from Managed Instance. Outputs a binary key in the property PublicKey.
Get-AzSqlInstanceEndpointCertificate -ResourceGroupName $ResourceGroup -InstanceName $ManagedInstanceName -EndpointType "DATABASE_MIRRORING" | out-string   

Sonraki adımda gerektireceğimiz için PublicKey çıkışının tamamını (ile 0xbaşlar) kopyalayın.

Alternatif olarak, PublicKey'i kopyalama sırasında sorunlarla karşılaşırsanız, bağlantı uç noktası için ortak anahtarını almak üzere yönetilen örnekte T-SQL komutunu EXEC sp_get_endpoint_certificate 4 da çalıştırabilirsiniz.

Ardından, yönetilen örnek güvenlik sertifikasının elde edilen ortak anahtarını SQL Server'a aktarın. SQL Server'da aşağıdaki sorguyu çalıştırın. Değiştirme:

  • <ManagedInstanceFQDN> yönetilen örneğin tam etki alanı adıyla.
  • <PublicKey> ile önceki adımda elde edilen PublicKey değeriyle (ile başlayarak 0xAzure Cloud Shell'den). Tırnak işaretleri kullanmanız gerekmez.

Önemli

Sertifikanın adı SQL Yönetilen Örneği FQDN olmalıdır ve değiştirilmemelidir. Özel bir ad kullanılıyorsa bağlantı çalışmaz.

-- Run on SQL Server
USE MASTER
CREATE CERTIFICATE [<ManagedInstanceFQDN>]
FROM BINARY = <PublicKey> 

Azure tarafından güvenilen kök sertifika yetkilisi anahtarlarını SQL Server'a aktarma

SQL Server'ınızın database.windows.net etki alanları için Azure tarafından verilen sertifikalara güvenmesi için Microsoft ve DigiCert sertifika yetkililerinin (CA) genel kök sertifika anahtarlarını SQL Server'a aktarmanız gerekir.

Dikkat

PublicKey'in ile başladığından 0xemin olun. Henüz orada değilse PublicKey'in başına el ile eklemeniz gerekebilir.

İlk olarak, SQL Server'da Microsoft PKI kök yetkilisi sertifikayı içeri aktar:

-- Run on SQL Server
-- Import Microsoft PKI root-authority certificate (trusted by Azure), if not already present
IF NOT EXISTS (SELECT name FROM sys.certificates WHERE name = N'MicrosoftPKI')
BEGIN
    PRINT 'Creating MicrosoftPKI certificate.'
    CREATE CERTIFICATE [MicrosoftPKI] FROM BINARY = 0x308205A830820390A00302010202101ED397095FD8B4B347701EAABE7F45B3

    --Trust certificates issued by Microsoft PKI root authority for Azure database.windows.net domains
    DECLARE @CERTID int
    SELECT @CERTID = CERT_ID('MicrosoftPKI')
    EXEC sp_certificate_add_issuer @CERTID, N'*.database.windows.net'
END
ELSE
    PRINT 'Certificate MicrosoftPKI already exsits.'
GO

Ardından SQL Server'da DigiCert PKI kök yetkilisi sertifikalarını içeri aktararak:

-- Run on SQL Server
-- Import DigiCert PKI root-authority certificate trusted by Azure to SQL Server, if not already present
IF NOT EXISTS (SELECT name FROM sys.certificates WHERE name = N'DigiCertPKI')
BEGIN
    PRINT 'Creating DigiCertPKI certificate.'
    CREATE CERTIFICATE [DigiCertPKI] FROM BINARY = 0x3082038E30820276A0030201020210033AF1E6A711A9A0BB2864B11D0

    --Trust certificates issued by DigiCert PKI root authority for Azure database.windows.net domains
    DECLARE @CERTID int
    SELECT @CERTID = CERT_ID('DigiCertPKI')
    EXEC sp_certificate_add_issuer @CERTID, N'*.database.windows.net'
END
ELSE
    PRINT 'Certificate DigiCertPKI already exsits.'
GO

Son olarak, aşağıdaki dinamik yönetim görünümünü (DMV) kullanarak oluşturulan tüm sertifikaları doğrulayın:

-- Run on SQL Server
SELECT * FROM sys.certificates

Veritabanı yansıtma uç noktasının güvenliğini sağlama

Mevcut bir kullanılabilirlik grubunuz veya SQL Server'da veritabanı yansıtma uç noktanız yoksa, sonraki adım SQL Server'da bir veritabanı yansıtma uç noktası oluşturmak ve daha önce oluşturulan SQL Server sertifikasıyla bunu güvenli bir şekilde sağlamaktır. Mevcut bir kullanılabilirlik grubunuz veya yansıtma uç noktanız varsa Var olan bir uç noktayı değiştirme bölümüne atlayın.

SQL Server'da veritabanı yansıtma uç noktasını oluşturma ve güvenliğini sağlama

Oluşturulmuş bir veritabanı yansıtma uç noktanız olmadığını doğrulamak için aşağıdaki betiği kullanın:

-- Run on SQL Server
-- View database mirroring endpoints on SQL Server
SELECT * FROM sys.database_mirroring_endpoints WHERE type_desc = 'DATABASE_MIRRORING'

Yukarıdaki sorguda var olan bir veritabanı yansıtma uç noktası gösterilmiyorsa, daha önce oluşturulan SQL Server sertifikasının adını almak için SQL Server'da aşağıdaki betiği çalıştırın.

-- Run on SQL Server
-- Show the name and the public key of generated SQL Server certificate
USE MASTER
GO
DECLARE @sqlserver_certificate_name NVARCHAR(MAX) = N'Cert_' + @@servername  + N'_endpoint'
SELECT @sqlserver_certificate_name as 'SQLServerCertName'

Sonraki adımda ihtiyacınız olacak şekilde SQLServerCertName'i çıkıştan kaydedin.

Bağlantı noktası 5022'de yeni bir veritabanı yansıtma uç noktası oluşturmak ve SQL Server sertifikasıyla uç noktanın güvenliğini sağlamak için aşağıdaki betiği kullanın. Değiştirme:

  • <SQL_SERVER_CERTIFICATE> önceki adımda alınan SQLServerCertName adıyla.
-- Run on SQL Server
-- Create a connection endpoint listener on SQL Server
USE MASTER
CREATE ENDPOINT database_mirroring_endpoint
    STATE=STARTED   
    AS TCP (LISTENER_PORT=5022, LISTENER_IP = ALL)
    FOR DATABASE_MIRRORING (
        ROLE=ALL,
        AUTHENTICATION = CERTIFICATE [<SQL_SERVER_CERTIFICATE>],
        ENCRYPTION = REQUIRED ALGORITHM AES
    )  
GO

SQL Server'da aşağıdaki betiği çalıştırarak yansıtma uç noktasının oluşturulduğunu doğrulayın:

-- Run on SQL Server
-- View database mirroring endpoints on SQL Server
SELECT
    name, type_desc, state_desc, role_desc,
    connection_auth_desc, is_encryption_enabled, encryption_algorithm_desc
FROM 
    sys.database_mirroring_endpoints

Başarıyla oluşturulan uç nokta state_desc sütunu durumu STARTEDolmalıdır.

Sertifika kimlik doğrulaması ve AES şifrelemesi etkin olarak yeni bir yansıtma uç noktası oluşturuldu.

Mevcut uç noktayı değiştirme

Not

Yeni bir yansıtma uç noktası oluşturduysanız bu adımı atlayın. Bu adımı yalnızca mevcut bir veritabanı yansıtma uç noktasıyla mevcut kullanılabilirlik gruplarını kullanıyorsanız kullanın.

Bağlantı için mevcut kullanılabilirlik gruplarını kullanıyorsanız veya var olan bir veritabanı yansıtma uç noktası varsa, önce bağlantı için aşağıdaki zorunlu koşulları karşıladığını doğrulayın:

  • Tür olmalıdır DATABASE_MIRRORING.
  • Bağlan kimlik doğrulaması olmalıdırCERTIFICATE.
  • Şifreleme etkinleştirilmelidir.
  • Şifreleme algoritması olmalıdır AES.

Mevcut veritabanı yansıtma uç noktasının ayrıntılarını görüntülemek için SQL Server'da aşağıdaki sorguyu çalıştırın:

-- Run on SQL Server
-- View database mirroring endpoints on SQL Server
SELECT
    name, type_desc, state_desc, role_desc, connection_auth_desc,
    is_encryption_enabled, encryption_algorithm_desc
FROM
    sys.database_mirroring_endpoints

Çıktı, mevcut DATABASE_MIRRORING uç noktanın connection_auth_descCERTIFICATEveya encryption_algorthm_descAESolmadığını gösteriyorsa, gereksinimleri karşılamak için uç noktanın değiştirilmesi gerekir.

SQL Server'da, hem kullanılabilirlik grupları hem de dağıtılmış kullanılabilirlik grupları için aynı veritabanı yansıtma uç noktası kullanılır. Uç noktanız connection_auth_desc (Windows kimlik doğrulaması) veya KERBEROSise NTLM ve mevcut bir kullanılabilirlik grubu için Windows kimlik doğrulamasına ihtiyacınız varsa, kimlik doğrulama seçeneğini olarak değiştirerek uç noktayı birden çok kimlik doğrulama yöntemi kullanacak şekilde NEGOTIATE CERTIFICATEdeğiştirmeniz mümkündür. Bu değişiklik, SQL Yönetilen Örneği için sertifika kimlik doğrulamasını kullanırken mevcut kullanılabilirlik grubunun Windows kimlik doğrulamasını kullanmasına olanak tanır.

Benzer şekilde, şifreleme AES içermiyorsa ve RC4 şifrelemesine ihtiyacınız varsa, uç noktayı iki algoritmayı da kullanacak şekilde değiştirmek mümkündür. Uç noktaları değiştirmeyle ilgili olası seçenekler hakkında ayrıntılı bilgi için sys.database_mirroring_endpoints belgeleri sayfasına bakın.

Aşağıdaki betik, SQL Server'da var olan veritabanı yansıtma uç noktanızı değiştirme işleminin bir örneğidir. Değiştirme:

  • <YourExistingEndpointName> ve mevcut uç noktanızın adını yazın.
  • <SQLServerCertName> oluşturulan SQL Server sertifikasının adıyla (yukarıdaki önceki adımlardan birinde elde edilir).

Özel yapılandırmanıza bağlı olarak, betiği daha fazla özelleştirmeniz gerekebilir. Sql Server'da oluşturulan sertifikanın adını almak için de kullanabilirsiniz SELECT * FROM sys.certificates .

-- Run on SQL Server
-- Alter the existing database mirroring endpoint to use CERTIFICATE for authentication and AES for encryption
USE MASTER
ALTER ENDPOINT [<YourExistingEndpointName>]   
    STATE=STARTED   
    AS TCP (LISTENER_PORT=5022, LISTENER_IP = ALL)
    FOR DATABASE_MIRRORING (
        ROLE=ALL,
        AUTHENTICATION = WINDOWS NEGOTIATE CERTIFICATE [<SQLServerCertName>],
        ENCRYPTION = REQUIRED ALGORITHM AES
    )
GO

Uç nokta sorgusunu ALTER çalıştırdıktan ve çift kimlik doğrulama modunu Windows ve sertifika olarak ayarladıktan sonra, veritabanı yansıtma uç noktasının ayrıntılarını göstermek için SQL Server'da bu sorguyu yeniden kullanın:

-- Run on SQL Server
-- View database mirroring endpoints on SQL Server
SELECT
    name, type_desc, state_desc, role_desc, connection_auth_desc,
    is_encryption_enabled, encryption_algorithm_desc
FROM
    sys.database_mirroring_endpoints

bir SQL Yönetilen Örneği bağlantısı için veritabanı yansıtma uç noktanızı başarıyla değiştirdiniz.

SQL Server'da kullanılabilirlik grubu oluşturma

Mevcut bir kullanılabilirlik grubunuz yoksa, sonraki adım SQL Server'da ilk birincil olandan bağımsız olarak bir tane oluşturmaktır. SQL Yönetilen Örneği yalnızca SQL Server 2022 CU10'dan başlayarak desteklenen ilk birincil grupsa kullanılabilirlik grubunu oluşturmaya ilişkin komutlar farklıdır.

Aynı veritabanı için birden çok bağlantı oluşturmak mümkün olsa da, bağlantı her bağlantı için yalnızca bir veritabanı çoğaltmayı destekler. Aynı veritabanı için birden çok bağlantı oluşturmak istiyorsanız, tüm bağlantılar için aynı kullanılabilirlik grubunu kullanın, ancak ardından SQL Server ile SQL Yönetilen Örneği arasındaki her veritabanı bağlantısı için yeni bir dağıtılmış kullanılabilirlik grubu oluşturun.

SQL Server ilk birincil sunucunuzsa, bağlantı için aşağıdaki parametreleri içeren bir kullanılabilirlik grubu oluşturun:

  • İlk birincil sunucu adı
  • Veritabanı adı
  • Yük devretme modu MANUAL
  • Bir tohumlama modu AUTOMATIC

İlk olarak, aşağıdaki T-SQL deyimini çalıştırarak SQL Server adınızı öğrenin:

-- Run on the initial primary
SELECT @@SERVERNAME AS SQLServerName 

Ardından, SQL Server'da kullanılabilirlik grubunu oluşturmak için aşağıdaki betiği kullanın. Değiştirme:

  • <AGName> kullanılabilirlik grubunuzun adıyla birlikte. Yönetilen Örnek bağlantısı, kullanılabilirlik grubu başına bir veritabanı gerektirir. Birden çok veritabanı için birden çok kullanılabilirlik grubu oluşturmanız gerekir. Her kullanılabilirlik grubunu, adının ilgili veritabanını (örneğin, AG_<db_name>) yansıtması için adlandırmayı göz önünde bulundurun.
  • <DatabaseName> öğesini ve çoğaltmak istediğiniz veritabanının adını yazın.
  • <SQLServerName> önceki adımda elde edilen SQL Server örneğinizin adıyla.
  • <SQLServerIP> sql server IP adresiyle. Çözümlenebilir bir SQL Server konak makine adını alternatif olarak kullanabilirsiniz, ancak adın SQL Yönetilen Örneği sanal ağından çözümlenebilir olduğundan emin olmanız gerekir.
-- Run on SQL Server
-- Create the primary availability group on SQL Server
USE MASTER
CREATE AVAILABILITY GROUP [<AGName>]
WITH (CLUSTER_TYPE = NONE) -- <- Delete this line for SQL Server 2016 only. Leave as-is for all higher versions.
    FOR database [<DatabaseName>]  
    REPLICA ON   
        N'<SQLServerName>' WITH   
            (  
            ENDPOINT_URL = 'TCP://<SQLServerIP>:5022',
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            FAILOVER_MODE = MANUAL,
            SEEDING_MODE = AUTOMATIC
            );
GO

Önemli

SQL Server 2016 için yukarıdaki T-SQL deyiminden silin WITH (CLUSTER_TYPE = NONE) . Sonraki tüm SQL Server sürümleri için olduğu gibi bırakın.

Ardından, SQL Server'da dağıtılmış kullanılabilirlik grubunu oluşturun. Birden çok bağlantı oluşturmayı planlıyorsanız, aynı veritabanı için birden çok bağlantı oluşturuyor olsanız bile her bağlantı için bir dağıtılmış kullanılabilirlik grubu oluşturmanız gerekir.

Aşağıdaki değerleri değiştirin ve T-SQL betiğini çalıştırarak dağıtılmış kullanılabilirlik grubunuzu oluşturun.

  • <DAGName> ve dağıtılmış kullanılabilirlik grubunuzun adını yazın. Her bağlantı için bir dağıtılmış kullanılabilirlik grubu oluşturarak aynı veritabanı için birden çok bağlantı yapılandırabildiğiniz için, her dağıtılmış kullanılabilirlik grubunu uygun şekilde adlandırmayı göz önünde bulundurun; örneğin, , DAG1_<db_name>DAG2_<db_name>.
  • <AGName> öğesini seçin.
  • <SQLServerIP> önceki adımdaki SQL Server'ın IP adresiyle. Çözümlenebilir bir SQL Server konak makine adını alternatif olarak kullanabilirsiniz, ancak adın SQL Yönetilen Örneği sanal ağından çözümlenebilir olduğundan emin olun (yönetilen örneğin alt ağı için özel Azure DNS'nin yapılandırılmasını gerektirir).
  • <ManagedInstanceName> yönetilen örneğinizin kısa adıyla.
  • <ManagedInstanceFQDN> yönetilen örneğinizin tam etki alanı adıyla.
-- Run on SQL Server
-- Create a distributed availability group for the availability group and database
-- ManagedInstanceName example: 'sqlmi1'
-- ManagedInstanceFQDN example: 'sqlmi1.73d19f36a420a.database.windows.net'
USE MASTER
CREATE AVAILABILITY GROUP [<DAGName>]
WITH (DISTRIBUTED) 
    AVAILABILITY GROUP ON  
    N'<AGName>' WITH 
    (
      LISTENER_URL = 'TCP://<SQLServerIP>:5022',
      AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
      FAILOVER_MODE = MANUAL,
      SEEDING_MODE = AUTOMATIC,
      SESSION_TIMEOUT = 20
    ),
    N'<ManagedInstanceName>' WITH
    (
      LISTENER_URL = 'tcp://<ManagedInstanceFQDN>:5022;Server=[<ManagedInstanceName>]',
      AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
      FAILOVER_MODE = MANUAL,
      SEEDING_MODE = AUTOMATIC
    );
GO

Kullanılabilirlik gruplarını doğrulama

SQL Server örneğindeki tüm kullanılabilirlik gruplarını ve dağıtılmış kullanılabilirlik gruplarını listelemek için aşağıdaki betiği kullanın. Bu noktada, kullanılabilirlik grubunuzun connecteddurumunun olması ve dağıtılmış kullanılabilirlik gruplarınızın durumunun olması disconnectedgerekir. Dağıtılmış kullanılabilirlik grubunun durumu, SQL Yönetilen Örneği ile birleştirildikten sonra yalnızca bir kereye connected taşınır.

-- Run on SQL Server
-- This will show that the availability group and distributed availability group have been created on SQL Server.
SELECT * FROM sys.availability_groups

Alternatif olarak, kullanılabilirlik gruplarını ve dağıtılmış kullanılabilirlik gruplarını bulmak için SSMS Nesne Gezgini kullanabilirsiniz. Always On Yüksek Kullanılabilirlik klasörünü ve ardından Kullanılabilirlik Grupları klasörünü genişletin.

Son olarak, bağlantıyı oluşturabilirsiniz. Komutlar, hangi örneğin ilk birincil olduğuna göre farklılık gösterir. Bu bölümdeki PowerShell örneği gibi bağlantıyı oluşturmak için New-AzSqlInstanceLink PowerShell veya az sql mi link create Azure CLI komutunu kullanın. Bağlantıyı bir SQL Yönetilen Örneği birincilden oluşturmak şu anda Azure CLI ile desteklenmemekte.

Yönetilen örnekteki tüm bağlantıları görmeniz gerekiyorsa, Azure Cloud Shell'de Get-AzSqlInstanceLink PowerShell veya az sql mi link show Azure CLI komutunu kullanın.

İşlemi basitleştirmek için Azure portalında oturum açın ve Azure Cloud Shell'den aşağıdaki betiği çalıştırın. Değiştirme:

  • <ManagedInstanceName> yönetilen örneğinizin kısa adıyla.
  • <AGName> sql server'da oluşturulan kullanılabilirlik grubunun adıyla birlikte.
  • <DAGName> sql server'da oluşturulan dağıtılmış kullanılabilirlik grubunun adıyla.
  • <DatabaseName> veritabanı SQL Server'daki kullanılabilirlik grubunda çoğaltılır.
  • <SQLServerIP> SQL Server'ınızın IP adresiyle birlikte. Sağlanan IP adresine yönetilen örnek tarafından erişilebilir olmalıdır.
#  Run in Azure Cloud Shell (select PowerShell console)
# =============================================================================
# POWERSHELL SCRIPT TO CREATE MANAGED INSTANCE LINK
# Instructs Managed Instance to join distributed availability group on SQL Server
# ===== Enter user variables here ====

# Enter your managed instance name – for example, "sqlmi1"
$ManagedInstanceName = "<ManagedInstanceName>"

# Enter the availability group name that was created on SQL Server
$AGName = "<AGName>"

# Enter the distributed availability group name that was created on SQL Server
$DAGName = "<DAGName>"

# Enter the database name that was placed in the availability group for replication
$DatabaseName = "<DatabaseName>"

# Enter the SQL Server IP
$SQLServerIP = "<SQLServerIP>"

# ==== Do not customize the following cmdlet ====

# Find out the resource group name
$ResourceGroup = (Get-AzSqlInstance -InstanceName $ManagedInstanceName).ResourceGroupName

# Build properly formatted connection endpoint
$SourceIP = "TCP://" + $SQLServerIP + ":5022"

# Create link on managed instance. Join distributed availability group on SQL Server.
New-AzSqlInstanceLink -ResourceGroupName $ResourceGroup -InstanceName $ManagedInstanceName -Name $DAGName |
-PrimaryAvailabilityGroupName $AGName -SecondaryAvailabilityGroupName $ManagedInstanceName |
-TargetDatabase $DatabaseName -SourceEndpoint $SourceIP

Bu işlemin sonucu, bağlantı oluşturma isteğinin başarıyla yürütülmesinin zaman damgasıdır.

SQL Yönetilen Örneği ve SQL Server arasındaki bağlantıyı doğrulamak için SQL Server'da aşağıdaki sorguyu çalıştırın. Bağlantı anlık olmaz. DMV'nin başarılı bir bağlantı göstermeye başlaması bir dakika kadar sürebilir. Bağlantı SQL Yönetilen Örneği çoğaltması için BAĞLANTILI olarak görünene kadar DMV'yi yenilemeye devam edin.

-- Run on SQL Server
SELECT
    r.replica_server_name AS [Replica],
    r.endpoint_url AS [Endpoint],
    rs.connected_state_desc AS [Connected state],
    rs.last_connect_error_description AS [Last connection error],
    rs.last_connect_error_number AS [Last connection error No],
    rs.last_connect_error_timestamp AS [Last error timestamp]
FROM
    sys.dm_hadr_availability_replica_states rs
    JOIN sys.availability_replicas r
    ON rs.replica_id = r.replica_id

Bağlantı kurulduktan sonra, SSMS'deki Nesne Gezgini ilk tohumlama aşaması veritabanının tam yedeklemesini taşır ve geri yüklerken ikincil çoğaltmada çoğaltılan veritabanını başlangıçta Geri Yükleme durumunda gösterebilir. Veritabanı geri yüklendikten sonra, çoğaltmanın iki veritabanını eşitlenmiş duruma getirmek için yakalaması gerekir. İlk tohumlama tamamlandıktan sonra veritabanı artık Geri Yükleme'de olmayacaktır. Küçük veritabanlarının tohumlanması, SSMS'de ilk Geri Yükleme durumunu göremeyecek kadar hızlı olabilir.

Önemli

  • SQL Server ile SQL Yönetilen Örneği arasında ağ bağlantısı yoksa bağlantı çalışmaz. Ağ bağlantısı sorunlarını gidermek için Ağ bağlantısını test etme sayfasındaki adımları izleyin.
  • SQL Server'da günlük dosyasının düzenli yedeklemelerini alın. Kullanılan günlük alanı yüzde 100'e ulaşırsa, alan kullanımı azaltılana kadar SQL Yönetilen Örneği çoğaltma durdurulur. Günlük bir iş ayarlayarak günlük yedeklemelerini otomatikleştirmenizi kesinlikle öneririz. Ayrıntılar için bkz . SQL Server'da günlük dosyalarını yedekleme.

İş yükünü durdurma

Veritabanınızın yükünü ikincil çoğaltmaya devretmek için öncelikle bakım saatlerinizde birincil uygulama iş yüklerinizi durdurun. Bu, veritabanı çoğaltmasının veri kaybı olmadan Azure'a geçirebileceğiniz veya yük devredebileceğiniz ikincil işletim sistemini yakalamasını sağlar. Birincil veritabanı Always On kullanılabilirlik grubunun bir parçası olsa da, bunu salt okunur moda ayarlayamazsınız. Uygulamaların yük devretmeden önce birincil çoğaltmaya işlem işlemediğinden emin olmanız gerekir.

Çoğaltma modunu değiştirme

SQL Server ile SQL Yönetilen Örneği arasında çoğaltma varsayılan olarak zaman uyumsuzdur. Veritabanınızı ikincil moda devretmeden önce bağlantıyı zaman uyumlu moda geçirin. Büyük ağ uzaklıkları arasında zaman uyumlu çoğaltma, birincil çoğaltmadaki işlemleri yavaşlatabilir.

Zaman uyumsuz moddan eşitleme moduna geçmek için hem SQL Yönetilen Örneği hem de SQL Server'da çoğaltma modu değişikliği gerekir.

Çoğaltma modunu değiştirme (SQL Yönetilen Örneği)

SQL Yönetilen Örneği çoğaltma modunu değiştirmek için Azure PowerShell'i veya Azure CLI'yi kullanın.

İlk olarak, Azure'da oturum açtığınızdan ve Select-AzSubscription PowerShell veya az account set Azure CLI komutunu kullanarak yönetilen örneğinizin barındırıldığı aboneliği seçtiğinizden emin olun. Hesabınızda birden fazla Azure aboneliği varsa uygun aboneliği seçmek özellikle önemlidir.

Aşağıdaki PowerShell örneğinde değerini Azure abonelik kimliğiniz ile değiştirin <SubscriptionID> .

# Run in Azure Cloud Shell (select PowerShell console)

# Enter your Azure subscription ID
$SubscriptionID = "<SubscriptionID>"

# Login to Azure and select subscription ID
if ((Get-AzContext ) -eq $null)
{
    echo "Logging to Azure subscription"
    Login-AzAccount
}
Select-AzSubscription -SubscriptionName $SubscriptionID

Yük devretmek istediğiniz bağlantının adını bildiğinizden emin olun. Get-AzSqlInstanceLink PowerShell veya az sql mi link list Azure CLI komutunu kullanabilirsiniz.

SQL Yönetilen Örneği tüm etkin bağlantıları listelemek için aşağıdaki PowerShell betiğini kullanın. değerini yönetilen örneğinizin kısa adıyla değiştirin <ManagedInstanceName> .

# Run in Azure Cloud Shell (select PowerShell console)
# =============================================================================
# POWERSHELL SCRIPT TO LIST ALL LINKS ON MANAGED INSTANCE
# ===== Enter user variables here ====

# Enter your managed instance name – for example, "sqlmi1"
$ManagedInstanceName = "<ManagedInstanceName>"

# ==== Do not customize the following cmdlet ====

# Find out the resource group name
$ResourceGroup = (Get-AzSqlInstance -InstanceName $ManagedInstanceName).ResourceGroupName

# List all links on the specified managed instance
Get-AzSqlInstanceLink -ResourceGroupName $ResourceGroup -InstanceName $ManagedInstanceName 

Önceki betiğin çıktısından yük devretmek istediğiniz bağlantının özelliğini kaydedin Name .

Ardından Update-AzSqlInstanceLink PowerShell veya az sql mi link update Azure CLI komutunu kullanarak tanımlanan bağlantının SQL Yönetilen Örneği eşitlemek için çoğaltma modunu zaman uyumsuzdan eşitlenecek şekilde değiştirin.

Aşağıdaki PowerShell örneğinde şunu değiştirin:

  • <ManagedInstanceName> yönetilen örneğinizin kısa adıyla.
  • <DAGName> önceki adımda bulduğunuz bağlantının adıyla ( Name önceki adımdaki özellik).
# Run in Azure Cloud Shell (select PowerShell console)
# =============================================================================
# POWERSHELL SCRIPT TO SWITCH LINK REPLICATION MODE (ASYNC\SYNC)
# ===== Enter user variables here ====

# Enter the link name 
$LinkName = "<DAGName>"  

# Enter your managed instance name – for example, "sqlmi1" 
$ManagedInstanceName = "<ManagedInstanceName>" 

# ==== Do not customize the following cmdlet ====

# Find out the resource group name
$ResourceGroup = (Get-AzSqlInstance -InstanceName $ManagedInstanceName).ResourceGroupName

# Update replication mode of the specified link
Update-AzSqlInstanceLink -ResourceGroupName $ResourceGroup -InstanceName $ManagedInstanceName |
-Name $LinkName -ReplicationMode "Sync"

Önceki komut, özelliği ReplicationMode olarak Syncgösterilen işlemin özetini görüntüleyerek başarıyı gösterir.

İşlemi geri almanız gerekiyorsa, çoğaltma modunu değiştirmek için önceki betiği yürütürken içindeki -ReplicationModeAsyncdizeyi Sync olarak değiştirin.

Çoğaltma modunu değiştirme (SQL Server)

SQL Server'da 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 kullanı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_COMIT 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

Hem SQL Yönetilen Örneği hem de SQL Server'ı eşitleme moduna geçtiğinize göre, iki örnek arasındaki çoğaltma zaman uyumlu olur. Bu durumu tersine çevirmeniz gerekiyorsa, aynı adımları izleyin ve hem SQL Server hem de SQL Yönetilen Örneği için durumu async 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 ç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'lerin eşleşmesini ve bir süre sonra değişmesini beklemeniz gerekir.

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 önceki T-SQL sorgusuyla aynı bilgileri sağlamak üzere SQL Yönetilen Örneği bağlantınızın özelliğini getirebilirsinizLastHardenedLsn.

Ö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ıza yönelik betiği oluşturmak için 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.
  • SQL Server 2022 bağlantısını korurken veritabanının yük devretmesi şu anda önizleme aşamasındadır.

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 Get-AzSqlInstanceLink özelliğinin Name çı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ı bir okuma/yazma iş yükü yürütebilir. Tamamen bağımsızlar. Uygulamanızın bağlantı dizesi etkin olarak kullanmak istediğiniz veritabanına yeniden belirleyin.

Ö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.

Kullanılabilirlik gruplarını temizleme

SQL Server 2022 ile yük devretmek bağlantıyı bozmadığından bağlantıyı ve kullanılabilirlik gruplarını yerinde bırakmayı seçebilirsiniz.

Bağlantıyı kesmeye karar verirseniz veya SQL Server 2019 ve önceki sürümleriyle yük devrediyorsa, SQL Server'dan bağlantı meta verilerini kaldırmak için dağıtılmış kullanılabilirlik grubunu bırakmanız gerekir. Ancak, kullanılabilirlik grubunu SQL Server'da tutmayı seçebilirsiniz.

Kullanılabilirlik grubu kaynaklarınızı temizlemek için aşağıdaki değerleri değiştirin ve sonra örnek kodu çalıştırın: Aşağıdaki kodda şunu değiştirin:

  • <DAGName> sql server'da dağıtılmış kullanılabilirlik grubunun adıyla (bağlantıyı oluşturmak için kullanılır).
  • <AGName> sql Server'da 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> --mandatory
GO
-- DROP AVAILABILITY GROUP <AGName> --optional
-- GO

Sorun giderme

bölümünde, bağlantıyı yapılandırma ve kullanma ile ilgili sorunları gidermeye yönelik yönergeler sağlanır.

Hatalar

Bağlantıyı oluştururken veya veritabanının yük devretmesini yaparken hata iletisiyle karşılaşırsanız, daha fazla bilgi için sorgu çıktı penceresindeki hata iletisini gözden geçirin.

Bağlantıyla çalışırken bir hatayla karşılaşırsanız, başarısız olan adımda sorgu yürütmeyi durdurur. Hata koşulu çözümlendikten sonra, eyleminize devam etmek için komutu yeniden çalıştırın.

Zorlamalı yük devretme sonrasında tutarsız durum

Zorlamalı yük devretmenin kullanılması birincil ve ikincil çoğaltmalar arasında tutarsız bir duruma neden olabilir ve her iki çoğaltmanın da aynı rolde olmasına neden olan bölünmüş bir beyin senaryosuna neden olabilir. Kullanıcı bir çoğaltmayı birincil, diğer çoğaltmayı ikincil olarak el ile belirterek durumu çözene kadar veri çoğaltması bu durumda başarısız olur.

Bağlantı özelliği hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın: