仓酷云

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

[学习教程] 使用体系表sys.dm_tran_locks查询数据库中锁信息

[复制链接]
老尸 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:07:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
因此我们的方案中要构造这种逆操作。Event_type增加一种FlashBACK_EVENT。这类操作形式与Query_Event相同,都是简单的SQL语句,只是包含了将数据恢复的操作。假如数据库中呈现数据被锁的成绩后,对应的数据就没法再操纵了,那末我们要怎样检察数据库中的锁信息,以找出对应的办理办法呢?

办法一:在microsoftsqlservermanagementstudio中翻开"办理"->"sqlserver日记"中检察日记信息
办法二:使用体系表syslockinfo检察锁信息。

检察SQL语句以下:
--检察数据库中锁信息
createtable#tableable(req_spidint,obj_namesysname)
declare@snvarchar(4000),
@ridint,@dbnamesysname,
@idint,@objnamesysname

declaretbcursorfor
selectdistinctreq_spid,dbname=db_name(rsc_dbid),rsc_objid
frommaster..syslockinfowherersc_typein(4,5)
opentb
fetchnextfromtbinto@rid,@dbname,@id
while@@fetch_status=0
begin
set@s=select@objname=namefrom[+@dbname+]..sysobjectswhereid=@id
execsp_executesql@s,N@objnamesysnameout,@idint,@objnameout,@id
insertinto#tablevalues(@rid,@objname)
fetchnextfromtbinto@rid,@dbname,@id
end
closetb
deallocatetb

select历程id=a.req_spid,
数据库=db_name(rsc_dbid),
资本范例=casersc_type
when1thenNULL资本(未利用)
when2then数据库
when3then文件
when4then索引
when5then表
when6then页
when7then键
when8then扩大盘区
when9thenRID(行ID)
when10then使用程序
end
,工具id=rsc_objid
,工具名=b.obj_name
,rsc_indid
frommaster..syslockinfoaleftjoin#tableablebona.req_spid=b.req_spid
go
droptable#tableable

