안녕하세요
프로시져를 만들어서 년도 데이터를 저장 하고 있습니다.
쿼리문은 아래와 같고요.
set @sql = ' delete from UIC03IT_CLOSEDAY_'+ @TB_year +
' where CLOSEDAY ='''+ @pCLOSEDAY +''''
exec (@sql)
set @sql =' INSERT INTO UIC03IT_CLOSEDAY_'+ @TB_year +
' SELECT ' +
''''+ @pCLOSEDAY + '''' +
' ,isnull(t2.WIDEUSE_GB ,'''+'9'+''') ' +
' ,t1.[BARCODE] ' +
' ,t1.[LCT_GBN] ' +
' ,t1.[AST_CD] ' +
' ,t1.[LOT_NO] ' +
' ,t1.[GRADE] ' +
' ,t1.[ST_GBN] ' +
' ,t1.[GONPO_STL] ' +
' ,t1.[IP_DATE] ' +
' ,t1.[IPCL_CD] ' +
' ,t1.[CL_DATE] ' +
' ,t1.[SUBUL_GBN] ' +
' FROM ' +
' UIC03IT t1 ' +
' left outer join UZZ02MT t2 on(t1.LOT_NO = t2.LOT) '
exec (@sql)
위의 데이터를 insert 하면 데이터가 제대로 저장이 되고 있습니다. 실제로 테이블에서 값을 확인도 하였구요.
위의 프로시져를 스케줄러로 작업을 하여 7시에 자동 으로 돌게 만들었는데 7시 이후에 조회를 하면 멈춤 현상(테이블 LOCK 인거 같기도함.)이 발견이 되는거 같습니다. mssql 매니져먼트에서 select 문을 조회를 하면 이상없이 조회가되는데 어플리케이션 단에서 조회를 하면 불러오지 못하는 현상을 발견 하여 왜 이런지 이해가 안되어 글을 올립니다.. 조회하는 프로시져에 다른 테이블을 강제로 입력하여 return 한 뒤 commit 하고 다시 원상복귀 시키면 그다음부터는 또 조회가 잘됩니다. 왜이런지 이해를 못하겠는데 아시는분 답변 부탁드려요.
조회하는 구문은 아래와 같습니다.
SELECT
A.LCT_GBN
, A.AST_CD
, A.LOT_NO
, A.GRADE
,A.WIDEUSE_GB
,SUM(A.GONPO_STL) IP_DATE1 ,0 as IP_DATE30 ,0 as IP_DATE60
,0 as IP_DATE90,0 as IP_DATE120, 0 as IP_DATE180
FROM
UIC03IT_CLOSEDAY_2016 A
Comment 5
-
sincie
2016.03.08 12:10
-
처리짱
2016.03.08 12:52
FROM
UIC03IT_CLOSEDAY_2016 A WITH (NOLOCK)요런식으로 붙혀보세요.
-
항해자™
2016.03.08 21:24
프로시저 상단에 set transaction isolation level read uncommitted 을 추가해 주시면,
테이블 마다 with(nolock) 붙이지 않으셔도 됩니다,,,
-
멋진벼리
2016.03.14 10:18
INSERT 하시는 SP에 명시적 Transaction을 줘봐야 알겠는데요?
저장 SP에서 암시적 Transaction으로 인해 Commit이 안됐을 수도 있으니
명시적 Transaction으로 처리해보십시오.
-
minsouk
2016.03.14 11:37
nolock 을 많이 언급하시는데, 문제 해결을 위해 원인을 분석해보고 하는게 좋을듯 해요, extended events 로 페어 이벤트를 잡아 어떤것이 끝나지 않고 있다 이런것들을 잡을 수 있습니다. 완벽하게 트레이스 가능하죠.....
저는 초보고 에러로그를 안올리셔서 감도 안오지만...
혹시 insert 때문에 잠금문제라면 FROM UIC03IT_CLOSEDAY_2016 A WITH(NOLOCK) 옵션을 주시고 확인해보세영