फटे हुए पेज का पता कब लगाया गया और एसक्यूएल सर्वर के लिए चेकसम को पेश किया गया और अपग्रेड व्यवहार क्या हैं?


15

पृष्ठ सत्यापन के लिए आधुनिक SQL सर्वर में दो अलग-अलग विकल्प हैं; फाड़ा जा रहा है पेज डिटेक्शन और चेकसमकोई भी निश्चित रूप से एक विकल्प नहीं है।

मेरा मानना ​​है कि एसक्यूएल सर्वर 2005 में चेकसम को पेश किया गया था और एक पूर्व संस्करण से किसी डीबी को अपग्रेड या बहाल करने से इसका पिछला पृष्ठ सत्यापित होगा। यानी इसमें कोई अपग्रेड नहीं था।

इसमें समस्या यह है कि हमारे पास एक उत्पादन डेटाबेस है जो SQL Server 2000 का उपयोग करके उत्पादन में चला गया है और तब से SQL Server 2008 R2 सर्वर में स्थानांतरित हो गया है। पृष्ठ सत्यापन किसी के लिए भी सेट नहीं है जब मैं यह उम्मीद कर रहा था कि यह फटे हुए पृष्ठ का पता लगाने के लिए है । जब हम DB को मूल रूप से SQL Server 7.0 में विकसित किया गया था, तब SQL सर्वर 2000 में माइग्रेट किया गया लगता है, इस समय को वापस जाते हुए और यह देखे गए परिणाम को समझा सकता है।

मैं सोच रहा था कि जब फटे पेज डिटेक्शन और चेकसम SQL सर्वर की एक विशेषता बन गए, और नए संस्करणों में माइग्रेट या अपग्रेड होने पर उन्होंने कैसे व्यवहार किया।

संपादित करें: कुछ उत्तरों को सारांशित करना:

जब टॉरन पेज डिटेक्शन SQL सर्वर में आया, तो कुछ तिथियों के बारे में थोड़ा सा मतभेद है।
लिंक 1: http://support.microsoft.com/kb/230785
लिंक 2: http://technet.microsoft.com/en-us/library/aa337525(v=sql.90).aspx

पहला लिंक SQL 7.0 और दूसरा SQL2000 इंगित करता है। मैं SQL7.0 सुझाव में अपना विश्वास रखने की कोशिश करता हूं और यह लिंक दो SQL7.0 में डिफ़ॉल्ट रूप से बंद होने पर और SQL2000 में डिफ़ॉल्ट रूप से भ्रमित था।


2
यह तब लागू किया गया था जब कोड प्रतिबद्ध था।
14

इससे क्या फर्क पड़ता है? यहाँ क्या समस्या हल हो रही है?
मैरियन

@swasheck - क्षमा करें, मुझे आपकी टिप्पणी समझ में नहीं आ रही है।
पॉल

1
@Paul को फिर से खोलने के लिए मतदान किया
16

1
@Paul मैंने अपने उत्तर में फटे पेज या चेकसम बिट्स की जाँच के लिए dbcc पृष्ठ की जानकारी जोड़ी है।
परिजन शाह

जवाबों:


15

SQL Server 2000 में, यदि आप भ्रष्ट पृष्ठों की पहचान करना चाहते हैं, तो डेटाबेस विकल्प TORN_PAGE_DETECTION को TRUE पर सेट किया जाना चाहिए।

लेकिन SQL 2005 और ऊपर में, एक नई सेटिंग PAGE_VERIFY ने पुराने TORN_PAGE_DETECTION को बदल दिया जो दो अलग-अलग प्रकार के पृष्ठ सत्यापन से चुनने की अनुमति देता है: TORN_PAGE_DETECTION और CHECKSUM।

अब प्रश्न आता है कि कौन सा सेट करें - TORN_PAGE_DETECTION या CHECKSUM?

TORN_PAGE_DETECTION - पृष्ठ में प्रत्येक 512 बाइट्स के लिए एक बिट लिखता है, जब आप यह पता लगाने की अनुमति देते हैं कि कोई पृष्ठ डिस्क पर सफलतापूर्वक लिखा नहीं गया था। पकड़ यह है कि यह आपको नहीं बताएगा कि क्या उन 512 बाइट्स में संग्रहीत डेटा वास्तव में सही है या नहीं क्योंकि इस तथ्य के कारण कि युगल बाइट्स गलत लिखे गए हैं।

