2009. 7. 27. 10:57

SSIS::Foreach 이용한 장비별 동일 로직 반복 - ADO 열거자

DBA 작업을 하면서 장비별 동일 정보를 관리용으로 수집하고 싶은 경우가 종종 있게 된다.

연결 정보만 틀리고 동일한 로직을 호출하면 되는데 여러개의 데이터 흐름 작업을 만들고, 여러 연결 관리자를 만들게 되면 관리상의 이슈로 힘들어 지게 된다.

 

또한, 간혹 발생하게 될 장비의 IP 변경으로 인해 패키지를 다시 빌드해야 하는 단점도 발생하게 된다.

이런 점을 해결하기 위해 DB의 연결 정보를 파일로 처리하여 Foreach 루프 컨테이너의 ADO 연결자를 사용하여 장비별 동일 로직을 실행하는 예제를 만들어 본다.

 

- 한대성 님의 자료를 도움 받음 -

 

 

1. 관련 변수들을 선언한다.

object 변수와 파일에서 connection string 을 읽어올 변수는 필수이다. (obj_conn, file_conn)

 

 

 

2. conn_file01.txt 파일을 만들고  연결 스트링 정보를 입력한다.

연결정보에 관한 정보는 시스템에 맞게 입력

 

Data Source=ip 정보;User ID=;PWD=;Initial Catalog=db명;Provider=SQLOLEDB.1;Persist Security Info=True;Auto Translate=False;

 

 

 

3. 새 플랫 파일 연결관리자를 만들고 2번에서 입력한 파일을 읽을 수 있게 처리한다.

 

 

 

 

4. 플랫 파일 원본을 선택한 후 파일 연결관리자를 입력해서  connection string이 열로 출력되어 레코드 집합 대상을 만들 수 있게 처리해 준다.

 

 

5.  레코드 집한 대상에 VariableName 에 object 변수를 선택하여 파일에서 읽어온 정보가 해당 변수에 담아지도록 처리한다.

 

 

6. 파일 출력열이 맞는지 확인 한다.

 

 

 

7.  Foreach 루프 컨데이터를 이용해서 불러들인 연결 정보 만큼 동일 로직을 수행하게 작업 처리한다.

 

 

 

8.  ADO 연결자를 선택하고 원본 변수에 데이터 흐름 작업에서 connection string 정보를 담은 변수를 입력한다. 이 변수의 row 수 만큼 loop 작업이 실행되게 된다.

 

 

 

9.  ForEach 컨테이너에서 변수 매핑 을 클릭하고 출력되는 열을 변수에 담는다.

 

 

10.

담은 변수를 연결 관리자를 하나 만든다음에 실행된 DB의 커넥션 변수에 해당 변수를 매핑해 준다.

이로써 DB에 동적으로 연결 정보를 받아 작업이 실행될 수 있다.

 

 

 

 

11 SQL 실행작업을 하나 선택하고 DB를 연결관리자의 select @@servername을 실행하게 하고 출력된 결과를 스크립트 작업을 통해서 메세지 박스로 확인하는 작업이다.

 

해당 장비로 접속하여 실행되는 모습을 볼 수 있다.

 

 

'Business Inteligence (SSIS)' 카테고리의 다른 글

SQL2008에서 SQL2000 DTS열기  (0) 2010.06.07
For컨테이너-무한루프  (0) 2010.06.03
스크립트task사용  (0) 2010.06.03
Debugging and Logging in SSIS  (0) 2010.06.03