有时用户感觉系统卡死了,其实是表并另一用户锁定了,这一般可以通过程序开发人员解决,以下是通过手动检查是否存在这种问题。
1、检测
1)构造一个这种冲突
会话1执行,hr模式下:
update regions set region_name='cpu' where region_id=100;
此时在另一个会话2执行,hr模式下:
update regions set region_name='cpu1' where region_id=100;
这个会话进程会被处于挂起状态,好像是死机了,其实是处于等待状态,等待该条记录解锁。
2)查看是否存在锁定争用
此时在另一个会话3执行,sys模式下:
- col BlockedSession for a30
- col BlockingSession for a30
- select waiter.username "BlockedSession",waiter.sid,
- blocker.username "BlockingSession",blocker.sid,blocker.serial#
- from v$session waiter join v$session blocker
- on waiter.blocking_session=blocker.sid
- order by blocker.sid,waiter.sid;
[color=rgb(3, 133, 237) !important]复制代码
2、强制解锁
强制终止一个未提交的事务,其所有操作会被回滚。
命令格式如下:
alter system kill session " sid , serial# ";
比如:
alter system kill session " 259 ,7983 "; |