Sql सर्वर चेंज डेटा कैप्चर का उपयोग अक्सर बदलते स्कीमा के साथ करना


10

हम एक नए सबसिस्टम के लिए Sql सर्वर चेंज डेटा कैप्चर को सक्षम कर रहे हैं जिसे हम बना रहे हैं।

यह वास्तव में इसलिए नहीं है क्योंकि हमें इसकी आवश्यकता है, लेकिन हमें एक पूर्ण इतिहास ट्रैसेबिलिटी के लिए धकेला जा रहा है, और सीडीसी हमारे भागों पर न्यूनतम प्रयास के साथ इस आवश्यकता को हल करेगा।

हम एक चुस्त विकास प्रक्रिया का अनुसरण कर रहे हैं, जिसका अर्थ है कि इस मामले में इसका मतलब है कि हम अक्सर डेटाबेस स्कीमा में बदलाव करते हैं, जैसे नए कॉलम जोड़ना, डेटा को अन्य कॉलम में ले जाना, आदि।

हमने एक छोटा परीक्षण किया जहां हमने एक तालिका बनाई, उस तालिका के लिए सीडीसी को सक्षम किया और फिर तालिका में एक नया कॉलम जोड़ा। नए कॉलम में परिवर्तन सीडीसी तालिका में पंजीकृत नहीं है।

क्या सीडीसी तालिका को नए स्कीमा में अद्यतन करने के लिए एक तंत्र है, और क्या डेटाबेस स्कीमा को स्थानांतरित करते समय कैप्चर किए गए डेटा के साथ आप कैसे व्यवहार करते हैं?


यदि आप dba.stackexchange.com में यह प्रश्न पोस्ट करते हैं तो आपको एक बेहतर / तेज उत्तर मिल सकता है
TimG

2
@ टीआईएमजी बहुस्तरीय एक प्रश्न को हतोत्साहित किया जाता है, माइग्रेशन एक विकल्प होगा - लेकिन इसमें एक इनाम है और बाउंटी सक्रिय होने पर माइग्रेट नहीं किया जा सकता है। उस ने कहा, प्रश्न और उसके इनाम dba.SE चैट रूम में उल्लेख किया गया है और कुछ ध्यान आकर्षित किया।

जवाबों:


5

हमने हाल ही में सीडीसी को भी देखना शुरू किया है। मैं इस विषय का विशेषज्ञ नहीं हूं, लेकिन मुझे लगता है कि मेरे पास आपके सवालों के कुछ जवाब हैं।

अधिकांश भाग के लिए, CDC आपको पूरी तरह से ट्रेस किए जाने योग्य इतिहास के अपने लक्ष्य को प्राप्त करने में मदद करेगा , लेकिन मुझे नहीं लगता कि यह आपको वहां तक ​​पहुंचाएगा।

सबसे पहले:

हम अक्सर डेटाबेस स्कीमा में परिवर्तन करते हैं ... क्या सीडीसी तालिका को नए स्कीमा में अद्यतन करने के लिए एक तंत्र है

और यह वह जगह है जहां मुझे लगता है कि सीडीसी आपको विफल कर देगा। MSDN प्रलेखीकरण अनुभाग "ट्रैकिंग ओवरहेड बदलें समझना" के तहत है कि यह आप के लिए स्कीमा परिवर्तनों को ट्रैक नहीं होगा बहुत स्पष्ट है। उदाहरण के लिए, साथ Alter Table Add Column:

यदि नया ट्रैक ट्रैक की गई तालिका में जोड़ा जाता है, तो स्तंभ के जोड़ को ट्रैक नहीं किया जाता है। केवल नए कॉलम में किए गए अद्यतन और परिवर्तन ट्रैक किए गए हैं।

Drop Column थोड़ा और अधिक जटिल है।

हालाँकि, आपको अपने स्कीमा को बदलने के लिए DB स्क्रिप्ट्स का उपयोग करना चाहिए ताकि आपको यहाँ CDC पर भरोसा न करना पड़े। यह आपको अपने QA और उत्पादन स्कीमा के बीच निरंतरता रखने की अनुमति देता है। और QA में परिवर्तन स्क्रिप्ट द्वारा किया जाना चाहिए ताकि सटीक वही परिवर्तन उत्पाद पर लागू किया जा सके। स्कीमा परिवर्तन को उन लिपियों से बाहर निकालना बहुत कठिन नहीं होना चाहिए। इसका मतलब यह हो सकता है कि आपके इतिहास का "समय" आयाम वास्तविक समय के बजाय संस्करण द्वारा संचालित किया जाएगा, लेकिन अंतिम परिणाम समान होगा।

यदि आपके पास पहले से कोई नहीं है, तो अपने डेटाबेस स्कीमा के संस्करण को ट्रैक करने के लिए एक तालिका बनाएं। और फिर उस डेटाबेस स्कीमा संस्करण तालिका को सीडीसी के अंतर्गत रखें ताकि आप किसी विशेष तालिका के भीतर सूक्ष्म परिवर्तनों के खिलाफ स्कीमा में मैक्रोस्कोपिक परिवर्तनों को संरेखित कर सकें।

