안녕하세요. 질문이 있어서 이렇게 글을 남깁니다.
특정시간대에 8시~10시 사이에 매일매일 걸리는 LOCK 이있는데
프로시저 상에는 오류가 없고
이력 남기는용도로 쓰고 잇는 프로시저로 스캐쥴돌아 확인하는데..
남기는용도 프로시저는 다음과 같습니다.
CREATE PROCEDURE [dbo].[Z_BLOCK_CHECK]
as
set nocount on
create table #tbl(
SPID int,
dbid varchar(255),
objid varchar(255),
indID varchar(255),
Type varchar(255),
Resource varchar(255),
Mode varchar(255),
Status varchar(255)
)
declare @objid varchar(255)
DECLARE @SPID VARCHAR(255)
declare @obj_sp_name varchar(max)
declare @block_table varchar(255)
select @objid = null
select @obj_sp_name = null;
insert into #tbl(SPID,dbid,objid,indID,Type,Resource,Mode,Status)
exec sp_lock
delete from #tbl where Type<>'TAB' or objid < 0 or Mode not in ('X','IX')
insert into ZTB_LOCK(SPID, dbid, objid, insDate, cnt)
select SPID, dbid, objid, getdate(), 0 from #tbl
delete from ZTB_LOCK where SPID+dbid+objid not in (
select SPID+dbid+objid from #tbl
) and convert(char(8), insDate, 112) = convert(char(8), getdate(), 112)
select top 1 @objid = objid,@SPID = SPID from ZTB_LOCK where convert(char(8), insDate, 112) = convert(char(8), getdate(), 112)
group by SPID, dbid, objid having count(*) > 5
IF isnull(@objid, '') <> ''
begin
if cast(replace(convert(varchar,getdate(),8),':','') as int) between 080000 and 220000
begin
select @block_table = name from sysobjects where id = @objid
set @obj_sp_name = (select qt.text from master.dbo.sysprocesses sprc CROSS APPLY sys.dm_exec_sql_text(sprc.sql_handle) as qt where sprc.spid = convert (smallint, @SPID))
insert into TBL_BLOCK_SMS(BLOCK_SQL, CREATE_DTTM,SP_NAME) values (@block_table, GETDATE(),@obj_sp_name)
end
drop table #tbl;
end
-- Z_SP_TABLE_LOCK 원래 블럭체크
이거인데
sysrscols, syscolpars
이 시스템 테이블이 락이 걸립니다..
아래 DB CHECK 도 넣었습니다.
무엇이 문제일까요?ㅠㅠㅠ 그리고 이 테이블이 무슨 역활을 하나요? 이력관리인가요?