데이터베이스 개발자 질문과 답변 게시판

데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.

1.번 프로시저  이 프로시저는  새벽 4시에 스케줄러를 통해 자동으로 실행됩니다.

 

ALTER procedure [dbo].[back_check_date]

As
set nocount on
set transaction isolation level read uncommitted
--변수선언


Begin Tran   

--테이블 백업
  INSERT INTO SHA_CHECK_BACK
  SELECT * FROM  SHA_check WITH(NOLOCK);  

if @@error <> 0
 begin
  rollback tran
  return
 end
else
 begin

--데이터 삭제
  DELETE FROM SHA_CHECK;
  
-- 임시테이블 삭제    
  DELETE  FROM  sha_check_temp ;
  end
commit tran   
set nocount off

 

1번 프로시저 기능은 어제날짜의 데이터를  sha_check_back 테이블에 복해서 넣고

sha_check, sha_check_temp  데이터를 지워 주는 기능을 합니다.

 

 

 

2번프로시저 이프로시저는 새벽 4시30분에 자동 실행됩니다.


USE [nitTest2]
GO
/****** Object:  StoredProcedure [dbo].[create_check_date]    Script Date: 07/30/2013 09:24:10 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[create_check_date]

As
set nocount on
set transaction isolation level read uncommitted
--변수선언

declare @day varchar(10)
declare @day_inTime varchar(20)
declare @day_outTime varchar(20)
declare @sql Nvarchar(2000)
declare @sql2 Nvarchar(2000)
declare @sql3 Nvarchar(2000)

select  @day = datename(dw,getdate())

if @day = '월요일'
 begin
  set @day_inTime = 'in_time_mon'
  set @day_outTime = 'out_time_mon'
 end
Else if @day = '화요일'
 begin
  set @day_inTime = 'in_time_tue'
  set @day_outTime = 'out_time_tue'
 end
Else if @day = '수요일'
 begin
  set @day_inTime = 'in_time_wed'
  set @day_outTime = 'out_time_wed'
 end
Else if @day = '목요일'
 begin
  set @day_inTime = 'in_time_thu'
  set @day_outTime = 'out_time_thu'
 end
Else if @day = '금요일'
 begin
  set @day_inTime = 'in_time_fri'
  set @day_outTime = 'out_time_fri'
 end
Else if @day = '토요일'
 begin
  set @day_inTime = 'in_time_sat'
  set @day_outTime = 'out_time_sat'
 end
Else if @day = '일요일'
 begin
  set @day_inTime = 'in_time_sun'
  set @day_outTime = 'out_time_sun'
 end

Begin Tran   


 set @sql = N' insert into SHA_check(UserID, AcaID, check_date,in_time, out_time , check_flag )  '
    + 'select a.UserID,a.AcaID,CONVERT(varchar(10), GETDATE(), 23)as check_date ,b.inTime, b.outTime , ''N'' '
    + ' from('
    + ' select id, UserID, AcaID from sha_student where people=''재원'' and flag=''Y'' '
       + ' )a '
    + ' inner join '
    + ' ( '
          + '  select * from ( select  StuID,  AcaID, '+@day_inTime+' as ''inTime'','+@day_outTime+' as ''outTime'', '
    + '  reg_date , rank()over(partition by stuid  order by reg_date desc  ) as ran    from SHA_student_weektime )n '
    + '  where ran = 1 '
    + ' )b '
    + ' on a.ID = b.StuID  '
    + ' where a.userid not in(select userid from sha_check c where check_date = convert(varchar(10),getdate(),23)  and a.userid = c.userid and a.acaid = c.AcaID ) '   
   --execute sp_executesql @sql
   --print @sql
   exec (@sql)

if @@error <> 0
 begin
  rollback tran
  return
 end
Else
 begin
  commit tran   
 end
 
 -- 임시테이블에 오늘 데이터 삽입
 INSERT INTO SHA_CHECK_TEMP(userid, acaid, check_date, in_time, in_check, in_check_msg, out_time, out_check, out_check_msg,  check_flag, check_flag_m, late_flag)
 SELECT userid, acaid, check_date, in_time, in_check, in_check_msg, out_time, out_check, out_check_msg,  check_flag, check_flag_m, late_flag  FROM SHA_CHECK  ;
set nocount off

 

이프로시저의 기능은 sha_check, sha_check_temp 테이블에 오늘 데이터를 생성하여 넣어주는 기능을 하는 프로시저 입니다.

 

1번, 2번 프로시저가 다 실행되고  난 후   이해가 안되는 부분이 있어서 이렇게 질문을 올립니다.

 

sha_check_back 테이블에는 절대 오늘 날짜의 데이터가  들어 올수 없습니다.  그러나 실행 결과를 보면  모든 데이터가 다 그런것은 아니고

 

일부 몇몇 오늘자 데이터가 sha_check_back  테이블에 들어 있더군요 이해 가 가질 않습니다.  분명  백업하는 프로시저는 새벽4시에 실행

 

이되고 오늘 데이터를 만들어 주는 프로시저는 새벽  4시30분에 실행이 되는데 어떡게  sha_check_back 에 오늘 데이터가 들어가 있는지 이

 

해가 안되 는군요 ㅜ      쿼리문 순서나  로직은 제가 봐도 이상이 없는 듯 합니다.  왜냐하면 테스트 서버에서는 아무이상이 없었거든요 .. 

 

 그래서  의심이 가는게  실서버는 접속하는 사람들이 많아서

 

1번 프로시저에

--테이블 백업
  INSERT INTO SHA_CHECK_BACK
  SELECT * FROM  SHA_check WITH(NOLOCK);  

 

이작업 도중에  락이 걸리는 걸까요??   ㅜ  참고로 sha_check 테이블에는 업데이트가 빈번히 이루어 집니다. .(하지만 새벽시간에는 거의 없음)

 

웹개발자라.. 디비에  지식이 부족하여 이렇게 문의 드립니다 ㅜ  

 

데이터를 옮길때 주의 해야 할 점이나 락을 피하는 방법 같은것 도 있으면 조언좀 부탁 드릴께요

 

감사합니다 ^^

 

 


 

No. Subject Author Date Views
7051 웹사이트의 CharSet 설정과 Database의 Collation ... 그 외 상관 관계... Larry 2013.07.31 8360
7050 쿼리문 질문 [6] 황영식_314681 2013.07.30 4461
» 선배님들 프로시저(락 관련) 조언좀 부탁드립니다... [3] alima 2013.07.30 6400
7048 xml 데이터형의 컬럼을 select 하는데.. [3] 강승생 2013.07.30 4592
7047 해외 서버에 웹사이트를 이전 시켰는데 DB에서 불러온 한글만 깨져요.. [12] Larry 2013.07.26 10367
7046 asp로 ms-sql 2005의 타이틀 컬럼 앞 10자리만 수정시... [2] 다크나인 2013.07.26 6280
7045 SQL DB를 활용하여 회사 프로그램을 작성해야하는데요 MFC 와 C# [2] 씨쎔 2013.07.26 4532
7044 테이블안에 중복 아이디에 순번을 먹이고 싶습니다... [1] dcman 2013.07.25 5008
7043 cte를 이용 이중트리구조를 출력하려합니다. [1] gtm100 2013.07.25 5140
7042 MsDtsSrvr.exe 오류가 나네요 곰팡이 2013.07.25 7851
7041 SqlServer 2012 인스탄스 제거 질문드립니다. [2] 힘내라장코치 2013.07.25 4943
7040 mssql 7 desktop 버젼 구할 방법이 없을까요 ? [1] 어둠별빛 2013.07.24 4461
7039 쿼리 수정 설명 부탁드립니다. [2] rx프로그래머rx 2013.07.24 4485
7038 키워드 검색을 하는데, 다중 키워드를 and 조건으로 검색하는 경우 [4] 더따뜻한 2013.07.24 6883
7037 데이터의 날짜보다 빠른 모든 6개월 내의 데이터와 조인 질문 [1] 슈팅스타 2013.07.24 4693
7036 해외 호스팅 서버쪽에 SQL2005 서버로 이전 작업 문의드립니다. [2] Larry 2013.07.23 5213
7035 쿼리 고수님들께 문의좀 드립니다. ^^ [2] 남자나무 2013.07.23 5546
7034 mdf 파일 손상히 tail log 백업 방법 [2] Tommy Hilfi 2013.07.23 5499
7033 질문드립니다 [1] 잉잉 2013.07.23 4776
7032 그룹별 곱하기 [1] taz2315 2013.07.23 9075





XE Login