आप वास्तव में उन सभी पंक्तियों को सूचीबद्ध नहीं कर सकते हैं जिन्हें एक सत्र द्वारा बंद किया जा रहा है । हालाँकि, एक बार एक सत्र को दूसरे द्वारा अवरुद्ध किया जा रहा है , आप पा सकते हैं कि कौन सा सत्र / पंक्ति इसे रोक रही है।
ओरेकल व्यक्तिगत पंक्ति ताले की एक सूची को बनाए नहीं रखता है। बल्कि, पंक्तियों को सीधे पंक्तियों के अंदर पंजीकृत किया जाता है - इसे एक अतिरिक्त स्तंभ के रूप में सोचें।
आप देख सकते हैं कि किस सत्र ने V$LOCK
दृश्य के माध्यम से किसी ऑब्जेक्ट पर लॉक प्राप्त कर लिया है , लेकिन यह केवल सामान्य जानकारी को सूचीबद्ध करेगा, न कि पंक्ति स्तर पर।
इस दृष्टि से आप यह भी पा सकते हैं कि क्या कोई सत्र दूसरे द्वारा अवरुद्ध किया जा रहा है। उस स्थिति में, यदि किसी सत्र को दूसरे सत्र से अवरुद्ध किया जाता है, तो सूचना में पंक्ति जानकारी प्रदर्शित V$SESSION
होती है।
आप पंक्ति को पुनः प्राप्त कर सकते हैं, चलो 2 सत्रों के साथ एक उदाहरण बनाते हैं:
SESSION1> create table test as select * from all_objects;
Table created
SESSION1> select rowid from test where object_name = 'TEST' for update;
ROWID
------------------
AAMnFEAAaAAALTDAAz
/* setting identifiers to help with identifying this session later */
SESSION2> exec dbms_application_info.set_client_info('012345');
PL/SQL procedure successfully completed
SESSION2> select 1 from test where object_name = 'TEST' for update;
/* this will block */
सत्र 2 अब सत्र 1 पर इंतज़ार कर रहा है। हम इसके साथ अवरुद्ध पंक्ति की खोज कर सकते हैं :
SESSION1> SELECT o.object_name,
2 dbms_rowid.ROWID_CREATE (1,
3 s.ROW_WAIT_OBJ#,
4 s.ROW_WAIT_FILE#,
5 s.ROW_WAIT_BLOCK#,
6 s.ROW_WAIT_ROW#) rid
7 FROM dba_objects o, v$session s
8 WHERE o.object_id = s.row_wait_obj#
9 AND s.client_info = '012345';
OBJECT_NAME RID
--------------- ------------------
TEST AAMnFEAAaAAALTDAAz
आगे पढ़ने के लिए: टॉम Kyte द्वारा प्रक्रिया का विवरण ।