SQL Server Çoktan Bire çoğaltma


14

Her biri 1 veritabanı barındıran 8 ayrı SQL Server 2008 R2 makinem var. Her veritabanı aynı tablo yapısına ve şemasına ve tamamen benzersiz verilere sahiptir.

8 kaynak sunucu üzerindeki seçili tablolardan satırları raporlama sunucusunda bu tabloların tek bir örneğinde birleştiren bir raporlama sunucusu (2008 veya 2012 olabilir) oluşturmak istiyorum. Bu tek yönlü çoğaltmadır (raporlama sunucusunda değişiklik yapılmaz). Kaynak veritabanlarındaki değişiklikleri nispeten düşük gecikme (örneğin 20-30 saniye) ile çoğaltmam gerekecek.

Ayrıca, pratik olarak kaynak sunucuları üzerinde çok az etkisi ile bunu başarmak için yöntemler bulmak istiyorum. Bu sunucular için üçüncü taraf aracılar, tetikleyiciler veya şema modları çevremde zor.

Sorularım:

  • Bu hedefe ulaşmak için gelecek vaat eden mimariler ve teknolojiler nelerdir?
  • SQL Server Birleştirme Çoğaltması'na baktım, ancak gecikme konusunda endişeliyim. Bu, bu amaç için uygun bir teknoloji mi?
  • İşlemsel çoğaltma için birebir mimariler var mı?
  • Raporlama sunucumdaki 8 veritabanında 1'e 1 çoğaltmaya, ardından bazı özel birleştirme işlevine (2 adımlı çoğaltma) bakmalı mıyım?

Teşekkürler John


Tek yerleşik seçenek Çoğaltma Birleştir'dir. Kaynaklarda bir ton değişiklik olmazsa, 30 saniyelik bir SLA'ya kolayca ulaşılabilir olmalıdır. Herhangi 2 adımlı çoğaltma şeması, sürece ekstra gecikme getirecek ve belirtilen SLA'ya ulaşmayı zorlaştıracaktır.
Jon Seigel

Yanıtlar:


16

Her biri 1 veritabanı barındıran 8 ayrı SQL Server 2008 R2 makinem var. Her veritabanı aynı tablo yapısına ve şemasına ve tamamen benzersiz verilere sahiptir. 8 kaynak sunucu üzerindeki seçili tablolardan satırları raporlama sunucusunda bu tabloların tek bir örneğinde birleştiren bir raporlama sunucusu (2008 veya 2012 olabilir) oluşturmak istiyorum. Bu tek yönlü çoğaltmadır (raporlama sunucusunda değişiklik yapılmaz). Kaynak veritabanlarındaki değişiklikleri nispeten düşük gecikme (örneğin 20-30 saniye) ile çoğaltmam gerekecek.

Bunu İşlemsel çoğaltma ile yapabilirsiniz . Aşağıda bunu nasıl yapabileceğiniz aşağıda açıklanmıştır.

Not : Aboneye çoğaltırken bu satırları benzersiz bir şekilde tanımlamanız gerektiğinden, bunu başarmak için tablo şemanızı biraz değiştirmelisiniz. T-Rep'in bir önkoşulu olarak, PK tanımlı tablolara sahip olmanız gerekir.

Raporlama sunucusundaki satırları birleştirmek istediğiniz 8 sunucunuzun tamamında bulunan Publisher sunucularındaki örnek tablonuz aşağıdadır :

CREATE TABLE Products
(
ProductID INT not null,
ProductName VARCHAR(25),
ServerName sysname default @@servername not null -- this is to identify which row is from which server ; probably add this using Alter column
)
GO
ALTER TABLE Products
ADD CONSTRAINT pk_Product_ID_ServerName PRIMARY KEY (ProductID)

Açık abone sunucusunda sana üzerinde PK yapısını değiştiremez varsayarak am -, benzersiz şekilde, T-Rep PK ihlali nedeniyle başarısız olacak bunu yaparken değil abone (en satırları tanımlamak için ancak farklı PK ile aynı tablo oluşturmak gerekir canlı ÜRETİM abone değiştirmek daha iyidir)

CREATE TABLE Products
(
ProductID INT not null,
ProductName VARCHAR(25),
ServerName sysname default @@servername not null
);
GO

ALTER TABLE Products
ADD CONSTRAINT pk_Product_ID_ServerName PRIMARY KEY (ProductID,ServerName)

Aşağıdaki komut dosyası T-Rep kurmanıza yardımcı olacaktır, sadece veritabanı adı, hedef sunucu adını nesne adıyla birlikte değiştirin.

-- Enabling the replication database
use master
exec sp_replicationdboption @dbname = N'repl1', @optname = N'publish', @value = N'true'
GO

