Windows/MSSQL
Aus SchnallIchNet
< Windows
Inhaltsverzeichnis
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__
Freitags-Wartung: anstehende Reports
select objname as REPORT, nextruntime from CESYSTEMDB.dbo.APS_InfoObjects2 (nolock) where nextruntime like '2016 02 25%' order by 2