क्या SQL Server 2008 से 2012 में परिवर्तन ट्रैकिंग इंटर्न बदल गए थे?


9

केंद्रीय डेटाबेस सर्वर के साथ डिस्कनेक्ट किए गए डिवाइस को सिंक्रनाइज़ करने में समस्या के कारण, हमें सर्वर पर SQL Server 2012 में अपग्रेड करने के बाद समस्या का सामना करना पड़ रहा है। ऐसा प्रतीत होता है कि CHANGE_TRACKING_MIN_VALID_VERSION मान से 1 उच्चतर रिटर्न दे रहा है (या कम से कम इसे अपग्रेड करने से पहले करना चाहिए था।)

मैं एक सरल उदाहरण स्थापित करने के तरीके के माध्यम से अरशद अली के महान चलने के माध्यम से काम कर रहा हूं ।

मैंने SQL Server 2008 और 2012 के परिवेश दोनों में कर्मचारी तालिका में एक पंक्ति डालने, हटाने और अद्यतन करने के लिए # 1 के माध्यम से # 5 स्क्रिप्ट्स चलाए हैं।

2008 में, निम्नलिखित कथन 0 देता है:

SELECT CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID('Employee'))

2012 में, यह 1 लौटाता है।

परीक्षणों में कुछ और लिपियों (6-8) के माध्यम से काम करने के लिए, मैंने एक साफ-सुथरी कार्रवाई के लिए बलपूर्वक प्रतिधारण अवधि को 1 मिनट के लिए निर्धारित किया। मैं दिन के लिए रवाना हुआ और जाहिर तौर पर यह रात भर चला।

2008 के उदाहरण में, CHANGE_TRACKING_CURRENT_VERSION और CHANGE_TRACKING_MIN_VALID_VERSION बराबर (11) हैं। 2012 के उदाहरण में, CHANGE_TRACKING_CURRENT_VERSION (11) की तुलना में CHANGE_TRACKING_MIN_VALID_VERSION एक (12) अधिक है। जब डेटाबेस किसी विस्तारित अवधि के लिए निष्क्रिय हो तो इससे सिंक्रोनाइज़ेशन प्रक्रिया पर प्रभाव पड़ सकता है। और हमने पाया है कि प्रक्रिया एक लूप में पकड़ी जा सकती है, खासकर जब निम्नलिखित परीक्षण के लिए यह निर्धारित किया जाता है कि क्या पुन: आरंभीकरण, जैसा कि सिंक्रनाइज़ेशन के विपरीत है, की आवश्यकता है:

IF CHANGE_TRACKING_MIN_VALID_VERSION(object_id(N'dbo.Employee')) > @sync_last_received_anchor 
       RAISERROR (N'SQL Server Change Tracking has cleaned up tracking information for table ''%s''...

क्या किसी और ने व्यवहार में इस बदलाव का अनुभव किया है? क्या किसी के पास स्पष्टीकरण है?


2
इस समस्या के लिए एक Microsoft कनेक्ट आइटम है। Connect.microsoft.com/SQLServer/feedback/details/770014/… मूल रूप से Microsoft को लगता है कि यह समस्या डेटाबेस में भ्रष्टाचार से संबंधित हो सकती है। क्या आप एक नए बनाए गए डेटाबेस में इस स्थिति को दोहरा सकते हैं?
मैक्स वर्नोन

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

3
समस्या के लिए रेप्रो चरण के साथ, कृपया इसे कनेक्ट पर रिपोर्ट करें ताकि वे इसे ठीक कर सकें!
जॉन सेगेल

क्या आपने उन्नयन के बाद DB की संगतता स्तर बदल दिया? मैं परिवर्तन ट्रैकिंग का उपयोग नहीं करता, लेकिन उन्नयन के बाद एक संस्करण बेमेल के बारे में सोचता हूं।
गुरिल्ला आर।

जवाबों:


3

कोई भी परिवर्तनों को ट्रैक करने के लिए min_valid_version का उपयोग नहीं करता है। इसका उपयोग केवल यह पुष्टि करने के लिए किया जाता है कि यदि आपके क्लाइंट को पुनर्निवेशित किया जाना है, अगर क्लाइंट को परिवर्तनों का उपभोग करने से पहले मेटाडेटा को साफ कर दिया गया हो।

CHANGE_TRACKING_MIN_VALID_VERSION (लेनदेन-एसक्यूएल)

न्यूनतम तालिका प्राप्त CHANGETABLEकरता है जो फ़ंक्शन का उपयोग करते समय निर्दिष्ट तालिका से परिवर्तन ट्रैकिंग जानकारी प्राप्त करने में उपयोग के लिए मान्य है ।

Min_valid_version सफाई संस्करण के साथ बदलता है और उपयोगकर्ता तालिका में परिवर्तन पर निर्भर नहीं करता है। हर बार क्लीन थ्रेड चलता है, डेटा में बदलाव के बावजूद min_valid_version का अद्यतन हो सकता है।

2012 से पहले, min_valid_version को क्लीनअप संस्करण के रूप में चिह्नित किया गया था, जब वास्तव में यह क्लीनअप संस्करण की तुलना में एक अधिक होना चाहिए क्योंकि उस संस्करण के लिए मेटाडेटा पहले से ही साफ हो चुका है। 2012 में उन्होंने वही किया जो यह सुनिश्चित करने के लिए बदल गया कि वे सही min_valid_version को अपडेट करते हैं।

किसी को min_valid_version का उपयोग करके परिवर्तन पर नज़र नहीं रखनी चाहिए, इसके बजाय हर सिंक के बाद last_sync_version को सहेजना चाहिए और CHANGETABLEअंतिम सिंक संस्करण के बाद परिवर्तनों को दर्ज करने के लिए कॉल करना चाहिए ।

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

समाधान - 'min_valid_version' के बजाय 'current_version' का उपयोग करने के लिए परिवर्तन प्रक्रिया

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