查看mssql的锁

USE [master]
GO

/****** Object: StoredProcedure [dbo].[sp_who_lock] Script Date: 10/02/2014 06:18:19 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE procedure [dbo].[sp_who_lock]
as
begin
declare @spid int,@bl int,
@intTransactionCountOnEntry int,
@intRowcount int,
@intCountProperties int,
@intCounter int
create table #tmp_lock_who (id int identity(1,1),spid smallint,bl smallint)
IF @@ERROR<>0 RETURN @@ERROR
insert into #tmp_lock_who(spid,bl) select 0 ,blocked
from (select * from sysprocesses where blocked>0 ) a
where not exists(select * from (select * from sysprocesses where blocked>0 ) b
where a.blocked=spid)
union select spid,blocked from sysprocesses where blocked>0
IF @@ERROR<>0 RETURN @@ERROR

-- 找到临时表的记录数
select @intCountProperties = Count(*),@intCounter = 1
from #tmp_lock_who
IF @@ERROR<>0 RETURN @@ERROR
if @intCountProperties=0
select ‘现在没有阻塞和死锁信息‘ as message
-- 循环开始
while @intCounter <= @intCountProperties
begin
-- 取第一条记录
select @spid = spid,@bl = bl
from #tmp_lock_who where id = @intCounter
begin
if @spid =0
select ‘引起数据库死锁的是: ‘+ CAST(@bl AS VARCHAR(10)) + ‘
进程号,其执行的SQL语法如下‘
else
select ‘进程号SPID:‘+ CAST(@spid AS VARCHAR(10))+ ‘被‘ + ‘
进程号SPID:‘+ CAST(@bl AS VARCHAR(10)) +‘阻塞,
其当前进程执行的SQL语法如下‘
DBCC INPUTBUFFER (@bl )
end
-- 循环指针下移
set @intCounter = @intCounter + 1
end
drop table #tmp_lock_who
return 0
end

GO

时间: 2024-10-23 15:54:06

查看mssql的锁的相关文章

查看sqlserver被锁的表以及如何解锁

查看sqlserver被锁的表以及如何解锁 查看被锁表: select   request_session_id   spid,OBJECT_NAME(resource_associated_entity_id) tableName from   sys.dm_tran_locks where resource_type='OBJECT' spid   锁表进程 tableName   被锁表名 解锁: declare @spid  int Set @spid  = 57 --锁表进程 decl

[转]查看处于被锁状态的表:v$locked_object dba_objects v$session all_objects v$sqlarea v$lock

oracle官网当一个用户发出select..for update的错作准备对返回的结果集进行修改时,如果结果集已经被另一个会话锁定,就是发生阻塞.需要等另一个会话结束之后才可继续执行.可以通过发出 select… for update nowait的语句来避免发生阻塞,如果资源已经被另一个会话锁定,则会返回以下错误:Ora-00054:resource busy and acquire with nowait specified. oracle官网死锁-deadlock 定义:当两个用户希望持

查看oracle是否锁表以及解决方法

Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实现的呢?本文我们主要就介绍一下这部分内容.(1)锁表查询的代码有以下的形式: select count(*) from v$locked_object; select * from v$locked_object; (2)查看哪个表被锁 select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba

Oracle 查看 对象 持有 锁 的情况

同事在测试库上对一个表加字段,提示 ORA-00054, 资源忙. 应该是表对象的锁没有释放. 有关Oracle 锁的说明,参考: ORACLE锁机制 http://blog.csdn.net/tianlesoftware/article/details/4696896 用如下SQL 查看一下系统中相关对象上锁的情况: [sql] view plain copy <pre name="code" class="sql">/* Formatted on 2

查看oracle被锁的表

SELECT /*+ rule*/ a.sid, b.owner, object_name, object_type FROM v$lock a, all_objects b WHERE TYPE = 'TM' and a.id1 = b.object_id; 查到的都是被锁的表 SELECT * FROM v$session where sid = xxx; 查到 serial# 最后alter system kill session 'sid,serial#';  关闭锁

查看MSSQL数据库每个表占用的空间大小

需要查看数据库表的大小,查询SQL Server联机从书得到如下语句: sp_spaceused 显示行数.保留的磁盘空间以及当前数据库中的表所使用的磁盘空间,或显示由整个数据库保留和使用的磁盘空间. 语法 sp_spaceused [[@objname =] 'objname']    [,[@updateusage =] 'updateusage'] 参数 [@objname =] 'objname' 是为其请求空间使用信息(保留和已分配的空间)的表名.objname 的数据类型是 nvar

mysql查看锁表解锁

-- 查看那些表锁到了 show OPEN TABLES where In_use > 0; -- 查看进程号 show processlist; -- 删除进程 kill 1085850;

oracle事务和锁

数据库事务概括 1. 说明 一组SQL,一个逻辑工作单位,执行时整体修改或者整体回退. 2.事务相关概念 1)事务的提交和回滚:COMMIT/ROLLBACK 2)事务的开始和结束 开始事务:连接到数据库,执行DML.DCL.DDL语句 结束事务: 1. 执行DDL(例如CREATE TABLE),DCL(例如GRANT),系统自动执行COMMIT语句 2. 执行COMMIT/ROLLBACK 3. 退出/断开数据库的连接自动执行COMMIT语句 4. 进程意外终止,事务自动rollback 5

Linux内核RCU(Read Copy Update)锁简析

在非常早曾经,大概是2009年的时候.写过一篇关于Linux RCU锁的文章<RCU锁在linux内核的演变>,如今我承认.那个时候我尽管懂了RCU锁,可是我没有能力用一种非常easy的描写叙述把Linux的实现给展示出来,有道是你能给别人用你自己的方式非常简洁地描写叙述清楚,你才是真正的精通它.否则,无异于背诵.换个说法,假设你在被面试.在短时间内靠嘴说给面试官,且他还要能听明白,就说明自己真的懂了,这样的时候,是不会给你机会分析源码的,也不可能让你背诵源码.       时隔五年多,最近又