產品數據庫的環境是: 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, N'kill', NULL, NULL, NULL, N'DESC'
但是,出現這種錯誤,有可能不是執行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
參考文檔: