数据库乎好乎坏,从网上找到查看语句
----------------
use master
DECLARE @dbid varchar(20),
@dbname sysname,
@objname sysname,
@objid int,
@execstr varchar(8000),
@nexecstr nvarchar(4000)
CREATE TABLE #locks (spid int,
dbid int,
objid int, objectname sysname NULL,
indid int,
type char(20),
resource char(200),
mode char(50),
status char(50))
-- Get basic locking info from sp_lock
INSERT #locks (spid, dbid, objid, indid, type, resource, mode, status) EXEC sp_lock
-- Loop through the work table and translate each object id into an object name
DECLARE DBs CURSOR FOR SELECT DISTINCT dbid=CAST(dbid AS varchar) FROM #locks
OPEN DBs
FETCH DBs INTO @dbid
WHILE (@@FETCH_STATUS=0) BEGIN
SET @dbname=DB_NAME(@dbid)
EXEC master..xp_sprintf @execstr OUTPUT,'UPDATE #locks
SET objectname=o.name FROM %s..sysobjects o
WHERE (#locks.type=''TAB'' OR #locks.type=''PAG'')
AND dbid=%s AND #locks.objid=o.id',@dbname, @dbid
EXEC(@execstr)
EXEC master..xp_sprintf @execstr OUTPUT, 'UPDATE #locks
SET objectname=i.name FROM %s..sysindexes i
WHERE (#locks.type=''IDX'' OR #locks.type=''KEY'')
AND dbid=%s AND #locks.objid=i.id
AND #locks.indid=i.indid', @dbname, @dbid
EXEC(@execstr)
EXEC master..xp_sprintf @execstr OUTPUT, 'UPDATE #locks
SET objectname=f.name FROM %s..sysfiles f WHERE #locks.type=''FIL''
AND dbid=%s AND #locks.objid=f.fileid', @dbname, @dbid
EXEC(@execstr)
FETCH DBs INTO @dbid
END
CLOSE DBs
DEALLOCATE DBs
-- Return the result set
SELECT login=LEFT(p.loginame,20), db=LEFT(DB_NAME(l.dbid),30), l.type, object=CASE
WHEN l.type='DB'
THEN LEFT(DB_NAME(l.dbid),30)
ELSE LEFT(objectname,30) END, l.resource, l.mode, l.status, l.objid, l.indid, l.spid
FROM #locks l JOIN sysprocesses p ON (l.spid=p.spid)
ORDER BY 1,2,3,4,5,6,7
DROP TABLE #locks
--查看锁定进程的执行语句
DBCC INPUTBUFFER(95)
--关闭进程
kill 进程号
---查看系统进程
select blocked,* from sysprocesses where waittime <>0 order by cpu
从上面的结果我们可以看到spid、dbid、objid、indid、type、resource、mode和status字段。spid是进程标识号码,用于识别到SQL 服务器的连接。要发现哪些用户和该spid相连,你就要执行存储过程sp_who,并将spid作为一个参数传输给该程序。dbid是锁定发生的数据库,你可以在主数据库中的sysdatabases表格中找到它。字段objid用来显示在数据库中锁定发生所在的对象。要查看这个对象,你可以在主数据库中的sysobjects表格中查询指定的objid
http://www.soft6.com/tech/7/70403.html
列名 | 数据类型 | 描述 |
---|---|---|
spid | smallint | SQL Server 进程 ID 号。 |
dbid | smallint | 请求锁的数据库标识号。 |
ObjId | int | 请求锁的对象的对象标识号。 |
IndId | smallint | 索引标识号。 |
type | nchar(4) | 锁的类型: DB:数据库 |
Resource | nchar(16) | 与 syslockinfo.restext 中的值对应的锁资源。 |
Mode | nvarchar(8) | 锁请求者的锁模式。该锁模式代表已授予模式、转换模式或等待模式。 |
Status | int | 锁的请求状态 GRANT |
http://msdn.microsoft.com/zh-cn/library/ms179881(SQL.90).aspx
列名 | 数据类型 | 说明 |
---|---|---|
spid | smallint | SQL Server 会话 ID。 |
kpid | smallint | Microsoft Windows 线程 ID。 |
blocked | smallint | 正在阻塞请求的会话的 ID。如果此列为 NULL,则表示请求未被阻塞,或锁定会话的会话信息不可用(或无法进行标识)。 -2 = 阻塞资源由孤立的分布式事务拥有。 -3 = 阻塞资源由延迟的恢复事务拥有。 -4 = 由于内部闩锁状态转换而无法确定阻塞闩锁所有者的会话 ID。 |
waittype | binary(2) | 保留。 |
waittime | bigint | 当前等待时间(毫秒)。 0 = 进程不等待。 |
lastwaittype | nchar(32) | 指示上次或当前等待类型名称的字符串。 |
waitresource | nchar(32) | 锁资源的文本化表示法。 |
dbid | smallint | 当前正由进程使用的数据库 ID。 |
uid | smallint | 执行命令的用户 ID。如果用户数和角色数超过 32,767,则会溢出或返回 NULL。有关详细信息,请参阅查询 SQL Server 系统目录。 |
cpu | int | 进程的累计 CPU 时间。无论 SET STATISTICS TIME 选项是 ON 还是 OFF,都为所有进程更新该项。 |
physical_io | int | 进程的累计磁盘读取和写入。 |
memusage | int | 当前为此进程分配的过程缓存中的页数。一个负数,表示进程正在释放由另一个进程分配的内存。 |
login_time | datetime | 客户端进程登录到服务器的时间。对于系统进程,将存储 SQL Server 的启动时间。 |
last_batch | datetime | 客户端进程上次执行远程存储过程调用或 EXECUTE 语句的时间。对于系统进程,将存储 SQL Server 的启动时间。 |
ecid | smallint | 用于唯一标识代表单个进程进行操作的子线程的执行上下文 ID。 |
open_tran | smallint | 进程的打开事务数。 |
status | nchar(30) | 进程 ID 状态。可能的值有: dormant = SQL Server 正在重置会话。 running = 会话正在运行一个或多个批。多个活动的结果集 (MARS) 启用后,会话可以运行多个批。有关详细信息,请参阅Using Multiple Active Result Sets (MARS)。 background = 会话正在运行一个后台任务,例如死锁检测。 rollback = 会话具有正在处理的事务回滚。 pending = 会话正在等待工作线程变为可用。 runnable = 会话中的任务在等待获取时间量程时位于计划程序的可执行队列中。 spinloop = 会话中的任务正在等待调节锁变为可用。 suspended = 会话正在等待事件(如 I/O)完成。 |
sid | binary(86) | 用户的全局唯一标识符 (GUID)。 |
hostname | nchar(128) | 工作站的名称。 |
program_name | nchar(128) | 应用程序的名称。 |
hostprocess | nchar(10) | 工作站进程 ID 号。 |
cmd | nchar(16) | 当前正在执行的命令。 |
nt_domain | nchar(128) | 客户端的 Microsoft Windows 域(如果使用 Windows 身份验证)或可信连接的 Windows 域。 |
nt_username | nchar(128) | 进程的 Windows 用户名(如果使用 Windows 身份验证)或可信连接的 Windows 用户名。 |
net_address | nchar(12) | 为每个用户工作站上的网络适配器分配的唯一标识符。当用户登录时,该标识符插入 net_address 列。 |
net_library | nchar(12) | 用于存储客户端网络库的列。每个客户端进程都在网络连接上进入。网络连接有一个与这些进程关联的网络库,该网络库使得这些进程可以建立连接。有关详细信息,请参阅网络协议和 TDS 端点。 |
loginame | nchar(128) | 登录名。 |
context_info | binary(128) | 使用 SET CONTEXT_INFO 语句存储在批中的数据。 |
sql_handle | binary(20) | 表示当前正在执行的批或对象。 注意 此值是从对象的批或内存地址派生的。通过使用基于 SQL Server 2005 哈希的算法无法计算此值。 |
stmt_start | int | 为指定 sql_handle 运行当前 SQL 语句的起始偏移量。 |
stmt_end | int | 为指定 sql_handle 运行当前 SQL 语句的结束偏移量。 -1 指出当前语句为指定的 sql_handle 运行到 fn_get_sql 函数返回结果的结尾。 |
request_id | int | 请求 ID。用于标识在特定会话中运行的请求。 |