マスターデータベースでこのクエリを実行した後、すべてのデータベースで実行中のすべてのプロセスが表示されます。データベースで実行中のすべてのプロセスを強制終了するクエリはありますか。
USE
Master
GO
SELECT
SPID,DBID FROM SYSPROCESSES
WHERE
DBID NOT IN (1,2,3,4) AND SPID >50 AND SPID<> @@spid
マスターデータベースでこのクエリを実行した後、すべてのデータベースで実行中のすべてのプロセスが表示されます。データベースで実行中のすべてのプロセスを強制終了するクエリはありますか。
USE
Master
GO
SELECT
SPID,DBID FROM SYSPROCESSES
WHERE
DBID NOT IN (1,2,3,4) AND SPID >50 AND SPID<> @@spid
他のすべての接続を強制的に切断する必要があり、適切な権限がある場合は、データベースをシングルユーザーモードでバウンスしたり、シングルユーザーモードからバウンスしたりできます。
alter database current set single_user with rollback immediate;
go
alter database current set multi_user;
go
同じデータベースへの他の接続はすべて終了します。
特定のデータベースのすべてのプロセスを強制終了するには、以下のSQLスクリプトを参照してください(SQL Server 2014)
Declare @DbName nvarchar(60)='YourDBName'
Declare @SPID int
--get all processes
DECLARE @Table TABLE(
SPID INT,
Status VARCHAR(MAX),
LOGIN VARCHAR(MAX),
HostName VARCHAR(MAX),
BlkBy VARCHAR(MAX),
DBName VARCHAR(MAX),
Command VARCHAR(MAX),
CPUTime INT,
DiskIO INT,
LastBatch VARCHAR(MAX),
ProgramName VARCHAR(MAX),
SPID_1 INT,
REQUESTID INT
)
INSERT INTO @Table EXEC sp_who2
--using cursor to kill all processes
Declare cur_KillAllProcesses CURSOR FAST_FORWARD FOR
Select
SPID
From @Table
WHERE DBName=@DbName
OPEN cur_KillAllProcesses
FETCH NEXT FROM cur_KillAllProcesses INTO
@SPID
WHILE @@FETCH_STATUS=0
BEGIN
--add kill process command
Exec('KILL '+ @SPID)
FETCH NEXT FROM cur_KillAllProcesses INTO @SPID
END
CLOSE cur_KillAllProcesses
DEALLOCATE cur_KillAllProcesses
KILL
上記のクエリ結果で、このステートメントをカーソルと組み合わせて 使用できます。
Kill(Transact-SQL)を参照してください