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.
  • SQL Server 2022 CU10'dan başlayarak ilk birincil Azure SQL Yönetilen Örneği yapılandırma 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 birincil veritabanından veritabanı 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.

İ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'i seçin.

Önkoşullar

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

Aşağıdaki topluluklara bir göz atın:

  • 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.
  • SQL Yönetilen Örneği'den SQL Server 2022'ye bağlantı oluşturmak veya yük devretme yapmak için yönetilen örneğinizin SQL Server 2022 güncelleştirme ilkesiyle yapılandırılması gerekir. SQL Yönetilen Örneği'den SQL Server 2022'ye veri çoğaltma ve yük devretme, Her zaman güncel güncelleştirme ilkesiyle yapılandırılmış örnekler tarafından desteklenmez.
  • SQL Server 2022'den Her zaman güncel güncelleştirme ilkesiyle yapılandırılmış bir SQL yönetilen örneğine bağlantı oluşturabilirsiniz ancak SQL Yönetilen Örneği yük devretme işleminden sonra artık verileri çoğaltamaz veya SQL Server 2022'ye geri yükleyemezsiniz.

İ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 /okumak
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 SQL Server 2022 CU10'dan başlayarak Azure SQL Yönetilen Örneği ilk birincil olarak yapılandırma 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.

Ç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. Bir paylaşılan posta kutusu oluştur.

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. MI uç nokta sertifikasını oluşturmak için 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 sertifikasını içeri aktarın:

-- 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 = 0x308205A830820390A00302010202101ED397095FD8B4B347701EAABE7F45B3300D06092A864886F70D01010C05003065310B3009060355040613025553311E301C060355040A13154D6963726F736F667420436F72706F726174696F6E313630340603550403132D4D6963726F736F66742052534120526F6F7420436572746966696361746520417574686F726974792032303137301E170D3139313231383232353132325A170D3432303731383233303032335A3065310B3009060355040613025553311E301C060355040A13154D6963726F736F667420436F72706F726174696F6E313630340603550403132D4D6963726F736F66742052534120526F6F7420436572746966696361746520417574686F72697479203230313730820222300D06092A864886F70D01010105000382020F003082020A0282020100CA5BBE94338C299591160A95BD4762C189F39936DF4690C9A5ED786A6F479168F8276750331DA1A6FBE0E543A3840257015D9C4840825310BCBFC73B6890B6822DE5F465D0CC6D19CC95F97BAC4A94AD0EDE4B431D8707921390808364353904FCE5E96CB3B61F50943865505C1746B9B685B51CB517E8D6459DD8B226B0CAC4704AAE60A4DDB3D9ECFC3BD55772BC3FC8C9B2DE4B6BF8236C03C005BD95C7CD733B668064E31AAC2EF94705F206B69B73F578335BC7A1FB272AA1B49A918C91D33A823E7640B4CD52615170283FC5C55AF2C98C49BB145B4DC8FF674D4C1296ADF5FE78A89787D7FD5E2080DCA14B22FBD489ADBACE479747557B8F45C8672884951C6830EFEF49E0357B64E798B094DA4D853B3E55C428AF57F39E13DB46279F1EA25E4483A4A5CAD513B34B3FC4E3C2E68661A45230B97A204F6F0F3853CB330C132B8FD69ABD2AC82DB11C7D4B51CA47D14827725D87EBD545E648659DAF5290BA5BA2186557129F68B9D4156B94C4692298F433E0EDF9518E4150C9344F7690ACFC38C1D8E17BB9E3E394E14669CB0E0A506B13BAAC0F375AB712B590811E56AE572286D9C9D2D1D751E3AB3BC655FD1E0ED3740AD1DAAAEA69B897288F48C407F852433AF4CA55352CB0A66AC09CF9F281E1126AC045D967B3CEFF23A2890A54D414B92AA8D7ECF9ABCD255832798F905B9839C40806C1AC7F0E3D00A50203010001A3543052300E0603551D0F0101FF040403020186300F0603551D130101FF040530030101FF301D0603551D0E0416041409CB597F86B2708F1AC339E3C0D9E9BFBB4DB223301006092B06010401823715010403020100300D06092A864886F70D01010C05000382020100ACAF3E5DC21196898EA3E792D69715B813A2A6422E02CD16055927CA20E8BAB8E81AEC4DA89756AE6543B18F009B52CD55CD53396D624C8B0D5B7C2E44BF83108FF3538280C34F3AC76E113FE6E3169184FB6D847F3474AD89A7CEB9D7D79F846492BE95A1AD095333DDEE0AEA4A518E6F55ABBAB59446AE8C7FD8A2502565608046DB3304AE6CB598745425DC93E4F8E355153DB86DC30AA412C169856EDF64F15399E14A75209D950FE4D6DC03F15918E84789B2575A94B6A9D8172B1749E576CBC156993A37B1FF692C919193E1DF4CA337764DA19FF86D1E1DD3FAECFBF4451D136DCFF759E52227722B86F357BB30ED244DDC7D56BBA3B3F8347989C1E0F20261F7A6FC0FBB1C170BAE41D97CBD27A3FD2E3AD19394B1731D248BAF5B2089ADB7676679F53AC6A69633FE5392C846B11191C6997F8FC9D66631204110872D0CD6C1AF3498CA6483FB1357D1C1F03C7A8CA5C1FD9521A071C193677112EA8F880A691964992356FBAC2A2E70BE66C40C84EFE58BF39301F86A9093674BB268A3B5628FE93F8C7A3B5E0FE78CB8C67CEF37FD74E2C84F3372E194396DBD12AFBE0C4E707C1B6F8DB332937344166DE8F4F7E095808F965D38A4F4ABDE0A308793D84D00716245274B3A42845B7F65B76734522D9C166BAAA8D87BA3424C71C70CCA3E83E4A6EFB701305E51A379F57069A641440F86B02C91C63DEAAE0F84

    --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 exists.'
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 = 0x3082038E30820276A0030201020210033AF1E6A711A9A0BB2864B11D09FAE5300D06092A864886F70D01010B05003061310B300906035504061302555331153013060355040A130C446967694365727420496E6331193017060355040B13107777772E64696769636572742E636F6D3120301E06035504031317446967694365727420476C6F62616C20526F6F74204732301E170D3133303830313132303030305A170D3338303131353132303030305A3061310B300906035504061302555331153013060355040A130C446967694365727420496E6331193017060355040B13107777772E64696769636572742E636F6D3120301E06035504031317446967694365727420476C6F62616C20526F6F7420473230820122300D06092A864886F70D01010105000382010F003082010A0282010100BB37CD34DC7B6BC9B26890AD4A75FF46BA210A088DF51954C9FB88DBF3AEF23A89913C7AE6AB061A6BCFAC2DE85E092444BA629A7ED6A3A87EE054752005AC50B79C631A6C30DCDA1F19B1D71EDEFDD7E0CB948337AEEC1F434EDD7B2CD2BD2EA52FE4A9B8AD3AD499A4B625E99B6B00609260FF4F214918F76790AB61069C8FF2BAE9B4E992326BB5F357E85D1BCD8C1DAB95049549F3352D96E3496DDD77E3FB494BB4AC5507A98F95B3B423BB4C6D45F0F6A9B29530B4FD4C558C274A57147C829DCD7392D3164A060C8C50D18F1E09BE17A1E621CAFD83E510BC83A50AC46728F67314143D4676C387148921344DAF0F450CA649A1BABB9CC5B1338329850203010001A3423040300F0603551D130101FF040530030101FF300E0603551D0F0101FF040403020186301D0603551D0E041604144E2254201895E6E36EE60FFAFAB912ED06178F39300D06092A864886F70D01010B05000382010100606728946F0E4863EB31DDEA6718D5897D3CC58B4A7FE9BEDB2B17DFB05F73772A3213398167428423F2456735EC88BFF88FB0610C34A4AE204C84C6DBF835E176D9DFA642BBC74408867F3674245ADA6C0D145935BDF249DDB61FC9B30D472A3D992FBB5CBBB5D420E1995F534615DB689BF0F330D53E31E28D849EE38ADADA963E3513A55FF0F970507047411157194EC08FAE06C49513172F1B259F75F2B18E99A16F13B14171FE882AC84F102055D7F31445E5E044F4EA879532930EFE5346FA2C9DFF8B22B94BD90945A4DEA4B89A58DD1B7D529F8E59438881A49E26D56FADDD0DC6377DED03921BE5775F76EE3C8DC45D565BA2D9666EB33537E532B6

    --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 exists.'
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

Sertifikayı doğrulama

Sertifikaları oluşturduktan sonra MI uç nokta sertifikasının doğru yapılandırıldığını doğrulayın.

İlk olarak, değerini değiştirip <ManagedInstanceFQDN> SQL Server'da aşağıdaki sorguyu çalıştırarak dışarı aktarılan MI sertifikasının değerini belirleyincertificate_id:

-- Run on SQL Server 
USE MASTER 
GO 

SELECT name, subject, certificate_id, start_date, expiry_date 
FROM sys.certificates 
WHERE issuer_name LIKE '%Microsoft Corporation%' AND name = '<ManagedInstanceFQDN>' 
GO 

Ardından, önceki sorgunun sonucundaki değerini <certificate_id> değiştirip SQL Server'da aşağıdaki sorguyu çalıştırarak sertifikayı doğrulayın:

-- Run on SQL Server 

USE MASTER 
GO 

EXEC sp_validate_certificate_ca_chain <certificate_id> 
GO 