चेक - पृष्ठ के एक चेकसम को तब समाप्त कर देगा जब पृष्ठ लिखा जाता है और जब कोई पृष्ठ पढ़ा जाता है, तो यह मान लेता है कि उस पर चेकसम है।

SQL सर्वर पृष्ठ पर बिट पैटर्न के आधार पर चेकसम की गणना करता है, इसे पृष्ठ शीर्ष लेख में संग्रहीत करता है और फिर पृष्ठ लिखने के लिए I / O जारी करता है। जब SQL सर्वर पृष्ठ को पढ़ता है, तो यह उसी तर्क का उपयोग करके चेकसम को फिर से गणना करता है और फिर पृष्ठ शीर्षक में उपलब्ध मूल्य के साथ तुलना करता है। यदि चेकसम मान मेल खाता है, तो यह माना जाता है कि पृष्ठ लिखने-पढ़ने के चक्र के दौरान दूषित नहीं हुआ।

चूँकि चैक कंप्यूटिंग की लागत प्रत्येक पृष्ठ पर पढ़े और लिखे जाने पर खर्च होती है, इसलिए यह CPU ओवरहेड में जुड़ सकता है और संभवतः आपके कार्यभार के थ्रूपुट को प्रभावित कर सकता है। एक और बात ध्यान में रखना है कि चेकसम पेज पर एक विशिष्ट बिट पैटर्न के लिए अद्वितीय नहीं है। दो पेज संभवतः एक ही चेकसम मान के लिए मैप कर सकते हैं। इसलिए दूरस्थ संभावना है कि पृष्ठ भ्रष्टाचार पूर्ववत हो सकता है।

संदर्भ: SQL2005 में चेकसम

विशेष रूप से अपने सवालों के जवाब देने के लिए:

मेरा मानना ​​है कि SQL2005 में चेकसम को पेश किया गया था और एक पूर्व संस्करण से DB को अपग्रेड या पुनर्स्थापित करना यह पिछले पृष्ठ की सत्यापन विधि को बनाए रखेगा। यानी इसमें कोई अपग्रेड नहीं था।

हाँ CHECKSUM को SQL Server 2005 में पेश किया गया था और यह DEFAULT है । जब आप 2000 से 2005 में अपग्रेड करते हैं, तो आपको स्पष्ट रूप से डेटाबेस विकल्प को बदलना होगा पेज चेक का उपयोग करने के लिए सत्यापित करें।

यदि आप SQL 2005 में चल रहे किसी अन्य सर्वर पर पहले से ही SQL 2005 में बनाए गए डेटाबेस को पुनर्स्थापित करते हैं, तो आपको इसे सेट नहीं करना होगा। यह इस बात पर कायम रहेगा कि आपने कभी पेज वेरिफाई करने का विकल्प क्या रखा है।

जब फटे हुए पृष्ठ का पता चला तो मैं शोध में सफल नहीं हुआ

प्रेषक: http://support.microsoft.com/kb/230785

7.0 से पहले SQL सर्वर के संस्करण

7.0 से पहले SQL सर्वर के संस्करण लॉग समानता या फटे बिट का पता लगाने की सुविधा प्रदान नहीं करते थे। वास्तव में, वे संस्करण एक ही लॉग पेज को कई बार लिख सकते हैं जब तक कि लॉग रिकॉर्ड 2-केबी लॉग पेज नहीं भरते। यह उन लेनदेन को उजागर कर सकता है जो सफलतापूर्वक प्रतिबद्ध हैं। यदि विफलता के दौरान लॉग पृष्ठ को फिर से लिखा जा रहा है, तो प्रतिबद्ध लेनदेन वाला एक सेक्टर ठीक से नहीं लिखा जा सकता है।

इस प्रकार, TORN_PAGE_DETECTION लगभग SQL Server 7.0 के बाद से है। तब भी, डिफ़ॉल्ट यह था कि यह सक्षम नहीं था (उसी लिंक)

नोट: फाड़ा पृष्ठ का पता SQL Server 7.0 में डिफ़ॉल्ट रूप से सक्षम नहीं है। अपने सिस्टम पर पता लगाने को सक्षम करने के लिए sp_dboption देखें ।

