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:
Son olarak, aşağıdaki gibi (benim durumumda 3 sunucu) tüm satırları birleştirebilirsiniz:
Ö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.