로컬 임시 테이블의 활용 (2)
에이디컨설팅 선임 컨설턴트
예제로 패키지를 하나 만들어보겠습니다.
제어 흐름에서 로컬 임시 테이블을 만듭니다.
à 데이터 흐름에서 로컬 임시 테이블에 데이터를 입력합니다.
à 제어 흐름에서 값을 확인해봅니다.
1. DB를 준비합니다.
로컬 임시 테이블에 데이터를 입력해도 세션에 독립적이기 때문에 값을 확인하기가 어렵습니다. 테스트를 위해 DB를 생성하고 데이터 확인용 테이블을 생성하겠습니다.
|
2. 예제에서 사용할 DB 연결을 연결 관리자에 추가합니다.
AdventureWorks DB의 [Person].[Contact] 테이블의 데이터를 원본 소스로 사용할 생각입니다. 새 패키지를 추가하고 연결 관리자 영역에서 오른쪽 마우스 클릭을 해서 나오는 메뉴 중 새 OLE DB 연결을 선택해서 연결을 추가합니다. 연결할 DB는 AdventureWorks입니다.
추가된 연결의 이름을 SourceDB라고 변경하겠습니다.
연결 관리자에 새 OLE DB 연결을 추가하고 STEP 1. 에서 생성한 TargetDB와 연결하겠습니다.
추가된 연결의 이름을 TargetDB라고 변경하겠습니다.
3. SQL 실행 작업 태스크로 로컬 임시 테이블을 생성하겠습니다.
제어 흐름에 SQL 실행 작업 태스크를 추가합니다.
OLE DB 타입으로 TargetDB에 연결하고 SQLStatement 속성에 다음 쿼리를 입력합니다.
|
4. 로컬 임시 테이블에 입력할 데이터를 준비 하겠습니다.
데이터 흐름 작업 태스크를 추가하고 데이터 흐름 디자인 모드로 전환합니다. 데이터 흐름 영역에 OLE DB 원본을 추가하고 SourceDB와 연결합니다.
이 때 중요한 것은 로컬 임시 테이블을 생성한 연결을 사용하면 안 된다는 것입니다. 반드시 다른 연결을 사용해야 합니다. 이번 예제에서 로컬 임시 테이블은 TargetDB에서 생성했고 지금 사용하는 연결은 SourceDB입니다.
테이블 또는 뷰에서 [Person].[Contact]를 선택합니다.
열 페이지를 열고 ContactID, FirstName 열만 남기고 모두 체크를 해제합니다.
5. 로컬 임시 테이블에 데이터를 입력합니다.
OLE DB 대상을 추가하고 OLE DB 원본과 연결합니다.
편집기를 열고 연결 관리자 페이지에서 속성을 편집합니다.
OLE DB 연결 관리자 |
TargetDB |
데이터 액세스 모드 |
테이블 또는 뷰 – 빠른 로드 |
테이블 또는 뷰 이름 |
[dbo].[TB_T1] |
매핑 페이지를 열어서 입력 열과 대상 열을 바르게 연결 해줍니다.
ContactID – COL1, FirstName – COL2
그런데 좀 이상한 부분이 있지 않습니까? 로컬 임시 테이블에 데이터를 입력한다고 하고서는 TB_T1에 데이터를 입력하고 있습니다. 뭐지? -_-???
로컬 임시 테이블은 자신을 생성한 세션이 연결되어 있는 사이에 유지됩니다. 따라서 지금 패키지를 구성하는 동안에는 로컬 임시 테이블을 불러오는 것이 불가능합니다. 하지만 SSIS는 메타 데이터의 검사를 위해서 어떤 대상을 지정해줘야만 합니다. 그래야 열 매핑도 가능하겠지요. 그래서 일단은 로컬 임시 테이블과 형태가 같은 TB_T1 테이블을 선택해서 SSIS에게 메타 데이터를 제공해주는 것 입니다.
그럼, 실제 로컬 임시 테이블은 어떻게 지정해주나요?
OLE DB 대상의 속성을 보겠습니다. OpenRowset 속성이 보이시나요? 앞선 편집기에서 드롭 다운 컨트롤에서 선택해서 지정한 테이블이 여기 있군요. 편집이 되나요? 오~ 되네요. 로컬 임시 테이블 이름으로 살짝 변경해보겠습니다.
[dbo].[TB_T1] à [dbo].[#T1]
간단하네~. 라고 생각한 순간 디자인 창을 보니 지정한 대상을 찾을 수 없다며 오류를 표시하고 있었습니다. 값을 변경한 사이 메타 데이터를 검사한 모양입니다.
다시 OLE DB 대상의 속성을 보겠습니다. ValidateExternalMetadata 라는 속성을 찾으셨나요? 그 값을 False로 변경하겠습니다. 이 속성을 False로 설정하는 것은 ‘실행할 때 오류 안 나는 걸 내가 보증하고 또 나더라도 내가 책임질 테니 실행 전에 이 컨트롤의 메타 데이터 검사는 하지 마라’ 는 의미가 되겠습니다.
6. 로컬 임시 테이블에 저장된 값을 확인하기 위해 확인 테이블에 로컬 임시 테이블의 값을 입력하겠습니다.
제어 흐름 디자인 모드로 돌아와서 SQL 실행 작업 태스크를 추가합니다.
OLE DB 타입으로 TargetDB로 연결 시켜주고 SQLStatement 속성에 다음 쿼리를 입력합니다.
|
7. 거의 완성입니다. 디버그 해보겠습니다.
에러가 났습니다. 글 첫 부분에 언급했던 연결 관리자의 속성 RetainSameConnection 의 값을 True로 변경해주지 않았기 때문에 발생한 에러입니다. SQL 실행 작업 태스크 실행 후 DB 접속을 끊었기 때문에 뒤에서 임시 테이블을 사용할 수 없는 것입니다.
TargetDB 연결의 RetainSameConnection 속성을 True로 변경하고 다시 실행해보겠습니다.
정상적으로 실행되었습니다. ^^=
'연구개발 > DTS & SSIS' 카테고리의 다른 글
SSIS의 트랜잭션에 대해서 (0) | 2009.06.20 |
---|---|
로컬 임시 테이블의 활용 (3) (0) | 2009.06.20 |
로컬 임시 테이블의 활용 (1) (0) | 2009.06.20 |
SSIS를 이용한 서버 성능 수집 프로세스 구현 - 메일 발송 (0) | 2009.06.20 |
SSIS를 이용한 서버 성능 수집 프로세스 구현 - 엑셀 내보내기 (0) | 2009.06.20 |