2009-09-02 14 views
13

निश्चित रूप से यह एक सत्र की समाप्ति के समान होना चाहिए और रोलबैक का कारण बनना चाहिए? ऐसा लगता है कि मुझे सबसे अधिक ओरेकल चीज संभव है। मुझे वास्तव में चौंका दिया गया जब मुझे पता चला कि यहएसक्यूएल * प्लस बाहर निकलने पर क्यों प्रतिबद्ध है?

अधिक महत्वपूर्ण बात है - क्या कोई ऑब्जेक्ट करेगा अगर ओरेकल ने इसे बाहर निकलने पर रोलबैक में बदल दिया हो?

+1

परिवर्तन के बारे में - वहाँ स्क्रिप्ट है कि अगर डिफ़ॉल्ट व्यवहार बदल रहे थे टूट जाएगा के हजारों होने के लिए बाध्य कर रहे हैं। अगर यह कॉन्फ़िगर करने योग्य विकल्प (किसी भी तरह) था, तो शायद डिफ़ॉल्ट को बदलना ठीक होगा, लेकिन अन्यथा नहीं। यह सॉफ़्टवेयर के साथ जीवन है जिसे लगभग 1 मिनट से अधिक समय तक फ़ील्ड किया गया है - आप आसानी से निर्णय नहीं बदल सकते हैं। –

+0

मुझे लगता है कि यह आसानी से बदला जा सकता है। मुझे एसक्यूएल * प्लस के साथ समस्याएं आ रही हैं जो ऑटोोकॉमिटिंग नहीं करती हैं और वास्तव में लोगों को भ्रमित करती हैं, या शायद यह थी कि ऐप अभी भी खुला था क्योंकि यह अभी तक प्रतिबद्ध नहीं था। – wowest

+2

यह नया 11gR2 एसक्यूएल पर एक विकल्प * प्लस –

उत्तर

16

काफी मजेदार है, 11gR2 रिलीज के साथ इस सप्ताह (2009-09-03), एसक्यूएल * प्लस अब एक प्रतिबद्ध करने के लिए या निकास पर ROLLBACK का विकल्प है। डॉक्टर here

मैं अगले कुछ हफ्तों/महीनों में लगता था, वहाँ एक 11gR2 त्वरित ग्राहक जो आप अपने वर्तमान डेटाबेस के खिलाफ इस्तेमाल करते हैं और

एक सावधानी अपने वांछित व्यवहार प्राप्त कर सकते हैं के बारे में पता होना करने के लिए हो जाएगा। आप DISCONNECT or CONNECT भिन्न सत्रों से, यह अभी भी परोक्ष लेनदेन (doc के अनुसार) के लिए प्रतिबद्ध होगा लेकिन 11R2 से आप डिफ़ॉल्ट व्यवहार निर्धारित कर सकते हैं।

+0

में है यदि आप कृपया यह लिंक देखना चाहते हैं :) –

+2

प्रदान किया गया लिंक काम नहीं कर रहा है – Arun

3

आपको ओरेकल से पूछना होगा!

मुझे यह स्वीकार करना होगा कि जब मैंने पहली बार यह खोजा तो मुझे आश्चर्य हुआ, क्योंकि आपको लगता है कि यह अधिक रूढ़िवादी दृष्टिकोण लेगा जो रोलबैक करना होगा।

मैं केवल अनुमान लगा सकता हूं कि COMMIT को सबसे अधिक संभावित/डिफ़ॉल्ट कार्रवाई माना जाता है और शायद यही कारण है कि एसक्यूएल * प्लस ऐसा करता है?

+3

रूप में उपलब्ध है लेकिन निश्चित रूप से ROLLBACK सबसे सुरक्षित बात है। * * Oracle में बाकी सब कुछ डेटा –

+0

मैं मानता हूँ की रक्षा के लिए स्थापित किया जा रहा है, यह लगता है कि एसक्यूएल * प्लस व्यवहार भी अजीब है! – cagcowboy

6

यह ओरेकल द्वारा डिजाइन का निर्णय था, शायद 20 साल पहले बनाया गया था। यह वह डिज़ाइन नहीं है जिसका मैंने उपयोग किया होगा। ध्यान दें कि यह अंतर्निहित ओसीआई के एसक्यूएल * प्लस की संपत्ति प्रतीत नहीं होता है।

यदि सत्र अचानक समाप्त हो जाता है, AFAIK, सत्र की उम्मीद है, जैसा कि आप उम्मीद करेंगे। इसलिए, उदाहरण के लिए, यदि कोई एसआईजीकेआईएल को एसक्यूएल प्लस भेजता है, तो सत्र का लेनदेन वापस लुढ़का जाना चाहिए। लेकिन यदि SQL प्लस सत्र गर्व से समाप्त होता है (ईओएफ या निकास कमांड), तो उसके अनंत ज्ञान में एसक्यूएल * प्लस जो भी आपने अभी तक किया है उसे करने का फैसला करता है।

