जब भी हम किसी डेटाबेस ऑब्जेक्ट में कोई परिवर्तन करते हैं, तो उस पर निर्भर करता है कि कोई भी कोड अमान्य है। यह ट्रिगर, विचार और संग्रहीत प्रक्रियाओं को प्रभावित करता है। हालांकि, अगली बार जब कुछ कोड उस कोड को कॉल करता है तो डेटाबेस स्वचालित रूप से इसे फिर से संकलित कर देगा।
तो हमें इसके बारे में चिंता करने की ज़रूरत नहीं है, है ना? खैर, हाँ, एक बिंदु तक। बात यह है कि ट्रिगर्स (या जो कुछ भी) का अमान्यता हमारे लिए एक झंडा है कि एक बदलाव किया गया है जो उस ट्रिगर के संचालन को प्रभावित कर सकता है, जिसके दुष्प्रभाव हो सकते हैं। सबसे स्पष्ट दुष्प्रभाव यह है कि ट्रिगर संकलित नहीं होगा। अधिक संक्षेप में, ट्रिगर संकलन करता है लेकिन संचालन के दौरान विफल रहता है।
इसलिए, विकास के माहौल में ट्रिगर्स के पुनर्मूल्यांकन को मजबूर करना एक अच्छा विचार है, यह सुनिश्चित करने के लिए कि हमारे परिवर्तन ने मूल रूप से कुछ भी तोड़ा नहीं है। लेकिन जब हम उत्पादन में हमारे बदलाव को तैनात करते हैं, तो हम उस कदम को छोड़ सकते हैं, क्योंकि हम इतने भरोसेमंद हैं कि सब कुछ मांग पर फिर से संकलित होगा। हमारे तंत्रिका पर निर्भर करता है :)
ओरेकल स्कीमा में सभी अमान्य वस्तुओं को स्वचालित रूप से पुन: संकलित करने के लिए तंत्र प्रदान करता है।
सबसे सरल सी DBMS_UTILITY.COMPILE_SCHEMA()
का उपयोग करना है। लेकिन यह 8i के बाद से dodgy रहा है (क्योंकि जावा संग्रहीत प्रक्रियाओं के लिए समर्थन परिपत्र निर्भरताओं के लिए संभावित पेश किया) और अब सभी वस्तुओं को सफलतापूर्वक पहली बार संकलित करने की गारंटी नहीं है।
9i ओरेकल में हमें एक स्क्रिप्ट $ORACLE_HOME/rdbms/admin/utlrp.sql
दिया गया जो चीजों को दोबारा बनाया गया। दुर्भाग्य से इसे SYSDBA पहुंच की आवश्यकता है।
10 जी में उन्होंने UTL_RECOMP पैकेज जोड़ा, जो मूल रूप से वह सब कुछ करता है जो स्क्रिप्ट करता है। बड़ी संख्या में वस्तुओं को पुन: सम्मिलित करने के लिए यह अनुशंसित दृष्टिकोण है। दुर्भाग्य से इसे एसआईएसडीबीए एक्सेस की भी आवश्यकता है। Find out more।
11 जी ओरेकल में बढ़िया निर्भरता प्रबंधन पेश किया गया। इसका मतलब है कि तालिकाओं में परिवर्तन का मूल्यांकन एक बेहतर ग्रैन्युलरिटी (मूल रूप से तालिका स्तर के बजाय कॉलम स्तर) पर किया जाता है, और केवल वही वस्तुएं जो परिवर्तनों से सीधे प्रभावित होती हैं प्रभावित होती हैं। Find out more।
धन्यवाद, यह स्पष्टीकरण बहुत अच्छा लग रहा है। मैंने उपरोक्त लिंक को 10 जी के दस्तावेज़ पर क्लिक किया और यह कहता है कि आपको इस स्क्रिप्ट को चलाने के लिए AS SYSDBA से कनेक्ट होना चाहिए। ऐसा लगता है कि मुझे किसी भी तरह से SYSDBA के रूप में लॉगिन करना है। – newguy
@ न्यूज्यू - ओह, आप सही हैं। – APC