仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1191|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL网站制作之找出息争决体系中的锁

[复制链接]
若天明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:24:51 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
EXAMPLE存储引擎是一个不做任何事情的存根引擎。它的目的是作为MySQL源代码中的一个例子,用来演示如何开始编写一个新存储引擎。同样,它的主要兴趣是对开发者。EXAMPLE存储引擎不支持编索引。办理
V$LOCK视图中包括了关于锁的信息

V$LOCKED_OBJECT包括了关于锁的工具的信息



举个例子:起首在一个session利用了demo用户上岸,然后实行

updatelunarsetc1=firstlockwherec2=999;

体系显现:

SQL>updatelunarsetc1=firstlockwherec2=999;



已更新1行。



已用工夫:00:00:00.00

SQL>

这个session没有提交,然后在另外一个session中,利用demo上岸,然后仍旧实行:

updatelunarsetc1=firstlockwherec2=999;

这时候,这个session就会处于idel的形态,也就是他在守候表lunar中c2=999这些行的独有锁;然后再开一个新的session,利用利用demo上岸,然后仍旧实行:

updatelunarsetc1=firstlockwherec2=999;

这时候,这个session也会处于idel的形态,他也在守候表lunar中c2=999这些行的独有锁,如图:









利用sysdba身份上岸,实行上面的剧本:



SQL>SELECTDECODE(request,0,Holder:,Waiter:)||sidsess,id1,id2,lmode,

2request,type

3FROMV$LOCK

4WHERE(id1,id2,type)IN(SELECTid1,id2,typeFROMV$LOCKWHERErequest>0)

5ORDERBYid1,request

6/



SESSID1ID2LMODEREQUESTTYPE

-------------------------------------------------------------

Holder:1239324747360TX

Waiter:839324747306TX

Waiter:1639324747306TX



SQL>



HOLDER暗示持有锁的历程,waiter暗示守候锁的历程,以是我们必要找出来holder的历程,然后依据holder的sid找到session的信息,断定是用户会话(而不是体系会话):

SQL>selectsid,serial#,sql_hash_value,username,type,program,schemanamefromv$session

2wheresid=12

3/



SIDSERIAL#SQL_HASH_VALUEUSERNAMETYPEPROGRAMSCHEMANAME

---------------------------------------------------------------------------

12110DEMOUSERsqlplus.exeDEMO



SQL>

注重,假如sql_hash_value的值不为0,则暗示该sql还在运转,能够进一步利用后面7.5节说起的《依据hashvalue找到sql语句》找到这个sql语句。



我们能够确认这个锁是被一个形式名(能够近似了解为用户名)为demo的oracle用户,固然也能够断定该历程的范例为用户历程(而不是体系历程)。接上去,我们就能够杀失落这个sid了。



假如想看看该用户锁定的工具,可使用v$locked_object

SQL>selectOBJECT_ID,SESSION_ID,ORACLE_USERNAME,PROCESS,LOCKED_MODE

2fromv$locked_object;



OBJECT_IDSESSION_IDORACLE_USERNAMEPROCESSLOCKED_MODE

-------------------------------------------------------------------------

73828DEMO2516:18123

738212DEMO2440:24243

738216DEMO2524:23843



SQL>





然后利用altersystemkillsession来杀失落这个历程就能够了,比方:

SQL>altersystemkillsession12,11;



Systemaltered



SQL>








每个Rows_log_event中包含event_type,可选值为WRITE_ROWS_EVENT、UPDATE_ROWS_EVENT、DELETE_ROWS_EVENT。从宏名字就能看出用途。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-21 12:06

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表