有時進行維護時, 總會須要將系統offline. 但有時會出現錯誤指TABLE 被Lock. 這是因為執行ALTER TABLE 時, 會見到有process 仍在執行.若要檢查是什麼process, 可以執行以下SQL server 指令.
EXEC sp_who2;
之後再檢查欄DBName, 找出相對應的SPID, 之後再執行KILL 指令.
kill <<SPID>>;
通常有關的SPID 都不只一個, 若要批量形式 KILL 的話, 可以利用SQL script 如下
declare @DBName varchar(60); declare @killCommand varchar(60); declare @id int; set @DBName='<<TargetDataBase>>'; declare processIdCursor cursor for select P.spid FROM master..sysprocesses P, master..sysdatabases D WHERE D.dbid = P.dbid and d.NAME=@DBName ; open processIdCursor FETCH NEXT FROM processIdCursor INTO @id WHILE @@FETCH_STATUS = 0 begin set @killCommand = 'KILL ' + convert(varchar(8) ,@id)+';'; print @killCommand; exec(@killCommand); FETCH NEXT FROM processIdCursor INTO @id END CLOSE processIdCursor DEALLOCATE processIdCursor
Leave a Reply