若天明 发表于 2015-1-16 22:24:51

MSSQL网站制作之找出息争决体系中的锁

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。从宏名字就能看出用途。

不帅 发表于 2015-1-19 11:04:02

sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西

灵魂腐蚀 发表于 2015-1-27 21:21:30

可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。

山那边是海 发表于 2015-2-5 12:12:10

只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。

谁可相欹 发表于 2015-2-11 19:50:43

可以动态传入参数,省却了动态SQL的拼写。

仓酷云 发表于 2015-3-2 18:09:41

原来公司用过MYSQL自己也只是建个表写个SQL

爱飞 发表于 2015-3-11 05:22:55

另一个是把SQL语句写到服务器端,就是所谓的SP(存储过程);

蒙在股里 发表于 2015-3-17 21:09:28

记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。

冷月葬花魂 发表于 2015-3-25 03:00:37

总感觉自己还是不会SQL
页: [1]
查看完整版本: MSSQL网站制作之找出息争决体系中的锁