반응형


자식 패키지의 연결 정보경하기

 

한대성

MS SQL Server MVP

에이디컨설팅 책임 컨설턴트 | SQLLeader.com 운영자

 

 

 

 

 Question

Connection Managers 에 관련한 질문인에요.

예를 들어서 Sales 라는 패키지가 있는데요 이 패키지는 대략 4-5개의 서브 패키지를 호출합니다. 각각의 패키지들은 Connection Manager에 Source, DIL 이라는 연결이 만들어져있구요. 각각의 패키지들은 source라는 DB에서 data를 추출 DIL이라는 DB에 디멘젼이나 팩트 테이블을 형성합니다.
source와 DIL이라는 데이터베이스가 한개씩이 아니고 슈퍼마다 존재하는데요. 
일괄적으로 커넥션을 스위치 해줄수 있는 방법이 없을까해서 문의드립니다.

 

 

우선, 다음과 같이 자식 패키지를 간단히 만들겠습니다.

 

 

1.     테스트 확인을 위한 용도로 이용할 ServerName 이라는 문자열 변수를 추가합니다.

2.     연결 관리자에서 OLE DB 연결 추가한 , 연결의 이름을 DBConn 이라고 변경합니다.

3.     제어 흐름 영역에 SQL 실행 작업 추가한 , 다음과 같은 간단한 쿼리를 입력합니다.

 

SELECT @@ServerName AS ServerName

 

4.     SQL 실행 작업 편집기에서 ResultSet 속성을 단일 으로 변경하고, 결과 집합 탭에 다음과 같이 결과를 SSIS 변수로 받아오는 설정을 합니다.

 

 



 

5.     이제 스크립트 작업을 추가한 , SQL 실행 작업과 연결하고 ReadOnlyVariables 속성에 ServerName 이라는 변수를 추가합니다.

 

6.     VSA(Visual Studio for Application) 열어서 다음과 같은 간단한 스크립트를 입력합니다.

Imports System

Imports System.Data

Imports System.Math

Imports Microsoft.SqlServer.Dts.Runtime

 

Public Class ScriptMain

 

                 

 

                  Public Sub Main()

 

                            MsgBox(Dts.Variables("ServerName").Value.ToString)

 

                                   Dts.TaskResult = Dts.Results.Success

                  End Sub

 

End Class

 

 

완성되었으면 패키지를 실행해서 출력 결과를 확인해 봅시다.

 

 

이제부터 부모로부터 연결 정보를 받아오는 부분을 설정합시다.

Visual Studio 상단에 있는 메뉴 SSIS(S) à 패키지 구성(C) 선택해서 구성 설정 창을 엽니다.

 

패키지 구성 설정(E) 체크하고선 추가(A) 클릭한 , 다음과 같이 구성 유형을 부모 패키지 변수 설정하고 부모 변수(P) 부분에 부모 패키지의 변수 명을 설정합니다. 예제에서는 간단히 DBConn 이라 설정하겠습니다.

 


이제
다음(N) 눌러 부모 변수로부터 넘겨받은 값을 지정할 속성을 설정하도록 합니다. 어디에 설정하면 될까요?

아래와 같이 DBConn 연결의 ConnectionString 적용되도록 합니다.


 

다음(N) 눌러 구성에 대한 이름을 적절히 지정해주고선 구성 설정 작업을 완료합니다.

 

 

이제, 부모 패키지를 만들어봅시다.

패키지를 추가한 , 자식에게 넘겨줄 변수인 DBConn 이라는 문자형 변수를 추가합니다.

변수에 여러 값을 넘기도록 설정을 하겠습니다. Foreach 루프 컨테이너 여러 열거자(Enumerator) 유형을 이용해서 구현할 있겠지요. 예제에서는 Foreach 루프 컨테이너의 Item 열거자(Enumerator) 이용해서 간단히 직접 서버 정보를 입력하는 형태로 구성하도록 하겠습니다. 제어 흐름 영역에 Foreach 루프 컨테이너 하나 추가한 , 다음과 같이 설정합니다.


 

변수 매핑 탭에서 열거 값들을 저장할 변수를 설정해 줍니다.


 

확인 눌러 편집기를 닫은 , Forach 루프 컨테이너 내에 패키지 실행 작업 추가하고 위에서 만든 자식 패키지를 실행하도록 설정합니다.


 

실행해 봅시다!!

 

( 번째 루프)

 

 

( 번째 루프)


 

( 번째 루프)


 

 

예제에서는 DB 서버의 연결 전체를 변경하도록 설정하였습니다. 만약 DB 서버는 동일한데 DB 명만 다르다면 구성(Configuration) 설정에서 ConnectionString 속성 대신 InitialCatalog 변경하도록 설정하면 됩니다.


hosang yun 도와주셔서 감사합니다.
읽다보니 좀 궁금한 점이 있는데요.
제 가 예제를 따라할때는 연결설정이 없이 하다보니 패키지 구성 설정에서 부모로부터 물려받은 변수 값을 지정하는 부분에서 DBConn이라는 연결설정이 안보이더라구요. 첫 SQL 작업 편집기를 보면 이미 패키지 안에 DBConn이라는 커넥션이 존재하는 데요. 그 DBConn를 어떻게 만들어줘야하는건지 궁금합니다. OLEDB, FlatFile, ADO.NET등등 여러가지 설정중에 어떤것을 써야하는건지. 어떤식으로 초기화를 시켜줘야하는건지. 궁금합니다.
2008/03/17

한대성 "2. 연결 관리자에서 OLE DB 연결을 추가한 후, 이 연결의 이름을 DBConn 이라고 변경합니다."
다음과 같이 OLE DB 연결 설정을 하고 이름을 DBConn이라고 하라는 부분 있는데요...^^
2008/03/17

hosang yun 앗... 죄송합니다.. 정신없이 보다가 한줄 미스했네요..
덕분에 DB서버 이름과 DB 바꾸는 건 어느정도 감을 잡은거 같네요. ^^;;
한 가지 더 궁금한게 있는데요. 예제에서는 연결값을 하드코딩을 해서 자식패키지로 물려주는데요. 만약에 하드코딩이 아닌 부모 패키지에서 쓰고 있는 값을 그대로 자식 패키지로 물려준다고 할때, 커넥션 스트링 값이나 이니셜 카탈로그 값을 어떻게 변수 값으로 등록할수 있는지 그 방법을 알고 싶습니다.
2008/03/18

한대성 다음 글을 참고하세요~
http://www.sqlleader.com/mboard.asp?exec=view&strBoardID=SS2005SSIS&intSeq=1983
2008/03/18

반응형

+ Recent posts