SQL server 打开数据库时出现1222

yanggangqiang520 2012-10-23 12:31:48
SQL server 打开数据库时出现1222 是怎么回事?
...全文
490 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
汤姆克鲁斯 2012-10-24
  • 打赏
  • 举报
回复
因为数据库被block 了
这种情况很可能是修改结构导致的block
最简单有效的方法重启一下服务
或者用
SELECT * FROM sys.sysprocesses WHERE blocked>0
找到对应的spid 把它给kill了
不过有可能kill了之后还不行,因为block 你的,有可能是还有进程在 block 它,这一系列的都要找出来,通过 dbcc inputbuffer 去看执行的语句
  • 打赏
  • 举报
回复

如果可以的話,請找出鎖定必要資源的交易。 使用 sys.dm_os_waiting_tasks 和 sys.dm_tran_locks 動態管理檢視。

如果交易仍然鎖定資源,請依適當情況結束該交易。

重新執行查詢。

如果這項錯誤經常發生,請變更鎖定逾時期限,或請修改造成問題的交易,以縮短這些交易鎖定資源的時間。
發糞塗牆 2012-10-24
  • 打赏
  • 举报
回复
首先sp_lock查看那个对象被锁住:

SQL>Excec sp_lock

得到spid、dbid、objid、indid、type、resource、mode和status字段相应的数据。

Spid:SQL Server进程标识号。
Dbid:锁定资源的数据库标识号。
Objld:锁定资源的数据库对象标识号。
Indld:锁定资源的索引标识号。
Resource:锁定资源的描述信息。
Mode:锁定资源模式。
Status:请示状态,有GRANT、WAIT和CNVRT三种,分别表示锁处于锁定状态、等待状态和转换状态。



备注:spid是进程标识号码,用于识别到SQL 服务器的连接。要发现哪些用户和该spid相连,你就要执行存储过程sp_who,并将spid作为一个参数传输给该程序。dbid是锁定发生的数据库,你可以在主数据库中的sysdatabases表格中找到它。字段objid用来显示在数据库中锁定发生所在的对象。要查看这个对象,你可以在主数据库中的sysobjects表格中查询指定的objid。

再执行:

select * from sysobjects where id = objid 由上面得到的Lock objid

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