Aracılığıyla paylaş


Öğretici: İki SQL yönetilen örneği arasında çoğaltmayı yapılandırma

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

İşlem çoğaltma, SQL Server veya Azure SQL Yönetilen Örneği üzerinde barındırılan bir veritabanındaki verileri başka bir veritabanına çoğaltmanıza olanak tanır. SQL Yönetilen Örneği, çoğaltma topolojisinde yayımcı, dağıtımcı veya abone olabilir. Kullanılabilir yapılandırmalar için bkz. işlem çoğaltma yapılandırmaları.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • SQL yönetilen örneğini çoğaltma yayımcısı ve dağıtımcısı olarak yapılandırın.
  • SQL yönetilen örneğini çoğaltma abonesi olarak yapılandırın.

İki SQL yönetilen örneği arasındaki çoğaltmayı gösteren diyagram.

Bu öğretici deneyimli bir hedef kitleye yöneliktir ve kullanıcının hem SQL yönetilen örneklerine hem de Azure içindeki SQL Server VM'lerine dağıtım ve bağlanma konusunda bilgi sahibi olduğunu varsayar.

Not

Bu makalede, Azure SQL Yönetilen Örneği işlem çoğaltması kullanımı açıklanmaktadır. Tek tek örneklerin tam okunabilir çoğaltmalarını oluşturmanıza olanak tanıyan bir Azure SQL Yönetilen Örneği özelliği olan yük devretme gruplarıyla ilgisi yoktur. Yük devretme gruplarıyla işlem çoğaltmasını yapılandırırken dikkat edilmesi gereken başka noktalar da vardır.

Gereksinimler

SQL Yönetilen Örneği yayımcı ve/veya dağıtımcı işlevi görecek şekilde yapılandırmak için şunlar gerekir:

  • Yayımcı SQL yönetilen örneği, dağıtımcı ve abone ile aynı sanal ağda yer alır ya da sanal ağ eşlemesi veya VPN ağ geçitleri üç varlığın sanal ağları arasında yapılandırılmıştır.
  • Bağlantı, çoğaltma katılımcıları arasında SQL Kimlik Doğrulaması kullanır.
  • Çoğaltma çalışma dizini için bir Azure depolama hesabı paylaşımı.
  • SQL yönetilen örneklerinin Azure dosya paylaşımına erişmesi için NSG'nin güvenlik kurallarında 445 numaralı bağlantı noktası (TCP giden) açık. hatasıyla failed to connect to azure storage <storage account name> with os error 53karşılaşırsanız, uygun SQL Yönetilen Örneği alt ağına ait NSG'ye bir giden kuralı eklemeniz gerekir.

1 - Kaynak grubu oluşturma

SQLMI-Repl kullanın.

2 - SQL yönetilen örnekleri oluşturma

Aynı sanal ağ ve alt ağda iki SQL yönetilen örneği oluşturmak için Azure portalını kullanın. Örneğin, iki SQL yönetilen örneğini adlandırın:

  • sql-mi-publisher (rastgele seçim için bazı karakterlerle birlikte)
  • sql-mi-subscriber (rastgele seçim için bazı karakterlerle birlikte)

Ayrıca SQL yönetilen örneklerinize bağlanmak için Bir Azure VM yapılandırmanız gerekir.

3 - Azure depolama hesabı oluşturma

Çalışma dizini için bir Azure depolama hesabı oluşturun ve ardından depolama hesabı içinde bir dosya paylaşımı oluşturun.

Dosya paylaşımı yolunu şu biçimde kopyalayın: \\storage-account-name.file.core.windows.net\file-share-name

Örnek: \\replstorage.file.core.windows.net\replshare

Depolama erişim anahtarlarını şu biçimde kopyalayın: DefaultEndpointsProtocol=https;AccountName=<Storage-Account-Name>;AccountKey=****;EndpointSuffix=core.windows.net

Örnek: DefaultEndpointsProtocol=https;AccountName=replstorage;AccountKey=123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ==;EndpointSuffix=core.windows.net

Daha fazla bilgi için bkz . Depolama hesabı erişim anahtarlarını yönetme.

4 - Yayımcı veritabanı oluşturma

SQL Server Management Studio kullanarak yayımcı SQL yönetilen örneğine (sql-mi-publisher) bağlanın ve yayımcı veritabanınızı oluşturmak için aşağıdaki Transact-SQL (T-SQL) kodunu çalıştırın:

