로컬 임시 테이블의 활용 (1)
에이디컨설팅 선임 컨설턴트
이야기를 하기에 앞서 비슷한 용어 때문에 혼란이 생기지 않도록 글에서 사용될 용어를 정리하겠습니다.
- 로컬 임시 테이블. 흔히 말하는 [#테이블], 세션에 독립적이며 세션 연결이 끊기면 삭제되는 테이블
- 전역 임시 테이블. [##테이블], 모든 세션에서 사용가능하며 생성 세션이 끊기고 사용중인 세션이 없을 때 삭제되는 테이블
- 임시 생성 테이블. 어떤 작업을 수행하기 위해 임시적으로 생성하는 테이블.
패키지를 만들 때 임시로 테이블을 만들어서 처리해야 하는 경우가 있습니다. 여기서 말하는 임시 테이블은 [#테이블]과 같은 로컬 임시 테이블이 될 수도 있고 [##테이블]과 같은 전역 임시 테이블이 될 수 있으며 [tmpTableName] 등과 같은 일반 테이블일 수도 있습니다.
이 경우 로컬 임시 테이블을 제외한 나머지 유형의 테이블을 사용하는 경우 동시성에 문제가 있습니다. 예를 들어 패키지 실행 전에 ‘임시 생성 테이블이 존재한다면 삭제하고 생성해라’ 라는 명령이 있고 이 패키지를 수행하는 여러 개의 작업(SQL Agent Job)이 있을 때 한 작업에서는 임시 생성 테이블에 데이터를 입력하고 있는 도중에 다른 작업에서는 이 임시 생성 테이블을 삭제하는 경우가 발생할 수 있습니다. 저장 프로시저에서는 이러한 동시성 문제 때문에 로컬 임시 테이블([#테이블]) 또는 테이블 변수 등을 사용합니다.
하지만 SSIS에서는 기본적으로 태스크 마다 연결을 맺고 끊는 방식이기 때문에 로컬 임시 테이블을 여러 태스크에서 이용하기가 어렵습니다.
로컬 임시 테이블이 아닌 테이블로 테스트 해보면 실행이 잘 됩니다.
SSIS에서도 로컬 임시 테이블을 사용할 방법이 전혀 없는 것은 아닙니다. 연결 관리자의 연결 속성 중 RetainSameConnection 속성을 이용하는 것입니다. 이 속성에 대해서는 한대성 님께서 이전 게시물에 잘 설명해 놓으셨습니다. 이 속성에 대해서 짧게 설명하자면 DB와 한번 맺은 연결을 패키지가 종료할 때까지 끊지 않는 것입니다.
그러면 이 속성을 변경해서 작업 단위로 접속하던 세션을 패키지 범위로 유지할 수 있겠군요.
'연구개발 > DTS & SSIS' 카테고리의 다른 글
로컬 임시 테이블의 활용 (3) (0) | 2009.06.20 |
---|---|
로컬 임시 테이블의 활용 (2) (0) | 2009.06.20 |
SSIS를 이용한 서버 성능 수집 프로세스 구현 - 메일 발송 (0) | 2009.06.20 |
SSIS를 이용한 서버 성능 수집 프로세스 구현 - 엑셀 내보내기 (0) | 2009.06.20 |
SSIS를 이용한 서버 성능 수집 프로세스 구현 - 로그 파일 DB입력 (0) | 2009.06.20 |