Oracle प्रदर्शन ट्यूनिंग के लिए सांख्यिकी ने महत्वपूर्ण भूमिका निभाई। Oracle ऑप्टिमाइज़र SQL क्वेरीज़ में शामिल oracle तालिका के आँकड़ों के आधार पर निष्पादन योजना बनाता है।
उदाहरण के लिए, आप कुछ मामलों में आँकड़ों को ऑरैकल तालिका में लॉक करना चाह सकते हैं
- आप नहीं चाहते कि तालिका का विश्लेषण सांख्यिकी कार्य शेड्यूल द्वारा किया जाए, लेकिन बाद में या उच्च अनुमान पर इसका विश्लेषण करना चाहते हैं
- आप प्रदर्शन के कारण तालिका के लिए आंकड़े जेनरेट नहीं करना चाहते हैं
- आप नहीं चाहते कि सर्वर समय बिताए
और भी कई मामले हो सकते हैं जहां हम आंकड़े लॉक करना चाहते हैं
विषय-सूची
टेबल पर आंकड़े कैसे लॉक करें
आप टेबल पर आँकड़ों को लॉक करने के लिए मानक ओरेकल पैकेज DBMS_STATS का उपयोग कर सकते हैं
निष्पादित dbms_stats.lock_table_stats('table_owner','table_name');
उदाहरण dba_tab_statistics से stattype_locked चुनें जहां table_name ='TEST' और मालिक ='TECH';STATTYPE_LOCKED—------------exec dbms_stats.lock_table_stats('TEST','TECH'); dba_tab_statistics से stattype_locked चुनें; जहां टेबल_नाम ='टेस्ट' और मालिक ='टेक'; STATTYPE_LOCKED—-----------सभी
ऐसी तालिका कैसे खोजें जहां आंकड़े लॉक हैं
आप नीचे दी गई क्वेरी का उपयोग उन सभी तालिकाओं को खोजने के लिए कर सकते हैं जहां आंकड़े बंद हैं
स्वामी चुनें, table_name, stattype_lockedfrom dba_tab_statisticsजहां stattype_locked रिक्त नहीं है;
आंकड़े निर्माण कार्य को उस टेबल पर चलाना जहां आंकड़े बंद हैं
यदि हम उन तालिकाओं पर आंकड़े इकट्ठा करने का प्रयास करते हैं जहां आंकड़े लॉक हैं, तो हमें ORA-20005 ऑब्जेक्ट आंकड़े लॉक हो जाते हैं (stattype =all)
एसक्यूएल> निष्पादन dbms_stats.gather_table_stats('TECH', 'TEST');BEGIN dbms_stats.gather_table_stats('TECH', 'TEST'); END;*ERROR at लाइन 1:ORA-20005:ऑब्जेक्ट स्टैटिस्टिक्स लॉक हैं (stattype =ALL)ORA-06512:"SYS.DBMS_STATS" पर, लाइन 10640ORA-06512:"SYS.DBMS_STATS" पर, लाइन 10664ORA-06512:at पंक्ति 1
हम आँकड़ों को अनलॉक करने और आँकड़े उत्पन्न करने और फिर से लॉक करने के लिए नीचे दिए गए चरणों का पालन कर सकते हैं
निष्पादित dbms_stats.unlock_table_stats('TECH','TEST');exec dbms_stats.gather_table_stats('TECH', 'TEST');exec dbms_stats.lock_table_stats('TECH','TEST'); orexec dbms_stats.(gather_table_stats.(gather_table) 'टेक', 'टेस्ट',बल=>सत्य );
तालिका और स्कीमा के आंकड़े कैसे अनलॉक करें /स्कीमा के लिए तालिका आंकड़े अनलॉक करें
अब एक बार जब हम वस्तुओं का पता लगा लेते हैं, तो हम उन्हें अनलॉक करने के लिए नीचे दिए गए प्रश्नों का उपयोग कर सकते हैं
स्कीमा के लिए तालिका आंकड़े अनलॉक करें निष्पादन dbms_stats.unlock_schema_stats('schema_owner');exec dbms_stats.unlock_table_stats('table_owner','table_name');उदाहरण निष्पादन dbms_stats.unlock_schema_stats('TECH');exec dbms_stats.unlock_table_stats('TECH','TEST');
तालिका पर लॉक किए गए आंकड़ों के साथ अनुक्रमणिका निर्माण
10g के बाद, जब भी हम अनुक्रमणिका बनाते हैं, तो आँकड़े स्वतः उत्पन्न हो जाते हैं। अब यह समीकरण बदल जाता है जब तालिका लॉक हो जाती है, तो सूचकांक बनाते समय आँकड़े उत्पन्न नहीं होंगे। लॉक किए गए ऑब्जेक्ट्स के लिए इंडेक्स बनाते समय आंकड़े इकट्ठा करने के लिए हमें फोर्स विकल्प का उपयोग करने की आवश्यकता है। आइए उदाहरण को देखकर विवरण में समझते हैं
उदाहरण आइए पहले डमी टेबल बनाएं और उस टेबल पर आंकड़े लॉक करें SQL> चयन के रूप में तालिका परीक्षण बनाएँ।> एसक्यूएल> टेस्ट (आईडी) पर इंडेक्स टेस्ट_आईडीएक्स बनाएं; इंडेक्स बनाया गया। एसक्यूएल> num_rows चुनें, user_ind_statistics से last_analyzed जहां index_name ='TEST_IDX';NUM_ROWS LAST_ANAL---------- --------- इसलिए लॉक किए गए आंकड़े तालिका के लिए इंडेक्स पर आंकड़े स्वचालित रूप से जेनरेट नहीं होते हैं आइए DBMS_STATS का उपयोग करके आंकड़े जेनरेट करने का प्रयास करें SQL> निष्पादन dbms_stats.gather_index_stats(null, 'TEST_IDX');BEGIN dbms_stats.gather_index_stats(null, 'TEST_IDX'); END;*पंक्ति 1 पर त्रुटि:ORA-20005:ऑब्जेक्ट आंकड़े लॉक हैं (stattype =ALL) ORA-06512:"SYS.DBMS_STATS" पर, पंक्ति 10640ORA-06512:"SYS.DBMS_STATS" पर, पंक्ति 10664ORA-06512:पंक्ति 1 परइसलिए सांख्यिकी निर्माण विफल रहा। सूचकांक पर आंकड़े उत्पन्न करने के लिए, हम इसे ओवरराइड करने के लिए dbms_stats में बल विकल्प का उपयोग कर सकते हैं SQL> exec dbms_stats.gather_index_stats(null, 'TEST_IDX',force=>true);PL/SQL प्रक्रिया सफलतापूर्वक पूरी हुई। -------------1000 01-SEP-17आइए गणना सांख्यिकी खंड के साथ एक नई अनुक्रमणिका बनाने का प्रयास करें SQL> टेस्ट पर इंडेक्स TEST_IDX1 बनाएं (ऑब्जेक्ट_नाम) आँकड़ों की गणना करें; टेस्ट पर इंडेक्स आईडीएक्स बनाएं (ऑब्जेक्ट_नाम) आँकड़ों की गणना करें * पंक्ति 1 पर त्रुटि:<चिह्न> ओआरए -38029:ऑब्जेक्ट आँकड़े लॉक हैं तो ORA-38029 त्रुटि होती है, इसलिए हमें कंप्यूट स्टैटिस्टिक्स क्लॉज के बिना इंडेक्स बनाना होगा और फिर फोर्स ऑप्शन का उपयोग करके आंकड़े जेनरेट करना होगा SQL> टेस्ट (ऑब्जेक्ट_नाम) पर इंडेक्स TEST_IDX1 बनाएं; SQL> exec dbms_stats.gather_index_stats(null, 'TEST_IDX1',force=>true);अगर हम कंप्यूट स्टैटिस्टिक्स ऑप्शन के साथ इंडेक्स को फिर से बनाते हैं तो वही चीजें होती हैं SQL> अनुक्रमणिका बदलें TEST_IDX1 गणना आँकड़ों का पुनर्निर्माण करें; अनुक्रमणिका बदलें TEST_IDX1 गणना आँकड़ों का पुनर्निर्माण करें * पंक्ति 1 पर त्रुटि:ORA-38029:ऑब्जेक्ट आँकड़े लॉक हैं SQL> परिवर्तन अनुक्रमणिका TEST_IDX1 पुनर्निर्माण; अनुक्रमणिका परिवर्तित। SQL> निष्पादन dbms_stats.gather_index_stats(null, 'TEST_IDX1',force=>true);PL/SQL प्रक्रिया सफलतापूर्वक पूर्ण।आशा है कि आपको ऑरैकल में तालिकाओं के आँकड़ों को लॉक/अनलॉक करने की जानकारी पसंद आई होगी। साथ ही अब आपको पता होना चाहिए कि ORA-20005:ऑब्जेक्ट आंकड़े लॉक होने पर क्या करना चाहिए और ORA-38029:वस्तु आँकड़े लॉक हो जाते हैं
संबंधित लेख
रिलीज़ 11i और R12 में आंकड़े एकत्र करना
11g में वृद्धिशील आंकड़े एकत्र करना
ora-20001 11g पर स्कीमा आंकड़े इकट्ठा करना(FND_HISTOGRAM_COLS)
Oracle में टेबल मॉनिटरिंग कैसे सेट करें और इसके साथ संबंध STATISTICS_LEVEL
Oracle Tutorial:पुराने आँकड़ों की जाँच कैसे करें
Oracle Optimizer Mode
आँकड़ों पर Oracle दस्तावेज़