2009-11-19 6 views
8

छोड़ दिया गया है हम दिन में एक बार एक स्क्रिप्ट पर यह त्रुटि प्राप्त कर रहे हैं जो हर दो घंटे चलता है, लेकिन दिन के अलग-अलग समय पर चलता है।ओरेकल ओआरए -04068 में लगातार त्रुटि: पैकेजों की मौजूदा स्थिति को

ERROR at line 1: 
ORA-04068: existing state of packages has been discarded 
ORA-04061: existing state of package body "PACKAGE.NAME" has been 
invalidated 
ORA-06508: PL/SQL: could not find program unit being called: 
"PACKAGE.NAME" 
ORA-06512: at line 1 

क्या कोई यह सूचीबद्ध कर सकता है कि कौन सी स्थितियां इस त्रुटि का कारण बन सकती हैं ताकि हम जांच कर सकें?

धन्यवाद।

अद्यतन: 'ALTER SESSION CLOSE DATABASE LINK DBLINK' निष्पादित करेगा पैकेज की स्थिति को अमान्य कर दें?

+0

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

उत्तर

12

यह एक लाइनर वास्तव में हल सब कुछ:

PRAGMA SERIALLY_REUSABLE; 

सुनिश्चित करें कि आपके वैश्विक चर किसी भी मुद्दे से बचने के लिए स्थितिरहित रहें।

+6

अधिक सटीक होने के लिए, यह प्राग पैकेज डेटाबेस को प्रत्येक अनुरोध पर डेटाबेस पर रीसेट करने का कारण बनता है (पैकेज प्रारंभिकरण फिर से निष्पादित किया जाता है)। –

12

पैकेज में सार्वजनिक या निजी चर हैं। (दाएं?) यह चर राज्य को एक पैकेज बनाते हैं। यदि आप पैकेज को तीसरे सत्र में संकलित करते हैं। इस पैकेज की अगली पहुंच ORA-04068 फेंक देगी।

पैकेज का निर्माण टाइमस्टैम्प पैकेज सत्र स्थिति से पुराना होना चाहिए।

यदि स्क्रिप्ट चलने के लिए पैकेज स्थिति की आवश्यकता नहीं है, तो अपनी स्क्रिप्ट की शुरुआत में DBMS_SESSION.RESET_PACKAGE पर कॉल करें। यह आपके सत्र के सभी पैकेज राज्यों को साफ़ करता है।

+0

निर्दिष्ट कॉल का प्रयास करेगा। धन्यवाद। – jonasespelita

+0

हालांकि एक सवाल, तीसरे सत्र में पैकेज को संकलित करने से यह कैसे अमान्य हो जाता है? – jonasespelita

+2

मार्टिलीओ: पैकेज के नए संस्करण में अधिक/कम/अन्य पैकेज चर हो सकते हैं। असल में, यदि आप ऐसे पैकेज को संकलित करते हैं जिसमें पैकेज पैकेज नहीं हैं, तो उन ORA-04068 त्रुटियां नहीं होती हैं। डेयरडेविल्स व्यस्त काम के घंटों के दौरान उत्पादन प्रणालियों पर ऐसा करते हैं .. –

0

ऐसा लगता है कि आप अपनी वस्तुओं में परिवर्तन कर रहे हैं जो अन्य वस्तुओं को अमान्य बनाते हैं। उदाहरण के लिए एक इंडेक्स को छोड़ना उस तालिका पर निर्भर सभी संकुलों को अमान्य स्थिति में डाल सकता है। इसमें एक कैस्केड प्रभाव हो सकता है। यदि पैकेज अमान्य है, तो funciton जो पैकेज पर निर्भर करता है और फ़ंक्शन का उपयोग करने वाले दृश्य को अमान्य हो सकता है। प्रत्येक डीडीएल क्वेरी के बाद सभी ऑब्जेक्ट्स को पुन: संकलित करने का प्रयास करें।

4

आप dba_dependencies या user_dependencies भी देख सकते हैं।

select * 
from dba_dependencies 
where name = 'YOUR_PACKAGE' 
and type = 'PACKAGE' --- or 'PACKAGE_BODY' 
and owner = USER --- or USERNAME 

यह आपको ऑब्जेक्ट्स देगा जो आपका पैकेज निर्भर है। जांचें कि वहां क्या हो रहा है।

+0

जानकारी के लिए धन्यवाद। आप हर रोज कुछ न कुछ सीखते हैं :)। – jonasespelita

1

हमारे पास कुछ समय के लिए यह समस्याएं थीं और समय के लिए, हम इस मुद्दे को अस्थायी रूप से हल करने के लिए स्कीमा संकलित कर रहे थे। कुछ दिनों में हम स्थायी संकल्प की तलाश में थे।

हमें नीचे दी गई क्वेरी मिली जो हमारे समानार्थी में टाइमस्टैम्प अंतर दिखाती है। हम समानार्थी recompiled और यह काम किया !!! यह लगभग एक सप्ताह रहा है और अब तक हमें कोई समस्या नहीं है। यहां वह प्रश्न है जो हमारे मामले में मदद करता है।

**

select do.obj# d_obj,do.name d_name, do.type# d_type, po.obj# p_obj,po.name p_name, 
to_char(p_timestamp,'DD-MON-YYYY HH24:MI:SS') "P_Timestamp", 
to_char(po.stime ,'DD-MON-YYYY HH24:MI:SS') "STIME", 
decode(sign(po.stime-p_timestamp),0,'SAME','*DIFFER*') X 
from sys.obj$ do, sys.dependency$ d, sys.obj$ po 
where P_OBJ#=po.obj#(+) and D_OBJ#=do.obj# 
and do.status=1 /*dependent is valid*/ 
and po.status=1 /*parent is valid*/ 
and po.stime!=p_timestamp /*parent timestamp not match*/ 
order by 2,1; 

**

मुझे आशा है कि यह कोई है जो समस्या आ रही हो सकता है मदद करता है।

संबंधित मुद्दे