USE [master]
GO

CREATE DATABASE [ReplTran_PUB]
GO

USE [ReplTran_PUB]
GO
CREATE TABLE ReplTest (
  ID INT NOT NULL PRIMARY KEY,
  c1 VARCHAR(100) NOT NULL,
  dt1 DATETIME NOT NULL DEFAULT getdate()
)
GO

USE [ReplTran_PUB]
GO

INSERT INTO ReplTest (ID, c1) VALUES (6, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (2, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (3, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (4, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (5, 'pub')
GO
SELECT * FROM ReplTest
GO

5 - Abone veritabanı oluşturma

SQL Server Management Studio kullanarak abone sql yönetilen örneğine (sql-mi-subscriber) bağlanın ve boş abone veritabanınızı oluşturmak için aşağıdaki T-SQL kodunu çalıştırın:

USE [master]
GO

CREATE DATABASE [ReplTran_SUB]
GO

USE [ReplTran_SUB]
GO
CREATE TABLE ReplTest (
  ID INT NOT NULL PRIMARY KEY,
  c1 VARCHAR(100) NOT NULL,
  dt1 DATETIME NOT NULL DEFAULT getdate()
)
GO

6 - Dağıtımı yapılandırma

SQL Server Management Studio kullanarak yayımcı SQL yönetilen örneğine (sql-mi-publisher) bağlanın ve dağıtım veritabanınızı yapılandırmak için aşağıdaki T-SQL kodunu çalıştırın.

USE [master]
GO

EXEC sp_adddistributor @distributor = @@ServerName;
EXEC sp_adddistributiondb @database = N'distribution';
GO

7 - Yayımcıyı dağıtımcı kullanacak şekilde yapılandırma

Yayımcı SQL yönetilen örneğinizde (sql-mi-publisher ) sorgu yürütmeyi SQLCMD moduna değiştirin ve yeni dağıtımcıyı yayımcınıza kaydetmek için aşağıdaki kodu çalıştırın.

:setvar username loginUsedToAccessSourceManagedInstance
:setvar password passwordUsedToAccessSourceManagedInstance
:setvar file_storage "\\storage-account-name.file.core.windows.net\file-share-name"
-- example: file_storage "\\replstorage.file.core.windows.net\replshare"
:setvar file_storage_key "DefaultEndpointsProtocol=https;AccountName=<Storage-Account-Name>;AccountKey=****;EndpointSuffix=core.windows.net"
-- example: file_storage_key "DefaultEndpointsProtocol=https;AccountName=replstorage;AccountKey=123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ==;EndpointSuffix=core.windows.net"

USE [master]
EXEC sp_adddistpublisher
  @publisher = @@ServerName,
  @distribution_db = N'distribution',
  @security_mode = 0,
  @login = N'$(username)',
  @password = N'$(password)',
  @working_directory = N'$(file_storage)',
  @storage_connection_string = N'$(file_storage_key)'; -- Remove this parameter for on-premises publishers

Not

file_storage parametresi için yalnızca ters eğik çizgi (\) kullandığınızdan emin olun. Eğik çizgi (/) kullanmak, dosya paylaşımına bağlanırken hataya neden olabilir.

Bu betik, SQL yönetilen örneğinde yerel bir yayımcı yapılandırıyor, bağlantılı bir sunucu ekliyor ve SQL Server aracısı için bir iş kümesi oluşturuyor.

8 - Yayın ve abone oluşturma

SQLCMD modunu kullanarak veritabanınızda çoğaltmayı etkinleştirmek ve yayımcınız, dağıtımcınız ve aboneniz arasında çoğaltmayı yapılandırmak için aşağıdaki T-SQL betiğini çalıştırın.

-- Set variables
:setvar username sourceLogin
:setvar password sourcePassword
:setvar source_db ReplTran_PUB
:setvar publication_name PublishData
:setvar object ReplTest
:setvar schema dbo
:setvar target_server "sql-mi-subscriber.wdec33262scj9dr27.database.windows.net"
:setvar target_username targetLogin
:setvar target_password targetPassword
:setvar target_db ReplTran_SUB

-- Enable replication for your source database
USE [$(source_db)]
EXEC sp_replicationdboption
  @dbname = N'$(source_db)',
  @optname = N'publish',
  @value = N'true';

-- Create your publication
EXEC sp_addpublication
  @publication = N'$(publication_name)',
  @status = N'active';

-- Configure your log reader agent
EXEC sp_changelogreader_agent
  @publisher_security_mode = 0,
  @publisher_login = N'$(username)',
  @publisher_password = N'$(password)',
  @job_login = N'$(username)',
  @job_password = N'$(password)';

-- Add the publication snapshot
EXEC sp_addpublication_snapshot
  @publication = N'$(publication_name)',
  @frequency_type = 1,
  @publisher_security_mode = 0,
  @publisher_login = N'$(username)',
  @publisher_password = N'$(password)',
  @job_login = N'$(username)',
  @job_password = N'$(password)';

-- Add the ReplTest table to the publication
EXEC sp_addarticle
  @publication = N'$(publication_name)',
  @type = N'logbased',
  @article = N'$(object)',
  @source_object = N'$(object)',
  @source_owner = N'$(schema)';

-- Add the subscriber
EXEC sp_addsubscription
  @publication = N'$(publication_name)',
  @subscriber = N'$(target_server)',
  @destination_db = N'$(target_db)',
  @subscription_type = N'Push';

-- Create the push subscription agent
EXEC sp_addpushsubscription_agent
  @publication = N'$(publication_name)',
  @subscriber = N'$(target_server)',
  @subscriber_db = N'$(target_db)',
  @subscriber_security_mode = 0,
  @subscriber_login = N'$(target_username)',
  @subscriber_password = N'$(target_password)',
  @job_login = N'$(username)',
  @job_password = N'$(password)';

-- Initialize the snapshot
EXEC sp_startpublication_snapshot
@publication = N'$(publication_name)';

9 - Aracı parametrelerini değiştirme

Azure SQL Yönetilen Örneği şu anda çoğaltma aracılarıyla bağlantıda bazı arka uç sorunları yaşıyor. Bu sorun giderilirken geçici çözüm, çoğaltma aracıları için oturum açma zaman aşımı değerini artırmaktır.

Yayımcıda aşağıdaki T-SQL komutunu çalıştırarak oturum açma zaman aşımını artırın:

-- Increase login timeout to 150s
update msdb..sysjobsteps set command = command + N' -LoginTimeout 150'
where subsystem in ('Distribution','LogReader','Snapshot') and command not like '%-LoginTimeout %'

Oturum açma zaman aşımını varsayılan değere geri ayarlamak için gerekirse aşağıdaki T-SQL komutunu yeniden çalıştırın:

-- Increase login timeout to 30
update msdb..sysjobsteps set command = command + N' -LoginTimeout 30'
where subsystem in ('Distribution','LogReader','Snapshot') and command not like '%-LoginTimeout %'

Bu değişiklikleri uygulamak için üç aracıyı da yeniden başlatın.

10 - Çoğaltmayı test et

Çoğaltma yapılandırıldıktan sonra, yayımcıya yeni öğeler ekleyerek ve değişikliklerin aboneye yayılmasını izleyerek bunu test edebilirsiniz.

Abonedeki satırları görüntülemek için aşağıdaki T-SQL kod parçacığını çalıştırın:

select * from dbo.ReplTest

Yayımcıya daha fazla satır eklemek için aşağıdaki T-SQL kod parçacığını çalıştırın ve sonra abonedeki satırları yeniden denetleyin.

INSERT INTO ReplTest (ID, c1) VALUES (15, 'pub')

Kaynakları temizleme

Yayını bırakmak için aşağıdaki T-SQL komutunu çalıştırın:

-- Drops the publication
USE [ReplTran_PUB]
EXEC sp_droppublication @publication = N'PublishData'
GO

Çoğaltma seçeneğini veritabanından kaldırmak için aşağıdaki T-SQL komutunu çalıştırın:

-- Disables publishing of the database
USE [ReplTran_PUB]
EXEC sp_removedbreplication
GO

Yayımlamayı ve dağıtımı devre dışı bırakmak için aşağıdaki T-SQL komutunu çalıştırın:

-- Drops the distributor
USE [master]
EXEC sp_dropdistributor @no_checks = 1
GO

Kaynak grubundan SQL Yönetilen Örneği kaynaklarını silip kaynak grubunuSQLMI-ReplAzure kaynaklarınızı temizleyebilirsiniz.