今天使用oracle数据库pl/sql遇到锁表情况,以前也遇到过都是用完忘了,今天记录下。
1、先登录数据库,使用以下查询语句查询出哪个对象被锁
select t2.username,
t2.sid,
t2.serial#,
t3.object_name,
t2.OSUSER,
t2.MACHINE,
t2.PROGRAM,
t2.LOGON_TIME,
t2.COMMAND,
t2.LOCKWAIT,
t2.SADDR,
t2.PADDR,
t2.TADDR,
t2.SQL_ADDRESS,
t1.LOCKED_MODE
from v$locked_object t1, v$session t2, dba_objects t3
where t1.session_id = t2.sid
and t1.object_id = t3.object_id
order by t2.logon_time;
2、使用alter语句修改被锁
alter system kill session 'sid,seial#'; –sid,seial#为上一个语句查出的
3、还有实用查询正在使用中的sql可以快速定位到哪个操作导致锁表。
SELECT /*+ ORDERED */
sql_text
FROM v$sqltext a
WHERE (a.hash_value, a.address) IN
(SELECT DECODE(sql_hash_value, 0, prev_hash_value, sql_hash_value),
DECODE(sql_hash_valuoracle账号e, 0, prev_sql_addr, sql_address)
FROM v$session b
WHERE b.sid = '1162') /* 此处1162 为SID*/
ORDER BY piece ASC;