क्यों - मेरे पास एक सिद्धांत है। एसक्यूएल मानक डेटाबेस में, आप हमेशा एक लेनदेन में होते हैं, भले ही आपके द्वारा किए गए एकमात्र ऑपरेशन एक चयन कथन है। यदि आप प्रतिबद्ध नहीं हैं, तो आपके द्वारा किए गए किसी भी बदलाव को वापस ले जाया जाता है। स्क्रिप्टेड ऑपरेशंस के अंत में प्रतिबद्धता को जोड़ना भूलना आसान है, इसलिए इसे डिफ़ॉल्ट व्यवहार करने से डेटाबेस को बदलने के लिए किसी स्क्रिप्ट पर कितनी बार दौड़ने की संख्या कम हो जाती है और फिर यह देखने के लिए दूसरी स्क्रिप्ट चलाती है कि परिवर्तन सही तरीके से प्रभावी हुए हैं या नहीं। अन्य डीबीएमएस 'ऑटो-प्रतिबद्ध' जैसे मोड के साथ इसकी आवश्यकता को रोकते हैं, जहां प्रत्येक कथन एक स्टैंडअलोन लेनदेन है, जो स्वचालित रूप से पूरा होने पर प्रतिबद्ध होता है। यह ऑपरेशन का एक उपयोगी तरीका है। अन्य सिस्टम एक मोड प्रदान करते हैं जहां आप स्वत: प्रतिबद्धता में होते हैं जब तक कि आप एक स्पष्ट BEGIN कार्य कथन चलाते हैं, जहां (निश्चित रूप से), आप संबंधित COMMIT या रोलबैक तक लेनदेन में हैं। मुझे 'मोड एएनएसआई' डेटाबेस द्वारा पकड़ा गया है जो यह सुनिश्चित करने के लिए पर्याप्त रूप से नहीं कर रहा है कि जब मैं मायने रखता हूं, तो मैं प्रतिबद्ध हूं, लेकिन मैं जो सॉफ़्टवेयर उपयोग करता हूं (ओरेकल नहीं) अभी भी चुपचाप काम करने के बजाए अनचाहे काम को वापस ले जाता है - और मैं चाहता हूं नाखुश हो अगर यह अन्यथा काम करने के लिए बदल दिया गया था। (मुझे लगता है कि एक कॉन्फ़िगर करने योग्य डिफ़ॉल्ट ठीक हो सकता है; मुझे अभी भी लगता है कि रोलबैक असम्बद्ध बेहतर डिफ़ॉल्ट है, क्योंकि यह अनजान के लिए एक उपद्रव है; डेटाबेस को गलती से भ्रष्ट करने का कम खतरा है, और यह मेरे लिए सबसे महत्वपूर्ण है।)

(कारण नोटिस: यह कोई है जो एक और डीबीएमएस विक्रेता के लिए काम करता है से दूसरे हाथ जानकारी है हालांकि, यह है, सही जहाँ तक मुझे पता है, और एक दशक से अधिक की अवधि में संचित जानकारी के आधार पर। । और विभिन्न मंचों में संबंधित सवाल पूछने के बाद)

+0

टिप्पणी के लिए धन्यवाद जोनाथन - मैं यह देखने का इंतजार कर रहा हूं कि क्या कोई सोचता है कि वास्तव में एक अच्छा विचार है! –

0

मुझे लगता है कि प्रतिबद्ध एक अच्छा विचार है और मैं क्या जस्टिन और बिली इस सूत्र में लिखा है के साथ सहमत: http://forums.oracle.com/forums/thread.jspa?messageID=3611345&#3611345

सम्मान, रॉब।

+0

मैं थ्रेड में जस्टिन और बिली से असहमत नहीं हूं - हालांकि यह प्रतिबद्धता को एक अच्छा विचार नहीं बनाता है। बाहर निकलने पर प्रतिबद्धता यह सुझाव देती है कि यह अपेक्षित व्यवहार है कि एसक्यूएल * प्लस से बाहर निकलने से पहले अपने काम को स्पष्ट रूप से प्रतिबद्ध न करें, जैसे कि यह एक अच्छी बात थी। –

+2

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

0

अच्छा सवाल।

मुझे 1 99 8 में सामान्य निकास पर आने के डिफ़ॉल्ट व्यवहार के खिलाफ मेटलिंक और एक बग (या परिवर्तन अनुरोध) पर एक नज़र डाली गई थी। अगर आपके पास मेटलंक तक पहुंच है तो 633247 बग की तलाश है।

+1

किसी भी दिन तय किया जाना चाहिए .... – cagcowboy

+0

वास्तव में पिछले हफ्ते :) यह नई 11gr2 रिलीज –

1
कैसे एक Oracle चालक का उपयोग कर एक JDBC कनेक्शन परोक्ष संबंध को बंद करने पर TXN करता है के अनुरूप

+0

मुझे लगता है कि मुझे नहीं लगता जहां यह दस्तावेज है। ऐसा नहीं है कि मैं आपको संदेह करता हूं लेकिन क्या आप अपना स्रोत उद्धृत करने में सक्षम हैं? – corsiKa

+0

ojdbc14.jar जब OracleManagedConnection क्लीनअप को यह देखने के लिए चेक किया जाता है कि वैध लेनदेन वर्तमान में प्रगति पर है या नहीं। स्थिति में एक लेनदेन प्रगति पर है IlegalStateException फेंकता है। – Chad

0

निकास पर स्वीकार हो रहे हैं, जब आप डालें, अद्यतन या तो डेटा को हटाने आप इस अर्थात COMMIT करने के लिए इसका मतलब यह मेरे लिए तर्कसंगत बात लगती है आम तौर पर ROLLBACK, अपवाद नहीं है हम रोलबैक जब कुछ गलत हो जाता।

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