2010-07-08 10 views
13

में ट्रिगर अवैध है, मेरे डेटाबेस में कुछ ट्रिगर्स टेबल पर कुछ बदलावों के बाद अमान्य हो जाते हैं। लेकिन ऐसा लगता है कि वे अभी भी काम कर रहे हैं। मेरे पास एकमात्र समस्या यह है कि यदि मैं एसक्यूएल डेवलपर का उपयोग करता हूं तो ट्रिगर्स के बाईं ओर लाल क्रॉस होते हैं जो दर्शाते हैं कि वे अमान्य हैं। क्या यह एक बड़ा मुद्दा है?ओरेकल

मुझे पता है कि मैं इसे ठीक करने के लिए ट्रिगर को पुन: संकलित कर सकता हूं लेकिन मुझे यकीन नहीं है कि यह वास्तव में चिंता का विषय है या नहीं। यदि ऐसा है तो मुझे अपने पिछले सैकड़ों परिवर्तनों की समीक्षा करने और समस्या का कारण बनने का पता लगाने की आवश्यकता होगी। धन्यवाद।

उत्तर

16

जब भी हम किसी डेटाबेस ऑब्जेक्ट में कोई परिवर्तन करते हैं, तो उस पर निर्भर करता है कि कोई भी कोड अमान्य है। यह ट्रिगर, विचार और संग्रहीत प्रक्रियाओं को प्रभावित करता है। हालांकि, अगली बार जब कुछ कोड उस कोड को कॉल करता है तो डेटाबेस स्वचालित रूप से इसे फिर से संकलित कर देगा।

तो हमें इसके बारे में चिंता करने की ज़रूरत नहीं है, है ना? खैर, हाँ, एक बिंदु तक। बात यह है कि ट्रिगर्स (या जो कुछ भी) का अमान्यता हमारे लिए एक झंडा है कि एक बदलाव किया गया है जो उस ट्रिगर के संचालन को प्रभावित कर सकता है, जिसके दुष्प्रभाव हो सकते हैं। सबसे स्पष्ट दुष्प्रभाव यह है कि ट्रिगर संकलित नहीं होगा। अधिक संक्षेप में, ट्रिगर संकलन करता है लेकिन संचालन के दौरान विफल रहता है।

इसलिए, विकास के माहौल में ट्रिगर्स के पुनर्मूल्यांकन को मजबूर करना एक अच्छा विचार है, यह सुनिश्चित करने के लिए कि हमारे परिवर्तन ने मूल रूप से कुछ भी तोड़ा नहीं है। लेकिन जब हम उत्पादन में हमारे बदलाव को तैनात करते हैं, तो हम उस कदम को छोड़ सकते हैं, क्योंकि हम इतने भरोसेमंद हैं कि सब कुछ मांग पर फिर से संकलित होगा। हमारे तंत्रिका पर निर्भर करता है :)

ओरेकल स्कीमा में सभी अमान्य वस्तुओं को स्वचालित रूप से पुन: संकलित करने के लिए तंत्र प्रदान करता है।

  • सबसे सरल सी DBMS_UTILITY.COMPILE_SCHEMA() का उपयोग करना है। लेकिन यह 8i के बाद से dodgy रहा है (क्योंकि जावा संग्रहीत प्रक्रियाओं के लिए समर्थन परिपत्र निर्भरताओं के लिए संभावित पेश किया) और अब सभी वस्तुओं को सफलतापूर्वक पहली बार संकलित करने की गारंटी नहीं है।

  • 9i ओरेकल में हमें एक स्क्रिप्ट $ORACLE_HOME/rdbms/admin/utlrp.sql दिया गया जो चीजों को दोबारा बनाया गया। दुर्भाग्य से इसे SYSDBA पहुंच की आवश्यकता है।

  • 10 जी में उन्होंने UTL_RECOMP पैकेज जोड़ा, जो मूल रूप से वह सब कुछ करता है जो स्क्रिप्ट करता है। बड़ी संख्या में वस्तुओं को पुन: सम्मिलित करने के लिए यह अनुशंसित दृष्टिकोण है। दुर्भाग्य से इसे एसआईएसडीबीए एक्सेस की भी आवश्यकता है। Find out more

11 जी ओरेकल में बढ़िया निर्भरता प्रबंधन पेश किया गया। इसका मतलब है कि तालिकाओं में परिवर्तन का मूल्यांकन एक बेहतर ग्रैन्युलरिटी (मूल रूप से तालिका स्तर के बजाय कॉलम स्तर) पर किया जाता है, और केवल वही वस्तुएं जो परिवर्तनों से सीधे प्रभावित होती हैं प्रभावित होती हैं। Find out more

+0

धन्यवाद, यह स्पष्टीकरण बहुत अच्छा लग रहा है। मैंने उपरोक्त लिंक को 10 जी के दस्तावेज़ पर क्लिक किया और यह कहता है कि आपको इस स्क्रिप्ट को चलाने के लिए AS SYSDBA से कनेक्ट होना चाहिए। ऐसा लगता है कि मुझे किसी भी तरह से SYSDBA के रूप में लॉगिन करना है। – newguy

+0

@ न्यूज्यू - ओह, आप सही हैं। – APC

0

बिल्कुल कोई बड़ी समस्या नहीं है।

बस पुन: संकलित करने के लिए उन पर राइट क्लिक करें और आप जाने के लिए अच्छे हैं ... मैं इसे अपने अनुभव से लिख रहा हूं।

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

+0

यदि मैं ट्रिगर्स को फिर से संकलित नहीं करता तो क्या होगा? मैं डाटाबेस को एक दर्जन क्लाइंट के सर्वर पर तैनात करने जा रहा हूं, इसलिए हर बार फिर से संकलन करना दर्द होगा। – newguy

+0

लेकिन मुझे लगता है कि recompiling आवश्यक है। यह आपको आश्वस्त कर सकता है कि आपके डेटाबेस कोड में कोई त्रुटि नहीं है। समय लेने वाला लेकिन वास्तव में वास्तव में आवश्यक है। जब उन्हें लाल क्रॉस के साथ चिह्नित किया जाता है तो इसका मतलब है कि कोड ट्रिगर संदर्भों को कोड बदल दिया गया था। यह एक चेतावनी है ताकि आप यह सुनिश्चित करने के लिए कार्रवाई कर सकें कि आपके कोड में बदलाव से कोई त्रुटि नहीं है। –

+0

यदि यह सैकड़ों ट्रिगर, प्रक्रियाएं, कार्य और विचार अमान्य हैं तो यह एक बड़ा मुद्दा है। और यह मुझे दस मिनट के पुन: संकलन के परिणामों को हल करने के लिए एक सप्ताह लेता है। – PhatHV

0

यदि ट्रिगर्स काम कर रहे हैं, तो संभवतः ओरेकल एक ओआरए -04068 त्रुटि को फँस रहा है जब यह ट्रिगर को फायर करता है और इसे स्वचालित रूप से पुनः संकलित करने के बाद ट्रिगर को पुनः प्रयास कर रहा है।

+1

नहीं, यदि आप किसी भी ट्रिगर या संग्रहीत प्रो को निष्पादित करने का प्रयास करते हैं जिसे चिह्नित किया गया है "INVALID" ओरेकल पहले इसे निष्पादित करने से पहले इसे पुन: संकलित करने का प्रयास करेगा। ORA-04068 को पैकेज स्थिति के साथ करना है और ट्रिगर की स्थिति से कोई लेना देना नहीं है। –