I created following two views for developer's use and so far there have been no complaints ..
CREATE OR REPLACE FORCE VIEW SYSTEM.DB$LOCKED_OBJECTS (OBJECT_NAME, SESSION_ID, ORACLE_USERNAME, OS_USER_NAME, SQL_ACTIONS, LOCK_MODE) AS SELECT DO.object_name, lo.SESSION_ID, lo.oracle_username, lo.OS_USER_NAME, DECODE(locked_mode, 1, 'SELECT', 2, 'SELECT FOR UPDATE / LOCK ROW SHARE', 3, 'INSERT/UPDATE/DELETE/LOCK ROW EXCLUSIVE', 4, 'CREATE INDEX/LOCK SHARE', 5, 'LOCK SHARE ROW EXCLUSIVE', 6, 'ALTER TABLE/DROP TABLE/DROP INDEX/TRUNCATE TABLE/LOCK EXCLUSIVE') sql_actions, DECODE(locked_mode, 1, 'NULL', 2, 'SS - SUB SHARE', 3, 'SX - SUB EXCLUSIVE', 4, 'S - SHARE', 5, 'SSX - SHARE/SUB EXCLUSIVE', 6, 'X - EXCLUSIVE') Lock_mode FROM sys.V_$LOCKED_OBJECT lo, DB$OBJECTS DO WHERE DO.object_id = lo.object_id; CREATE PUBLIC SYNONYM DB$LOCKED_OBJECTS FOR SYSTEM.DB$LOCKED_OBJECTS; GRANT SELECT ON SYSTEM.DB$LOCKED_OBJECTS TO PUBLIC; and CREATE OR REPLACE FORCE VIEW SYSTEM.DB$LOCKS (OBJ_OWNER, OBJ_NAME, OBJ_TYPE, OBJ_ROWID, DB_USER, SID, LOCK_TYPE, ROW_WAIT_FILE#, ROW_WAIT_BLOCK#, ROW_WAIT_ROW#) AS SELECT owner obj_owner, object_name obj_name, object_type obj_type, dbms_rowid.rowid_create(1, row_wait_obj#, ROW_WAIT_FILE#, ROW_WAIT_BLOCK#,ROW_WAIT_ROW#) obj_rowid, a.username db_user, a.sid sid, a.TYPE lock_type, a.row_wait_file#, a.row_wait_block#, a.row_wait_row# FROM DB$OBJECTS, (SELECT a.username, a.sid, a.row_wait_obj#, a.ROW_WAIT_FILE#, a.ROW_WAIT_BLOCK#, a.ROW_WAIT_ROW#, b.TYPE FROM sys.V_$SESSION a, sys.V_$LOCK b WHERE a.username IS NOT NULL AND a.row_wait_obj# <> -1 AND a.sid = b.sid AND b.TYPE IN ('TX','TM') ) a WHERE object_id = a.row_wait_obj#; CREATE PUBLIC SYNONYM DB$LOCKS FOR SYSTEM.DB$LOCKS; GRANT SELECT ON SYSTEM.DB$LOCKS TO PUBLIC; DB$OBJECTs is a snapshot of DBA_OBJECTS, it is too slow to select from DBA_OBJECTS, so I created a snapshot that is refreshed on a daily basis, it works fine for me. Hope this helps some. As others have mentioned, currently locked rows are very difficult to find, what you can find though is the rowid for which a lock is requested. Raj ______________________________________________________ Rajendra Jamadagni MIS, ESPN Inc. Rajendra dot Jamadagni at ESPN dot com Any opinion expressed here is personal and doesn't reflect that of ESPN Inc. QOTD: Any clod can have facts, but having an opinion is an art! -----Original Message----- Sent: Friday, August 30, 2002 9:48 AM To: Multiple recipients of list ORACLE-L Thanks Rachel. I spent the train ride reading the chapters on Instance Tuning and Dynamic Performance Views hoping to find something, but no such luck. I learned a lot of other useful things though, so it wasn't a waste of time. Jacques, v$locked_object shows the table, but I already knew which table was locked. I was hoping to find the offending SQL statement. Have a great weekend everyone. Regards, -- Alan Davey [EMAIL PROTECTED] 212-604-0200 x106 On 8/29/2002 10:43 PM, Rachel Carmichael <[EMAIL PROTECTED]> wrote: >I'm not sure it's possible to find the locking SQL and SID once the >session issues other SQL statements. > >I spent a lot of time a few years back attempting to find it, without >success. I got the people at both Platinum Technology and Savant >(yes, >I'm showing my age here) to try to find it as well, figuring their >technical people were better at this sort of thing than I am... no >luck. > >I don't think Oracle stores the statement and who issued it, just >the >rollback info necessary and the fact that there is a lock. > > >--- Alan Davey <[EMAIL PROTECTED]> wrote: >> Hi All, >> >> I've noticed some locks on various tables and I'm trying to figure >> out which DML statements are causing the locks. In this example, >the >> lock isn't being released because the developer forgot to include >a >> commit/rollback. >> >> If I look at v$session which is causing the lock and query v$sqlarea >> with the values in sql_address and prev_sql_addr, I only see select >> statements that were issued after the DML (in this case a delete). > I >> can query >> v$sqlarea with the locked table name and find the delete statement, >> but how do I link this back to the sid that issued it? Also, what >if >> there had been multiple DML statements by this user, how would >I know >> which was the first/last one executed? >> >> I'm RTFMing, but so far no luck. Any help would be greatly >> appreciated. >> >> Regards, >> -- >> >> Alan Davey >> [EMAIL PROTECTED] >> 212-604-0200 x106 >> >> >> >> -- >> Please see the official ORACLE-L FAQ: http://www.orafaq.com >> -- >> Author: Alan Davey >> INET: [EMAIL PROTECTED] >> >> Fat City Network Services -- (858) 538-5051 FAX: (858) 538-5051 >> San Diego, California -- Public Internet access / Mailing >> Lists >> -------------------------------------------------------------------- >> To REMOVE yourself from this mailing list, send an E-Mail message >> to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and >in >> the message BODY, include a line containing: UNSUB ORACLE-L >> (or the name of mailing list you want to be removed from). You >may >> also send the HELP command for other information (like subscribing). > > >__________________________________________________ >Do You Yahoo!? >Yahoo! Finance - Get real-time stock quotes >http://finance.yahoo.com >-- >Please see the official ORACLE-L FAQ: http://www.orafaq.com >-- >Author: Rachel Carmichael > INET: [EMAIL PROTECTED] > >Fat City Network Services -- (858) 538-5051 FAX: (858) 538-5051 >San Diego, California -- Public Internet access / Mailing >Lists >-------------------------------------------------------------------- >To REMOVE yourself from this mailing list, send an E-Mail message >to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and >in >the message BODY, include a line containing: UNSUB ORACLE-L >(or the name of mailing list you want to be removed from). You may >also send the HELP command for other information (like subscribing). > > -- Please see the official ORACLE-L FAQ: http://www.orafaq.com -- Author: Alan Davey INET: [EMAIL PROTECTED] Fat City Network Services -- (858) 538-5051 FAX: (858) 538-5051 San Diego, California -- Public Internet access / Mailing Lists -------------------------------------------------------------------- To REMOVE yourself from this mailing list, send an E-Mail message to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in the message BODY, include a line containing: UNSUB ORACLE-L (or the name of mailing list you want to be removed from). You may also send the HELP command for other information (like subscribing).
*********************************************************************2 This e-mail message is confidential, intended only for the named recipient(s) above and may contain information that is privileged, attorney work product or exempt from disclosure under applicable law. If you have received this message in error, or are not the named recipient(s), please immediately notify corporate MIS at (860) 766-2000 and delete this e-mail message from your computer, Thank you. *********************************************************************2