मेरे पास 8 व्यक्तिगत SQL Server 2008 R2 मशीनें हैं, प्रत्येक होस्टिंग 1 डेटाबेस। प्रत्येक डेटाबेस में एक समान टेबल संरचना और स्कीमा, और पूरी तरह से अद्वितीय डेटा होता है। मैं एक रिपोर्टिंग सर्वर (2008 या 2012 हो सकता है) स्थापित करना चाहूंगा, जो कि 8 स्रोत सर्वरों में चयनित तालिकाओं से पंक्तियों को रिपोर्टिंग सर्वर पर उन तालिकाओं के एकल उदाहरण में समेकित करता है। यह एक तरफ़ा प्रतिकृति है (रिपोर्टिंग सर्वर में कोई बदलाव नहीं किया जाएगा)। मुझे अपेक्षाकृत कम विलंबता (20-30 सेकंड) के साथ स्रोत डेटाबेस से परिवर्तनों को दोहराने की आवश्यकता होगी।
आप इसे Transactional प्रतिकृति के साथ प्राप्त कर सकते हैं । नीचे आप इसे कैसे कर सकते हैं।
नोट : आपको इसे प्राप्त करने के लिए अपनी तालिका स्कीमा को थोड़ा बदलना होगा क्योंकि आपको उस पंक्तियों को विशिष्ट रूप से पहचानना होगा जब आप ग्राहक को दोहरा रहे हों। टी-रेप की एक शर्त के रूप में आपको पीके के साथ तालिकाओं की आवश्यकता है।
नीचे प्रकाशक सर्वर पर आपकी नमूना तालिका है जो आपके सभी 8 सर्वरों पर है जिसे आप रिपोर्टिंग सर्वर पर पंक्तियों को समेकित करना चाहते हैं:
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)
पर ग्राहक सर्वर मैं यह सोचते हैं कि आप पर पी संरचना को संशोधित नहीं कर सकते हैं -, आप एक ही मेज लेकिन विभिन्न पी के साथ बनाने के लिए विशिष्ट ग्राहक (ऐसा न करने पर पंक्तियों की पहचान करने, टी निरसित पी उल्लंघन के साथ विफल करने जा रहा है की जरूरत है लाइव प्रोडक्शन के बजाय सब्सक्राइबर में बदलाव करना बेहतर)
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)
नीचे स्क्रिप्ट आपको टी-रेप सेट करने में मदद करेगी, बस ऑब्जेक्ट नाम के साथ डेटाबेसन, डेस्टिनेशन सर्वर का नाम बदलें।
-- 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
नोट करने के लिए अंक के जोड़े:
Sp_addsubscription में सुनिश्चित करें कि @sync_type = N'automatic'
और लेख गुण निम्न पर सेट होना चाहिए:
तो अंत में, आप सभी पंक्तियों को (मेरे मामले में 3 सर्वर से) नीचे के रूप में समेकित कर सकते हैं:
तो संक्षेप में,
- टी-रेप का उपयोग करें।
- मौजूदा प्रकाशक डेटाबेस में एक अतिरिक्त कॉलम जोड़ें जैसे कि सर्वर में विशिष्ट रूप से पंक्तियों की पहचान करने के लिए सर्वरनाम।
सबस्क्राइबर पर तालिका बनाएँ जिसमें पीके को सर्वरनेम के रूप में शामिल किया गया है।
"मौजूदा वस्तु अपरिवर्तित रखें" के लिए सेट @sync_type = N'automatic 'और लेख संपत्ति के साथ तालिकाओं की प्रतिकृति बनाएँ।
स्नैपशॉट एजेंट चलाएं।
ग्राहक पर समेकित डेटा की जाँच करें।