इसलिए, यदि डेटाबेस को 7.0 उदाहरण के खिलाफ विकसित किया गया था और बाद में उन्नत किया गया था, तो उसने NONE के मौजूदा पृष्ठ VERIFY विकल्प के साथ अपग्रेड किया होगा (जैसा कि @ThomasStringer ने अपने उत्तर में उल्लेख किया है)।


संपादित करें: 09/24/2013 उत्तर को बेहतर बनाने के लिए:

SQLSkills से अपने SQL सर्वर आंतरिक नोटों का संदर्भ देते हुए, मैंने पाया कि पृष्ठ डंप का उपयोग करके, आप यह सत्यापित कर सकते हैं कि क्या फटे हुए बिट डिटेक्शन - TORN_PAGE_DETECTION या CHECKSUM सक्षम थे या नहीं:

use database_name -- change here for your database !!
checkpoint
go 
dbcc traceon (3604)   -- send output to screen
go
dbcc page (dbaalert, 1,1,0)
dbcc traceoff (3604)  -- turn off the trace flag
go

m_tornBits : यह या तो पेज चेकसम या बिट्स है जो फटे-पृष्ठ सुरक्षा बिट्स द्वारा विस्थापित किए गए हैं - डेटाबेस के लिए पेज प्रोटेक्शन किस रूप पर निर्भर है।

नोट : मेरे पास कोई पुराना sql सर्वर संस्करण नहीं है। नीचे sql सर्वर 2000 और ऊपर से पुष्टि की गई है । अगर आपके पास 7.0 या 6.5 चल रहा है, तो आप इसकी पुष्टि कर सकते हैं :-)

यहाँ छवि विवरण दर्ज करें


@ मुझे पता है कि यह SQL2000 में भी था, यह जानना चाहूंगा कि यह पहली बार कब पेश किया गया था। वाक्यांश से पहले "संस्करणों की ओर बढ़ रहा है" आइए हम दिखावा करते हैं कि TPD को SQL2000 में पेश किया गया था और फिर SQL7 से SQL2000 में जाने से पहले SQL2005 से पहले के संस्करणों के बीच जाना होगा। मुझे यह जानने में दिलचस्पी है कि क्या इस तरह के पलायन के दौरान टीपीडी को टॉगल किया गया था। मैं पूरी तरह से उम्मीद करता हूं कि यह नहीं होगा लेकिन इस तरह के सत्यापन को सक्षम नहीं किया गया है।
पॉल

@ अंपुल ने मुझे हटा दिया क्योंकि मुझे लगा कि मेरे संपादन ने टिप्पणियों को शामिल किया है
swasheck

@ क्या मैंने SQL2008R2 पर आपके DBCC कोड को आज़माया और 1711843878 का m_tornbits मान पाया .. तो यह एक बूलियन के बजाय एक उपाय है जो आप कहेंगे?
पॉल

@Paul का मतलब है कि चेकसम या टोर्म पेज ON है। A2005 और ऊपर, आपको केवल चेकबुक के लिए जाना चाहिए। आश्चर्य है कि अगर आपके पास कोई 7.0 परीक्षण करने के लिए चारों ओर झूठ है?
परिजन शाह

6

BOL के संदर्भ पर एक नज़र डालें :

जब कोई उपयोगकर्ता या सिस्टम डेटाबेस SQL ​​Server 2005 या बाद के संस्करण में अपग्रेड किया जाता है, तो PAGE_VERIFY मान (NONE या TORN_PAGE_DETECTION) को बरकरार रखा जाता है। हम अनुशंसा करते हैं कि आप CHECKSUM का उपयोग करें

यह बताता है कि SQL Server 2005 से पहले विकल्प TORN_PAGE_DETECTIONमौजूद था, लेकिन नहीं CHECKSUM

और अपने दूसरे बिंदु का उत्तर देने के लिए:

... और जो किसी पूर्व संस्करण से DB को अपग्रेड या पुनर्स्थापित कर रहा है, वह बनाए रखेगा यह पिछले पृष्ठ सत्यापन विधि है।

हां यह सही है। CHECKSUMपृष्ठ सत्यापन विधि का उपयोग करने के लिए आपको डेटाबेस को स्पष्ट रूप से निर्धारित करना होगा ।


संदर्भ @Thomas के लिए धन्यवाद, लेकिन यह जवाब नहीं देता है जब TORN PAGE DETECTION पहली बार SQL सर्वर में उपलब्ध हुआ।
पॉल