人人能够修正下面的SQL语句,以查询出本人所需的信息。
上面是对体系表syslockinfo中列的注释:
列名申明rsc_text锁资本的文本化形貌。包括资本称号的一部分。rsc_bin二进制锁资本。包括锁办理器中所含的实践锁资本。对那些懂得锁资本格局的工具包括该列,这些工具可天生本人的格局化锁资本并在syslockinfo上实行自连接。rsc_valblk锁值块。有些资本范例能够在特定的锁资本中包括附加数据,锁办理器不合错误这类锁资本举行哈希运算以决意详细某个锁资本的一切干系。比方,页锁不回详细的工具ID一切。可是,关于锁晋级和出于其他目标,页锁的工具ID能够包含在锁值块中。rsc_dbid与资本联系关系的数据库ID。rsc_indid与资本联系关系的索引ID(假如合适)。rsc_objid与资本联系关系的工具ID(假如合适)。rsc_type资本范例:
1=NULL资本(未利用)
2=数据库
3=文件
4=索引
5=表
6=页
7=键
8=区
9=RID(行ID)
10=使用程序rsc_flag外部资本标记。req_mode锁哀求形式。该列是哀求者的锁形式,而且代表已受权形式,或代表转换或守候形式。
0=NULL。不受权会见资本。用作占位符。
1=Sch-S(架构不乱性)。确保在任何会话持有对架构元素(比方表或索引)的架构不乱性锁时,不删除该架构元素。
2=Sch-S(架构修正)。必需由要变动指定资本架构的任何会话持有。确保没有其他会话正在援用所唆使的工具。
3=S(共享)。授与持有锁的会话对资本的共享会见权限。
4=U(更新)。唆使对终极大概更新的资本猎取的更新锁。用于避免罕见情势的逝世锁,这类逝世锁在多个会话锁定资本而且稍后大概更新资本时产生。
5=X(排他)。授与持有锁的会话对资本的独有会见权限。
6=IS(意向共享)。唆使成心将S锁安排在锁条理布局中的某个附属资本上。
7=IU(意向更新)。唆使成心将U锁安排在锁条理布局中的某个附属资本上。
8=IX(意向排他)。唆使成心将X锁安排在锁条理布局中的某个附属资本上。
9=IU(共享意向更新)。唆使对成心在锁条理布局中的附属资本上猎取更新锁的资本举行共享会见。
10=IX(共享意向排他)。唆使对成心在锁条理布局中的附属资本上猎取排他锁的资本举行共享会见。
11=IX(更新意向排他)。唆使对成心在锁条理布局中的附属资本上猎取排他锁的资本持有的更新锁。
12=BU。由年夜容量操纵利用。
13=RangeS_S(共享键局限和共享资本锁)。唆使可串行局限扫描。
14=RangeS_U(共享键局限和更新资本锁)。唆使可串行更新扫描。
5=RangeI_N(拔出键局限和空资本锁)。用于在将新键拔出索引前测试局限。
16=RangeI_S。经由过程RangeI_N和S锁的堆叠创立的键局限转换锁。
17=RangeI_U。经由过程RangeI_N和U锁的堆叠创立的键局限转换锁。
18=RangeI_X。经由过程RangeI_N和X锁的堆叠创立的键局限转换锁。
19=RangeX_S。经由过程RangeI_N和RangeS_S锁的堆叠创立的键局限转换锁。
20=RangeX_U。经由过程RangeI_N和RangeS_U锁的堆叠创立的键局限转换锁。
21=RangeX_X(排他键局限和排他资本锁)。这是在更新局限中的键时利用的转换锁。req_status锁哀求的形态:
1=已授与
2=正在转换
3=正在守候req_refcnt锁援用计数。事件每次哀求详细某个资本上的锁时,援用计数便会增添。直到援用计数即是0时才干开释锁。req_cryrefcnt保存以供未来利用。老是设置为0。req_lifetime锁保存期位图。在某些查询处置战略的过程当中,必需保护资本上的锁,直到查询处置器已完成查询的某个详细阶段为止。查询处置器和事件办理器用锁保存期位图唆使在查询停止运转的某个阶段时能够开释的锁组。位图内的某些位用于唆使即便锁的援用计数即是0,也必需到事件停止时才开释的锁。req_spid哀求锁的会话的外部MicrosoftSQLServerDatabaseEngine?历程ID。req_ecid实行高低文ID(ECID)。用于唆使并行操纵内具有详细某个锁的线程。req_ownertype与锁联系关系的工具范例:
1=事件
2=游标
3=会话
4=ExSession
注重,3和4代表会话锁的特别版本,分离跟踪数据库锁和文件组锁。req_transactionID用于syslockinfo和事务探查器事务中的独一事件ID。req_transactionUOW标识DTC事件的事情单位ID(UOW)。关于非MSDTC事件,UOW设置为0。注重:在SQL2005及以上的版本中,保举用sys.dm_tran_locks来取代syslockinfo体系表。
上面我们说了DML的闪回方案。但对于DDL却无能为力,对于大多数的DDL,即使是rowbase格式,二进制日志binlog中仍只记录语句本身。对于删表操作,只记录一个语句droptablet。仅凭这句话,无法还原表的数据。
第二个灵魂 该用户已被删除
沙发
发表于 2015-1-18 12:09:56 | 只看该作者
语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!
冷月葬花魂 该用户已被删除
板凳
发表于 2015-1-25 22:09:03 | 只看该作者
语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!
灵魂腐蚀 该用户已被删除
地板
发表于 2015-2-4 08:50:27 | 只看该作者
比如,MicrosoftSQLServer2008的某一个版本可以满足现在的这个业务的需要,而且价格还比Oracle11g要便宜,那么这一产品就是适合的。
小妖女 该用户已被删除
5#
发表于 2015-2-9 20:55:14 | 只看该作者
数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。
柔情似水 该用户已被删除
6#
发表于 2015-2-27 21:37:10 | 只看该作者
微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。
因胸联盟 该用户已被删除
7#
发表于 2015-3-9 15:00:26 | 只看该作者
作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
莫相离 该用户已被删除
8#
发表于 2015-3-17 00:19:23 | 只看该作者
无法深入到数据库系统层面去了解和探究
不帅 该用户已被删除
9#
发表于 2015-3-23 10:40:54 | 只看该作者
学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 05:01

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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