yanıtı Commands completed successfully. Completion time: … , MI uç nokta sertifikasının başarıyla doğrulandığını gösterir.

Bir hatayla karşılaşırsanız sertifikayı bırakın ve sertifikayı yeniden içeri aktarmak için sertifika ortak anahtarını SQL Yönetilen Örneği alma ve SQL Server'a aktarma bölümündeki adımları izleyin.

Sertifikayı bırakmak için SQL Server'da aşağıdaki sorguyu çalıştırın:

-- Run on SQL Server 

USE MASTER 
GO 

DROP CERTIFICATE [<ManagedInstanceFQDN>] 
GO 

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ğlantı kimlik doğrulaması olmalıdır CERTIFICATE.
  • Ş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_desc CERTIFICATEveya encryption_algorthm_desc AESolmadığı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.

Not

Zaten bir kullanılabilirlik grubunuz varsa bu bölümü atlayın.

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:

  • <AGNameOnSQLServer> sql server'da 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 [<AGNameOnSQLServer>]
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>.
  • <AGNameOnSQLServer> öğesini seçin.
  • <AGNameOnSQLMI>SQL Yönetilen Örneği kullanılabilirlik grubunuzun adını yazın. Adın SQL MI'de benzersiz olması gerekir. Her kullanılabilirlik grubunu, adının ilgili veritabanını (örneğin, AG_<db_name>_MI) yansıtması için adlandırmayı göz önünde bulundurun.
  • <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'<AGNameOnSQLServer>' WITH 
    (
      LISTENER_URL = 'TCP://<SQLServerIP>:5022',
      AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
      FAILOVER_MODE = MANUAL,
      SEEDING_MODE = AUTOMATIC,
      SESSION_TIMEOUT = 20
    ),
    N'<AGNameOnSQLMI>' 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.
  • <AGNameOnSQLServer> sql server'da oluşturulan kullanılabilirlik grubunun adıyla birlikte.
  • <AGNameOnSQLMI>SQL Yönetilen Örneği üzerinde oluşturulan kullanılabilirlik grubunun adıyla.
  • <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.

Not

Zaten var olan bir kullanılabilirlik grubuna bağlantı oluşturmak istiyorsanız, parametresini sağlarken <SQLServerIP> dinleyicinin IP adresini sağlayın.

#  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
$AGNameOnSQLServer = "<AGNameOnSQLServer>"

# Enter the availability group name that was created on SQL Managed Instance
$AGNameOnSQLMI = "<AGNameOnSQLMI>"

# 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 $AGNameOnSQLServer -SecondaryAvailabilityGroupName $AGNameOnSQLMI |
-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.

İlk işlem günlüğü yedeğini alma

SQL Server ilk birincil sunucunuzsa, veritabanı artık Azure SQL Yönetilen Örneği'da Geri Yükleniyor... durumunda olmadığında, ilk tohumlama tamamlandıktan sonra SQL Server'da ilk işlem günlüğü yedeklemesini almak önemlidir. Ardından SQL Server birincil roldeyken aşırı günlük büyümesini en aza indirmek için SQL Server işlem günlüğü yedeklemelerini düzenli olarak alın.

birincil SQL Yönetilen Örneği ise, Azure SQL Yönetilen Örneği günlük yedeklemelerini otomatik olarak aldığından herhangi bir işlem yapmanız gerekmez.

Artık gerekli olmadığından veya onarılamaz durumda olduğundan ve yeniden oluşturulması gerektiğinden bağlantıyı bırakmak istiyorsanız, bunu PowerShell ve T-SQL ile yapabilirsiniz.

İlk olarak, aşağıdaki örnek gibi bağlantıyı bırakmak için Remove-AzSqlInstanceLink PowerShell komutunu kullanın:

Remove-AzSqlInstanceLink -ResourceGroupName $ResourceGroup -InstanceName $managedInstanceName -Name $DAGName -Force 

Ardından, dağıtılmış kullanılabilirlik grubunu bırakmak için SQL Server'da aşağıdaki T-SQL betiğini çalıştırın. öğesini, bağlantıyı oluşturmak için kullanılan dağıtılmış kullanılabilirlik grubunun adıyla değiştirin <DAGName> :

USE MASTER 
GO 

DROP AVAILABILITY GROUP <DAGName>  
GO 

Son olarak, isteğe bağlı olarak, artık bu grubu kullanmıyorsanız kullanılabilirlik grubunu kaldırabilirsiniz. Bunu yapmak için öğesini kullanılabilirlik grubunun adıyla değiştirin <AGName> ve ilgili örnekte çalıştırın:

DROP AVAILABILITY GROUP <AGName>  
GO 

Sorun giderme

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

Bağlantıyı kullanmak için:

Bağlantı hakkında daha fazla bilgi edinmek için:

Diğer çoğaltma ve geçiş senaryoları için şunları göz önünde bulundurun: