找出和解决系统中的锁
来源:互联网 发布:mac 工作日程安排软件 编辑:程序博客网 时间:2024/04/30 16:13
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
V$LOCK视图中包含了关于锁的信息
V$LOCKED_OBJECT包含了关于锁的对象的信息
举个例子:首先在一个session使用了demo用户登陆,然后执行
updatelunarsetc1='firstlock'wherec2=999;
系统显示:
SQL>updatelunarsetc1='firstlock'wherec2=999;
已更新1行。
已用时间: 00:00:00.00
SQL>
这个session没有提交,然后在另一个session中,使用demo登陆,然后仍然执行:
updatelunarsetc1='firstlock'wherec2=999;
这时,这个session就会处于idel的状态,也就是他在等待表lunar中c2=999这些行的独占锁;然后再开一个新的session,使用使用demo登陆,然后仍然执行:
updatelunarsetc1='firstlock'wherec2=999;
这时,这个session也会处于idel的状态,他也在等待表lunar中c2=999这些行的独占锁,如图:
使用sysdba身份登陆,执行下面的脚本:
SQL>SELECTDECODE(request,0,'Holder:','Waiter:')||sidsess,id1,id2,lmode,
2 request,type
3 FROMV$LOCK
4 WHERE(id1,id2,type)IN(SELECTid1,id2,typeFROMV$LOCKWHERErequest>0)
5 ORDERBYid1,request
6 /
SESS ID1 ID2 LMODE REQUESTTYPE
-------------------------------------------------------------
Holder:12 393247 473 6 0TX
Waiter:8 393247 473 0 6TX
Waiter:16 393247 473 0 6TX
SQL>
HOLDER表示持有锁的进程,waiter表示等待锁的进程,所以我们需要找出来holder的进程,然后根据holder的sid找到session的信息,确定是用户会话(而不是系统会话):
SQL>selectsid,serial#,sql_hash_value,username,type,program,schemanamefromv$session
2 wheresid=12
3 /
SID SERIAL#SQL_HASH_VALUEUSERNAME TYPE PROGRAM SCHEMANAME
---------------------------------------------------------------------------
12 11 0DEMO USER sqlplus.exe DEMO
SQL>
注意,如果sql_hash_value的值不为0,则表示该sql还在运行,可以进一步使用前面7.5节提及的《根据hashvalue找到sql语句》找到这个sql语句。1<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
V$LOCK视图中包含了关于锁的信息
V$LOCKED_OBJECT包含了关于锁的对象的信息
举个例子:首先在一个session使用了demo用户登陆,然后执行
updatelunarsetc1='firstlock'wherec2=999;
系统显示:
SQL>updatelunarsetc1='firstlock'wherec2=999;
已更新1行。
已用时间: 00:00:00.00
SQL>
这个session没有提交,然后在另一个session中,使用demo登陆,然后仍然执行:
updatelunarsetc1='firstlock'wherec2=999;
这时,这个session就会处于idel的状态,也就是他在等待表lunar中c2=999这些行的独占锁;然后再开一个新的session,使用使用demo登陆,然后仍然执行:
updatelunarsetc1='firstlock'wherec2=999;
这时,这个session也会处于idel的状态,他也在等待表lunar中c2=999这些行的独占锁,如图:
使用sysdba身份登陆,执行下面的脚本:
SQL>SELECTDECODE(request,0,'Holder:','Waiter:')||sidsess,id1,id2,lmode,
2 request,type
3 FROMV$LOCK
4 WHERE(id1,id2,type)IN(SELECTid1,id2,typeFROMV$LOCKWHERErequest>0)
5 ORDERBYid1,request
6 /
SESS ID1 ID2 LMODE REQUESTTYPE
-------------------------------------------------------------
Holder:12 393247 473 6 0TX
Waiter:8 393247 473 0 6TX
Waiter:16 393247 473 0 6TX
SQL>
HOLDER表示持有锁的进程,waiter表示等待锁的进程,所以我们需要找出来holder的进程,然后根据holder的sid找到session的信息,确定是用户会话(而不是系统会话):
SQL>selectsid,serial#,sql_hash_value,username,type,program,schemanamefromv$session
2 wheresid=12
3 /
SID SERIAL#SQL_HASH_VALUEUSERNAME TYPE PROGRAM SCHEMANAME
---------------------------------------------------------------------------
12 11 0DEMO USER sqlplus.exe DEMO
SQL>
注意,如果sql_hash_value的值不为0,则表示该sql还在运行,可以进一步使用前面7.5节提及的《根据hashvalue找到sql语句》找到这个sql语句。1<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- 找出和解决系统中的锁
- 找出和解决系统中的锁
- 找出和解决系统中的锁
- 轻松找出隐藏在系统中的进程
- 找出数组中的最大值和次大值
- 找出数组中的最大值和次大值
- 找出n个整数中的最大和第二大的
- 找出表中的重复记录和重复记录数
- 找出数组中的缺失数据和重复数据
- 找出数组中的最大数和最小数
- C指针实现找出一个数组中的最大值和次大值
- 找出一串数字中的最大和子串
- 快速找出一个数组中的最大数和第二大数
- 快速找出数组中的最大数和第二大数
- 找出数组中的最大值
- 找出字符串中的中文
- 找出序列中的中位数
- 找出数组中的峰值
- ASP.NET运行模型——页面跳转
- 在中删除无用的注册
- 键列信息不足,影响到多行解决方法。
- 2008-04-26
- 如何找出数据文件的HWM
- 找出和解决系统中的锁
- 远程访问mysql数据库
- 使用索引的误区之六:为索引列都建立索引
- 男人必知的9道最佳解酒食品
- 使用索引的误区之四:空值对索引的影响
- 请到我的百度空间来
- 使用索引的误区之三:基于函数的索引
- 喜欢对联的皇帝朱元璋
- 使用索引的误区之二:使用了和!=操作符,导致查询不使用索引