패키지 실행 작업 및 DTS 2000 패키지 실행 작업
SQL 2005 SSIS에서는 패키지 실행 작업을 이용하여 SQL 2005 SSIS 패키지를 호출하여 실행할 수 있으며, DTS 2000 패키지 실행 작업을 이용하여 SQL 2000 DTS 패키지를 사용할 수 있습니다.
패키지 호출 기능은 다음과 같이 이용할 수 있습니다.
1. 복잡한 데이터 추출 프로세스 또는 대규모의 데이터 처리 프로세스의 각 작업들을 작은 단위로 분리하여 관리할 수 있습니다. 데이터 웨어하우스(DW) 환경을 예로 설명하겠습니다. 데이터 웨어하우스에 데이터를 적재하기 위해 전체 추출 단계를 하나의 패키지로 만들 수도 있습니다. 하지만 이렇게 하나의 패키지로 만든 경우, 유지 관리나 추가 개발 등의 작업을 수행하는 데 상당한 어려움이 있습니다. 전체 프로세스를 하나로 만드는 대신 주제별로 패키지를 만든 후, 마스터 패키지(=부모 패키지)에서 각각의 개별 패키지(=자식 패키지)를 호출하는 방식으로 관리한다면 보다 효율적으로 개발 및 운영할 수 있습니다.
2. 패키지 보안을 이용할 수 있습니다. 만약 데이터 추출 프로세스 중 중요한 부분이 공개되면 안 되는 경우, 해당 부분만을 별도의 패키지로 만든 후, 패키지 호출 작업으로 해당 부분을 호출하도록 할 수 있습니다. 어플리케이션에서 중요한 기능을 DLL이나 컴포넌트 등으로 만들어 소스는 볼 수 없는 대신, 기능만을 사용하도록 하는 방식과 유사합니다. 별도로 만든 패키지에는 SSIS에서 기본적으로 제공하는 암호 설정 기능을 이용하여 조회나 수정이 불가능하도록 설정할 수 있습니다.
3. 작업 수행 및 관리가 용이합니다. 예를 들어, 매일 수행해야 할 패키지가 10개가 있다고 가정합니다. 각 패키지를 수행하도록 하기 위해서는 10개의 SQL Agent 작업을 만들어 줘야 합니다. 만약 각 패키지 간에 수행되는 순서가 정해져 있다든지, 서버의 부하를 주지 않기 위해 동시에 수행해야 할 패키지의 수를 제한해야 한다면, SQL Agent 작업을 수행하는 데 추가적으로 작업 수행 관리 부분을 만들어줘야 할 것입니다. 이런 방법 대신 하나의 마스터 패키지(=부모 패키지)를 만든 후, 패키지 실행 작업을 이용하여 10개의 개별 패키지(=자식 패키지)를 호출하도록 만들 수 있습니다. 패키지가 수행되어야 하는 순서나 동시에 수행 가능한 패키지 수를 쉽게 조절할 수 있으며, 또한 SQL Agent에는 단지 하나의 작업만 등록하면 됩니다.
패키지를 호출하는 패키지를 부모 패키지라 하고, 호출 당하는 패키지를 자식 패키지라 하겠습니다. 부모 패키지는 자식 패키지에게 값을 전달할 수 있으며, 자식 패키지에서는 이 값을 넘겨 받아 사용할 수 있습니다. 예를 들어, 부모 패키지에서 자식 패키지를 호출하면서 자식 패키지 내에 정의된 rundate 라는 변수에 20060807 이라는 값을 설정하여 호출할 수 있습니다. (물론 이와 반대로, 자식 패키지에서 수행된 결과값을 부모 패키지에서 읽어올 수 있는 방법도 있습니다만, 기본적으로 제공되는 방법으로 구현하는 것이 아니라 다른 트릭을 이용하는 방법이기 때문에 추후에 다루도록 하겠습니다.) 부모 패키지가 자식 패키지의 값을 설정하는 방법은 아래 부분에 있는 따라하기를 참고하시기 바랍니다.
패키지 실행 작업
패키지 실행 작업은 DTS 2000 패키지 실행 작업과 비교해 볼 때 단순합니다. 이는 자식 패키지에 전달할 변수를 지정하는 방식이 다르며, 패키지를 호출하는데 이용하는 연결은 연결 관리자에 있는 OLE DB 연결을 이용하기 때문입니다.
Ÿ Location – 호출할 패키지가 저장된 형태를 지정합니다.
ú SQL Server – DB(msdb)에 저장되어 있는 경우, Connection 속성에서 OLE DB 연결을 지정합니다. 이 때, 이 OLE DB는 msdb를 지정하는 연결일 필요는 없습니다.
ú 파일 시스템 – 파일 형태(*.dtsx)로 저장된 패키지를 호출하는 경우, Connection 속성에서 파일 연결을 지정합니다.
Ÿ Connection – 패키지를 호출할 연결을 설정합니다.
Ÿ PackageName – Location의 값이 SQL Server인 경우, 호출할 패키지를 지정합니다.
Ÿ Password – 호출할 패키지에 암호가 설정되어 있는 경우, 암호를 지정합니다.
Ÿ ExecuteOutOfProcess – 패키지를 호출하여 실행할 때, 현재의 프로세스 내에서 실행할 지, 별도의 프로세스를 만들지를 설정합니다. 만약 이 속성값을 true로 설정하게 되면 패키지 호출 시 별도의 dtshost.exe 프로세스가 호출되어 패키지가 실행되며, 부모 패키지와는 별도의 메모리 및 쓰레드를 가지게 됩니다.
DTS 2000 패키지 실행 작업
DTS 2000 패키지 실행 작업은 SSIS 패키지에서 SQL 2000 DTS 패키지를 호출하는 작업 개체입니다. SQL 2000 DTS 패키지가 복잡하거나 동적 속성 작업, 호환되지 않는 ActiveX 스크립트 작업 등이 포함되어 기존 DTS 패키지를 그대로 사용해야 하는 경우 이 작업 개체를 이용할 수 있습니다.
msdb에 저장되어 있는 패키지를 호출하거나 확장자가 .dts 인 파일 형태로 저장된 패키지 파일을 호출할 수 있습니다. 또한 현재의 SSIS 패키지에 기존 패키지를 포함시켜 수행할 수 있는 옵션도 있습니다.
SQL 2000 DTS 패키지를 사용하기 위해서는 DTS 2000 런타임 엔진이 설치되어 있어야 하며, 다음 링크를 참고하여 설치하시기 바랍니다.
Ÿ 연결 – StorageLocation 이 SQL Server 인 경우에만 나타납니다. DTS 2000 패키지 실행 작업에서는 연결 관리자의 연결을 사용하지 않고 직접 Server 및 패키지를 지정합니다.
SQLServer – 패키지가 저장된 서버를 지정합니다.
AuthentificationMode – 서버의 인증 방식을 설정합니다.
UserName – 인증 방식이 SQL Server 인 경우, 로그온 아이디를 입력합니다.
Password – 인증 방식이 SQL Server인 경우, 로그온 패스워드를 입력합니다.
Ÿ 위치
StorageLocation – 호출할 패키지의 형태를 지정합니다. 구조적 저장소로 선택한 경우에는 패키지가 .dts 인 패키지 파일을 설정해야 하며, 작업에 포함으로 선택한 경우 선택한 패키지가 현재의 SSIS 패키지에 포함됩니다.
Ÿ 일반
Name – 패키지 실행 작업의 이름을 설정합니다.
Description – 패키지 실행 작업의 설명을 설정합니다.
Ÿ 패키지
PackageName – 호출할 패키지 명을 지정합니다.
PackagePassword – 패키지가 암호화 되어 있는 경우, 암호를 입력합니다.
PackageID – 패키지 계보를 나타냅니다. DTS 패키지는 패키지 자체에서 버전 관리가 되기 때문에 동일한 이름의 패키지 이더라도 서로 다른 계보를 가질 수 있습니다.
내부 변수와 외부 변수는 SQL 2000 DTS와 동일한 사항입니다. 내부 변수와 외부 변수는 자식 패키지의 속성 값을 설정하는데 이용한다는 공통점이 있습니다. 하지만, 다음과 같은 차이점이 있습니다.
Ÿ 내부 변수 – 부모 패키지에서 자식 패키지에 대한 변수 값을 지정할 수 있으며, 유형을 변경할 수 있습니다. 하지만, 이러한 값 지정 작업은 정적인 작업으로, 패키지 개발 시점에 고정적으로 지정하는 것이며, 런타임 시 변경되는 값을 할당하기 위해서는 외부 변수를 사용해야 합니다.
Ÿ 외부 변수 – 부모 패키지의 변수 값을 자식 패키지로 전송할 때 설정합니다.
따라하기 – SQL 2005 부모 패키지에서 SQL 2005 자식 패키지를 호출하기 및 변수 전달하기
본 예제에서는 SQL 2005 SSIS 패키지(부모 패키지)에서 또 다른 SQL 2005 SSIS 패키지(자식 패키지)를 호출하는 것과, 부모 패키지에서 자식 패키지에게 변수를 넘기는 작업을 만들어 보겠습니다.
1. BIDS(Business Intelligence Development Studio)를 실행시켜서 빈 Integration Services 프로젝트를 엽니다. (기존의 프로젝트를 계속 사용하여도 됩니다.) 작업 창의 오른쪽에 있는 솔루션 탐색기 중 SSIS 패키지 부분에서 자식패키지.dtsx 라는 이름으로 패키지 파일을 하나 추가합니다. 오른 쪽의 속성 창에서 해당 패키지 파일이 어디에 저장되었는지를 확인합니다.
(필자의 데모 파일은 D:\SSIS\Integration Services 프로젝트1\자식패키지.dtsx 에 저장하였습니다.)
2. 제어 흐름 영역에서 마우스 오른쪽 클릭을 하여 나타나는 메뉴 중 변수(S)를 선택한 후, 변수 창에서 Var1 이라는 String형 변수를 하나 추가하고, 값을 “자식 패키지” 라고 지정합니다.
3. 도구 상자에서 스크립트 작업을 추가한 후, 스크립트 작업 편집기에서 ReadOnlyVariables 속성에 Var1을 추가합니다. 그리고, 스크립트 디자인(S)을 클릭한 후, 스크립트 작업 편집기 내의 Main() 클래스 내에 다음과 같은 간단한 스크립트를 추가합니다.
MsgBox(Dts.Variables("Var1").Value)
4. 패키지를 저장한 후, 테스트로 수행해 봅니다.
이제 부모 패키지의 변수 값을 받아오는 부분을 설정하겠습니다. 이 부분에서는 SSIS의 구성 기능을 이용하게 됩니다. 구성은 기본 강좌 후반부에서 자세히 다루도록 하겠습니다.
5. BIDS 상단의 메뉴 중, SSIS(S) à 패키지 구성(C)를 선택합니다.
6. 패키지 구성 도우미 창에서 패키지 구성 설정(E)을 체크한 후, 아래에 있는 추가(A) 버튼을 눌러 패키지 구성 마법사를 시작합니다.
7. 패키지 구성 마법사에서 구성 유형(T)을 부모 패키지 변수로 지정하고, 구성 설정을 직접 지정, 부모 변수를 ParentVar1로 지정합니다.
8. 다음을 눌러 대상 속성 선택 창이 나타나면, 개체 부분에서 변수 à Var1 à Properties à Value를 선택합니다.
9. 다음을 눌러 구성 이름을 지정한 후, 구성 설정을 마칩니다.
10. 작업 창의 오른쪽에 있는 솔루션 탐색기 중 SSIS 패키지 부분에서 부모패키지.dtsx 라는 이름으로 패키지 파일을 하나 추가합니다.
11. 변수 창에서 ParentVar1 이라는 String형 변수를 하나 추가하고, 값을 “부모 패키지” 라고 지정합니다.
12. 도구 상자에서 패키지 실행 작업을 선택하여 제어 흐름에 추가한 후, 패키지 실행 작업 편집기에서 수행할 자식 패키지를 설정합니다.
Location 은 파일 시스템이며, Connection 속성을 클릭한 후, <새 연결..>을 선택하여 나타나는 파일 연결 관리자 편집기에서 사용 유형을 기존 파일로 지정하고, 1단계에서 확인한 경로로 자식 패키지 파일을 지정합니다.
13. 패키지를 수행하여 나타나는 메시지를 확인합니다.
따라하기 – SQL 2005 부모 패키지에서 SQL 2000 자식 패키지를 호출하기 및 변수 전달하기
여기서는 SQL 2005 SSIS 패키지(부모 패키지)에서 SQL 2000 DTS 패키지(자식 패키지)를 호출하는 것과, 부모 패키지에서 자식 패키지에게 변수를 넘기는 작업을 만들어 보겠습니다.
1. SQL 2000 DTS 패키지를 하나 만든 후, DTS 패키지 속성 à 전역 변수 탭에서 DTSVar이라는 String형 변수를 추가하고, 값을 “DTS자식 패키지”라고 지정합니다.
2. ActiveX 스크립트 작업을 하나 추가한 후, 스크립트 부분에 다음과 같은 코드를 추가합니다.
msgbox DTSGlobalVariables("DTSVar")
3. 확인을 누른 후, 패키지를 SamplePackage1로 저장합니다. (필자의 경우, localhost\ss2000 인스턴스에 저장되었습니다.)
4. BIDS 작업 창의 오른쪽에 있는 솔루션 탐색기 중 SSIS 패키지 부분에서 부모패키지2.dtsx 라는 이름으로 패키지 파일을 하나 추가합니다.
5. 변수 창에서 DTSVar 라는 String형 변수를 하나 추가하고, 값을 “부모 패키지” 라고 지정합니다. 이 때, 변수의 이름은 반드시 1단계에서 지정한 이름과 동일해야 합니다. (대소문자 구분)
6. 도구 상자에서 DTS 2000 패키지 실행 작업을 선택한 후, 제어 흐름 영역에 추가합니다.
7. DTS 2000 패키지 실행 작업 편집기의 일반 탭에서 연결 부분을 DTS 패키지가 저장된 서버의 정보로 설정한 후, 아래 부분에 있는 PackageName 부분에 수행할 DTS 패키지를 지정합니다.
8. 외부 변수 탭에서 아래에 있는 새로 만들기(N) 버튼을 클릭한 후, 이름 부분에서 사용자::DTSVar 변수를 설정합니다.
9. 확인을 눌러 창을 닫고 패키지를 실행하여 출력되는 메시지를 확인합니다.
부모 패키지에서 자식 패키지를 호출하는 방식으로 전체 프로세스를 구축하는 방식은 패키지를 개발하거나 관리할 때 상당히 유용할 수 있습니다. 아무리 복잡한 프로세스 이더라도, 연관 있는 작업들끼리 묶어서 개별 패키지들로 분리한 후, 이런 패키지들을 관리하는 부모 패키지를 만들어 운용하는 것이 여러모로 효과적일 수 있습니다.
SQL 2000 DTS에서 자식 패키지가 부모 패키지로부터 값을 전달받을 때에는 그 역할 설정을 모두 부모 패키지에서 해 주었습니다. 하지만 SQL 2005 SSIS에서는 자식 패키지에서 패키지 구성 기능을 이용하여 이러한 설정을 해 줘야 하며, 부모 패키지에서는 설정을 하지 않습니다.
'연구개발 > DTS & SSIS' 카테고리의 다른 글
기본 강좌 16 - 대량 삽입 작업XML 작업 (0) | 2009.06.20 |
---|---|
기본 강좌 15 - XML 작업 (0) | 2009.06.20 |
기본 강좌 13 - 스크립트 작업 (0) | 2009.06.20 |
기본 강좌 12 - WMI 이벤트 감시자 작업 (0) | 2009.06.20 |
기본 강좌 11 - WMI 데이터 판독기 작업 (0) | 2009.06.20 |