Windows/MSSQL: Unterschied zwischen den Versionen

Aus SchnallIchNet
Wechseln zu: Navigation, Suche
(kill blocked connections)
Zeile 69: Zeile 69:
 
   
 
   
 
-- Benutzer aus dem System räumen
 
-- 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
+
-- 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__
 
kill __spid__
 
</pre>
 
</pre>

Version vom 23. Dezember 2015, 14:37 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

DECLARE @spid int


-- 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__