2012-11-06 24 views

उत्तर

16

for update nowait का उपयोग करके पंक्तियां व्यस्त रहेंगी और एक प्रतिबद्ध या रोलबैक निष्पादित होने तक लॉक प्राप्त होगा। लॉक प्राप्त करने का प्रयास करने वाला कोई भी अन्य सत्र ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired instead of waiting the lock to release जैसे ओरेकल त्रुटि संदेश प्राप्त करेगा।

Session1:

CURSOR abc_cur 
IS 
select * from dept where deptno =10 for update nowait; 

यहाँ पंक्तियों बंद हैं जब तक कर्सर बंद कर दिया है या एक प्रतिबद्ध/रोलबैक मार डाला जाता है।

सत्र 2: के रूप में नीचे दिखाया गया हैं, इस बीच, सत्र 2 से किसी अन्य उपयोगकर्ता एक ही रिकॉर्ड का उपयोग करने की कोशिश करता है तो यह एक त्रुटि फेंक होगा

select * from dept where deptno =10 for update nowait; 

इस उपयोगकर्ता को अपडेट भी नहीं कर सकते हैं या एक ही रिकॉर्ड हटाएं जो पहले सत्र द्वारा बंद कर दिया गया है।

ERROR at line 1: 
`ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired` 

उपयोग: अब अगर आप रिकॉर्ड के कुछ सेट पर कुछ हेरफेर करना चाहते हैं और आप तो अपने डेटा को ओवरराइड करने के लिए आपको सबसे पहले रिकॉर्ड लॉक कर देना चाहिए एक और सत्र से किसी अन्य उपयोगकर्ता नहीं करना चाहते (for update nowait का उपयोग कर) और फिर अपने हेरफेर करते हैं। आपके मैनिपुलेशन के साथ करने के बाद, कर्सर को बंद करें और प्रतिबद्ध करें।

संपादित मेरी सत्र 1 में मान लीजिए मैं निष्पादित निम्न स्क्रिप्ट:

declare 
cursor abc is select * from temp ; 
temp abc%rowtype; 
begin 
open abc; 
end; 

अब सत्र 2 में मैं निष्पादित

select * from temp ; 

0 rows found 

अगर मैं एक ही स्क्रिप्ट फिर से अमल

declare 
cursor abc is select * from temp ; 
temp abc%rowtype; 
begin 
open abc; 
end; 

तब मुझेमिलते हैं

+0

तो अगर मैं कोई इंतजार नहीं करता हूं तो मैं अन्य सत्र से एक ही पंक्ति को भी प्राप्त नहीं कर सकता हूं, क्या मैं सही हूँ? – user1

+0

अगर मैं एक और सत्र से एक ही पंक्ति को अपडेट नहीं करना चाहता हूं, तो मुझे कैसे संभालना चाहिए? – user1

+0

@ उपयोगकर्ता 1: हाँ आप दूसरे सत्र से एक ही पंक्ति का चयन कर सकते हैं, लेकिन यदि आप किसी अन्य सत्र द्वारा लॉक किया गया है, तो आप उसी पंक्ति को लॉक नहीं कर सकते हैं। हाँ, आप अन्य सत्रों से पंक्तियां प्राप्त कर सकते हैं। –