Look at the dba_blockers
, dba_waiters
and dba_locks
for locking. The names should be self explanatory.
You could create a job that runs, say, once a minute and logged the values in the dba_blockers
and the current active sql_id
for that session. (via v$session
and v$sqlstats
).
You may also want to look in v$sql_monitor
. This will be default log all SQL that takes longer than 5 seconds. It is also visible on the "SQL Monitoring" page in Enterprise Manager.