2
@Paul यह उत्तर देता है कि फटे हुए पृष्ठ का पता SQL सर्वर 2005 से पहले मौजूद था। क्या आप देख रहे हैं कि पृष्ठ सत्यापन में SQL सर्वर का कौन सा संस्करण आया था? एक इतिहास सबक के अलावा, मुझे यकीन नहीं है कि आप वहां क्या हासिल करना चाहते हैं। आप किस समस्या को हल करने की कोशिश कर रहे हैं?
थॉमस स्ट्रिंगर

मैं यह जानना चाह रहा था कि यह अस्तित्व में कब आया और इसने प्रवास के दौरान कैसा व्यवहार किया। मैं यह समझने की उम्मीद कर रहा हूं कि हमारे कुछ पुराने DBs कैसे सेटिंग्स में आए हैं जो वे हमारे आधुनिक (ish, SQL2008R2) सर्वरों पर करते हैं।
पॉल

यदि आपके डेटाबेस में TORN_PAGE_DETECTION है, तो निश्चित रूप से पूर्व SQL सर्वर 2005 से अपग्रेड हो सकता है और उस पृष्ठ सत्यापन विकल्प कायम है।
थॉमस स्ट्रिंगर

उनके पास टीपीडी सक्षम नहीं है, जो कि चकरा देने वाला हिस्सा था। अन्य उत्तरों ने अब इस मुद्दे का समाधान प्रदान किया है (SQL7.0 में TPD था, लेकिन डिफ़ॉल्ट रूप से सक्षम नहीं था और यह मूल रूप से इसके विरुद्ध विकसित किया गया संस्करण था)
पॉल

3

पृष्ठ सत्यापन के लिए आधुनिक SQL सर्वर में दो अलग-अलग विकल्प हैं

आपके द्वारा बताए गए तीन हैं: TORN_PAGE_DETECTION, CHECKSUM, और NONE।

मेरा मानना ​​है कि CHECKSUM को SQL Server 2005 में पेश किया गया था

जैसा कि "बफर मैनेजमेंट" नामक इस एमएसडीएन लेख से उद्धृत किया गया था: SQL सर्वर 2000 में फटे हुए पृष्ठ का पता लगाया गया था। SQL Server 2005 में चेकसम प्रस्तुत किया गया था।

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

मेरे पास एक उत्पादन डेटाबेस है जो SQL Server 2000 का उपयोग करके उत्पादन में चला गया, हालाँकि SQL Server 7.0 के खिलाफ विकसित किया गया हो सकता है, और तब से SQL Server 2008 R2 सर्वर में स्थानांतरित हो गया है। पृष्ठ सत्यापन NONE पर सेट है, हालांकि मुझे उम्मीद है कि यह TORN PAGE DETECTION होगा।

डेटाबेस उदाहरण के लिए अनुमतियाँ रखने वाला कोई भी व्यक्ति उस मान को संशोधित कर सकता है। यह MSDN पर यहाँ बताए अनुसार उन्नयन के माध्यम से कायम रह सकता है :

जब कोई उपयोगकर्ता या सिस्टम डेटाबेस SQL ​​Server 2005 या बाद के संस्करण में अपग्रेड किया जाता है, तो PAGE_VERIFY मान (NON या TORN_PAGE_DETECTION) को बरकरार रखा जाता है

इसे बाद के समय में भी संशोधित किया जा सकता था क्योंकि किसी ने कॉन्फ़िगरेशन को गलत समझा और किसी समस्या को हल करने के लिए अंधेरे में शूटिंग कर रहा था।

मैं सोच रहा था जब TORN PAGE DETECTION पेज वेरिफाई फीचर बन गया

SQL सर्वर 2000 जैसा कि ऊपर कहा गया है।

माइग्रेट या नए संस्करणों में अपग्रेड किए जाने पर यह कैसा व्यवहार करता है।

पिछली सेटिंग को अपग्रेड के दौरान बरकरार रखा गया है जैसा कि ऊपर कहा गया है।

