<¿øÀÎ>
<SQL¹®>
CREATE PROC sp_block
AS
set nocount on
IF NOT EXISTS (SELECT * FROM sysprocesses WHERE spid IN
(SELECT blocked FROM sysprocesses )
)
BEGIN
PRINT 'No one is blocked'
RETURN
END
SELECT spid, blocked, status,
loginame,
hostname,
dbname = substring(db_name(dbid), 1, 10)
, cmd
into #tmp
FROM sysprocesses
WHERE blocked <> 0
OR ( spid IN (SELECT blocked FROM sysprocesses))
order by spid
select * from #tmp --Â÷´ÜµÈ ÇÁ·Î¼¼½º¸¦ º¸¿©ÁØ´Ù.
--ÀÌÁ¦ dbcc inputbuffer¸¦ ¼öÇàÇÑ´Ù.
CREATE TABLE #dbcc (
id int identity
, spid int null
, eventType varchar(255) null
, parameters int null
, eventInfo varchar(255) null
)
DECLARE c1 CURSOR READ_ONLY
FOR SELECT spid FROM #tmp
DECLARE @spid int
OPEN c1
FETCH NEXT FROM c1 INTO @spid
WHILE (@@fetch_status =0)
BEGIN
DECLARE @message varchar(100)
SELECT @message = 'dbcc inputbuffer (' + convert(varchar(30), @spid) + ')'
-- print @message
INSERT #dbcc (eventType, parameters, eventInfo)
exec (@message)
UPDATE #dbcc SET spid = @spid WHERE id = @@identity
FETCH NEXT FROM c1 INTO @spid
END
DEALLOCATE c1
SELECT * FROM #dbcc
<Á¶Ä¡ »çÇ×>
<±âŸ>
if ( @@ROWCOUNT > 0 )
begin
--5>3>2>1 ·Î º¯°æ
WAITFOR DELAY '00:00:05'
if not exists (select * from tempdb.dbo.sysobjects where id = object_id(N'tempdb.dbo.TBLLock') )
CREATE TABLE tempdb.dbo.TBLLock (id int identity , spid int null , eventType varchar(255) null , parameters int null , eventInfo varchar(255) null,CreateDate datetime not null DEFAULT getdate())
SELECT spid into #tmp FROM master..sysprocesses WHERE blocked <> 0 OR ( spid IN (SELECT blocked FROM master..sysprocesses))
DECLARE c1 CURSOR READ_ONLY
FOR SELECT spid FROM #tmp
DECLARE @spid int
OPEN c1
FETCH NEXT FROM c1 INTO @spid
WHILE (@@fetch_status =0)
BEGIN
DECLARE @message varchar(100)
SELECT @message = 'dbcc inputbuffer (' + convert(varchar(30), @spid) + ')'
-- print @message
INSERT tempdb.dbo.TBLLock (eventType, parameters, eventInfo) exec (@message) -- Lock ÇöȲ ÀúÀå
UPDATE tempdb.dbo.TBLLock SET spid = @spid WHERE id = @@identity
select * From -- ¸ÞÀÏ ¹ß¼Û
openRowset ('SQLOLEDB', 'Server=~~;UID=~~;PWD=~~;Database=~~',
'EXEC dbo.pSendMail
''cskwak@interpark.com'' ,
''cskwak@interpark.com'' ,
'' Lock ¹ß»ý'' ,
'' Lock ¹ß»ý '' '
)
FETCH NEXT FROM c1 INTO @spid
END
DEALLOCATE c1
end