SQL सर्वर कई-एक-एक प्रतिकृति


14

मेरे पास 8 व्यक्तिगत SQL Server 2008 R2 मशीनें हैं, प्रत्येक होस्टिंग 1 डेटाबेस। प्रत्येक डेटाबेस में एक समान टेबल संरचना और स्कीमा, और पूरी तरह से अद्वितीय डेटा होता है।

मैं एक रिपोर्टिंग सर्वर (2008 या 2012 हो सकता है) स्थापित करना चाहूंगा, जो कि 8 स्रोत सर्वरों में चयनित तालिकाओं से पंक्तियों को रिपोर्टिंग सर्वर पर उन तालिकाओं के एकल उदाहरण में समेकित करता है। यह एक तरफ़ा प्रतिकृति है (रिपोर्टिंग सर्वर में कोई बदलाव नहीं किया जाएगा)। मुझे अपेक्षाकृत कम विलंबता (20-30 सेकंड) के साथ स्रोत डेटाबेस से परिवर्तनों को दोहराने की आवश्यकता होगी।

इसके अलावा, मैं इसे प्राप्त करने के तरीकों को खोजना चाहूंगा जो कि स्रोत सर्वरों के लिए कम व्यावहारिक है। 3-पार्टी एजेंट, ट्रिगर या स्कीमा मॉड उन सर्वरों के लिए मेरे वातावरण में मुश्किल हैं।

मेरे सवाल:

  • इस लक्ष्य को प्राप्त करने के लिए आशाजनक आर्किटेक्चर और प्रौद्योगिकियां क्या हैं?
  • मैंने SQL सर्वर मर्ज प्रतिकृति को देखा है, लेकिन मैं विलंबता के बारे में चिंतित हूं। क्या यह इस लक्ष्य के लिए एक उपयुक्त तकनीक है?
  • क्या लेन-देन प्रतिकृति के लिए कई-से-एक आर्किटेक्चर हैं?
  • क्या मुझे अपने रिपोर्टिंग सर्वर पर 8 डेटाबेस में 1-से-1 प्रतिकृति देखना चाहिए, इसके बाद कुछ कस्टम मर्ज फ़ंक्शन (2-चरण प्रतिकृति)?

धन्यवाद, जॉन


एकमात्र निर्मित विकल्प मर्ज प्रतिकृति है। 30 सेकंड के SLA को आसानी से प्राप्त किया जा सकता है अगर स्रोतों में हो रहे परिवर्तनों का एक टन नहीं है। किसी भी 2-चरण प्रतिकृति योजना प्रक्रिया में अतिरिक्त विलंबता का परिचय देगी, जिससे वर्णित SLA को प्राप्त करना अधिक कठिन हो जाएगा।
जॉन सिगेल

जवाबों:


16

मेरे पास 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 'और लेख संपत्ति के साथ तालिकाओं की प्रतिकृति बनाएँ।

  • स्नैपशॉट एजेंट चलाएं।

  • ग्राहक पर समेकित डेटा की जाँच करें।


@ जॉनजाइमर ग्लैड है कि यह मदद की। यदि आपको लगता है कि उत्तर आपके प्रश्न का उत्तर देता है, तो कृपया उत्तर के रूप में उत्कीर्ण करें / चिह्नित करें।
परिजन शाह
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.