अब मैं इस तथ्य को इंगित करना चाहूंगा कि लोगों द्वारा प्रदान किए गए अन्य लिंक बताते हैं कि SQL सर्वर 7.0 है जब फटे हुए पृष्ठ का पता लगाना उपलब्ध था। जैसा कि उन लेखों में कहा गया है, सच है, हालाँकि यह कई बार साबित होता है कि Microsoft प्रलेखन को सभी परिस्थितियों में सत्य नहीं माना जाना चाहिए। कई ऐसे हैं जहां वे गलत हैं। तो इसके साथ ही कहा कि आप कैसे निर्धारित कर सकते हैं कि कौन सा उत्तर स्वीकार्य है? हम सभी ने अपने जवाब का समर्थन करने के लिए Microsoft द्वारा प्रलेखन प्रदान किया।

साथ ही ध्यान दें कि फटा हुआ पेज डिटेक्शन SQL सर्वर 2012 के रूप में मूल्यह्रास सूची में है, इसलिए इसे शुरू करने के लिए आपके डेटाबेस पर कैसे सेट किया गया था, इससे क्या चिंता है। अगर मैंने इसे CHECKSUM के अलावा किसी और चीज़ पर सेट किया तो मैंने तुरंत इसे बदल दिया और अन्य महत्वपूर्ण कार्य के लिए आगे बढ़ा। मुझे इस बात पर कोई चिंता नहीं है कि एक खराब कॉन्फ़िगरेशन कैसे रखा गया था, इसे सही करना अधिक महत्वपूर्ण है और फिर यह सुनिश्चित करने के लिए जिनके पास इसे बदलने की अनुमति है, उन्हें सूचित किया जाता है कि कॉन्फ़िगरेशन आइटम को किसी और चीज़ में क्यों नहीं बदला जाना चाहिए। बस मेरी $ 0.02


मुझे लगता है कि 2000 तब था जब टीपीडी को डिफॉल्ट किया गया था। कई अन्य नए SQL सर्वर सुविधाओं के साथ, वे इसे डिफ़ॉल्ट रूप से अक्षम / बंद कर देंगे और इसे चालू करने के लिए DBAs को बाध्य करेंगे। किसी भी दर पर, डिप्रेसमेंट चेतावनी के लिए मुझसे +1।
स्वैसेक

यह एक अच्छा बिंदु है, आपके पास एक अच्छा लिंक है जो बैकअप के लिए लगता है कि आप क्या कहते हैं। लेकिन मुझे लगता है कि किसी और द्वारा प्रदान किया गया लिंक ( support.microsoft.com/kb/230785 ) इसे सुपरस्टोर करता है। मुझे यह सोचने की अधिक संभावना है कि बफर प्रबंधन अनुभाग को अन्य लिंक की तुलना में आधा गलत मिला है, जो गलत है। अगर यह समझ में आता है, पूरी तरह से यकीन नहीं है कि मैं खुद को बहुत अच्छी तरह से रख रहा हूँ!
पॉल

यह उन चीजों में से एक है जैसे लाइसेंसिंग, कुछ भी नहीं एमएस के बारे में कहते हैं कि बहुत स्पष्ट है या ...

0

@Thomas Stringer और @Kin दोनों ने कहा कि यह SQL Server 2005 में पेश किया गया है और मेरा मानना ​​है कि यह SQL सर्वर के सभी संस्करणों में काम करता है। TempDB के लिए हालांकि CHECKSUM SQL Server 2008 में पेश किया गया था

http://blogs.msdn.com/b/sqlserverstorageengine/archive/2008/03/23/checksum-and-tempdb.aspx


धन्यवाद @DaniSQL, हालांकि किसी ने भी अभी तक इस सवाल का जवाब नहीं दिया है। यानी जब TORN PAGE DETECTION पेश किया गया और अपग्रेड / माइग्रेशन के दौरान इसका व्यवहार कैसा रहा।
पॉल

मैं इतिहासकारों को यह पता लगाने के लिए छोड़ दूंगा कि उन्नयन के रूप में / माइग्रेशन कुछ भी तब तक नहीं होगा जब तक कि आप प्रत्येक डेटाबेस में मैन्युअल रूप से पृष्ठ सत्यापित विकल्प को बदल न दें। तब भी पहले से मौजूद पृष्ठों में चेकसम नहीं होगा। blogs.msdn.com/b/sqlserverstorageengine/archive/2006/06/29/…
DaniSQL

धन्यवाद @DaniSQL, यह है कि मैं समझ कैसे SQL2005 और काम करने के लिए ऊपर माइग्रेशन है। मैं सिर्फ यह सुनिश्चित करना चाहता था कि पूर्व संस्करण भी इस व्यवहार को बनाए रखें
पॉल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.