SQL Server 关于kill state

Posted 悦光阴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server 关于kill state相关的知识,希望对你有一定的参考价值。

产品数据库的环境是: Microsoft SQL Server 2017(14.x),有一个ETL运行失败,从系统中查看到错误消息是:

Cannot continue the execution because the session is in the kill state.

从错误消息中推测,应该是有人执行kill命令主动结束了一个session。SQL Server的错误日志(error log)中应该包含 kill session的详细信息,可以通过执行以下命令得到执行kill命令的主机名称和进程ID:

EXEC xp_readerrorlog 0, 1, Nkill, NULL, NULL, NULL, NDESC

但是,出现这种错误,有可能不是执行kill命令,因此,从errorlog中并不会得到任何关于kill的信息,有可能是数据库的表结构或索引结构出现崩溃(corruption )导致的。

如果是聚集的索引结构出现崩溃,在创建非聚集索引的时候,就可能发生该错误,这需要执行DBCC CHECKDB 命令来检查数据库的完整性:

DBCC CHECKDB (database_name)
DBCC CHECKCATALOG (database_name)

 

而修复错误,通常需要执行以下几个命令:

DBCC CHECKDB (database_name, REPAIR_FAST) -- quick fix
DBCC CHECKDB (database_name, REPAIR_REBUILD) -- reset index
DBCC CHECKDB (database_name, REPAIR_ALLOW_DATA_LOSS) -- Allows correction of missing data
DBCC CHECKALLOC (database_name, REPAIR_REBUILD) -- Fixed allocation problem
DBCC DBREINDEX (database_name, REPAIR_REBUILD) -- fix index problem

 

 

参考文档:

 

以上是关于SQL Server 关于kill state的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析

SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析[转]

sql server 查看表的死锁和Kill 死锁进程

处理sql server的死锁 [kill spid]

How To Kill All SPID In Database or Multiple Databases In Sql Server

sql server 查看表的死锁和Kill 死锁进程