exec [repl1].sys.sp_addlogreader_agent @job_login = null, @job_password = null, @publisher_security_mode = 1
GO
exec [repl1].sys.sp_addqreader_agent @job_login = null, @job_password = null, @frompublisher = 1
GO
-- Adding the transactional publication
use [repl1]
exec sp_addpublication @publication = N'repl1_2005', @description = N'Transactional publication of database ''repl1'' from Publisher ''server_name\SQL2005''.', @sync_method = N'concurrent', @retention = 0, @allow_push = N'true', @allow_pull = N'true', @allow_anonymous = N'false', @enabled_for_internet = N'false', @snapshot_in_defaultfolder = N'true', @compress_snapshot = N'false', @ftp_port = 21, @ftp_login = N'anonymous', @allow_subscription_copy = N'false', @add_to_active_directory = N'false', @repl_freq = N'continuous', @status = N'active', @independent_agent = N'true', @immediate_sync = N'false', @allow_sync_tran = N'false', @autogen_sync_procs = N'false', @allow_queued_tran = N'false', @allow_dts = N'false', @replicate_ddl = 1, @allow_initialize_from_backup = N'false', @enabled_for_p2p = N'false', @enabled_for_het_sub = N'false'
GO


exec sp_addpublication_snapshot @publication = N'repl1_2005', @frequency_type = 1, @frequency_interval = 0, @frequency_relative_interval = 0, @frequency_recurrence_factor = 0, @frequency_subday = 0, @frequency_subday_interval = 0, @active_start_time_of_day = 0, @active_end_time_of_day = 235959, @active_start_date = 0, @active_end_date = 0, @job_login = null, @job_password = null, @publisher_security_mode = 1
exec sp_grant_publication_access @publication = N'repl1_2005', @login = N'sa'
GO
exec sp_grant_publication_access @publication = N'repl1_2005', @login = N'NT AUTHORITY\SYSTEM'
GO
exec sp_grant_publication_access @publication = N'repl1_2005', @login = N'BUILTIN\Administrators'
GO
exec sp_grant_publication_access @publication = N'repl1_2005', @login = N'server_name\SQLServer2005SQLAgentUser$server_name$SQL2005'
GO
exec sp_grant_publication_access @publication = N'repl1_2005', @login = N'server_name\SQLServer2005MSSQLUser$server_name$SQL2005'
GO
exec sp_grant_publication_access @publication = N'repl1_2005', @login = N'distributor_admin'
GO

-- Adding the transactional articles
use [repl1]
exec sp_addarticle @publication = N'repl1_2005', @article = N'Products', @source_owner = N'dbo', @source_object = N'Products', @type = N'logbased', @description = N'', @creation_script = N'', @pre_creation_cmd = N'none', @schema_option = 0x000000000803509F, @identityrangemanagementoption = N'none', @destination_table = N'Products', @destination_owner = N'dbo', @status = 24, @vertical_partition = N'false', @ins_cmd = N'CALL [sp_MSins_dboProducts]', @del_cmd = N'CALL [sp_MSdel_dboProducts]', @upd_cmd = N'SCALL [sp_MSupd_dboProducts]'
GO

-- Adding the transactional subscriptions
use [repl1]
exec sp_addsubscription @publication = N'repl1_2005', @subscriber = N'server_name\SQL2008R2', @destination_db = N'repl123', @subscription_type = N'Push', @sync_type = N'automatic', @article = N'all', @update_mode = N'read only', @subscriber_type = 0
exec sp_addpushsubscription_agent @publication = N'repl1_2005', @subscriber = N'server_name\SQL2008R2', @subscriber_db = N'repl123', @job_login = null, @job_password = null, @subscriber_security_mode = 1, @frequency_type = 64, @frequency_interval = 1, @frequency_relative_interval = 1, @frequency_recurrence_factor = 0, @frequency_subday = 4, @frequency_subday_interval = 5, @active_start_time_of_day = 0, @active_end_time_of_day = 235959, @active_start_date = 0, @active_end_date = 0, @dts_package_location = N'Distributor'
GO

Dikkat edilmesi gereken birkaç nokta:

Sp_addsubscription öğesinde @sync_type = N'automatic'

Ve makale özellikleri şu şekilde ayarlanmalıdır:

resim açıklamasını buraya girin

Son olarak, aşağıdaki gibi (benim durumumda 3 sunucu) tüm satırları birleştirebilirsiniz:

resim açıklamasını buraya girin

Özet olarak,

  • T-Rep kullanın.
  • Abonedeki satırları benzersiz olarak tanımlamak için varolan Publisher veritabanlarına ek bir sütun ekleyin; örneğin serverName.
  • SunucuAdı olarak PK içeren Abone üzerinde tablo oluşturun.

  • @Sync_type = N'automatic 've Article özelliği "Varolan nesneyi değiştirmeden tut" olarak ayarlanmış tabloların çoğaltılmasını oluşturun.

  • Anlık görüntü aracısını çalıştırın.

  • Abone üzerindeki konsolide verileri kontrol edin.


@JohnJeheimer Yardım ettiğine sevindim. Cevabın sorunuza cevap verdiğini düşünüyorsanız, lütfen cevap verin / işaretleyin.
Kin Shah
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.