मैं यह पता लगाने के लिए एक तरीका ढूंढ रहा हूं कि वर्तमान सत्र में असामान्य INSERT, अद्यतन या हटाएं कथन हैं या नहीं। एक तरीका मौजूदा सिड के साथ वी $ लॉक की जांच करना होगा, लेकिन इसके लिए वी $ लॉक तक पढ़ने की आवश्यकता है, जो डीबीए इसे प्रदान नहीं करना चाहता है, जो एक समस्या है। कोई अन्य तरीका (आवेदन द्वारा जारी सभी डेटाबेस आदेशों का ट्रैक रखने के अलावा)?ओरेकल: लेनदेन लंबित होने पर कैसे पता लगाना है?
उत्तर
आप देख सकते हैं कि आपका सत्र V$TRANSACTION
में एक पंक्ति (जाहिर है, यह दृश्य पर पढ़ा विशेषाधिकार की आवश्यकता है) है:
SQL> SELECT COUNT(*)
2 FROM v$transaction t, v$session s, v$mystat m
3 WHERE t.ses_addr = s.saddr
4 AND s.sid = m.sid
5 AND ROWNUM = 1;
COUNT(*)
----------
0
SQL> insert into a values (1);
1 row inserted
SQL> SELECT COUNT(*)
2 FROM v$transaction t, v$session s, v$mystat m
3 WHERE t.ses_addr = s.saddr
4 AND s.sid = m.sid
5 AND ROWNUM = 1;
COUNT(*)
----------
1
SQL> commit;
Commit complete
SQL> SELECT COUNT(*)
2 FROM v$transaction t, v$session s, v$mystat m
3 WHERE t.ses_addr = s.saddr
4 AND s.sid = m.sid
5 AND ROWNUM = 1;
COUNT(*)
----------
0
ऐसे मामले हैं जहां यह विधि काम नहीं करती है, झूठी सकारात्मक प्रतिक्रियाएं: उदाहरण के लिए यदि आप डेटाबेस लिंक का उपयोग कर रिमोट डेटाबेस से डेटा का चयन करते हैं (रीमोटेटेबल @ डाटाबेसेलिंक से * चुनें * ऑरैकल यदि आपने कोई डेटा नहीं बदला है तो भी एक लेनदेन शुरू करें। यह विधि गारंटी नहीं देती है कि आपके पास असामान्य डेटा है। ... क्या आप इस तरह के लेनदेन को फ़िल्टर करने के लिए इस क्वेरी को बेहतर बनाने के किसी भी तरीके से जानते हैं? यह वास्तव में मुझे पहेली करता है। –
@ करलोसिना हां ऐसे मामले हैं जहां ओरेकल लेनदेन शुरू करेगा भले ही आप डेटा में बदलाव न करें। रिमोट डेटाबेस से कनेक्ट करना एक उदाहरण है (उदाहरण के लिए देखें [Asktom पर यह धागा] (https://asktom.oracle.com/pls/asktom/f?p=100:11TP:::P11_QUESTION_ID:8908307196113))। एक सरल 'चयन करें ...अद्यतन के लिए डेटा को संशोधित किए बिना लेनदेन शुरू भी करेगा। मेरे उत्तर में वर्णित विधि बताती है कि क्या आपके पास एक लेनदेन लंबित है, भले ही आपके पास असामान्य डेटा न हो। दोनों बराबर नहीं हैं (डेटा संशोधित करना पर्याप्त है, लेकिन लेनदेन शुरू करने के लिए आवश्यक नहीं है)। –
चयन * वी $ ट्रान्सएक्शन से स्थिति = 'सक्रिय';
देखें: http://forums.oracle.com/forums/thread.jspa?threadID=691061
:-) अलग-अलग विवरण ... "असामान्य कार्य" बनाम "लंबित लेनदेन" – cagcowboy
यह क्वेरी है जिसका मैं सामान्य रूप से उपयोग करता हूं,
select s.sid
,s.serial#
,s.username
,s.machine
,s.status
,s.lockwait
,t.used_ublk
,t.used_urec
,t.start_time
from v$transaction t
inner join v$session s on t.addr = s.taddr;
बहुत अच्छी तरह से काम करता है, मुझे भी निष्क्रिय प्रणाली हत्या सत्र 'धारावाहिक #' के साथ निष्क्रिय लेनदेन को मारने की आवश्यकता है; – Diizzy
लंबित लेनदेन को जानने के लिए नीचे दी गई क्वेरी का उपयोग करें।
यदि यह एक मूल्य देता है, तो इसका मतलब है कि लंबित लेनदेन है।
क्वेरी है:
select dbms_transaction.step_id from dual
;
संदर्भ:
http://www.acehints.com/2011/07/how-to-check-pending-transaction-in.html http://www.acehints.com/p/site-map.html
एक सेट ट्रांज़ेक्शन करें और फिर अपनी क्वेरी चलाएं। –
मैथ्यू वाटसन आरएसी
select t.inst_id
,s.sid
,s.serial#
,s.username
,s.machine
,s.status
,s.lockwait
,t.used_ublk
,t.used_urec
,t.start_time
from gv$transaction t
inner join gv$session s on t.addr = s.taddr;
सबसे आसान और विश्वसनीय समाधान कोशिश करते हैं और एक सौदे शुरू करने और यह देखने के लिए है में इस्तेमाल किया जा करने के लिए संशोधित किया जा सकता है अगर सफल होता है। अगर कुछ कोड पहले ही एक लेनदेन शुरू कर चुके हैं लेकिन अभी तक कोई डीएमएल जारी नहीं किया है, तो वी $ ट्रान्सएक्शन व्यू कुछ भी नहीं दिखाएगा।
नीचे दिए गए उदाहरण में, मैं उपयोगकर्ता द्वारा परिभाषित अनुप्रयोग त्रुटि को बढ़ाने के लिए अपवाद को संभालता हूं। मौजूदा अपवाद हैंडलर को स्थगित करने के लिए, बस एक सेट ट्रांज़ेक्शन करें और फिर इसे पूर्ववत करने के लिए तत्काल COMMIT करें।
DECLARE
transaction_in_progress EXCEPTION;
PRAGMA EXCEPTION_INIT(transaction_in_progress, -1453);
BEGIN
SET TRANSACTION NAME 'CHECK_FOR_TRANSACTION_ALREADY_SET';
COMMIT; -- end transaction
EXCEPTION
WHEN transaction_in_progress THEN
RAISE_APPLICATION_ERROR(-20000,'Transaction is already in progress');
END;
/
- 1. लिनक्स में प्रक्रिया समाप्त होने पर कैसे पता लगाना है?
- 2. कोई फ़ाइल लिंक होने पर कैसे पता लगाना है?
- 3. डब्ल्यूसीएफ: सत्र समाप्त होने पर कैसे पता लगाना है?
- 4. UICollectionView: स्क्रॉलिंग बंद होने पर कैसे पता लगाना है
- 5. पता लगाना कि ओरेकल डेटाबेस स्थापित किया गया है
- 6. आईफ्रेम सामग्री लोड होने पर पता लगाना (क्रॉस ब्राउज़र)
- 7. क्या SQLLonnection.Dispose() सभी लंबित लेनदेन पर रोलबैक करता है?
- 8. PostgreSQL लेनदेन में लंबित परिचालनों की जांच कैसे करें
- 9. पता लगाना है जब एक GWT मॉड्यूल लोड होने के
- 10. एसक्यूएलकेमी के साथ अभी तक आलसी संबंध लोड नहीं होने पर कैसे पता लगाना है?
- 11. गिट रिबेस पर संघर्ष का पता लगाना
- 12. पता लगाना कि टीसीपी पर एक संदेश
- 13. पता लगाना कि
- 14. StrictMode का उपयोग कर एंड्रॉइड पर भूल गए SQLite लेनदेन का पता लगाना?
- 15. आईफोन माइक्रोफोन पर उड़ने का पता लगाना?
- 16. पता लगाना कि
- 17. क्या ओरेकल एक त्रुटि पर लेनदेन वापस रोल करता है?
- 18. पता लगाना है कि क्या एक ख
- 19. विफल होने पर ऑफ़स्ट्रीम खोलने में विफलता के कारण का पता लगाना() सत्य है
- 20. समवर्ती संशोधन का पता लगाना?
- 21. यूएस हॉलिडे का पता लगाना
- 22. पता लगाना कि इंटरनेट कनेक्शन व्यस्त है
- 23. नई सुविधाओं का पता लगाना
- 24. मौलिक आवृत्ति का पता लगाना
- 25. यह पता लगाना कि स्टैक पूर्ण है
- 26. mousemove बंद होने पर कैसे पता लगाया जाए
- 27. पूर्णांक ओवरफ़्लो का पता लगाना
- 28. असुरक्षित परिवर्तनों का पता लगाना
- 29. कुंजी संयोजनों का पता लगाना
- 30. यह पता लगाना कि IPython
मुझे लगता है कि किसी भी वी $ विचारों तक पहुंच नहीं है। – Gren
संभावित डुप्लिकेट [मैं कैसे बता सकता हूं कि मेरे पास ओरेकल लेनदेन में असामान्य काम है या नहीं?] (Http://stackoverflow.com/questions/506456/how-can-i-tell-if-i-have-uncommitted-work -इन-ए-ऑरैक-लेनदेन) –