前言
Oracle 数据库 对数据经常增、删、改 等操作时,忘记提交,或代码执行进行死循环 导致数据库锁表
一、
可以查询用户的锁表情况
select * from dba_ddl_locks where OWNER = ‘用户名’
1、查看数据库锁,诊断锁的来源及类型:
select object_id,session_id,locked_mode from v$locked_object;
此时查询数据并不是锁表,是正在处理中的信息
或者用以下命令:
select b.owner,b.object_name,l.session_id,l.locked_mode from v$locked_object l, dba_objects b where b.object_id=l.object_id
可以查询出用户名和锁住的表
2、找出数据库的serial#,以备杀死:
select t2.username,t2.sid,t2.serial#,t2.logon_time from v
l
o
c
k
e
d
o
b
j
e
c
t
t
1
,
v
locked_object t1,v
lockedobjectt1,vsession t2 where t1.session_id=t2.sid order by t2.logon_time;
3、杀死该session:
sid 为 69 ,serial# 为45366
alter system kill session ‘sid,serial#’
总结
并不是查询到数据,就代表锁表,可能是正在处理数据,最好是多查询几次,查看是否变化。
杀死后,表格数据回复为未提交前。