मेरी समझ से, आपको अभी भी नए कॉलम में जोड़े गए डेटा को देखना चाहिए, भले ही सीडीसी में स्कीमा परिवर्तन न दिख रहा हो। और टेबल से टेबल तक डेटा माइग्रेशन भी सीडीसी द्वारा उठाया जाना चाहिए।

डेटाबेस स्कीमा को स्थानांतरित करते समय कैप्चर किए गए डेटा से आप कैसे निपटते हैं, इसके लिए कोई सर्वोत्तम अभ्यास हैं?

ऐसा व्यवहार करें जैसे आप एक ऑडिट का इलाज करेंगे। आपको यह समझने की ज़रूरत है कि आप क्या जाँच कर रहे हैं, आप इसकी जाँच क्यों कर रहे हैं, और आपको उस जानकारी को कब तक रखने की आवश्यकता है। स्कोप और रिटेंशन दो सबसे बड़े बुगाबो हैं जब यह इस तरह के कार्य के लिए आता है।

सीडीसी के रिपोर्टिंग उपकरण काफी महत्वपूर्ण हैं, इसलिए आपको परिवर्तनों के संदर्भ को जानना होगा। यह कहना आसान है " सब कुछ ट्रैक करें !" और एक परिणाम के रूप में प्रयोग करने योग्य कुछ भी नहीं के साथ समाप्त होता है। इसी तरह, आप हर परिवर्तन की एक प्रति रख कर अपने डेटाबेस के आकार को दोगुना कर सकते हैं। कई आवेषण और हटाए जाने के साथ एक उच्च मंथन तालिका में, आप खगोलीय वृद्धि के साथ समाप्त करेंगे। यह अपने आप में बुरा नहीं है, लेकिन आपको उस विकास के लिए बजट की आवश्यकता है और आपके द्वारा उत्पन्न किए गए सभी डेटा की जांच करने का एक साधन है।

तो यह आपको यह समझने के लिए वापस करता है कि आपको पूर्ण ट्रेसबिलिटी के लिए क्यों धकेला जा रहा है। उस आवश्यकता के लिए निश्चित रूप से मान्य कारण हैं। लेकिन आप डेटाबेस की अपनी प्रभावी ऑडिटिंग की संरचना तब तक नहीं कर पाएंगे, जब तक आपको पता न हो कि आपको उस आवश्यकता को क्यों पूरा करना चाहिए।


1

आप DDL ट्रिगर के साथ स्तंभों को जोड़ने में सक्षम हैं।

CREATE TRIGGER trigger_name
ON { ALL SERVER | DATABASE }
[ WITH <ddl_trigger_option> [ ,...n ] ]
{ FOR | AFTER } { event_type | event_group } [ ,...n ]
AS { sql_statement [ ; ] [ ,...n ] |
EXTERNAL NAME < method specifier > [ ; ] }

आप तालिका के CREATE, DROP, या ALTER के लिए आग लगाने के लिए घटना समूह DDL_TABLE_EVENTS का उपयोग कर सकते हैं।

हालाँकि, यदि आप एंटरप्राइज़> 2008 का उपयोग कर रहे हैं, तो आप SQL सर्वर ऑडिट पर एक नज़र डाल सकते हैं, क्योंकि यह "सभी ऑडिटिंग क्षमताओं को ऑडिट विनिर्देश में जोड़ती है"। इस msdn लिंक के बारे में एक विस्तृत लेख है: http://msdn.microsoft.com/en-us/library/dd392015(v=sql.100).aspx

CREATE SERVER AUDIT audit_name
TO { [ FILE (<file_options> [, ...n]) ] |
APPLICATION_LOG | SECURITY_LOG }
[ WITH ( <audit_options> [, ...n] ) ] }[ ; ]

<file_options>::=
{FILEPATH = 'os_file_path'
[, MAXSIZE = { max_size { MB | GB | TB } | UNLIMITED } ]
[, MAX_ROLLOVER_FILES = integer ]
[, RESERVE_DISK_SPACE = { ON | OFF } ] }

<audit_options>::=
{ [ QUEUE_DELAY = integer ]
[, ON_FAILURE = { CONTINUE | SHUTDOWN } ]
[, AUDIT_GUID = uniqueidentifier ]}

फिर आप सर्वर या डेटाबेस विनिर्देश बनाते हैं।


0

सिंपल-टॉक में डेटा कैप्चर और सीडीसी पर गाइड के माध्यम से एक बहुत अच्छा लेख है और साथ ही MSDN प्रलेखन आवश्यकताओं के आधार पर विभिन्न तरीकों की व्याख्या करता है। लेकिन वे दोनों आपकी विशिष्ट आवश्यकताओं के साथ आपकी मदद कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.