Windows/MSSQL: Unterschied zwischen den Versionen
Aus SchnallIchNet
< Windows
Cbs (Diskussion | Beiträge) |
Cbs (Diskussion | Beiträge) |
||
Zeile 38: | Zeile 38: | ||
PRINT 'Killed: '+convert(varchar, @ConnKilled)+' Connections' | PRINT 'Killed: '+convert(varchar, @ConnKilled)+' Connections' | ||
END | END | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | === kill blocked connections === | ||
+ | |||
+ | <pre> | ||
+ | -- wer ist der, der alle blockiert ?!? | ||
+ | select * from master..sysprocesses | ||
+ | where spid in (select blocked from master..sysprocesses where blocked != 0) | ||
+ | and blocked = 0 | ||
+ | --> spid merken | ||
+ | |||
+ | -- wer ist der Blockierende? Ist dieser ggf. noch aktiv? Dann nicht kicken, stattdessen rückfragen was der Nutzer macht | ||
+ | exec sp_who __spid__ | ||
+ | --> Ausgaben vermerken | ||
+ | |||
+ | -- was ist das letzte Statement des Blockierenden? | ||
+ | dbcc inputbuffer (__spid__) | ||
+ | --> Ausgaben vermerken | ||
+ | |||
+ | -- welche Objekte werden blockiert | ||
+ | select * from prod..sysobjects where id in ( | ||
+ | select distinct rsc_objid from syslockinfo where rsc_dbid = 6 and rsc_objid != 0 and req_spid = __spid__ | ||
+ | ) | ||
+ | --> Ausgaben vermerken | ||
+ | |||
+ | |||
+ | -- Benutzer aus dem System räumen | ||
+ | -- ACHTUNG: Automatische Prozesse (Benutzer FAPB, FAKTUR, CARNATN oder DXSAGENT) dürfen NICHT aus dem System gekickt werden. Falls dennoch Bedarf besteht zuvor ARI um Freigabe bitten | ||
+ | kill __spid__ | ||
</pre> | </pre> |
Version vom 23. Dezember 2015, 12:47 Uhr
Transact SQL
snippets...
Kill all Processes
print and kill all connections to a particular DB
USE master GO SET NOCOUNT ON DECLARE @DBName varchar(50) DECLARE @spidstr varchar(8000) DECLARE @ConnKilled smallint SET @ConnKilled=0 SET @spidstr = '' Set @DBName = 'PROD' IF db_id(@DBName) < 4 BEGIN PRINT 'Connections to system databases cannot be killed' RETURN END SELECT @spidstr=coalesce(@spidstr,',' )+'kill '+convert(varchar, spid)+ '; ' FROM master..sysprocesses WHERE dbid=db_id(@DBName) and spid <> @@SPID IF LEN(@spidstr) > 0 BEGIN PRINT '' PRINT @spidstr PRINT '' EXEC(@spidstr) SELECT @ConnKilled = COUNT(1) FROM master..sysprocesses WHERE dbid=db_id(@DBName) PRINT 'Killed: '+convert(varchar, @ConnKilled)+' Connections' END
kill blocked connections
-- wer ist der, der alle blockiert ?!? select * from master..sysprocesses where spid in (select blocked from master..sysprocesses where blocked != 0) and blocked = 0 --> spid merken -- wer ist der Blockierende? Ist dieser ggf. noch aktiv? Dann nicht kicken, stattdessen rückfragen was der Nutzer macht exec sp_who __spid__ --> Ausgaben vermerken -- was ist das letzte Statement des Blockierenden? dbcc inputbuffer (__spid__) --> Ausgaben vermerken -- welche Objekte werden blockiert select * from prod..sysobjects where id in ( select distinct rsc_objid from syslockinfo where rsc_dbid = 6 and rsc_objid != 0 and req_spid = __spid__ ) --> Ausgaben vermerken -- Benutzer aus dem System räumen -- ACHTUNG: Automatische Prozesse (Benutzer FAPB, FAKTUR, CARNATN oder DXSAGENT) dürfen NICHT aus dem System gekickt werden. Falls dennoch Bedarf besteht zuvor ARI um Freigabe bitten kill __spid__