반응형
반응형

메일 보내기 작업

 

메일 보내기 작업 SMTP를 이용하여 메일을 보낼 수 있는 작업 개체입니다. SQL 2000 DTS에서 메일 보내기 작업 MAPI(Messaging Application Program Interface)를 이용하기 때문에 메일을 보내기 위해서는 서버에 아웃룩(Outlook)이 설치되어 있어야 합니다. SQL 2005 SSIS메일 보내기 작업 SMTP를 이용하기 때문에 별도로 아웃룩을 설치할 필요가 없으며, 다른 서버의 SMTP 서비스를 이용할 수 있기 때문에 서버에 별도의 메일 관련 서비스를 실행시킬 필요가 없습니다.

 

메일 보내기 작업에서는 연결 관리자 내의 SMTP 연결을 사용합니다. SMTP 연결 SMTP 서비스가 운영되는 서버 명 및 인증 방법만 지정해 주면 됩니다.

 

 

 

 

 

Ÿ           메일

SmtpConnection – SMTP 연결을 지정합니다.

From – 메일을 보내는 사람의 메일 주소

To – 메일을 받는 사람의 메일 주소. 받는 사람이 여러 명일 경우, 세미콜론(;)으로 구분하여 입력합니다.

Cc – 참조 메일 주소.

BCc – 숨은 참조 메일 주소.

Subject – 메일 제목

MessageSourceType – 메일 본문 저장 형태를 지정합니다.

ú           직접 입력 직접 텍스트 형식으로 입력합니다.

ú           파일 연결 텍스트 형식으로 저장된 파일을 이용합니다.

ú           변수 본문 내용이 저장된 변수를 지정합니다.

MessageSource – 메일 본문 내용

Priority – 메시지의 우선 순위

Attachments – 첨부 파일

 

메일 보내기 작업은 데이터 추출 프로세스에서 결과를 전송 받거나 최종 보고서를 보내는 작업에서 많이 이용됩니다. SQL 2000 DTS에서 MAPI가 설정이 안된 경우, xp_sendmail과 같은 저장 프로시저를 이용하거나, ActiveX 스크립트 작업에서 CDO 개체를 만들어 이용하는 방법도 사용하였습니다. SQL 2005 SSIS에서는 SMTP를 이용하기 때문에 작업을 사용하는데 훨씬 용이해졌으며, 작업 설정도 상당히 편리해 졌습니다.

 

메일 내용(MessageSource)은 직접 변수의 내용을 사용하도록 설정하여 동적으로 지정할 수 있지만, 메일 제목(Subject)이나 첨부 파일(Attachments)메일 탭에서 직접 설정할 수 없습니다. 예를 들어, 메일 제목을 결과 보고서 2006 8 13이나 첨부 파일을 D:\Reports\Report_20060813.xls등과 같이 동적인 값으로 지정하는 경우입니다. 이럴 경우, 패키지에 공통으로 포함된 기능인, 식 탭에 있는 Expressions 속성을 이용하면 쉽게 설정할 수 있습니다.

 

반응형
반응형

프로세스 실행 작업

 

 프로세스 실행 작업은 데이터 처리 프로세스 내에서 윈도우 어플리케이션 또는 콘솔 어플리케이션을 호출하는 작업 개체입니다. 예를 들어, 압축된 형태로 된 데이터 파일을 FTP를 이용하여 가져온 후, 압축을 해제하는 프로그램을 이용하여 이 파일의 압축을 풀어야 하는 경우도 있습니다. 해당 프로그램을 실행할 때에는 압축 파일 명이나 출력 대상 경로 지정과 같은 입력 매개 변수를 설정하며, 경우에 따라서는 프로그램의 실행 결과값을 변수에 저장하거나, 오류 정보를 관리해야 할 수 있습니다. SQL 2000 DTS에서도 프로세스 실행 작업은 있었으나, SQL 2005 SSIS에서는 훨씬 다양한 옵션을 가진 작업 개체로 향상되었습니다.

 

 

Ÿ           프로세스

RequireFullFileName – 프로그램을 실행할 때 전체 경로가 필요한지를 설정합니다. 만약 이 값을 True로 설정한 후, 전체 경로에 해당 파일이 없으면 실패가 됩니다. 이 속성은 다음과 같은 경우에 유용합니다. 윈도우의 PATH 속성에 포함된 경로에 있는 프로그램들 (notepad.exe 또는 mapaint.exe)은 전체 경로를 지정하지 않아도 수행이 됩니다. 예를 들어, 사용자가 notepad.exe라는 이름의 프로그램을 만든 후 특정 폴더에 저장하고, 이 폴더에 있는 해당 프로그램이 실행되도록 해야 하는 경우, RequireFullFileName 의 속성을 True로 설정하고 Executable에 전체 경로가 포함된 프로그램 경로를 지정합니다

Executable – 실행할 프로그램 명입니다. 프로그램이 위치한 전체 경로가 포함되는 것이 일반적이며, 윈도우의 PATH 속성에 포함되어 있는 프로그램들을 실행시키는 경우, 단순히 프로그램 이름 및 확장자 명만을 입력해도 됩니다. ( : notepad.exe) 프로그램 명에서는 입력 매개변수 또는 출력 매개변수를 지정할 수 없습니다.

Arguments – 프로그램 실행 시 지정할 명령 프롬프트 인수를 지정합니다.

WorkingDirectory – 프로그램이 실행될 작업 폴더를 지정합니다. 특정 폴더에서 해당 프로그램이 실행하도록 해야 하는 경우, 이 속성값을 지정합니다.

StandardInputVariable – 프로그램에 입력 변수로 전달할 사항이 포함된 SSIS 변수를 지정합니다. Arguments에 직접 변수를 쓰는 대신, SSIS자형 변수에 입력 값을 저장해 놓은 후, 이 속성에서 해당 변수를 지정하면 됩니다. 예를 들어, expand.exe라는 압축 실행 프로그램을 수행할 것이며, 이 때 입력 매개 변수인 압축 파일명은 앞 단계에서 지정이 되어야 하는 경우를 고려해 봅시다. Executable의 속성 값을 expand.exe로 지정한 후, SSIS에서 FileName이라는 문자형 변수에 d:\data_0813.cab 라는 값을 설정합니다. 이 후, StandardInputVariable 속성에서 [사용자::FileName]으로 지정해 주면 됩니다.

StandardOutputVariable – 프로그램이 출력된 후의 결과를 SSIS의 변수에 저장하도록 설정합니다.

StandardErrorVariable – 프로그램 수행 중 발생된 에러 정보를 SSIS 변수에 저장하도록 설정합니다. 이 속성을 이용하여 에러 핸들링과 같은 단계를 수행할 수 있습니다. 예를 들어 expand.exe를 이용하여 압축 파일을 풀려고 할 때, 해당 파일이 다른 프로그램에서 사용 중이어서 잠금이 발생이 되어 수행이 실패했다고 가정합시다. 이러한 실패 결과를 사용자 변수에 저장시키고, 뒷 단계에서 해당 변수 값의 내용을 판단하여 공유 잠금으로 인한 에러인 경우, 다시 시도하도록 설정할 수 있습니다.

FailTaskIfReturnCodeIsNotSuccessValue – 프로그램이 종료가 되면 결과 값을 반환합니다. 일반적인 결과 값은 0입니다. 만약 프로그램이 반환한 결과값이 SuccessValue의 결과값과 다른 경우에 해당 작업을 실패로 처리할 지를 설정합니다.

SuccessValue - 성공을 표시하기 위해 실행 파일에서 반환하는 값을 지정합니다. 기본적으로 이 값은 0으로 설정됩니다.

TimeOut – 프로그램이 실행될 수 있는 시간()을 지정합니다. 0으로 지정하면 시간 제한 없이 프로그램이 완료되거나 오류가 발생할 때까지 수행되도록 한다는 것을 의미합니다.

TerminateProcessAfterTimeOut - TimeOut 속성에 지정한 제한 시간 후의 프로그램을 강제로 종료할 지를 설정합니다. 이 옵션은 TimeOut 0이 아닌 경우에만 사용할 수 있습니다.

WindowStyle – 프로그램이 실행될 때의 창의 모습을 지정합니다.

 

 

SQL 2000 DTS에서는 프로그램을 실행시킬 때 동적 속성 작업이나 ActiveX 스크립트 작업을 이용하여 프로세스 실행 작업의 매개 변수 값을 변경하는 방식으로 동적인 작업을 구현하였습니다. 실제 예로, Filter.exe 라는 웹 로그 프로그램에 대해 처리시간을 지정하는 입력 매개 변수를 지정할 때 다음과 같은 형태의 ActiveX 스크립트 작업을 이용하였습니다.

 

 

 

만약 이 경우, SSIS프로세스 실행 작업을 이용하는 경우, StandardInputVariable의 값에 [사용자::작업시간]이라는 변수를 바로지정해 주면 됩니다.

 

 

 

 


반응형
반응형

대량 삽입 작업

 

대량 삽입 작업 SQL ServerBULK INSERT 문이나 bcp.exe 유틸리티와 같이 텍스트 형식의 데이터 파일(=플랫 파일) SQL Server로 입력하는 작업 개체 입니다. 텍스트 파일을 SQL Server로 입력한다는 점에서는 데이터 흐름 작업에 포함될 수 있는 부분이지만, 이 작업은 제어 흐름 영역에서 수행이 되며, 별도의 데이터 흐름에서 수행되는 것은 아닙니다. 데이터 흐름을 사용하지 않기 때문에 단순히 원본인 텍스트 파일에서 대상인 SQL Server로 입력하는 작업만 가능하며, 가공이나 집계, 정렬 등과 같은 변환 기능은 구현할 수 없습니다. 하지만, 데이터 처리 준비 작업 등과 같이 단순히 텍스트 형태의 데이터 파일을 SQL Server에 입력하는 작업인 경우, 대량 삽입 작업을 이용하는 것이 단순하며 성능에서도 다른 방식에 비해 우수할 수 있습니다.

 

 

대량 삽입 작업 편집기 내에 있는 연결 탭과 옵션 탭에서 대량 삽입 작업에 대한 속성을 설정합니다.

 

연결

 

 

연결 탭에서는 원본 및 대상, 원본의 서식을 설정합니다.

Ÿ           대상 연결
Connection –
원본 텍스트 파일로부터 읽어 들인 데이터를 입력할 대상 테이블을 지정합니다. 연결 관리자OLE DB 연결을 사용합니다.
DestinationTable –
대상 테이블을 지정합니다.

 

Ÿ           서식

Format – 대량 삽입 작업을 위한 서식의 형태를 선택합니다.

ú           파일 사용 서식이 지정된 파일을 사용합니다. BULK INSERT 문에서 WITH (FORMATFILE = …) 옵션과 동일합니다.

ú           지정 직접 RowDelimeter ColumnDelimerer의 속성을 지정합니다.

RowDelimeter – 행 구분자를 설정합니다.

ColumnDelimeter – 열 구분자를 설정합니다.

 

Ÿ           원본 연결
File –
연결 관리자파일 연결을 사용하여 원본으로 사용될 텍스트 파일을 지정합니다.

 

 

 

옵션

 

 

옵션 탭에서는 CodePage FileType 등과 같이 대량 삽입 작업에 대한 고급 설정을 할 수 있습니다. 대부분의 경우, 기본값으로 직업이 수행할 수 있습니다. 하지만, MaxErrors 등과 같이 대량 삽입 작업 시 허용할 에러 수 등을 지정할 때 이용할 수 있습니다.

 

Ÿ           고급 옵션

CodePage

ú           ACP - char, varchar 또는 text 데이터 형식의 열은 ANSI/Microsoft Windows 코드 페이지(ISO 1252)에서 SQL Server 코드 페이지로 변환됩니다.

ú           OEM - char, varchar 또는 text 데이터 형식의 열은 시스템 OEM 코드 페이지에서 SQL Server 코드 페이지로 변환됩니다.

ú           RAW – 다른 코드 페이지로의 변환이 이루어지지 않는 가장 빠른 옵션입니다.

ú           기타 코드 페이지 특정 코드( : 949)로 변환됩니다.

 

DataFileType

ú           char – 일반 문자 형식

ú           native - 네이티브(데이터베이스) 데이터 형식. bcp 유틸리티로 SQL Server 에서 데이터를 대량 로드하여 네이티브 데이터 파일을 만들 수 있습니다. 네이티브 형식은 char 형식보다 더욱 성능이 뛰어납니다.

ú           widechar – 유니코드 문자

ú           widenative - 데이터가 유니코드로 저장되는 네이티브(데이터베이스) 데이터 형식. char, varchar text 열은 제외됩니다. bcp 유틸리티로 SQL Server 에서 데이터를 대량 로드하여 widenative 데이터 파일을 만듭니다. widenative 값은 widechar 값을 대체하여 보다 뛰어난 성능을 제공합니다. 데이터 파일에 ANSI 확장 문자가 포함되어 있으면 'widenative'를 지정하십시오.

 

BatchSize - 일괄 처리의 행 수를 지정합니다. BatchSize 0으로 설정하면 데이터가 단일 일괄 처리로 로드됩니다.

 

LastRow - 삽입할 마지막 행의 번호를 지정합니다. 기본값은 0이며 이는 지정한 데이터 파일의 마지막 행을 가리킵니다.

 

FirstRow - 삽입할 첫 번째 행의 번호를 지정합니다. 기본값은 1이며 이는 지정한 데이터 파일의 첫 번째 행입니다.

 

 

Ÿ           옵션

Options

ú           CHECK 제약 조건 대량 삽입 작업 중에 대상 테이블 또는 뷰의 모든 제약 조건을 확인하도록 지정합니다.
CHECK
제약 조건 옵션을 지정하지 않으면 모든 CHECK 제약 조건이 무시됩니다. UNIQUE, PRIMARY KEY, FOREIGN KEY 또는 NOT NULL 제약 조건은 항상 적용됩니다.

ú           Null 유지 삽입된 열에 기본값이 지정되지 않도록 하며, 빈 열인 경우 Null 값을 유지하도록 지정합니다.

ú           ID 삽입 가능 – Identity 열에 데이터를 입력할 경우, 가져온 데이터 파일의 ID값이 ID열에 사용되도록 지정합니다. ID 삽입 가능을 체크하지 않는 경우, 이 열의 ID값은 확인하지만, 가져오지는 않습니다.

ú           테이블 잠금 대량 삽입 작업이 진행되는 동안 테이블 수준 잠금을 보유하도록 지정합니다. 테이블에 인덱스가 없고 TABLOCK이 지정되어 있으면 여러 클라이언트가 동시에 테이블을 로드할 수 있습니다. 기본적으로 잠금 동작은 table lock on bulk load 테이블 옵션에 의해 결정됩니다. 대량 로드 작업이 진행되는 동안에만 잠금을 보유하면 테이블에 대한 잠금 경합이 줄어들고 성능이 크게 향상됩니다.

ú           트리거 실행 대량 삽입 작업 중에 대상 테이블에서 정의된 삽입 트리거가 실행되도록 지정합니다. 트리거가 대상 테이블의 INSERT 작업에 대해 정의되면 완료된 모든 일괄 처리에 대해 발생합니다.

 

SortedData - 데이터 파일의 데이터 정렬 방법을 지정합니다. 로드된 데이터가 테이블의 클러스터형 인덱스에 따라 정렬되면 대량 삽입 작업의 성능이 향상됩니다. 데이터 파일을 다른 순서로 정렬하거나 테이블에 클러스터형 인덱스가 없으면 ORDER 절이 무시됩니다. SortedData 속성에서 지정된 열 이름은 대상 테이블의 열이어야 합니다. 예를 들어 테이블에 Seq라는 열에 대해 클러스터형 인덱스가 설정되어 있고, 데이터 파일이 Seq 순서대로 정렬되어 있는 경우, SortedData의 속성 값을 Seq로 지정해 주면 성능이 향상될 수 있습니다.

 

MaxErrors - 대량 삽입 작업을 취소하기 전까지 데이터에서 허용되는 최대 구문 오류 수를 지정합니다. 대량 삽입 작업으로 가져올 수 없는 각 행은 무시되고 하나의 오류로 계산됩니다. max_errors를 지정하지 않으면 기본값은 0입니다.

 

 

반응형
반응형

XML 작업

 

 SQL 2005 SSIS에 포함되어 있는 XML 작업 XML 파일과 관련되어 다양한 작업을 수행할 수 있는 작업 개체입니다.

XML 데이터를 조회하거나, 변경, 병합 또는 새로운 XML 결과 파일을 생성할 수 있습니다.

 

XML 작업 개체를 이용하여 다음과 같은 작업을 수행할 수 있습니다.

 

Ÿ   여러 XML 데이터를 병합하여 하나의 XML 파일로 병합하는 작업

Ÿ   XSLT Style Sheet을 이용하여 XML 파일의 결과값 출력 작업

Ÿ   XPATH를 이용한 XML 파일 내의 데이터 조회 작업

Ÿ   서로 다른 두 개의 XML 파일들에 대한 비교 및 XML Diffgram 파일에 해당 차이점 기록 작업

Ÿ   XML 파일에 대한 유효성 검사 작업

 

 

XML 작업의 속성 편집기 창에는 다른 작업들에 비해 상당히 많은 속성을 지정할 수 있으며, 작업 유형(OperationType)에 따라 각 작업 속성의 의미가 달라집니다.

 

 

 

 

 

공통 속성

Ÿ           입력

OperationType – XML 작업의 유형을 설정합니다. 작업 속성은 다음과 같습니다.

ú           Validate - DTD(문서 유형 정의) 또는 XSD(XML 스키마 정의) 스키마와 비교하여 XML 문서의 유효성을 검사합니다.

ú           XSLT – 원본 XML 문서를 XSL Style Sheet에 지정된 형태로 출력합니다.

ú           XPATH – XPATH라는 XML 데이터 조회 문을 이용하여 원본 XML 문서에 있는 데이터를 조회합니다.

ú           Merge – 두 개의 XML 문서를 병합합니다.

ú           Diff – 두 개의 XML 문서를 비교합니다. 비교 작업은 다양한 수준으로 설정할 수 있습니다.

ú           Patch – 비교 작업에서 두 문서간의 비교 결과인 XDL Diffgram 출력을 생성한 경우, 이 결과를 이용하여 원본에 대해 변경 작업을 수행한 후, 새로운 결과를 생성합니다.

ú           SourceType – 원본 XML에 대한 형태를 지정합니다. 변수, 직접 입력, 파일 연결로 설정할 수 있습니다.

 

Ÿ           출력
SaveOperationResult –
결과를 저장할 것인지를 설정합니다. True로 설정한 경우, OperationResult 속성 부분에서 결과 파일 형태를 지정할 수 있습니다.

 

 

 

OperationType = Validate

원본 XML 문서에 대한 유효성을 체크합니다.

 

Ÿ           유효성 검사 옵션

ValidationType – 유효성 검사 작업 유형을 설정합니다.

ú           DTD – DTD(Document Type Definition)를 사용합니다.

ú           XSD – XSD(XML Schema Definition)를 사용합니다. 이 경우, XSD 스키마 파일을 지정해 줘야 합니다

FailOnValidationFail – 유효성 검사 결과가 실패(유효하지 않음)인 경우, XML 작업을 실패로 처리할 지를 설정합니다.

 

 

 

OperationType = XSLT

XSLT XML 문서를 다른 형태의 XML 형태 또는 문서 형태로 출력하기 위한 변환 언어로 작성된 문서입니다. OperationType 속성 값을 XSLT로 지정한 후, XSLT 문서를 설정하여, 원본 XML 문서를 사용자가 원하는 형태로 출력할 수 있습니다.

 

Ÿ           두 번째 피연산자
XSLT
문서를 지정합니다..

 

 

 

OperationType = XPATH

XPATH 쿼리를 이용하여 원본의 XML 데이터의 값을 조회합니다.

 

Ÿ           XPath 옵션
PutResultInOneNode –
결과를 단일 노드에 쓸지를 설정합니다.

PutResultInOneNode = True 인 경우

<ResultRootNode>

 <Address AddressID="497" AddressLine1="#9900 2700 Production Way" />

 <Address AddressID="13079" AddressLine1="081, boulevard du Montparnasse" />

</ResultRootNode>

PutResultInOneNode = False 인 경우

<Address AddressID=”497” AddressLine1=”#9900 2700 Production Way” />

<Address AddressID=”13079” AddressLine1=”081, boulevard du Montparnasse” />

 

XPathOperation – 결과 형태를 설정합니다.

ú           계산 – XPath 쿼리의 결과를 반환합니다.

ú           노드 목록 - XPath에서 지정한 노드를 XML 형태로 반환합니다.

ú           – XPath에서 지정한 노드의 내부 텍스트 값을 연결 문자열로 반환합니다.

Ÿ           두 번째 피연산자
XQuery
를 지정합니다. 변수, 직접 입력, 파일 연결로 지정할 수 있습니다.

 

 

 

OperationType = Merge

두 개의 서로 다른 XML 문서 또는 데이터를 병합하는 작업을 수행합니다.

 

Ÿ           두 번째 피연산자
입력 부분에 지정된 첫 번째 XML 문서와 병합할 두 번째 XML 문서를 지정합니다.

 

Ÿ           병합 옵션
병합 작업을 수행할 때 사용할 XPath 쿼리 유형 및 XPath 쿼리를 지정합니다. 만약 단순히 두 문서를 병합할 경우, XPathStringSource 를 공백으로 설정하면 됩니다. 물론 이 경우, 두 문서간의 구조가 유효해야 합니다.

 

 

 

OperationType = Diff

두 개의 서로 다른 XML 문서 또는 데이터에 대해 비교 작업을 수행합니다.

 

Ÿ           두 번째 피연산자
입력 부분에 지정된 첫 번째 XML 문서와 비교할 두 번째 XML 문서를 지정합니다.

Ÿ           비교 옵션

DiffAlgorithm – 문서를 비교할 때 사용할 알고리즘을 지정합니다.

ú           자동 - XML 작업에서 처리 속도가 빠른 알고리즘을 사용할 것인지 아니면 정확도가 높은 알고리즘을 사용할 것인지 결정합니다.

ú           빠름 - 빠르지만 정확도가 떨어지는 비교 알고리즘을 사용합니다.

ú           정확 - 정확한 비교 알고리즘을 사용합니다.

DiffOptions – 비교 작업에서 적용할 비교 옵션을 설정합니다.

ú           IgnoreXMLDeclaration - XML 선언을 비교할지 여부를 설정합니다.

ú           IgnoreDTD - DTD(문서 유형 정의)를 무시할지 여부를 설정합니다.

ú           IgnoreWhiteSpaces - 공백을 비교할지 여부를 설정합니다.

ú           IgnoreNamespaces – 각 요소의 네임스페이스 URI(Uniform Resource Identifier)와 해당 요소의 특성 이름을 비교할지 여부를 설정합니다.

ú           IgnoreProcessingInstructions - 처리 명령을 비교할지 여부를 설정합니다.

ú           IgnoreOrderOfChildElements - 자식 요소의 순서를 비교할지 여부를 설정합니다.

ú           IgnoreComments - 주석 노드를 비교할지 여부를 설정합니다.

ú           IgnorePrefixes - 요소와 특성 이름의 접두사를 비교할지 여부를 설정합니다.

FailOnDifference – 두 문서 간 차이점이 발생될 경우, XML 작업을 실패로 처리할 지를 설정합니다.

SaveDiffGram – 두 문서 간의 비교 결과인 DiffGram 문서를 출력할 지를 설정합니다.

DiffGramSave – SaveDiffGram 속성이 True인 경우, DiffGram 문서를 저장할 위치를 지정합니다.

 

 

 

OperationType = Patch

두 개의 서로 다른 XML 문서에 대해 비교한 후, 차이점에 대해 보정 작업을 수행할 경우에 이 작업 유형을 사용합니다. 예를 들어, 동일한 구조의 XML 문서에서 원본은 <ID>497</ID>, 비교 대상은 <ID>499</ID> 인 경우, Diff 연산을 수행한 후, DiffGram 결과를 저장하도록 한 후 확인해 보면 원본의 497 값을 499로 바꿀 수 있는 DiffGram 문이 생성됩니다. DiffGram 문서와 원본 XML 문서를 이용하여 ID 499로 변경하는 작업이 Patch 작업입니다.

 

Ÿ           두 번째 피연산자
입력 부분에 지정된 첫 번째 XML 문서에 대해 변경 작업을 수행할 DiffGram 문서를 지정합니다.

 

 

 

 

따라하기

 

간단한 XML 데이터를 XSLT를 이용하여 html형식의 파일로 출력하는 예를 수행해 봅니다.

 

1.       BIDS(Business Intelligence Development Studio)를 실행시켜서 빈 Integration Services 프로젝트를 엽니다. 작업 창의 오른쪽에 있는 솔루션 탐색기 중 SSIS 패키지 부분에서 XMLSample.dtsx 라는 이름으로 패키지 파일을 하나 추가합니다.

 

2.       왼쪽 도구 상자에서 XML 작업을 선택한 후, 제어 흐름 영역에 추가하고, 이름을 [XSLT 출력]으로 변경합니다.

 

3.       XML 작업 속성 편집기 창에서 입력 부분의 OperationTypeXSLT로 설정하고, SourceType직접 입력, SecondOperandType직접 입력으로 설정합니다. 원본 및 XSLT를 별도의 파일로 만든 후, 파일 연결 관리자를 이용하여 사용해도 되지만, 간략히 하기 위해 직접 입력으로 설정합니다.

 

4.       입력 부분의 Source에 아래의 원본 XML, 두 번째 피연산자SecondOperand 부분에 아래의 XSLT를 입력합니다.

원본 XML

<?xml version="1.0" encoding="euc-kr"?>

<addressBook>

  <address>

    <name>홍길동</name>

    <handphone>011-111-1111</handphone>

    <home>서울시 영등포구 여의도동...</home>

    <birthday>1556.01.01</birthday>

    <hobby1>컴퓨터</hobby1>

    <hobby2>오락하기</hobby2>

  </address>

  <address>

    <name>김철수</name>

    <handphone>011-111-2222</handphone>

    <home>서울시 송파구 잠실동..</home>

    <birthday>1975.01.02</birthday>

    <hobby1>당구</hobby1>

    <hobby2>골프</hobby2>

  </address>

  <address>

    <name>한대성</name>

    <handphone>016-494-0000</handphone>

    <home>서울시 강동구 길동...</home>

    <birthday>1900.05.14</birthday>

    <hobby1>웹서핑</hobby1>

    <hobby2>졸기</hobby2>

  </address>

</addressBook>

      
       XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html" />

<xsl:template match="/">

  <html>

    <head>

      <title>주소록</title>

    </head>

    <body>

      <table border="1">

        <tr>

          <th>이름 </th><th>주소</th><th>취미1</th><th>취미2</th>

        </tr>

        <xsl:for-each select="addressBook/address"> 

           <tr>

            <td><xsl:value-of select="name"/></td>

            <td><xsl:value-of select="home"/></td>

            <td><xsl:value-of select="hobby1"/></td>

            <td><xsl:value-of select="hobby2"/></td>

           </tr>

        </xsl:for-each>

      </table>

    </body>

  </html>

</xsl:template>

</xsl:stylesheet>

 

5.       출력 부분의 SaveOperationResult 속성을 True로 설정한 후, OperationResult 속성의 + 단추를 클릭하여 확장 속성을 지정합니다.
DestinationType
파일 연결로 설정하고, OverwriteDestinationTrue로 설정한 후, Destination 속성에서 <새 파일 연결..>을 클릭하여 결과가 저장될 html 파일을 지정합니다. 이 때 파일 연결 관리자에서 사용 유형파일 만들기로 지정합니다.



6.       패키지를 수행한 후, 생성된 Html 형태의 결과를 확인합니다.



 

 

SQL Server 2005에서는 XML과 관련된 기능이 많이 향상되었습니다. SSIS에서도 역시 다양한 XML 기능이 추가되어 XML 데이터를 이용한 처리 작업을 편리하게 수행할 수 있습니다.


반응형
반응형

패키지 실행 작업 및 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에서는 자식 패키지에서 패키지 구성 기능을 이용하여 이러한 설정을 해 줘야 하며, 부모 패키지에서는 설정을 하지 않습니다

 

 

반응형
반응형

스크립트 작업 및 ActiveX 스크립트 작업

 

 필자가 SQL 2000 DTS를 사용하면서 자주 이용했던 작업 중 하나는 바로 ActiveX 스크립트 작업이었습니다. ActiveX 스크립트 작업은 사용자의 개발 범위를 SQL Server 쿼리에서 프로그래밍 영역까지 확장시킬 수 있는 기능입니다. 예를 들어 문자열을 구분 기호로 분리하는 split 함수를 생각해 봅시다. SQL에서는 기본적으로 split 함수가 제공되지 않기 때문에, 이러한 기능을 구현하기 위해서는 사용자 정의 함수(UDF)로 만들어 사용하든지, 다른 방법을 사용해야 합니다. 이 외에도 ADO OWC 등과 같은 시스템에 등록된 개체를 사용하여 작업을 한다든지, 동적으로 패키지의 속성을 변경하는 등과 같은 작업에 다양하게 이용할 수 있었습니다.

 

 SQL 2005 SSIS에서는 스크립트 관련 작업 기능이 더욱 향상되었습니다. 우선 기본 스크립트 언어가 VBScript에서 VB.net 스크립트로 변경되었습니다. 이전 스크립트 작업은 VBScript JavaScript로 사용할 수 있었지만, SSIS에서는 VB.net 스크립트만 사용할 수 있습니다. 물론 이전 버전과의 호환성을 유지하기 위한 목적으로 ActiveX 스크립트 작업 개체가 있기 때문에 기존 버전의 VBScript JavaScript를 그대로 이용할 수는 있습니다.

또 다른 큰 변화로는 개발 환경이 향상된 점입니다. SQL 2000 DTS SQL 2005 SSISActiveX 스크립트 작업에서 스크립트 작성 창은 거의 메모장 수준으로 단순하였습니다. 하지만 SQL 2005 SSIS의 스크립트 작업에서는 VSA(Visual Studios for Application)를 제공하기 때문에 사용자는 다른 Microsoft 개발 도구에서 제공하는 것과 동일한 개발 환경을 사용할 수 있습니다.

 

 

 

 

 

 

 

스크립트 작업

 

스크립트 작업 VB.net 스크립트를 이용하여 사용자가 원하는 작업을 수행하기 위한 작업 개체입니다. VSA(Visual Studios for Application) 개발 환경에서 작업에 필요한 스크립트를 작성할 수 있습니다. 스크립트 작업 내에서 외부의 변수를 사용하기 위해서는 속성 창에서 미리 사용할 변수를 지정해야 합니다.

 

 

Ÿ           ScriptLanguage – 작성할 스크립트 언어를 설정합니다. Microsoft Visual Basic .NET 언어만 있습니다.

Ÿ           PrecompileScriptIntoBinaryCode – 작성된 스크립트를 미리 컴파일 시킬지를 설정합니다. 스크립트를 미리 컴파일 하도록 설정을 하면 패키지가 실행되기 전에 스크립트가 컴파일 되어지기 때문에 실제 수행하는 시간은 빠를 수 있습니다. 하지만 미리 컴파일 하게 되면 컴파일 된 코드(Binary Code)가 패키지에 포함이 되기 때문에 패키지 파일의 크기는 약간 커질 수 있습니다.
만약, 이 속성 값을 변경하였다면 반드시 스크립트 디자인 창을 한 번 열었다 닫아줘야 설정한 속성대로 반영이 됩니다. 또한 64Bit 환경에서 패키지를 수행하는 경우에는 반드시 이 값이 True로 설정이 되어야 합니다.

Ÿ           EntryPoint – 스크립트 내에서 시작할 클래스 위치를 설정합니다. 기본 위치는 ScriptMain 입니다.

Ÿ           ReadOnlyVariables – 스크립트 내에서 패키지의 변수를 사용하는 경우에 이용됩니다. 예를 들어. 패키지에서 미리 만들어진 Var1 이라는 변수와 Var2 라는 변수를 스크립트 내에서 읽기 전용으로 이용하려면 다음과 같이 설정해 줘야 합니다.
사용자::Val1, 사용자::Val2 또는 간단히 Val1, Val2로 지정합니다.

Ÿ           ReadWriteVariables – 스크립트 내에서 읽기 및 쓰기로 변수를 사용할 경우 지정합니다.

 

 

 

ActiveX 스크립트 작업

 

 ActiveX 스크립트 작업은 이전 버전인 SQL 2000 DTS 패키지를 SQL 2005 SSIS로 업그레이드 시 호환성을 유지하기 위한 작업 개체입니다. 이 작업 역시 스크립트 작업과 마찬가지로 ADO(Active Data Object) ADSI(Active Directory Service Interface) 등과 같은 Object를 이용할 수 있으며 다양한 프로그래밍 기능을 사용할 수 있습니다. 이 기능은 다음 버전에서는 제거될 기능이기 때문에, 새롭게 작업을 만들 때에는 이 작업을 사용하지 말고 스크립트 작업을 이용하시기 바라며, 기존 DTS 패키지를 업그레이드 한 경우에는 VB.net 스크립트를 이용하는 작업으로 수정하시기 바랍니다.

 

 

Ÿ           Language – 스크립트가 VB Script인지, Java Script인지를 설정합니다.

Ÿ           Script – 작업 스크립트를 지정합니다.

Ÿ           EntryMethod – 시작할 함수를 지정합니다.

 

ActiveX 스크립트 작업에서도 패키지 변수를 사용할 수 있습니다. 패키지 내에 변수 사용이나 간단한 스크립트 작업 사용 예제는 다음의 따라하기를 참고하시기 바랍니다.

 

 

 

따라하기 스크립트 작업에서 패키지 변수 사용하기

 

스크립트 작업ActiveX 스크립트 작업에서 패키지에 지정된 사용자 변수를 사용하는 방법을 간단히 살펴보겠습니다.

 

1.       작업 창의 제어 흐름 영역의 빈 곳에서 마우스 오른쪽을 클릭하여 나타나는 메뉴 중, 변수(S)를 선택합니다.
(
변수 사용에 대해서는 다음 번 강좌에서 자세히 다루도록 하겠습니다.)

2.       변수 창에서 가장 왼쪽에 있는 변수 추가 버튼을 사용하여 변수를 추가합니다.
변수 명 : val1      데이터 형식 : String          : 변수예제
변수 명 : val2      데이터 형식 : Int32            : 100



3.       왼쪽의 도구 상자에서 스크립트 작업을 선택한 후, 제어 흐름 영역에 추가합니다.



4.       스크립트 작업 편집기에서 ReadOnlyVariables 속성 값에 val1, val2를 추가한 후, 아래에 있는 스크립트 디자인(S)를 클릭하여 스크립트 편집기를 엽니다.



5.       Main 함수 내에 다음 스크립트를 추가한 후, 편집기를 닫고 제어 흐름 영역에서 스크립트 작업을 실행합니다.

MsgBox(Dts.Variables("val1").Value)
MsgBox(Dts.Variables("val2").Value.ToString)




6.       왼쪽 도구상자에서 ActiveX 스크립트 작업을 선택하여 제어 흐름 영역에 추가합니다.



7.       ActiveX 스크립트 작업 편집기에서 스크립트 속성 부분에 있는 ... 버튼을 클릭하여 스크립트 편집 창을 엽니다.

8.       ActiveX 스크립트 창에 다음 코드를 추가한 후, 편집 창을 닫고 ActiveX 스크립트 작업을 실행합니다.

Msgbox DTSGlobalVariables("val1").value
Msgbox DTSGlobalVariables("val2").value


 

 

 

따라하기 – ADO를 이용하여 테이블의 데이터 읽어오기

 

스크립트 작업ActiveX 스크립트 작업에서 ADO 개체를 이용하여 테이블에 있는 데이터를 읽어오는 간단한 예제를 만들어 보겠습니다. 스크립트 작업 추가 및 실행은 위의 따라하기와 동일하므로 스크립트 부분만을 설명 드리겠습니다.

 

1.       제어 흐름 영역에 ActiveX 스크립트 작업을 추가한 후, 더블 클릭하여 나타나는 편집기 창의 Script 부분에 다음과 같은 스크립트를 추가합니다.

'**********************************************************************

'  Visual Basic ActiveX 스크립트

'************************************************************************

 

Function Main()

             Dim adoConn, adoRs

             Set adoConn =  CreateObject("ADODB.Connection")

             Set adoRs =  CreateObject("ADODB.RecordSet")

 

             adoConn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Initial Catalog=pubs;Data Source=localhost\ss2000"

             adoConn.Open

             adoRs.ActiveConnection = adoConn

             adoRs.Open "SELECT count(*) as Cnt FROM pubs.dbo.authors"

                           msgbox "Total Record Cnt : " & adoRs("cnt").value, vbAlert, "메시지 출력 테스트 ActiveX"

             adoRs.Close

             Set adoRs = Nothing

             adoConn.Close

             Set adoConn  = Nothing

 

             Main = DTSTaskExecResult_Success

End Function

 

2.       위 스크립트는 localhost\ss2000 인스턴스에 있는 pubs DB auhors 테이블 행 수를 읽어서 출력하는 단순한 예제입니다.
ADO
를 이용한 스크립트 작성 시 참고하시기 바랍니다. 다음 단계는 위의 VBScript VB.net 스크립트로 변형하여 스크립트 작업에서 이용하는 것입니다.

 

3.       제어 흐름 영역에 스크립트 작업을 추가한 후, 더블 클릭하여 나타나는 편집기 창에서 스크립트 디자인(S)를 클릭한 후, 다음 스크립트를 추가합니다.


Imports System

Imports System.Data

Imports System.Math

Imports Microsoft.SqlServer.Dts.Runtime

Imports System.Data.OleDb

 

Public Class ScriptMain

 

             ' The execution engine calls this method when the task executes.

             ' To access the object model, use the Dts object. Connections, variables, events,

             ' and logging features are available as static members of the Dts class.

             ' Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.

             '

             ' To open Code and Text Editor Help, press F1.

             ' To open Object Browser, press Ctrl+Alt+J.

 

             Public Sub Main()

                           '

                           ' Add your code here

        Dim dataReader As OleDbDataReader

        Dim oleDBConn As OleDbConnection

        Dim oleDBCommand As OleDbCommand

 

        oleDBConn = New OleDbConnection("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=pubs;Data Source=localhost\ss2000")

        oleDBCommand = New OleDbCommand("SELECT count(*) as Cnt FROM pubs.dbo.authors", oleDBConn)

 

        oleDBConn.Open()

        dataReader = oleDBCommand.ExecuteReader()

        dataReader.Read()

 

        MsgBox("Total Record Cnt : " & dataReader.GetInt32(0).ToString, MsgBoxStyle.OkOnly, "메시지출력테스트VB.net")

 

        dataReader.Close()

        oleDBConn.Close()

      

             End Sub

 

End Class

 

 

 

지금까지 SQL 2005 SSIS에 포함된 두 가지의 스크립트 작업에 대해 살펴 보았습니다. SQL 쿼리뿐만 아니라, 이 스크립트 작업들을 적절히 잘 사용한다면 패키지를 작성하고 수행하는 데 상당히 편리하게 이용할 수 있습니다.

 

 

반응형
반응형

WMI 이벤트 감시자 작업

 

WMI 이벤트 감시자 작업WMI 데이터 판독기 작업과 마찬가지로 시스템의 WMI 정보를 이용하는 작업 개체입니다. WMI 데이터 판독기 작업은 현재 시스템의 상태나 정보를 읽어오는 작업이라면, WMI 이벤트 감시자 작업은 시스템에서 발생하는 이벤트를 인식하는 작업이라 할 수 있습니다.  (WMI와 관련된 정보는 이전 강좌에 포함된 내용을 참고하시기 바랍니다.)

 

다음과 같은 경우를 생각해 봅시다.

Ÿ      지정된 폴더( : C:\FTPData\)에 원하는 파일이 전송되는 경우에, 파일을 읽어오는 작업을 수행하도록 합니다.

Ÿ      현재 SQL Server 프로세스(sqlservr.exe) CPU 사용율이 30% 미만인 경우, Bulk Insert 작업을 수행하고자 하며, 그렇지 않은 경우에는 30% 미만으로 떨어질 때 까지 기다리도록 합니다.

Ÿ      디스크 드라이브의 여유 공간이 10GB 이하가 되면, 오래된 파일들을 삭제하도록 합니다.

Ÿ      원격지 서버의 상태를 확인한 후, 서비스가 실행될 때에 데이터 전송 작업을 수행하도록 합니다.

 

필자가 담당했었던 작업 중 하나를 예로 들어 설명하겠습니다. 은행에서 매 시간마다 FTP를 이용하여 텍스트 형태의 데이터 파일이 전송되며, 이 파일들이 넘어오면 즉시 DB Insert를 수행한 후 데이터베이스 처리 작업을 수행합니다. 하지만, 넘어오는 시간이 정확히 정시에 전송되는 것이 아니라 5분 정도 빨리 오거나 5분 정도 늦게 오기도 합니다. 이 작업을 수행하기 위해 DTS로 텍스트 파일을 읽어오는 패키지를 만든 후, 이를 SQL Agent에 작업으로 등록하였습니다. DTS 패키지 내에서는 ActiveX 스크립트 작업을 이용하여 파일이 생성되었는지를 확인하고 파일이 있는 경우 해당 파일명을 읽어오는 작업을 작성하였으며, SQL Agent에는 매 정시 5분 전부터 5분 후까지 1분 단위로 계속 반복 수행하도록 하는 일정들을 만들어 추가하였습니다.

 

위와 같은 작업에서 WMI 이벤트 감시자 작업을 사용한다면 상당히 간단하고 편리하게 수행할 수 있습니다. WMI 이벤트 감시자는 OS에서 발생되는 WMI 이벤트를 인식합니다. , SSIS SQL Server에서 해당 이벤트가 발생되었는지를 확인하는 작업을 만들고 이를 수행하는 대신, 단순히 OS가 발생시키는 이벤트를 감지하는 작업만 수행하면 됩니다. 위의 예에서와 같이, FTP든 단순 파일 복사를 이용하든 특정 폴더에 파일이 생성되면 OS에서는 파일이 새로 생겼다는 WMI 이벤트를 발생시키게 되며, 이 이벤트를 SSISWMI 이벤트 감시자 작업에서 인식하게 됩니다. 이벤트가 발생되기 전까지 무한대로 기다릴지, 또는 특정 기간 동안만 기다릴 지는 WMI 이벤트 감시자 작업 내의 Timeout 속성에서 지정할 수도 있습니다. 이러한 작업 방식은 파일이 전송 되었는지 확인하기 위해 반복적으로 SQL Agent SQL Server, DTS를 수행함으로써 생기는 부하를 없앨 수 있으며, 이름 그대로 감시자 역할을 하는 작업 개체 하나만 실행되고 있기 때문에 훨씬 간단하고 효율적이라 할 수 있습니다.

 

WMI 이벤트 감시자 작업 역시 WMI 데이터 판독기 작업과 마찬가지로 WMI 연결을 사용합니다. 연결 관리자에서 WMI 연결을 추가하거나 작업 내의 WmiConnection 속성 부분에서 WMI 연결을 새로 추가해 주면 됩니다. WMI 연결 추가 방법에 대해서는 이전 을 참고하시기 바랍니다.

 

 

WMI 이벤트 감시자 작업에서 지정할 수 있는 속성은 다음과 같습니다.

 

 

Ÿ           WmiConnection – WMI 연결을 지정합니다.

Ÿ           WqlQuerySourceType – WMI 이벤트를 인식하기 위한 WQL 쿼리의 입력 형태를 지정합니다. 직접 입력하도록 설정하거나, 변수에 WQL 쿼리문을 저장시킨 후, 이 변수값을 불러와서 실행하거나, 혹은 별도의 쿼리 파일을 만든 후, 이 파일에서 읽어오는 방식으로 수행할 수 있습니다.

Ÿ           WqlQuerySource – 직접 입력으로 지정한 경우 WQL 쿼리를 입력합니다.

Ÿ           ActionAtEvent – 이벤트가 발생되었을 때 행할 수행 동작을 설정합니다.

ú           이벤트 기록 단순히 이벤트가 발생된 것을 감지하고 AfterEvent 속성에 지정된 대로 진행합니다.

ú           이벤트를 기록하고 SSIS 이벤트를 실행합니다. – AfterEvent 속성에 지정된 대로 진행하는 것 외에 SSIS 패키지의 이벤트 처리기에서 WMI 이벤트 발생 시 수행되도록 설정한 작업을 실행 시킵니다. , 이벤트 처리기의 WMIEventWatcherEventOccurred 처리 작업에 포함된 작업들이 수행되는 것입니다.




Ÿ           AfterEvent – 이벤트가 발생된 후 WMI 이벤트 감시자 작업 결과를 성공으로 반환할 지, 실패로 반환할 지, 또는 다시 감시하도록 할 지를 설정합니다. 이벤트를 다시 감시하도록 하는 경우, 아래에 있는 NumberOfEvents의 횟수만큼 반복하게 됩니다.

Ÿ           ActionAtTimeout – Timeout 속성에서 지정된 시간()이 지난 경우 행할 작업 형태를 지정합니다. 이 속성 역시 ActionAtEvent의 속성과 같이 단순히 시간 초과 상태로 AfterTimeout에 지정된 대로 행할 것인지, SSIS 이벤트 처리기에서 WMIEventWatcherEventTimeout 이벤트 처리 작업을 수행할 지 설정합니다.

Ÿ           AfterTimeout – Timeout 속성에서 지정된 시간()이 지난 경우, WMI 이벤트 감시자 작업 결과를 성공으로 반환할 지, 실패로 반환할 지, 또는 다시 감시하도록 할 지를 설정합니다. 이벤트를 다시 감시하도록 하는 경우, 아래에 있는 NumberOfEvents의 횟수만큼 반복하게 됩니다.

Ÿ           NumberOfEvents – 이벤트가 발생되거나 시간 초과 인 경우, 이벤트를 다시 감시할 횟수를 설정합니다. 만약 이 값을 0으로 설정하면 계속 반복해서 다시 감시하게 됩니다.

Ÿ           Timeout – 이벤트가 발생할 때까지 대기할 시간을 지정합니다. 0으로 지정할 경우 무한 대기 입니다.

 

 

WMI 이벤트 발생시,

1.       정해진 작업을 한 번만 수행하도록 하는 경우에는

a.        NumberOfEvents의 값을 1로 설정하고,

b.        AfterEvent성공 반환,

c.        AfterTimeout실패 반환

으로 설정하면 됩니다.

 

2.       동일한 이벤트에 대해 계속해서 작업을 수행하고 싶다면,

a.        Timeout 값을 0으로 설정하고,

b.        NumberOfEvents값을 0,

c.        ActionAtEvent이벤트를 기록하고 SSIS 이벤트를 실행,

d.        AfterEvent이벤트 다시 감시로 설정한 후,

e.        이벤트 처리기의 WMIEventWatcherEventOccurred 부분에 수행하고자 하는 작업을 추가 합니다.

이렇게 설정하면 작업자가 직접 작업을 종료시키기 전까지는 계속 작업이 수행되며, 이벤트 발생 시에도 WMI 이벤트 감시자 작업은 다음 단계로 진행하지 않게 되기 때문에 다음 단계에 작업을 추가하더라도 수행하지 못하게 됩니다.
(
WMI 이벤트 감시자 작업이 성공으로 결과가 반환되어야 다음 단계가 수행되지만, 항상 수행 중이기 때문입니다.)

 

 

 

 

 

 

따라하기

본 예제에서는 C:\SSISDemo\ 폴더에 특정 파일이 추가되는 경우, 해당 파일 명을 출력하도록 하는 간단한 작업을 만들어 보겠습니다. Timeout 30초로 설정하며, 30초 내에 해당 폴더에 파일이 추가되지 않는 경우에는 실패로 처리됩니다.

 

1.       BIDS(Business Intelligence Development Studio)를 실행시켜서 빈 Integration Services 프로젝트를 엽니다. (기존의 프로젝트를 계속 사용하여도 됩니다.) 작업 창의 오른쪽에 있는 솔루션 탐색기 중 SSIS 패키지 부분에서 WMI이벤트감시자.dtsx 라는 이름으로 패키지 파일을 하나 추가합니다.

 

2.       왼쪽 도구 상자에서 WMI 이벤트 감시자 작업을 선택하여 제어 흐름 영역에 추가한 후, 이름을 [파일 생성 확인]으로 변경합니다.



3.       추가한 작업을 더블 클릭하여 속성 창을 엽니다. WMI 옵션 탭의 WmiConnection 속성에서 < WMI 연결..>을 선택하여 새로운 WMI 연결을 추가합니다. 본 예제에서는 Windows 인증을 사용하도록 하겠습니다. 로컬 서버가 아닌 원격 서버에 대해 WMI 정보를 읽어오는 작업을 만드는 경우, 서버 이름과 사용자 자격 증명 정보를 변경하여 사용하면 됩니다.



4.       WqlQuerySourceType직접 입력으로 설정한 후, WqlQuerySource에 다음과 같은 WQL 쿼리를 입력합니다.

SELECT * FROM __InstanceCreationEvent WITHIN 1
WHERE TargetInstance ISA "CIM_DirectoryContainsFile"
and TargetInstance.GroupComponent= "Win32_Directory.Name=\"c:\\\\SSISDemo\""



5.       ActionAtEvent이벤트 기록, AfterEvent성공 반환, ActionAtTimeout시간 초과 기록, AfterTimeout실패 반환, Timeout30으로 설정합니다.



여기까지가 파일이 추가되었을 때의 이벤트를 인식하는 작업입니다.

여기서 잠깐 보충 설명을 하겠습니다. 위에서 다루는 이벤트는 파일이 추가되거나 전송되었을 때, C:\SSISDemo\ 폴더에 파일이 하나가 추가되었을 때 단순히 파일이 추가되었습니다.라는 이벤트일 뿐이며, 추가된 파일이 무엇인지, 어떤 속성을 가지고 있는지에 대한 정보를 포함하고 있는 것은 아닙니다. 또한 위의 작업은 우리가 정한 폴더인 C:\SSISDemo 에서 그러한 이벤트가 발생되었다라는 것을 인식하는 것일 뿐입니다. 따라서 추가된 파일의 파일 명 정보나 크기, 속성 등의 정보를 읽어오기 위해서는 별도의 작업을 만들어야 합니다.
 
이러한 기능을 구현하는 방법에는 여러 가지가 있을 수 있으며, 본 예제에서는 WMI 이벤트 감시자 작업에 대해 중점을 두기 때문에 단순히 하기 위해 C:\SSISDemo 폴더의 파일명 전체를 텍스트로 출력시키는 작업으로 진행하도록 하겠습니다.
파일이 추가되었을 때 추가된 파일들에 대한 정보를 나타내는 전체 패키지는 추후에 진행할 활용 강좌에서 소개하도록 하겠습니다.

6.       제어 흐름 영역WMI 데이터 판독기 작업을 하나 추가한 후, 작업의 이름을 [파일명 출력]으로 변경하고, [파일 생성 확인] 작업의 녹색 연결선을 [파일명 출력] 작업에 연결시킵니다.



7.        추가한 WMI 데이터 판독기 작업을 더블 클릭하여 편집기 창을 연 후, WmiConnection의 속성 값은 이미 추가된 [WMI 연결 관리자]로 지정한 후, WqlQuerySource에 다음과 같은 WQL 쿼리를 입력합니다.

SELECT Name, FileSize FROM CIM_DataFile WHERE Drive='c:' and Path='\\SSISDemo\\'




8.       OutputType 데이터 테이블, OverwriteDestination 대상 덮어쓰기, DestinationType파일 연결로 지정하고, Destionation의 속성에서 <새 연결..>을 이용하여 결과가 저장될 파일 연결을 추가합니다.
본 예제에서는 C:\FileResult.csv 에 결과가 저장되도록 설정하겠습니다.





9.       이제 윈도우 탐색기에서 C:\SSISDemo 라는 이름의 폴더를 만든 후 패키지를 실행합니다.
WMI
이벤트 감시자 30초 동안 C:\SSISDemo 폴더에 파일이 추가되는지 감시하게 되며, 감시하는 동안 패키지는 실행 중인 상태를 나타내는 노란색으로 표시됩니다.

<
실행 중인 상태 : 이벤트 감시 중>


<
작업 실패 : 지정된 Timeout 시간인 30초 동안 C:\SSISDemo 에 파일이 추가 되지 않은 경우>


다시 패키지를 실행 시킨 상태에서 C:\SSISDemo 폴더에 아무 파일을 복사해서 넣습니다.

<
작업 성공 : 지정된 시간 내에 파일 생성 이벤트가 발생한 경우>


C:\
에 생성된 FileResult.csv를 확인하여 파일 정보를 확인합니다.

 

WMI 이벤트 감시자 작업WMI 데이터 판독기 작업과 함께 ETL 작업 및 데이터베이스 유지 관리 작업 등에서 상당히 유용하게 사용할 수 있는 작업 개체입니다. 이러한 작업들을 적절히 응용한다면, 보다 효율적이며 간단한 패키지를 사용할 수 있습니다.

 

반응형
반응형

WMI 데이터 판독기 작업

 

SQL 2005 SSIS를 처음 접했을 때, WMI 데이터 판독기 작업WMI 이벤트 감시자 작업 이라는 작업들이 눈에 띄었습니다. 개발 관련 문서나 OS 관련 문서에서 가끔 본 적이 있었던 WMI가 왜 SQL 영역에 들어와 있는 것인가? 이후 WMI에 대해서도 찾아보고, SSIS에서 이것을 이용해 작업을 만들어 사용해 보니 정말 편리한 기능이라는 것을 알게 되었습니다.

 

우선 WMI(Windows Management Instrumentation)가 무엇인지는 아래 부분에서 설명하도록 하고, 실제 환경에서의 사례를 잠깐 예를 들어 설명하겠습니다.

DBA가 하는 작업들 중에서 데이터베이스를 관리하는 작업이 가장 중요한 작업일 것입니다. 데이터베이스 관리 작업에는 단순히 DBMS의 관리뿐만 아니라, 데이터베이스가 있는 서버의 시스템 상태나 디스크의 여유 공간, 프로세스 상태나 OS 정보 등 시스템 전체를 관리해야 하는 것이 일반적입니다.

 

흔히 수행하는 작업 중 하나인 데이터베이스의 데이터 파일들이 들어있는 디스크의 여유 공간을 확인하는 작업을 생각해 봅시다. 필자가 수행했었던 방법은 프로시저나 DTS 등을 이용하여

 

master..xp_cmdshell ‘dir d: |find “바이트 남음”’

 

과 같은 형태의 쿼리를 수행한 후, SQLLEFT, RIGHT, SUBSTRING, CHARINDEX 등의 함수를 이용하여 바이트 정보 부분일 구했습니다.

 

[참고] 이 방법 외에 다음 링크의 스크립트와 같은 별도의 스크립트를 이용할 수도 있습니다.

 

 

또한 서버의 CPU의 사용량이나 메모리 사용량 등의 정보는 관리 도구에 있는 성능 모니터를 이용하여 수집하였습니다. 관리해야 할 서버가 많거나 디스크 드라이브가 많은 경우, 또한 모니터링 해야 할 정보들이 많은 경우 위의 방법들을 이용하는 데에는 많은 어려움이 있을 수 있습니다. 이러한 작업을 좀 더 편하게 할 수 있기 위한 도구가 WMI 데이터 판독기WMI 이벤트 감시자 작업이며, 본 글에서는 WMI 데이터 판독기 작업을 먼저 설명하도록 하겠습니다. (물론, 이러한 관리적인 측면 외에도 WMI 작업은 다양하게 사용될 수 있습니다.)

 

 

WMI가 무엇인지 처음 접하는 분들은 다음 설명을 참고하시기 바랍니다.

 

 

WMI?

원래 1998 Windows NT 4.0 서비스 팩 4의 추가 구성 요소로 릴리스된 WMI Windows 2000, Windows XP Windows Server 2003 운영 체제 제품군에 구축된 핵심 관리 기술입니다. DMTF(Distributed Management Task Force)에 의해 발견된 업계 표준을 기반으로 한 WMI는 거의 모든 Windows 리소스를 액세스하고 구성하고 관리하고 모니터링할 수 있는 수단이자 통로입니다.

 

WMI의 기능을 이해하려면 작년에 그리고 현재까지 Windows 워크스테이션과 서버를 관리하고 모니터링 했던 방법을 생각해 보십시오. 디스크, 이벤트 로그, 파일, 폴더, 파일 시스템, 네트워크 구성 요소, 운영 체제 설정, 성능 데이터, 프린터, 프로세스, 레지스트리 설정, 보안, 서비스, 공유, 사용자, 그룹 등과 같은 Windows 리소스를 관리하는 수많은 그래픽 관리 도구를 사용해 봤거나 현재 사용하고 있을 것입니다.

 

그래픽 관리 도구가 기능적인 관리 솔루션을 제공하긴 했지만 그들의 공통점은 무엇일까요? 한 가지 대답은 WMI 이전에는 모든 Windows 그래픽 관리 도구가 Windows 리소스를 액세스하고 관리하는 데 Win32 API(Application Programming Interface)에 의존했다는 것입니다. 그 이유는 무엇일까요? WMI 이전에는 Win32 API를 통해서만 프로그래밍 방식으로 Windows 리소스에 액세스할 수 있었기 때문입니다. 대부분의 스크립팅 언어에서 Win32 API를 직접 호출할 수 없기 때문에 널리 사용되고 있는 스크립팅 언어를 사용하여 일반 시스템 관리 작업을 자동화하는 쉬운 방법이 없는 이러한 상황이 Windows 시스템 관리자에게 남겨진 것입니다. WMI는 모든 Windows 리소스를 외부 세계에 설명하고 드러내어 일관된 모델과 프레임워크를 제공함으로써 이러한 문제를 변화시켰습니다. 그리고 무엇보다도 시스템 관리자는 WMI 스크립팅 라이브러리를 사용하여 WMI를 통해 게시된 Windows 리소스를 관리할 시스템 관리 스크립트를 만들 수 있습니다.

 

Windows 스크립트 호스트와 Microsoft Visual Basic Scripting Edition(VBScript) 또는 COM 자동화를 지원하는 모든 스크립트 언어(: ActiveState Corporation ActivePerl)를 사용하여 다음과 같은 기업용 시스템, 응용 프로그램 및 네트워크를 관리하고 자동화하는 스크립트를 작성할 수 있습니다.

 

Windows Server 2003, Windows XP Professional Windows 2000 시스템 관리 스크립트를 작성하여 성능 데이터를 검색하고 이벤트 로그, 파일 시스템, 프린터, 프로세스, 레지스트리 설정, 스케줄러, 보안, 서비스, 공유 및 여러 가지 기타 운영 체제 구성 요소와 구성 설정을 관리할 수 있습니다.

네트워크 관리 WMI 기반 스크립트를 만들어 DNS, DHCP SNMP 사용 장치와 같은 네트워크 서비스를 관리할 수 있습니다.

실시간 상태 모니터링 WMI 이벤트 가입을 사용하여 발생할 때마다 이벤트 로그 항목, 파일 시스템과 레지스트리 수정 및 기타 실시간 운영 체제 변경 사항을 모니터링하고 응답할 스크립트를 작성할 수 있습니다. 개념적으로 WMI 이벤트 가입 및 알림이 WMI에 대해 갖는 의미는 SNMP 트랩이 SNMP 세계에 대해 갖는 의미와 같습니다.

Windows .NET Enterprise Server 관리 Microsoft Application Center, Operations Manager, Systems Management Server, Internet Information Server, Exchange Server SQL Server를 관리할 스크립트를 작성할 수 있습니다.

 

원본 : http://www.microsoft.com/korea/msdn/columns/contents/scripting/scripting06112002/default.aspx

 

 

WMI 정보를 읽어오는 명령을 WQL(WMI Query Language)이라 하며, WQL SQL Query와 비슷한 형태입니다. WMI 스크립트는 일반적으로 VBScript 형태로 사용하며 결과는 보통 텍스트나 csv 형태의 파일로 출력됩니다.

 

SSISWMI 데이터 판독기 작업에서는 WQL을 실행시켜 나온 결과를 직접 텍스트 파일로 저장 시키거나 사용자 변수에 저장시킨 후 다른 작업 개체 등에서 이용할 수 있습니다.

 

WMI 데이터 판독기 작업을 수행하기 위해서는 연결 관리자에서 WMI 연결이 추가되어 있어야 하며, WMI 데이터 판독기 작업 내의 WMIConnection 속성에서 < WMI 연결..>을 선택하여 직접 등록할 수도 있습니다.

 

연결 관리자에서 마우스 오른쪽 클릭하여 나타나는 메뉴 중 새 연결(W)을 선택합니다. 이 후, WMI 연결을 선택한 후, 연결할 서버를 지정하면 됩니다.

 

 

 

로컬 서버 외에도 원격 서버에 연결할 수도 있습니다.

 

WMI 데이터 판독기 작업에서 지정할 수 있는 속성은 다음과 같습니다.

 

 

Ÿ           WmiConnection – WMI 연결을 지정합니다.

Ÿ           WqlQuerySourceType – 데이터를 판독하기 위해 수행하는 쿼리인 WQL 쿼리의 입력 형태를 지정합니다. 직접 입력하도록 설정하거나, 변수에 WQL 쿼리문을 저장시킨 후, 이 변수값을 불러와서 실행하거나, 혹은 별도의 쿼리 파일을 만든 후, 이 파일에서 읽어오는 방식으로 수행할 수 있습니다.

Ÿ           WqlQuerySource – 직접 입력으로 지정한 경우 WQL 쿼리를 입력합니다.

Ÿ           OutputType – 결과 형태를 설정합니다. 데이터 테이블인 경우, 테이블 형태로 결과가 반환되며, 속성 이름 및 값 또는 값만 출력되도록 선택할 수 있습니다. 결과가 데이터 테이블인 경우, 대상은 파일 형태이거나 Object형 변수이어야 하며, 속성 이름 및 값 또는 값인 경우에는 파일 형태 또는 String형태의 변수 또는 Object형 변수이어야 합니다.

Ÿ           OverwriteDestination – 결과를 덮어 쓸 것인지, 기존 결과에 추가할 것인지, 아니면 기존 결과를 그대로 둘 것인지를 설정합니다.

Ÿ           DestinationType – 결과를 파일 형태로 저장할 지 변수에 저장할 지 설정합니다.

Ÿ           Destination – DestinationType이 파일인 경우, 저장할 파일 연결을 지정하며, 변수인 경우 변수 명을 지정합니다.

 

 

 

 

 

 

따라하기

본 예제에서는 서버의 CPU 사용률(%Processor Time)을 확인하여 사용률이 30% 미만인 경우, 현재 실행 중인 모든 프로세스의 이름과 경과된 시간, 쓰레드 수 등을 읽어서 텍스트 파일로 저장하는 작업을 만들어 보겠습니다. 이 작업을 약간 응용하면, 서버의 CPU가 높을 때 수행되는 프로세스의 정보를 남기는 모니터링 작업을 만들 수 있을 것입니다.

 

1.       BIDS(Business Intelligence Development Studio)를 실행시켜서 빈 Integration Services 프로젝트를 엽니다. 작업 창의 오른쪽에 있는 솔루션 탐색기 중 SSIS 패키지 부분에서 WMI데이터판독기.dtsx 라는 이름으로 패키지 파일을 하나 추가합니다.

 

2.       왼쪽 도구 상자에서 WMI 데이터 판독기 작업을 선택하여 제어 흐름 영역에 추가한 후, 이름을 [CPU 사용량 확인]으로 변경합니다.



추가한 작업 옆에 빨간색으로 X 표시는 해당 작업에 문제가 있는 경우 나타나는 표시입니다. 본 예제에서는 연결이 지정되지 않은 상태이기 때문에 나타나는 것입니다.

 

3.       본 예제에서는 WMI 연결을 연결 관리자에서 따로 추가하는 대신 직접 WMI 데이터 판독기 작업 내에서 추가해 보도록 하겠습니다. 추가한 WMI 데이터 판독기 작업을 더블 클릭하여 속성 창을 엽니다.
속성 창에서 WMIConnection 항목의 오른쪽에 있는 ... 버튼을 클릭한 후, < WMI 연결..>을 선택합니다.

 

4.       WMI 연결에 대한 속성 창이 나타납니다. 본 예제에서는 Windows 인증을 사용하도록 하겠습니다. 로컬 서버가 아닌 원격 서버에 대해 WMI 정보를 읽어오는 작업을 만드는 경우, 서버 이름과 사용자 자격 증명 정보를 변경하여 사용하면 됩니다.

   

 

5.       WMI 데이터 판독기 작업 편집기 창에서 WqlQuerySourceType의 값이 직접 입력으로 선택되었는지 확인합니다. WQL 쿼리를 변수에 저장시키거나 별도의 파일로 만들어 호출하는 방식을 사용하려면 SQL 실행 작업 등에서와 같이 이 속성값을 변경하여 사용하면 됩니다.

 

6.       WqlQuerySource에서 ... 버튼을 클릭하여 직접 WQL 쿼리를 입력합니다.
입력하는 쿼리는 다음과 같으며, %Processor Time 의 정보를 읽어옵니다. 개별 CPU 별로도 정보를 읽어올 수 있지만, 여기서는 Where 절에 조건을 줘서 _Total 에 대한 값만 읽어오도록 설정하겠습니다.

SELECT PercentProcessorTime FROM Win32_PerfFormattedData_PerfOS_Processor WHERE Name = "_Total"

     

 

7.       OutputType속성 값, OverwriteDestination대상 덮어쓰기로 지정합니다.


 

 

8.       이제 결과 값을 변수에 저장하도록 설정하겠습니다. 결과 값은 변수에 저장하도록 하거나, 직접 파일에 기록할 수 있습니다. 파일에 저장하도록 하는 경우에는 csv 형태로 저장이 되기 때문에 직접 엑셀을 이용하여 사용하거나, 다른 프로세스에서 csv 형태로 읽어서 사용할 수 있습니다.
여기서는 변수에 저장하도록 하겠습니다. 아직 저장할 변수를 지정하지 않았기 때문에 새로 변수를 추가해 줘야 합니다. 우선 DestionationType변수로 설정한 후, Destionation 속성에서 ... 버튼을 누른 후 <새 변수..>를 선택하여 변수를 추가합니다.
변수를 추가할 때, 변수의 사용 영역을 나타내는 컨테이너와 이름, 유형 등을 지정하게 되며, 본 예제에서는 다음과 같이 지정하도록 하겠습니다.



여기까지가 WQL 쿼리를 이용하여 현재 서버의 %Processor Time을 읽어 들인 후, 사용자 변수인 ProcessorTime에 저장하도록 하는 작업입니다.




이후, 이 값이 30 미만인지를 판단한 후, 프로세스 정보를 수집하는 작업을 추가해 보도록 하겠습니다.

 

9.       제어 흐름 영역WMI 데이터 판독기 작업을 하나 더 추가한 후, 작업의 이름을 [프로세스 정보 수집]으로 변경합니다.



 

10.   더블 클릭하여 작업 편집기 창을 연 다음, WmiConnection 속성을 위에서 만든 연결인 WMI 연결 관리자로 지정합니다.

 

11.   WqlQuerySourceType직접 연결로 설정한 후, WqlQuerySource 창을 열어 다음과 같은 WQL 쿼리를 입력합니다.

SELECT Name, IDProcess, PageFileBytes, VirtualBytes, ElapsedTime, ThreadCount
FROM Win32_PerfFormattedData_PerfProc_Process


 

 

12.   OutputType데이터 테이블, OverwriteDestination대상 덮어쓰기, DestinationType파일 연결로 지정합니다.

 

13.   Destionation 속성에서 ...를 클릭한 후 <새 연결..>을 선택합니다. 프로세스 정보가 저장될 대상 파일을 지정하는 것이며, 연결 관리자에서 별도로 지정한 것이 없기 때문에 여기서 바로 추가하도록 합니다.
파일 연결 관리자 편집기에서 사용 유형을 파일 만들기로 선택한 후, 파일명을 적어주거나, 기존의 파일로 지정 하려면 기존 파일로 지정한 후, 파일을 선택하도록 합니다.



여기까지가 WQL 쿼리를 이용하여 서버의 모든 프로세스 정보를 읽어와서 대상 위치인 텍스트 파일에 저장하도록 설정한 부분입니다.



이제 두 개의 WMI 작업을 연결하도록 하겠습니다.

 

14.   처음에 추가한 [CPU 사용량 확인] 작업의 녹색 선을 [프로세스 정보 수집] 작업으로 연결 시킵니다.



현재의 상태는 CPU 사용량 확인이라는 작업이 성공적으로 수행되면, 다음 작업인 프로세스 정보 수집 작업을 수행하도록 한 상태입니다. 하지만, 본 예제의 시나리오는 CPU 사용량이 30% 미만인 경우에만 수행하도록 해야 하기 때문에 설정을 추가해 줘야 합니다.

 

15.   녹색 연결선을 더블 클릭하여 선행 제약 조건 편집기를 엽니다. 선행 제약 조건에 대해서는 다음 번에 좀 더 자세하게 다루도록 하겠습니다.

 

16.   선행 제약 조건 편집기에서 평가 작업(E)식 및 제약 조건으로 선택합니다.
(X) 부분에서
              @ProcessorTime<"30"
을 입력합니다.



 

17.   정상적으로 연결된 후의 패키지는 다음과 같습니다. 녹색 연결선 옆에 Fx 라는 표시는 선행 제약 조건에 식이 포함되어 있다라는 것을 나타냅니다.
패키지를 실행한 후, 출력되는 결과를 확인해 보시기 바랍니다.





 

 

 

WMI 데이터 판독기에서 사용할 수 있는 WQL 쿼리 예제를 몇 개 소개하겠습니다.

 

--논리적 디스크 정보를 반환하는 쿼리

SELECT Name, FileSystem, FreeSpace, Size FROM Win32_LogicalDisk

 

--시스템의 페이지 파일(Paging File) 정보를 반환하는 쿼리

SELECT Description, FileSize FROM Win32_PageFile

 

--성능 모니터의 Logical Disk에 포함된 카운터의 값들을 출력하는 쿼리

SELECT * FROM Win32_PerfRawData_PerfDisk_LogicalDisk

 

--CPU 정보를 출력하는 쿼리

SELECT Caption, CpuStatus, DeviceID FROM Win32_Processor

 

 

[참고] WQL 쿼리는 다음 링크에 있는 Scriptomatic 프로그램을 이용하여 쉽게 작성하실 수 있습니다.

 http://www.microsoft.com/technet/scriptcenter/tools/scripto2.mspx

 

 

지금까지 WMI 데이터 판독기 작업에 대해 설명하였습니다. 다음 글에서는 WMI 이벤트 감시자 작업에 대해 설명하도록 하겠습니다.

 

반응형
반응형

전송 작업

 

데이터베이스의 규모가 커지고 데이터베이스 시스템을 이용하는 영역이 넓어지면서 단순한 데이터의 전송이나 변환 작업뿐만 아니라 데이터베이스 서버 이전이나, 통합(Consolidation), 업그레이드(Upgrade) 및 마이그레이션(Migration) 등과 같은 데이터베이스 개체나 데이터베이스 전체를 이전하는 작업들을 자주 수행하게 됩니다. SSIS에는 데이터의 변환과 관련된 작업 외에 다양한 유지 관리 작업들이 포함되어 있습니다. 본 글에서는 이러한 유지 관리 작업들 중에서 서버나 인스턴스 간 또는 개별 데이터베이스 간에 데이터베이스 오브젝트를 전송하는 작업들에 대해 설명하겠습니다.

 

SSIS에는 총 6개의 기본 전송 작업이 포함되어 있습니다.

1.      master 저장 프로시저 전송 작업 원본 서버(또는 인스턴스) master DB에 있는 사용자 저장 프로시저를 다른 서버(또는 인스턴스) master DB로 전송하는 작업입니다.

2.      SQL Server 개체 전송 작업 원본 서버에서 데이터베이스 개체를 대상 서버로 전송하는 작업입니다. 데이터베이스 개체에는 테이블, 저장 프로시저, , 사용자 정의 함수 등 모든 개체가 다 포함이 됩니다.

3.      데이터베이스 전송 작업 원본 서버의 데이터베이스 전체를 다른 서버로 전송하는 작업입니다.

4.      로그인 전송 작업 원본 서버의 로그인을 대상 서버로 전송하는 작업입니다. 로그인 전송 작업으로 전송된 로그인은 기본적으로 사용 안 함 상태이며 원본 암호와는 다른 임의의 암호가 할당됩니다.

5.      작업 전송 작업 원본 서버의 SQL Agent에 있는 작업(Job)을 대상 서버로 전송하는 작업입니다.

6.      오류 메시지 전송 작업 원본 서버에 있는 사용자 정의 오류 메시지를 대상 서버로 전송하는 작업입니다. 

 

 

 

전송 작업에서 이용되는 원본 및 대상 서버의 연결은 다른 작업들과는 달리 SMOSever 연결을 이용합니다. SMO(SQL Management Objects) 연결은 서로 다른 서버 간 혹은 인스턴스 간 데이터베이스 개체를 전송하는데 이용되는 연결이며, OLEDB 연결이나 ADO.NET 연결과는 달리 특정 데이터베이스를 지정하지 않고 대상 서버만을 지정합니다.

SMOServer는 연결 관리자에서 마우스 오른쪽 버튼을 클릭한 후 나오는 메뉴에서 새 연결(W)을 선택한 후, SMOServer를 선택하여 추가하면 됩니다.

 

 

 

 

 

 

 

[참고] 정확한 표현은 원본 서버가 아닌 원본 인스턴스, 대상 서버가 아닌 대상 인스턴스가 정확한 표현입니다. 동일 서버에 두 개 이상의 인스턴스가 존재할 수 있으며, 이 인스턴스 간 전송 작업도 수행하는 경우도 있습니다. 하지만, 여기서는 이해를 명확히 하기 위해 원본 인스턴스 대신 원본 서버, 대상 인스턴스 대신 대상 서버로 명명하겠습니다.

  

 

 

 

master 저장 프로시저 전송 작업

 

원본 서버의 master DB에 있는 사용자 저장 프로시저를 대상 서버로 옮기는 작업 개체입니다. 작업 개체의 이름과 같이 오직 master DB에 있는 사용자 저장 프로시저만 대상이 되며, 해당 프로시저의 소유자가 dbo 인 프로시저만 옮길 수 있습니다.

이 작업을 수행하기 위해서는 원본 서버의 master DB에 있는 사용자 저장 프로시저를 볼 수 있는 권한이 있어야 하며, 또한 대상 서버의 sysadmin 서버 역할에 포함된 멤버이거나 master DB에 저장 프로시저를 만들 수 있는 권한이 있어야 합니다.

 

 

 

Ÿ          연결
SourceConnection –
원본 서버에 대한 연결을 지정합니다.
DestinationConnection –
대상 서버에 대한 연결을 지정합니다.

Ÿ          저장 프로시저
IfObjectExists –
대상 위치에 이미 동일한 저장 프로시저가 있는 경우 처리할 방법을 지정합니다.
                     
작업을 실패하도록 하거나(FailTask) 덮어 쓰기(Overwrite), 건너 뛰기(Skip)로 지정할 수 있습니다.
TransferAllStoredProcedures –
저장 프로시저 모두를 전송할 것인지, 일부만 할 것인지를 지정합니다.
StoredProceduresList –
모든 저장 프로시저를 전송하지 않는 경우, 전송할 저장 프로시저를 지정합니다.

 

master 저장 프로시저 전송 작업 master에 있는 사용자 저장 프로시저 만을 전송하기 위한 특화된 작업이며 아래 부분에서 설명할 SQL Server 개체 전송 작업에서 master DB를 지정하고 저장 프로시저를 전송하는 방식과 동일한 기능을 수행합니다. master 저장 프로시저 SQL 2000 DTS에서도 있었던 기능이지만, SQL Server 개체 전송 작업 SQL 2005 SSIS에서 새로 추가된 기능입니다. 필자의 생각으로는, 이 작업 역시 ActiveX 스크립트 작업과 같이 이전 버전과의 호환성을 유지하기 위한 목적으로 추가시켜 놓은 작업인 것 같습니다.

 

 

 

[참고] BIDS 내의 도구 상자에서는 master 저장 프로시저 전송 작업이라 되어 있으며, 온라인 도움말에서는 마스터 저장 프로시저 전송 작업으로 번역 되어 있습니다. 

 

 

 

 

 

SQL Server 개체 전송 작업

 

SQL Server 개체 전송 작업은 다른 전송 작업들과는 달리 SQL 2005 SSIS에서 새롭게 추가된 전송 작업 개체 입니다. 원본 서버에 있는 데이터베이스 개체를 대상 서버로 전송할 때 이용하는 작업입니다. 여기서 말하는 데이터베이스 개체란, 테이블이나 뷰, 저장 프로시저, 사용자 정의 함수, 기본값 등 하나의 데이터베이스에 포함된 모든 개체를 말하며 이 외에도 인덱스나 트리거, Primary Key 등과 같은 테이블 옵션 등을 지정하여 전송할 수 있습니다.

SQL Server 2005에는 파티션 함수나 스키마, 어셈블리 등과 같이 새로운 데이터베이스 개체가 추가되어 있습니다. 따라서 원본 서버 혹은 대상 서버의 버전에 따라 옮길 수 있는 개체의 범위가 다를 수 있습니다. 각 버전 별 전송 가능 개체는 다음 표를 참고하시면 됩니다.

 

개체

버전

테이블

SQL Server 2000 또는 SQL Server 2005

SQL Server 2000 또는 SQL Server 2005

저장 프로시저

SQL Server 2000 또는 SQL Server 2005

사용자 정의 함수

SQL Server 2000 또는 SQL Server 2005

기본값

SQL Server 2000 또는 SQL Server 2005

사용자 정의 데이터 형식

SQL Server 2000 또는 SQL Server 2005

파티션 함수

SQL Server 2005 에만 해당

파티션 구성표

SQL Server 2005 에만 해당

스키마

SQL Server 2005 에만 해당

어셈블리

SQL Server 2005 에만 해당

사용자 정의 집계

SQL Server 2005 에만 해당

사용자 정의 유형

SQL Server 2005 에만 해당

XML 스키마 컬렉션

SQL Server 2005 에만 해당

 

 

 

 

Ÿ          대상
DropObjectsFirst –
개체를 복사하기 전에 대상 서버에 있는 개체를 삭제할 지의 여부를 설정합니다.
IncludeExtendedProperties –
개체를 전송할 때 확장 속성을 포함할 지를 설정합니다.
CopyData –
테이블과 같은 개체를 전송할 때 데이터도 함께 전송할 지를 설정합니다.
ExistingData –
데이터를 전송하는 방법을 설정합니다. Replace로 설정을 하면 대상 테이블의 데이터를 덮어 쓰며, Append로 설정하면 기존 데이터에 추가하게 됩니다.
CopySchema –
개체를 전송할 때 스키마도 포함시킬지를 설정합니다.
UseCollation –
개체를 전송할 때 원본에서 지정한 정렬 방식을 그대로 전송할 지를 설정합니다.
IncludeDependentObjects –
전송할 개체에 종속된 다른 개체들도 함께 전송할 지를 설정합니다.

 

Ÿ          대상 복사 옵션
CopyAllObjects –
지정한 원본 서버의 데이터베이스에 있는 모든 데이터베이스 개체를 전송할 지를 설정합니다.
ObjectsToCopy –
세부적으로 전송할 개체를 선택합니다.

 

Ÿ          보안
CopyDatabaseUsers –
데이터베이스 사용자의 전송 여부를 설정합니다.
CopyDatabaseRoles –
데이터베이스 역할의 전송 여부를 설정합니다.
CopySqlServerLogins –
데이터베이스의 로그인의 전송 여부를 설정합니다.
CopyObjectLevelPermissions –
개체 수준 사용자 권한의 전송 여부를 설정합니다.

 

Ÿ          연결
SourceConnection –
원본 서버에 대한 연결을 지정합니다.
SourceDatabase –
전송할 개체가 포함된 원본 데이터베이스를 지정합니다.
DestinationConnection –
대상 서버에 대한 연결을 지정합니다.
DestinationDatabase –
대상 데이터베이스를 지정합니다.

 

Ÿ          테이블 옵션
CopyIndexes –
인덱스를 전송에 포함시킬지를 설정합니다.
CopyTriggers –
트리거를 전송에 포함시킬지를 설정합니다.
CopyFullTextIndexes –
전체 텍스트 인덱스를 전송에 포함시킬지를 설정합니다.
CopyPrimaryKeys –
기본 키를 전송에 포함시킬지를 설정합니다.
CopyForeignKeys –
외래 키를 전송에 포함시킬지를 설정합니다.
GenerateScriptsInUnicode –
유니코드 형식으로 개체 스크립트를 생성할 지를 설정합니다.

 

 

 

데이터베이스 전송 작업

 

데이터베이스 전송 작업은 SQL Server 개체 전송 작업과는 달리 데이터베이스 전체를 대상으로 복사 또는 이전하는 작업입니다. 이 작업은 동일 인스턴스 내에서 데이터베이스를 복사하는 데에도 이용할 수 있으며, SQL Server 2000에서 2005로도 가능합니다.

데이터베이스 전송 작업은 설정 방법에 따라 온라인과 오프라인으로 전송할 수 있습니다. 온라인으로 설정하게 되면, 데이터베이스는 온라인 상태에서 전송 작업이 수행되며 SMO(SQL Management Object)를 이용하여 데이터 및 개체가 전송됩니다. 오프라인으로 설정하게 되면, DB를 분리(Detach) 한 후 해당 데이터베이스의 데이터 파일 및 로그 파일을 대상 위치로 복사하고 다시 연결(Attach)하는 방식으로 전송합니다.

오프라인으로 전송 작업을 수행하기 위해서는 원본 서버 및 대상 서버에 네트워크 파일 공유를 지정해야 합니다.

 

 

 

Ÿ           대상 데이터베이스
DestinationDatabaseName –
대상 서버에 전송될 데이터베이스의 이름을 지정합니다.
DestinationDatabaseFiles –
대상 서버에 전송될 데이터베이스의 파일을 지정합니다.
DestinationOverwrite –
대상 서버에 있는 데이터베이스를 덮어 쓸지를 설정합니다.

 

Ÿ           연결
SourceConnection –
원본 서버에 대한 연결을 지정합니다.
DestinationConnection –
대상 서버에 대한 연결을 지정합니다.

 

Ÿ           원본 데이터베이스
Action –
원본 서버에 있는 데이터베이스를 대상 서버로 복사(Copy) 또는 이동(Move)할 지를 설정합니다.
Method –
원본 서버의 데이터베이스가 온라인 상태인 채로 전송 작업을 수행할 지, 오프라인 상태로 수행할 지를 설정합니다. 온라인 상태로 전송 작업을 수행하기 위해서는 패키지를 실행시키는 사용자가 sysadmin 고정 서버 역할의 멤버이거나 전송할 데이터베이스의 소유자(dbo)이어야 합니다. 오프라인 상태로 전송을 하기 위해서는 sysadmin 고정 서버 역할의 멤버이면 됩니다.
SourceDatabaseName –
원본 서버에서 전송할 데이터베이스의 이름을 지정합니다.
SourceDatabaseFiles –
원본 서버에서 전송할 데이터베이스의 파일을 지정합니다.
ReattachSourceDatabase –
전송 작업 중 오류가 발생되었을 때 원본 데이터베이스를 다시 연결(Attach)할 지를 설정합니다.

 

 

 

로그인 전송 작업

 

로그인 전송 작업은 원본 서버에서 대상 서버로 로그인 정보를 전송하는데 이용하는 작업 개체 입니다. SQL 2000 DTS에도 로그인 전송 작업이 있었으며, 이 작업을 이용하여 서버 간 이전 작업 시 로그인 정보를 복사하는 도구로 많이 사용 되었습니다.

 

SQL 2005 SSIS에서는 기존 보다 더욱 다양한 옵션들이 추가가 되었지만, 또한 기존 버전과 비교했을 때 보다 좀 더 제약 사항이 많아진 부분도 있습니다.

 

SSIS의 로그인 전송 작업에서는 모든 로그인을 전송하거나 특정 로그인 만을 지정할 수 있습니다. 또한 DTS에서와 마찬가지로 특정 데이터베이스에 엑세스 할 수 있는 로그인 정보 만 전송하도록 지정할 수도 있으며, 로그인에 연결된 sid(보안 ID)를 같이 복사할 수도 있습니다. 이러한 점은, SQL Server 2000에서 DB를 복원하고 로그인 정보를 복사한 후, 로그인의 sid를 수동으로 맞춰줘야 하는 작업을 줄여줄 수 있습니다. 또한 복사할 로그인이 대상 서버에 있는 경우, 덮어쓸지, 건너뛸지 등의 옵션을 지정할 수 있습니다.

 

하지만, 이러한 다양한 개선점 외에 몇 가지 제약 사항이 추가되었습니다. SSIS에서 로그인 전송 작업을 수행하게 되면 대상으로 전송된 로그인은 기본적으로 비활성화 되며, DTS에서와는 달리 임의의 암호가 할당됩니다. 로그인 정보를 전송한 후 관리자는 이 로그인을 활성화 하는 작업과 다시 암호를 설정하는 작업을 수행해야 합니다.

 

 

Ÿ           로그인
LoginsToTransfer –
원본 서버에서 대상 서버로 전송할 유형을 선택합니다.
       AllLogins –
원본 서버의 모든 로그인 정보를 대상 서버로 전송합니다.
       SelectedLogins –
원본 서버에서 선택한 로그인 정보만 대상 서버로 전송합니다.
       AllLoginsFromSelectedDatabases –
아래에 있는 DatabaseList에 지정된 데이터베이스의 모든 로그인 정보를 대상 서버로 전송합니다.
LoginsList – SelectedLogins
로 선택한 경우, 전송할 로그인을 선택합니다.
DatabaseList – AllLoginsFromSelectedDatabases
로 선택한 경우, 전송할 로그인의 데이터베이스를 선택합니다.

 

Ÿ           연결
SourceConnection –
원본 서버에 대한 연결을 지정합니다.
DestinationConnection –
대상 서버에 대한 연결을 지정합니다.

 

Ÿ           옵션
IfObjectExists –
대상 서버에 전송할 로그인이 있는 경우, 이에 대한 처리 방법을 설정합니다.
       FailTask –
동일한 로그인이 있는 경우, 로그인 전송 작업을 실패합니다.
       Overwrite –
대상 서버의 로그인을 덮어씁니다.
       Skip –
대상 서버의 로그인을 덮어 쓰지 않고, 그냥 건너뜁니다.
CopySids –
로그인에 연결된 sid(보안 ID)를 같이 넘길지를 설정합니다.

 

SQL 서버의 버전에 따른 차이점은 다음 표를 참고하시기 바랍니다.

 

작업 구분

패스워드

비활성화 여부

서버 역할 정보

2000의 로그인을 2000으로 복사

임의 할당

X

복사 안됨

2000의 로그인을 2005로 복사

임의 할당

비활성화

복사

2005의 로그인을 2000으로 복사

임의 할당

X

복사 안됨

2005의 로그인을 2005로 복사

임의 할당

비활성화

복사

 

 

 

[참고] 다음 링크에서 SQL 2005에서 로그인 정보 및 암호를 같이 전송하는 방법이 있습니다. 이를 참고하시기 바랍니다.

http://support.microsoft.com/kb/918992/en-us  

 

 

 

 

작업 전송 작업

 

원본 서버의 SQL Server 에이전트에 등록된 작업을 대상 서버로 전송하는 작업 개체입니다. 개체 전송 작업이나 로그인 전송 작업과 같이 전체 작업을 대상으로 하거나 특정 작업만 전송하도록 설정할 수가 있으며, 대상 서버에 동일한 이름의 작업이 있는 경우, 덮어 쓰거나 건너뛰는 등의 설정을 하는 것은 동일합니다.

다른 작업들과는 달리 SQL Server 2000 SQL Server 2005간 기능 차이 없이 전송할 수 있습니다.

 

 

 

Ÿ           연결
SourceConnection –
원본 서버에 대한 연결을 지정합니다.
DestinationConnection –
대상 서버에 대한 연결을 지정합니다.

 

Ÿ           옵션
IfObjectExists –
대상 서버에 전송할 작업이 있는 경우, 이에 대한 처리 방법을 설정합니다.
       FailTask –
동일한 작업이 있는 경우, 작업 전송 작업을 실패합니다.
       Overwrite –
대상 서버의 작업을 덮어씁니다.
       Skip –
대상 서버의 작업을 덮어 쓰지 않고, 그냥 건너뜁니다.
EnableJobsAtDestination –
대상 서버로 작업을 전송한 후, 해당 작업을 활성화 여부를 설정합니다.

 

Ÿ           작업
TransferAllJobs –
모든 작업을 전송할 지 여부를 설정합니다.
JobsList –
모든 작업 전송이 아닌 경우, 전송할 작업을 선택합니다.
 

 

 

 

 

오류 메시지 전송 작업

 

원본 서버에 있는 사용자 정의 오류 메시지를 대상 서버로 전송하는 작업 개체입니다. 사용자 정의 오류 메시지는 message_id 50000 이상인 메시지이며, SQL Server 2000의 경우 master DB sysmessages 테이블에서, SQL Server 2005에서는 sys.messages 관리 뷰에서 확인하실 수 있습니다.

이 작업 역시 로그인 전송 작업이나 작업 전송 작업과 유사한 옵션으로 구성되어 있으며, 특정 언어 메시지만을 전송할 수 있는 옵션이 있습니다.

 

 

 

Ÿ           옵션
IfObjectExists –
대상 서버에 전송할 오류 메시지가 있는 경우, 이에 대한 처리 방법을 설정합니다.
       FailTask –
동일한 메시지가 있는 경우, 오류 메시지 전송 작업을 실패합니다
.
       Overwrite –
대상 서버의 메시지을 덮어씁니다
.
       Skip –
대상 서버의 메시지를 덮어 쓰지 않고, 그냥 건너뜁니다
.
TransferAllErrorMessages –
대상 서버로 모든 메시지를 전송할 지 여부를 설정합니다

ErrorMessageList –
모든 메시지 전송이 아닌 경우, 전송할 메시지를 선택합니다.
ErrorMessageLanguagesList –
대상 서버로 전송할 다른 언어 버전의 메시지를 선택합니다. 다른 언어의 메시지를 전송하기 위해서는 대상 서버에 us_english(language_id : 1033)인 메시지가 있어야 합니다
.

Ÿ           연결
SourceConnection –
원본 서버에 대한 연결을 지정합니다.
DestinationConnection –
대상 서버에 대한 연결을 지정합니다.

 

 

반응형
반응형

DTS 패키지를 SSIS로 업그레이드 및 마이그레이션 하기 (2)

 

SQL Server 2000 DTS 패키지를 아무런 변경 없이 바로 사용하는 방법인 업그레이드 관련 글과 연계하여 SQL Server 2005 SSIS 패키지로 변환하는 부분에 대해 설명하겠습니다.

 

 

 

3. 패키지 마이그레이션 하기

SQL Server 2005에서는 SQL Server 2000 DTS 패키지를 마이그레이션 하기 위한 패키지 마이그레이션 마법사를 제공합니다. 패키지 마이그레이션 마법사는 SQL Server 2005 Standard Edition Enterprise, Developer Edition에서 사용할 수 있습니다.

패키지 마이그레이션 마법사를 이용하여 DTS 패키지에 포함된 대부분의 작업들을 마이그레이션 할 수 있지만, ActiveX 스크립트 작업이나 동적 속성 지정 작업과 같은 일부 작업 개체에 대해서는 마이그레이션이 완벽하게 수행되지 않을 수 있습니다.

 

[작업 매핑표]

2000 DTS의 작업 개체를 2005 SSIS로 마이그레이션 시 다음 표와 같이 변경됩니다.

SQL Server 2000 DTS 작업

SQL Server 2005 SSIS 작업

ActiveX 스크립트 작업

ActiveX 스크립트 작업

대량 삽입 작업

대량 삽입 작업

SQL Server 개체 복사 작업

SQL Server 개체 전송 작업

데이터 마이닝 예측 작업

데이터 마이닝 쿼리 작업

패키지 실행 작업

DTS 2000 패키지 실행 작업

프로세스 실행 작업

프로세스 실행 작업

SQL 실행 작업

SQL 실행 작업

파일 전송 프로토콜 작업

FTP 작업

메시지 큐 작업

메시지 큐 작업

메일 보내기 작업

메일 보내기 작업

데이터베이스 전송, 오류 메시지 전송, 작업 전송, 로그인 전송 및 master 저장 프로시저 전송 작업

SQL Server 개체 전송 작업, 데이터베이스 전송 작업, 오류 메시지 전송 작업, 작업 전송 작업, 로그인 전송 작업 및 마스터 저장 프로시저 전송 작업

 

Analysis Service와 관련된 작업, 데이터 기반 쿼리 작업, 동적 속성 작업, 데이터 변환 작업 등은 SSIS 작업으로 변환되지 않습니다.

 

 

[패키지 변환 마법사 실행하기]

패키지 변환 마법사는 BIDS(Business Intelligence Developmemt Studios) [프로젝트(P)]à[DTS 패키지 마이그레이션 마법사(M)] 메뉴 혹은 솔루션 탐색기의 SSIS 패키지에서 실행할 수 있으며, SQL Server Management Studios [관리]à[레거시]à[데이터 변환 서비스] 에서 마이그레이션 마법사(M)을 선택하여 실행할 수 있습니다.

 

 

 

 

 

 

 

 

 

[dtsrun 명령줄 업그레이드]

SQL Server 2000 DTS 패키지를 수행하기 위한 유틸리티인 dtsrun.exe SQL Server 2005에서는 dtexec.exe로 변경되었습니다. 또한 수행 명령줄을 작성하는데 유용하게 사용할 수 있는 사용자 UI 형태의 프로그램인 dtsrunui.exe 역시 dtexecui.exe로 변경되었습니다.

DTS 패키지를 dtsrun.exe를 사용하여 수행한 경우, 다음 매핑 표와 같이 명령줄을 수정하여 사용할 수 있습니다.

 

A. dtexec에 같은 옵션이 있는 dtsrun 옵션

dtsrun 옵션

dtexec 옵션

설명

/?

/? Or /H[ELP]

옵션 목록을 표시합니다.

/S

/Ser[ver]

서버 이름을 지정합니다.

/U

/U[ser]

사용자 이름을 지정합니다.

/P

/P[assword]

사용자 암호를 제공합니다.

/N

/D[ts] - 패키지 저장소

/SQ[L]

MSDB의 패키지 이름을 지정합니다.

/G

/VerifyP[ackageID]

패키지 GUID를 제공합니다.

/V

/VerifyV[ersionID]

/VerifyB[uild]

패키지 버전 및 빌드를 지정합니다.

/M

/De[crypt]

패키지 암호를 지정합니다.

/F

/D[ts] - 패키지 저장소

/F[ile] - 파일 시스템

패키지의 파일 이름을 지정합니다.

/A

/Set

변수 값을 지정합니다.

/L

/L[ogger], /Cons[oleLog]

로그 파일 또는 로그 공급자에 로깅합니다.

/W

/L[ogger] , /Cons[oleLog]

이벤트 로그에 로깅합니다.

 

B. dtexec에는 없는 dtsrun 옵션

dtsrun 옵션

dtexec 옵션

설명

/E

(사용자 이름 및 암호 생략)

트러스트된 연결을 사용합니다.

/R

(리포지토리 지원 안 됨)

리포지토리 데이터베이스 이름을 지정합니다.

/Z

 

암호화된 명령줄을 전달합니다.

/!X

 

암호화된 명령줄 생성 시 실행을 차단합니다.

/!D

(Dtutil.exe 사용)

MSDB 데이터베이스에서 패키지를 삭제합니다.

/!Y

 

암호화된 명령줄을 실행하지 않고 표시합니다.

/!C

 

명령줄을 클립보드에 복사합니다.

 

C. dtexec에 새로 추가된 옵션

dtsrun 옵션

dtexec 옵션

설명

 

/CheckF[ile]

검사점 파일을 지정합니다.

 

/CheckP[ointing]

검사점을 설정하거나 해제합니다.

 

/Com[mandFile]

추가 명령줄 옵션을 포함하는 파일을 지정합니다.

 

/Conf[igFile]

구성 파일을 지정합니다.

 

/Conn[ection]

패키지의 연결 관리자에 연결 문자를 제공합니다.

 

/M[axConcurrent]

최대 동시 실행 파일 수를 설정합니다.

 

/Rem

주석을 입력합니다.

 

/Rep[orting]

보고 수준을 설정합니다.

 

/Res[tart]

검사점 처리 방법을 지정합니다.

 

/Su[m]

행 개수를 표시합니다.

 

/Va[lidate]

실행하지 않고 유효성을 검사합니다.

 

/VerifyS[igned]

서명되지 않은 경우 실패 처리합니다.

 

/W[arnAsError]

경고를 오류 또는 유효성 검사 실패로 처리합니다.

 

 

 

 

 

[패키지 마이그레이션 마법사를 사용하여 DTS 패키지 마이그레이션 하기(1)]

 

다음과 같이 SQL 실행 작업이나 데이터 펌프 작업 등으로 이루어진 단순한 DTS 패키지를 패키지 변환 마법사를 이용하여 변환하는 방법을 설명합니다.

 

그림 1) 단순 패키지 원본

 

그림 2) 패키지 변환 마법사에서 DTS 패키지 원본 지정

 

그림 3) SSIS 패키지로 변경될 후 저장될 위치 선택

 

그림 4) 마이그레이션 할 패키지 선택

 

그림 5) 마이그레이션 로그파일 지정

 

그림 6) 마이그레이션 수행

 

그림 7) 마이그레이션 수행 후 완료된 형태

 

 

 

 

 

[패키지 마이그레이션 마법사를 사용하여 DTS 패키지 마이그레이션 하기(2)]

ActiveX 스크립트 중 단순한 형태의 스크립트는 패키지 마이그레이션 마법사를 통하여 정상적으로 변환이 이루어진 후 그대로 사용할 수 있습니다.

 

그림 8) ActiveX 스크립트 작업이 포함된 패키지

 

그림 9) 마이그레이션 수행 후

 

 

 

 

[패키지 마이그레이션 마법사를 사용하여 DTS 패키지 마이그레이션 하기(3)]

동적 속성 작업이 포함된 패키지의 경우, 주석 처리가 된 스크립트 형태의 작업으로 변환됩니다. 이러한 변환결과를 참고하여 SSIS구성속성 식 등을 이용하여 별도로 수정을 해야 합니다.

 

그림 10) 동적 속성 작업이 포함된 패키지

 

그림 11) 마이그레이션 수행 후

 

그림 12) 동적 속성 작업이 변환된 스크립트 작업

 

 

 

 

 

4. 패키지 마이그레이션 시 참고 사항

패키지 마이그레이션 마법사는 원본 DTS 패키지를 변경하지 않고 그대로 유지합니다.

SSIS DTS에서와는 달리 패키지 이름에 잘못된 문자(/ \ : [ ] . =)가 포함되어 있거나 등록되어 있지 않은 개체가 포함되어 있는 경우, 마이그레이션이 수행되지 않습니다.

패키지가 마이그레이션 되는 경우 패키지의 암호는 함께 마이그레이션 되지 않습니다.

 

 

반응형
반응형

DTS 패키지를 SSIS로 업그레이드 및 마이그레이션 하기 (1)

 

SQL Server 2000 DTS 패키지를 SQL Server 2005에서 사용하기 위한 방법으로는 업그레이드 또는 마이그레이션을 수행하는 방법이 있습니다. 업그레이드는 2000 DTS 패키지를 아무 변경 없이 그대로 2005에서 사용하는 것이며, 마이그레이션은 패키지 마이그레이션 마법사를 이용하여 DTS 패키지를 2005 SSIS 패키지로 변환하여 사용하는 것입니다. 패키지 마이그레이션 마법사 SQL Server 2005 설치 시 Integration Services를 설치하도록 선택하면 자동으로 설치됩니다.

 

 

 

1. 업그레이드 관리자를 이용하여 DTS 패키지 분석

 

2000 DTS 패키지를 2005 SSIS로 마이그레이션 하기 전에 우선 업그레이드 관리자를 이용하여 패키지 마이그레이션 시 수행해야 할 사항에 대해 점검합니다.

 

 

SQL Server 엔진이나 Analysis Services와 같이, 데이터 변환 서비스 항목을 선택하여 DTS 패키지에 대한 업그레이드 작업 분석을 수행합니다.

 

 

 

 

 

2. 2005에서 기존 DTS 패키지 그대로 이용할 수 있도록 업그레이드 하기

SQL Server 2005에서는 2000 DTS 패키지를 그대로 사용할 수 있는 기능을 제공합니다.

 

[SSMS(SQL Server Management Studio)에서 사용하기]

 

SQL Server Management Studio의 개체 탐색기 중 [관리] à [레거시] à [데이터 변환 서비스]에서 DTS 패키지를 가져올 수 있습니다. DTS 패키지가 .dts 형태의 패키지 파일로 저장되어 있는 경우, 패키지 파일 열기(O)를 이용하여 열 수 있으며, 파일 형태의 DTS 패키지를 SSIS로 가져오기 위해서는 패키지 파일 가져오기(I) 또는 마이그레이션 마법사(M)를 사용합니다.

 

, SQL Server 2000 Enterprise Manager [데이터 변환 서비스] à [로컬 패키지]에 저장되어 있는 DTS 패키지를 확장자가 .dts인 파일 형태로 저장시킨 후, 이를 SQL 2005에서 열어서 사용할 수 있습니다. DTS 패키지를 파일 형태로 저장하기 위해서는 DTS 패키지의 상단 메뉴 중, [다른 이름으로 저장]을 선택한 후, 위치(L)구조적 저장소로 선택하면 됩니다.

 

 

 

 

 

 

, SQL Server Management Studio에서 패키지 파일 열기(O)를 이용하여 DTS 패키지 파일을 열 때에는 SQL Server 2000 DTS 디자이너 구성요소가 설치되어 있어야 하며, 이는 수동으로 설치를 해 줘야 합니다. 설치가 되어있지 않은 경우 다음과 같은 경고 메시지가 나타납니다.

 

 

 

SQL Server 2000 DTS 디자이너는 다음 링크에서 받을 수 있습니다.

http://download.microsoft.com/download/4/4/D/44DBDE61-B385-4FC2-A67D-48053B8F9FAD/SQLServer2005_DTS.msi

 

 

 

 

[SSIS 패키지 내에서 기존 DTS 패키지 이용하기]

2005 SSIS에는 2000 DTS 패키지를 직접 수행할 수 있는 DTS 2000 패키지 작업이 별도의 작업 개체로 포함되어 있습니다.

 

 

 

Integration Services의 도구상자 à 제어 흐름 항목 중 DTS 2000 패키지 실행 작업을 선택하여 제어 흐름 작업 영역에 추가한 후, 파일 형태 혹은 2000 원격 서버에 저장되어 있는 형태의 DTS 패키지를 호출하여 실행시킬 수 있습니다.

 

 

반응형
반응형

FTP 작업

 

파일 시스템 작업과 함께 FTP 작업은 데이터 처리 작업에서 파일과 관련된 작업을 수행하는 역할을 담당합니다.

 

 

실제 업무 환경에서 FTP 작업은 상당히 많이 사용되고 있습니다. 참고로, 필자의 경험을 간략히 말씀 드리겠습니다. 필자가 구축했었던 프로세스 중의 하나는 웹 로그 파일을 분석하는 것이었는데, 매 시간 10여 개의 웹 캐시 서버와 SSL 서버로부터 총 십 여 기가의 텍스트 로그 파일이 발생이 되었습니다. 이 로그 파일들을 FTP 작업을 이용하여 필터링을 전문적으로 하는 서버로 가져온 후, 필터링 작업을 거쳐 테이블에 넣는 방식이었습니다.

 

이미 2000DTS에서도 FTP 작업이 있었지만, 단순히 파일을 받는 기능 정도로 매우 단순했기 때문에 필자는 이 작업을 이용하는 대신 ftp 커멘드를 자주 이용하였습니다.

, FTP 작업을 수행할 명령 파일을 만든 후(예를 들어 ftpcmd.txt 라 하겠습니다. 이 파일 내에는 자동으로 수행 될 FTP 커멘드들이 차례로 들어있습니다.),

 

master..xp_cmdshell ‘ftp –s:ftpcmd.txt’

 

형태의 쿼리를 SQL 작업으로 만들어 수행하는 노가다(^^)로 처리하였습니다. 간혹 프로그램 삘(^^Feel)이 받으면, ActiveX 작업을 이용하여 전용 FTP 작업을 만들기도 하였습니다.

 

SSIS에서는 단순히 파일을 가져오기뿐만 아니라, 여러 다양한 기능들이 포함되어 있습니다.

 

파일 시스템 작업과 유사하게 FTP 작업 역시 디렉터리를 생성 또는 삭제 파일 보내기 및 받기 등과 같은 여러 작업을 수행할 수 있습니다.

 

 

FTP 작업을 수행하기 위해서는 연결 관리자에서 FTP 연결을 미리 만들어 놔야 합니다. 다른 작업과는 달리, FTP 작업 내에 RemotePath에서는 새 연결을 사용하여 작업 단계에서 직접 연결을 추가할 수는 없습니다.

FTP 연결은 연결 관리자새 연결(W)를 선택한 후, FTP 연결을 선택하면 됩니다.

 

 

 

 

 

 

 

 

 

1.      파일 보내기
LocalPath
에 지정된 연결에 해당되는 파일을 RemotePath에 지정된 FTP 연결에 해당되는 사이트로 파일을 보내는 작업입니다.
OverwriteFileAtDest
속성을 이용하여 파일이 있는 경우 덮어 쓸지를 지정할 수 있으며, IsTransferAscii 속성을 이용하여 Ascii 전송으로 할지를 지정할 수 있습니다.

2.      파일 받기
파일 보내기 작업과 유사하며, 원격지 사이트의 파일을 지정된 로컬 경로로 가져오는 작업입니다.

3.      로컬 디렉터리 만들기
로컬 서버에 디렉터리를 만드는 작업입니다.
OverwriteFileAtDest
속성을 이용하여 기존의 디렉터리가 있는 경우의 처리 방법을 지정할 수 있습니다. 만약 이 값을 False로 설정한 상태에서 해당 디렉터리가 있는 경우에 작업이 수행되면 실패로 처리가 됩니다.

4.      원격 디렉터리 만들기
원격 서버에 디렉터리를 만드는 작업입니다.
로컬 디렉터리 만들기 작업의 OverwriteFileAtDest 속성을 동일하게 사용할 수 있습니다.

5.      로컬 디렉터리 제거
LocalPath
에 지정한 폴더를 삭제합니다. 해당 디렉터리가 없는 경우 작업은 실패하게 됩니다.

6.      원격 디렉터리 제거
RemotePath
에 지정한 폴더를 삭제합니다. 해당 디렉터리가 없는 경우 작업은 실패하게 됩니다.

7.      로컬 파일 삭제
LocalPath
에 지정된 파일을 삭제합니다. 이 작업은 파일 시스템 작업의 파일 삭제 작업과는 달리, 해당 파일이 이미 지워지고 없는 경우 작업이 실패하게 됩니다.

8.      원격 파일 삭제
RemotePath
에 지정된 파일을 삭제합니다.

 

 

FTP 작업, 로컬 디렉터리나 로컬 파일을 이용하는 작업은 파일 시스템 작업의 작업과 상당히 유사합니다.

디렉터리 제거 또는 만들기 작업은 동일한 작업이라 할 수 있습니다.

 

위에서도 언급했지만 한 가지 팁을 설명 드리겠습니다. 만약 파일을 삭제하는 작업을 해야 하는 경우,

 

             삭제할 파일이 없더라도 작업 실패 없이 진행하고자 한다면    à          파일 시스템 작업을 이용

             삭제할 파일이 없는 경우에는 실패로 처리하고자 한다면         à          FTP 작업을 이용

 

합니다. 이 때, 두 가지 작업 모두 연결 관리자에서는 동일한 연결(파일 연결)을 이용할 수 있습니다.

 

 

반응형
반응형

파일 시스템 작업

 

필자가 처음 SSIS를 접했을 때 반가운(^^) 기능 중의 하나가 파일 시스템 작업이었습니다.

ETL 작업의 특성상, 파일을 이용하는 작업이 종종 필요합니다. 단순히 텍스트 파일로부터 데이터를 읽어오는 작업이라든지, 테이블의 내용을 텍스트로 내리는 작업(보통 속어로 데이터를 말아낸다고 하죠^^), 일별이나 월별로 폴더를 만드는 작업, 또는 오래된 파일을 자동으로 삭제하는 작업 등 다양한 곳에 적용됩니다.

참고로, SSIS 이전 버전인 SQL 2000 DTS 서비스에서는 이러한 작업들이 별도로 존재하진 않았고, ActiveX 스크립트 작업에서 FSO 개체를 이용하여 수행 했었습니다. (코딩 및 디버깅 환경이 매우 열악한 상황에서 상당히 노가다 작업이었지요..^^)

 

SSIS의 파일 시스템 작업은 거의 모든 형태의 파일 작업을 수행할 수 있습니다. 이러한 기능을 잘 조합해서 이용한다면, 데이터를 추출, 변환하는 ETL툴 뿐만 아니라, 파일을 생성, 이동, 관리를 할 수 있는 파일 관리 시스템도 작성 가능하지 않나 생각됩니다.

 

 

파일 시스템 작업제어 흐름 영역에 포함된 작업으로써, FTP 작업과 함께 파일과 관련된 작업을 수행하는 작업입니다.

파일 시스템 작업은 다음과 같은 개별 작업들을 수행할 수 있습니다.

 

 

 

1.      디렉터리 복사
SourceConnection
으로 지정된 원본의 디렉터리를 DestinationConnection으로 지정된 대상 위치로 복사합니다.
이 때, OverwriteDestination 속성을 이용하여 기존에 있는 폴더를 덮어 쓸 것인지를 지정할 수 있습니다.

연결 관리자의 사용 유형

SourceConnection : 기존 폴더     DestinationConnection : 기존 폴더



2.      파일 복사
디렉터리 복사와 동일한 형태이며, 폴더 대신 파일을 복사하는 작업입니다.

연결 관리자의 사용 유형

SourceConnection : 기존 파일     DestinationConnection : 기존 파일



3.      디렉터리 만들기
SourceConnection
으로 지정된 원본의 위치에 디렉터리를 만듭니다.
UseDirectoryIfExists
속성을 이용하여 이미 디렉터리가 있는 경우에 작업 실패로 처리할 것인지를 지정할 수 있습니다.

연결 관리자의 사용 유형

SourceConnection : 폴더 만들기

      

4.      디렉터리 삭제
SourceConnection
으로 지정된 위치에 디렉터리를 삭제합니다. 만약 해당 디렉터리가 존재하지 않는 경우에는 작업이 실패하게 됩니다.

연결 관리자의 사용 유형

SourceConnection : 기존 폴더

      

5.      디렉터리 내용 삭제
SourceConnection
으로 지정된 디렉터리에 들어있는 내용들(하위 디렉터리 포함)을 삭제합니다. 만약 해당 디렉터리가 존재하지 않는 경우에는 작업이 실패하게 됩니다.

연결 관리자의 사용 유형

SourceConnection : 기존 폴더

      

6.      파일 삭제
SourceConnection
에 지정된 파일을 삭제합니다. 만약 파일이 이미 지워지고 없더라도 해당 작업은 실패하지 않습니다.

연결 관리자의 사용 유형

SourceConnection : 기존 파일

      

7.      디렉터리 이동
SourceConnection으로 지정된 원본의 디렉터리를 DestinationConnection으로 지정된 대상 위치로 이동합니다.
이 때, OverwriteDestination 속성을 이용하여 기존에 있는 폴더를 덮어 쓸 것인지를 지정할 수 있습니다.

연결 관리자의 사용 유형

SourceConnection : 기존 폴더     DestinationConnection : 기존 폴더

      

8.      파일 이동
디렉터리 이동과 동일한 형태이며, 폴더 대신 파일을 이동시키는 작업입니다.

연결 관리자의 사용 유형

SourceConnection : 기존 파일     DestinationConnection : 기존 폴더

      

9.      파일 이름 바꾸기
파일 이동과 유사하지만, DestinationConnection기존 폴더 대신 기존 파일로 지정되어야 합니다.

연결 관리자의 사용 유형

SourceConnection : 기존 파일     DestinationConnection : 기존 파일

      

10.  특성 설정
SourceConnection으로 지정된 파일의 Hidden, ReadOnly, Archive, System 속성을 설정할 수 있습니다.

연결 관리자의 사용 유형

SourceConnection : 기존 파일

 

 

 

각 작업의 공통된 특성으로 IsSourcePathVariable IsDestinationPathVariable이 있습니다.

만약, 원본 파일 또는 디렉터리나 대상 파일 또는 디렉터리의 경로 정보를 변수에 저장시킨 후, 이를 이용할 때 이 속성값을 True로 지정한 후, 해당 변수를 각 경로로 지정하게 되면, 변수에 저장되어 있는 경로 정보를 이용할 수 있습니다.

 

참고로, 위의 내용 중, 연결 관리자사용 유형 지정에 대해 잠깐 언급하겠습니다.

파일 시스템 작업의 원본 및 대상 경로(또는 파일)에 대한 지정은 모두 작업 화면 하단에 있는 연결 관리자를 이용하게 됩니다.

 

 

SourceConnection 속성값으로 [원본 폴더] 라는 연결을 지정하고, DestinationConnection 속성값으로 [대상 파일]을 지정한 경우,

 

연결 관리자의 사용 유형

SourceConnection : 기존 폴더     DestinationConnection : 기존 파일

 

연결 관리자에서 [원본 폴더] 또는 [대상 파일]을 더블 클릭하면 다음과 같은 속성을 지정할 수 있습니다. SourceConnection [원본 폴더]이며, 사용 유형이 기존 폴더, DestionationConnection [대상 파일]이며, 사용 유형이 기존 파일이기 때문에 다음과 같이 설정해야 합니다.

 

 

 

 

 

이와 같이, 각 작업의 특성에 맞게 사용 유형을 지정해 줘야 파일 시스템 작업이 에러 없이 수행됩니다.

 


반응형
반응형

SQL 실행 작업

 

이번에는 제어 흐름 항목의 작업들 중에서 [SQL 실행 작업]에 대해 알아보도록 하겠습니다.

 

[SQL 실행 작업]은 이름 그대로, 사용자가 지정하는 SQL 쿼리를 수행하기 위한 작업입니다. 데이터 변환 작업을 수행하기 전에 필요한 테이블이나 DB를 만든다든지, 기존의 데이터를 정리한다든지, 또한 작업에 필요한 SQL 문을 실행하는 데에 이용할 수 있습니다.

 

SQL 2000 DTS에서는 가장 많이 사용된 작업들 중의 하나였으며, 2005에서는 2000에 비해 여러 다양한 기능들이 추가되었습니다.

 

 

SQL 실행 작업 편집기의 속성은 4가지의 탭으로 구성되어 있습니다. 이 중, 마지막 부분은 대부분의 작업에 공통적으로 포함되어 있기 때문에 본 설명에서는 제외하도록 하겠습니다.

 

 

A. 일반

일반 탭은 SQL 실행 작업의 Connection Type이나, 옵션 등을 설정하는 부분입니다.

 

 

a.      ConnectionType : EXCEL이나, OLE DB, ODBC SQL문이 수행될 Connection의 유형을 지정합니다.


b.      Connection : ConnectionType에 해당하는 Connection을 지정합니다. 이미 SSIS의 연결 관리자에 Connection Type에 해당하는 연결이 추가되어 있는 경우는 자동으로 항목이 나타나며, 추가되어 있지 않은 경우에는 <새 연결..>을 이용하여 만들 수 있습니다.

c.      SQLSourceType

직접 입력 : 아래의 SQLStatement 부분에 수행될 쿼리문을 직접 입력하도록 합니다.
파일 연결 : 수행될 쿼리문을 별도의 파일로 저장해 놓은 경우, 이를 사용합니다. SQLSourceType을 파일 연결로 선택하게 되면 아래의 SQLStatement 부분이 자동으로 FileConnection으로 변경되며, FileConnection 역시 연결 관리자에 추가된 파일을 사용하게 됩니다.
변수   : 수행될 쿼리문을 String형 변수에 저장시켜 놓은 후, 이를 이용하는 경우에 사용합니다.

d.      IsQueryStoreProcedure : 수행될 쿼리가 저장 프로시저인지를 설정합니다. ConnectionTypeADO 연결이 아닌 경우에는 이 옵션은 항상 false 입니다

e.      BypassPrepare : 쿼리문이 수행되기 위해 연결 관리자의 해당 연결로 보내기 전에 쿼리를 미리 준비해야 할지를 설정합니다.

f.         ResultSet : 쿼리 결과 형식을 지정합니다. 단순히 수행되는 쿼리인 경우에는 없음으로 지정을 하며, 수행 후 출력되는 결과의 유형에 맞게 속성을 지정합니다. 결과가 있는 경우, 결과 집합 탭에서 이를 지정해 줘야 합니다.

     

g.      TimeOut : 쿼리가 수행되는 동안의 TimeOut 값을 설정합니다. 0인 경우, TimeOut 값 미지정인 상태입니다.

h.      CodePage : 수행될 쿼리의 Language Code 입니다. 보통 한국어는 949, 영어는 1252 입니다.

 

이 외에 쿼리 작성기 등 추가 기능이 포함되어 있습니다.

 

 

 

B. 매개 변수 매핑

매개 변수 매핑 탭은 앞의 일반 탭에서 수행될 쿼리에 매개 변수가 포함되어 있는 경우, 이를 지정해 주는 부분입니다.

 

예를 들어, 수행 되는 쿼리가 다음과 같은 경우를 살펴 봅시다.

SELECT   * FROM      TESTTABLE WHERE   Vals = ?

, 변수의 값을 조건 절에 대입하여 쿼리를 수행하는 쿼리입니다. ? 부분이 매개 변수 값이 들어가는 부분이며, 매개 변수 매핑 탭에서 이를 지정하게 됩니다.

 

아래 부분에 있는 추가(A) 버튼을 누르면 자동으로 매핑 시킬 항목이 추가됩니다.

a.      변수 이름            : 대입할 변수를 지정합니다. 미리 정해놓은 변수가 없는 경우 <새 변수..>를 이용해서 변수를 추가하면 됩니다.

b.      방향                    : Input, Output, ReturnValue를 지정합니다. 저장 프로시저인 경우, 출력되는 값이 있으면, Output 변수로 지정하면 됩니다.

c.      데이터 형식         : 매개 변수의 데이터 형식을 지정합니다.

d.      매개 변수 이름    : 기본 값으로 NewParameterName으로 들어가 있지만, 0, 1, 2, … 등과 같은 형식으로 바꿔줘야 합니다. , 첫 번째 ? 인 경우 0, 두 번째 ? 인 경우 1로 설정해야 제대로 변수 매핑이 이루어져 작업이 수행됩니다.

 

 

 

C. 결과 집합

 

 

결과 집합 탭은 쿼리 수행 후, 출력되는 결과가 있는 경우, 이 결과 값을 저장하는 부분을 지정합니다.

 

일반 탭에서 ResultSet 속성이 없음으로 지정된 경우, 결과 집합 탭의 버튼들은 비활성화 되며, 단일 행 또는 전체 결과 집합, XML로 지정된 경우 활성화 됩니다.

단일 행으로 ResultSet 속성을 지정한 경우, 결과 이름에는 해당 컬럼 명을, 변수 이름에는 값을 저장할 변수를 지정합니다.

전체 결과 집합이나 XMLResultSet 속성을 지정한 경우, 반드시 결과 이름은 0 으로 지정해 줘야 하며, 결과를 저장할 변수의 유형은 전체 결과 집합인 경우에는 Object 형으로, XML형인 경우에는 String 형으로 지정해야 합니다.

 

반응형
반응형


외부 컴포넌트 등록 및 Foreach 루프 컨테이너 이용하기

 

SSIS의 여러 가지 많은 장점들 중 하나는, 작업(Task)및 변환, 원본, 대상 등의 SSIS 개체를 쉽게 만들고, 또한 쉽게 등록하여 사용할 수 있다는 점입니다. SSIS가 나온 지는 얼마 되지 않았지만, 이미 시중에는 다양한 형태의 작업 컴포넌트들이 개발되어 있습니다. 이번 글에서는, 이러한 외부 컴포넌트 중, 파일을 압축해 주는 작업을 이용한 데모로 설명하겠습니다.

 

우선 첨부 파일(CompressionSetup.msi)을 다운 받은 후, 실행하셔서 시스템에 해당 작업을 등록해 주시기 바랍니다. 참고로, 이 컴포넌트는 thejoyofcode.com 이라는 사이트에서 개발하여 배포한 것으로, http://www.thejoyofcode.com/SSIS_Compress_File_Task.aspx 에 가시면, 해당 컴포넌트의 원본 소스도 같이 받으실 수 있습니다.

 

 

 

 

따라하기) 컴포넌트 설치하기

1.       compressionsetup.msi를 다운 받은 후, 실행하여 시스템에 설치 합니다.




2.       설치가 된 후에는 특별히 작업 폴더나 메시지 등이 나타나지는 않습니다. 이제 SSIS 빈 프로젝트를 하나 띄웁니다.
왼편의 도구 상자에서 마우스 오른쪽 클릭을 한 후, 메뉴 중에서 항목 선택(I)을 클릭합니다.




3.       도구 상자 항목 선택 창에서 SSIS 제어 흐름 항목에 있는 Compress File Task를 체크합니다. 이번에 추가한 작업은 제어 흐름 항목이기 때문에 제어 흐름 탭에 나타난 것이며, 만약 변환 작업 관련 작업인 경우, 자동으로 SSIS 데이터 흐름 항목에 나타나게 됩니다.




4.       도구 상자의 제어 흐름 항목 가장 아래에 Compressed File Task 작업이 추가된 것을 확인하실 수 있습니다.




비교적 간단하지요? 이와 같이 여러 작업들을 등록할 수 있습니다.

 

 

 

따라하기) Compress File Task Foreach 루프컨테이너를 이용하여 특정 폴더의 파일 압축하기

Foreach 루프 컨테이너와 방금 설치한 Compress File Task를 이용하여 D:\SSIS\WebLog\ 폴더 내에 있는 웹 로그 파일(*.log)을 압축하는 것을 설명하겠습니다.

 

1.       Foreach 루프 컨테이너를 제어 흐름 영역에 추가 한 후, CurrentFileName 이라는 변수를 추가합니다.
이 때 이 변수의 범위는 Foreach 루프 컨테이너로 하며
(해당 컨테이너를 클릭해 놓은 상태에서 변수를 추가하면 됩니다.), 데이터 유형은 String으로 설정합니다.




2.       Foreach 루프 컨테이너의 속성 창에서 컬렉션 탭을 다음과 같이 설정합니다.
Enumerator                     : Foreach File 열거자
열거자 구성 중 폴더         : D:\SSIS\WebLog\
열거자 구성 중 파일         : *.log




3.       변수 매핑 탭에서 사용자::CurrentFileName 변수에 열거자에서 읽어 온 파일 이름을 대입하도록 설정합니다.



, D:\SSIS\WebLog\ 폴더의 .log 파일들을 읽어온 후, 그 경로를 CurrentFileName 변수에 반복해서 대입하도록 설정하는 것입니다.


4.       이제, Foreach 루프 컨테이너 안에 Compress File Task를 추가합니다.




5.       Compress File Task를 더블 클릭하여 속성 창을 연 다음 다음과 같이 속성을 설정합니다.
IsSourceFileVariable     : True
SourceFile                     : 사용자::CurrentFileName




6.       OK 누르신 후, 실행 해 보면, 해당 폴더(여기서는 D:\SSIS\WebLog\)에 각 파일들이 확장자가 .gz로 압축된 것을 확인하실 수 있습니다.




 

본 예제에 설명한 Compress File Task 외에도 다양한 기능들을 수행하는 작업들이 이미 많이 개발되어 배포되고 있으며, 또한 계속 개발되고 있습니다. 대부분이 무료이나, 유료인 경우도 있습니다. 예를 들어, 오라클 DB와 연결하기 위한 Source Provider 컴포넌트도 있으며 (기본적으로 제공되는 것보다 빠르다고 함), 정렬 작업의 성능을 향상시킨 작업 컴포넌트도 있습니다. 또한, 이러한 컴포넌트들을 직접 개발하는 것도 다른 제품들이나 기존의 DTS에 비해 훨씬 용이하므로, 자료들을 참고하여 직접 사용자 환경에 맞는 필요한 컴포넌트들을 개발하여 사용해 보길 바랍니다.

 

 

반응형
반응형


조회 변환 작업
 

이번 글에서는 SSIS의 여러 다양한 기능 들 중에서 DW 환경에서 많이 이용될 수 있는 작업으로 조회 변환 작업(Lookup)에 대한 간단한 예를 설명하겠습니다. 아래의 [따라하기]를 수행하기 위해서는 먼저 사전 테이블을 만들어야 하기 때문에, 본문 아래쪽에 실린 테이블 생성 스크립트를 먼저 수행해야 합니다.  

 

따라하기

 

1.       [연결 관리자]에서 OLE DB 연결을 하나 추가 이미 작업을 위해 만들어 놓은 TempDB로 데이터베이스를 선택합니다.


 

 

 

 

2.       [제어 흐름 영역]데이터 흐름 작업을 추가 – [도구 상자]에서 데이터 흐름 작업을 선택한 후, 드래그 해서 작업 영역에 갖다 놓습니다.

 

3.       데이터 흐름 영역에서 OLE DB 원본을 추가한 후, 이미 만들어 놓은 데이터 원본 테이블인 SourceTable을 선택합니다.


 

 

4.       [도구 상자][데이터 흐름 변환] 부분에서 조회 작업을 선택하여 추가한 후, OLE DB 원본과 연결시킵니다.


 

 

5.       [조회 변환 작업]의 속성을 다음과 같이 지정합니다.

 

 

 

      아래에 있는 매개 변수(P)를 눌러 다음과 같이 매개 변수를 설정합니다.


 

       

 

 

6.       오류 출력 구성을 클릭하여 다음과 같이 설정합니다.

     

7.       매핑된 결과가 저장될 테이블 지정 – [도구 상자][데이터 흐름 대상] 부분에서 OLE DB 대상을 선택하여 추가한 후, 조회의 녹색 라인과 연결 시킵니다.

     


 

8.       OLE DB 대상의 속성에서 대상 테이블 [dbo].[TargetTable]로 지정한 후, 매핑 탭을 눌러 정상적으로 칼럼들이 매핑 되었는지 확인합니다.

     

9.       매핑에 실패한 결과가 저장될 테이블 지정 – [도구 상자][데이터 흐름 대상] 부분에서 OLE DB 대상을 선택하여 추가한 후, 조회의 적색 라인과 연결 시킵니다.



이 때, 자동으로 오류 출력 구성 창이 나타나며, 이미 6단계에서 오류 지정을 해 줬기 때문에 그냥 확인을 누르면 됩니다.

 

10.   OLE DB 대상1의 속성에서 대상 테이블을 [dbo].[ErrorTable]로 지정한 후, 매핑 탭을 눌러 정상적으로 칼럼들이 매핑 되었는지 확인합니다.

  

11.   확인을 누른 후, 실행합니다.

 

12.   만약, 매핑이 안된 데이터를 별도로 보관할 필요가 없다면, 6단계에서 행 리디렉션대신 오류 무시로 설정하고, 9, 10 단계를 생략하면 됩니다.

 

 

 

 

 

조회 작업의 장점

언뜻 보기에는 조인 작업과 별 차이가 없어 보일지도 모릅니다. 하지만, 다음과 같은 장점들이 있습니다.

디멘젼 테이블 역할을 하는 조회 테이블을 메모리에 캐싱을 시켜서 빠른 속도로 참조 작업을 할 수 있습니다.

 

  

일반적으로, DW 환경에서는 원본 테이블에 비해 디멘젼 테이블의 사이즈가 작기 때문에 캐싱을 시킨 후, 바로 매핑 작업을 수행한다면 상당한 성능 효과를 볼 수도 있습니다. 참고로, 외국의 블로그에 실린 성능 차이를 설명하면, 2,500만 건의 테이블을 이용하여 30개의 디멘젼 테이블로 매핑을 시키는 Merge Join 작업을 SSIS의 조회 작업으로 변환한 결과, 수행 시간이 2일에서 45분으로 단축이 되었다고 합니다.

 

다음과 같은 기능도 생각할 수 있습니다. 만약, 원본의 데이터에 대해 1:n 으로 매핑이 되는 경우가 있을 수도 있습니다. , 매핑이 되는 디멘젼 값이 고유하지 않아서, 한 개 이상의 대리키 값으로 매핑이 되는 경우, JOIN을 이용한다면 원본 데이터가 중복으로 들어가게 될 것입니다. 조회 작업을 이용한다면, 이러한 점을 막을 수도 있다..테스트 해 보기 바랍니다.

이 외에도, 앞 서 데모에서 보인 대로, 디멘젼이 매핑 안될 때 처리 방법을 지정할 수 있습니다. 에러를 발생시켜 매핑 작업을 중단시킬 수도 있으며, 에러를 무시할 수도 있고, 데모에서와 같이 별도의 대상으로 저장시킬 수도 있습니다.

 

 

 

따라 하기를 수행하기 위한 임시 테이블 생성 스크립트

 

/*---------------------------------------------------------------------------

             SSIS 조회(Lookup)작업데모를위한사전테이블생성스크립트

-----------------------------------------------------------------------------*/

 

USE TEMPDB

GO

 

--데이터테이블생성및데이터입력

CREATE TABLE dbo.SourceTable (

             KeyColumn VARCHAR(32),

             ModifyDate SMALLDATETIME

)

GO

 

--정상적으로매핑되어야할데이터

INSERT INTO dbo.SourceTable (KeyColumn, ModifyDate) VALUES ('a','2006-01-01')

GO

 

--디멘젼값의유효시작일이전의데이터: 매핑되서는안됨

INSERT INTO dbo.SourceTable (KeyColumn, ModifyDate) VALUES ('a','2005-10-01')

GO

 

--매핑되는디멘젼이없는데이터: 매핑되서는안됨

INSERT INTO dbo.SourceTable (KeyColumn, ModifyDate) VALUES ('b','2006-01-01')

GO

 

 

--매핑된데이터가저장될테이블

CREATE TABLE dbo.TargetTable (

             KeyColumn VARCHAR(32),

             ModifyDate SMALLDATETIME,

             SurrogateKey INT

)

GO

 

--매핑실패한데이터가저장될테이블

CREATE TABLE dbo.ErrorTable (

             KeyColumn VARCHAR(32),

             ModifyDate SMALLDATETIME

)

GO

 

 

 

--디멘젼테이블생성및데이터입력

CREATE TABLE dbo.LookupDimension (

             KeyColumn VARCHAR(32),               -- 디멘젼값

             BeginDate SMALLDATETIME,           -- 디멘젼값의유효시작일

             ExpireDate SMALLDATETIME,          -- 디멘젼값의종료일

             SurrogateKey INT                            -- 대리키

)

GO

 

 

INSERT INTO dbo.LookupDimension (KeyColumn, BeginDate, ExpireDate, SurrogateKey)

VALUES ('a', '2005-12-11', '2006-02-28', 1)

GO

 

 

 

 

 

--다음과같은결과가출력되어야한다

--Case1) 디멘젼으로매핑이되는경우만출력(TargetData에저장될것이다.)

SELECT 

             S.KeyColumn, 

             S.ModifyDate,

             D.SurrogateKey

FROM dbo.SourceTable S

LEFT OUTER JOIN dbo.LookupDimension D

        ON S.KeyColumn  =  D.KeyColumn

        AND S.ModifyDate >= D.BeginDate

        AND S.ModifyDate <  D.ExpireDate

WHERE D.SurrogateKey IS NOT NULL

GO

 

--Case2) 디멘젼으로매핑이안되는데이터를별도로출력(ErrorData에저장될것이다.)

SELECT 

             S.KeyColumn, 

             S.ModifyDate

FROM dbo.SourceTable S

LEFT OUTER JOIN dbo.LookupDimension D

        ON S.KeyColumn  =  D.KeyColumn

        AND S.ModifyDate >= D.BeginDate

        AND S.ModifyDate <  D.ExpireDate

WHERE D.SurrogateKey IS NULL

GO

 

 

 

반응형
반응형

컨테이너 이해하기   

 

 

 

 

컨테이너라는 개체는 Integration Service에서 매우 막강하면서도 중요한, 또한 알면 많이 편한 기능입니다.

컨테이너는 쉽게 말해,

 

반복적인 작업을 수행하기 위한 작업 공간이며,

 관련 있는 작업들을 그룹화 해서 관리하기 위한 관리 개체이며

  실행 속성이나 트랜잭션 등의 작업 수행 속성을 설정할 수 있는 개체

입니다.. (써 놓고 보니 쉽지 않네요~! 뒷부분에서 구체적으로 설명하겠습니다.)

 

그럼 어떤 경우에 컨테이너가 이용될 수 있는지를 먼저 살펴보고 자세한 단계로 넘어가겠습니다.

개발자 : 이 작업을 1000번 반복해서 수행하고 싶습니다.

    DBA   : ..2000 DTS에서는 루핑이 제공 안되니깐, 할 수 없이 쿼리를 이용해서 해야 겠군..

   è For 루프 컨테이너

 

현업 : D:\TextResult 폴더에 동일한 형태의 텍스트 파일이 123,456개 있습니다! 이걸 DB에 좀 넣어 주십쇼.

    DBA : 우선 xp_cmdshell로 잘 조작해서 파일명 읽어서 임시테이블에 넣고.. 루핑 돌리고..아후~!

   è Foreach 루프 컨테이너

 

개발자 : 수행되어야 할 배치 쿼리가 무지하게 많습니다..

DBA    : 할 수 없지요. 하나의 텍스트 파일로 붙여 주시믄 기꺼이..아후~!

   è Foreach 루프 컨테이너

 

개발자 : 여기 이 작업들 중 하나라도 실패 나면 작업은 멈추어야 되고,이 외의 것들은 그냥 무시하면 됩니다.

DBA    : .. 패키지를 두 개로 나누어야 하나

   è 시퀀스 컨테이너

 

 

 

SSIS에는 총 4개의 컨테이너가 있습니다.

 

A. For 루프 컨테이너

첫 번째의 경우와 같이, 동일한 작업을 반복적으로 수행해야 하는 경우 이용할 수 있는 작업 개체입니다.

SQL 2000 DTS에서는 기본적으로 루핑(Looping) 기능이 없었습니다. 물론, ActiveX 스크립트를 이용해서 구현할 수는

있었지만, 간단하지는 않았습니다.

프로그래밍을 조금이라도 해 본 사람이라면, For … Next 구문을 잘 아실 것입니다..

   for I = 1 to 10 step 1

    수행할 명령들

   next

 

 

   따라하기) 처음이라 조금 자세히 설명하겠습니다.

 

1)      SSIS 빈 프로젝트를 하나 엽니다.

2)      화면의 중앙 빈 곳에 마우스 오른쪽을 클릭하여 변수(S)를 선택합니다. 그러면 화면 왼쪽에 변수 창이 생길 것입니다.

3)      AAA 라는 변수를 추가합니다. (데이터 형태는 Int32)

4)      도구 상자에서 For 루프 컨테이너를 끌어서 작업 공간에 넣습니다.


 

5)      이름을 변경하고 싶으면 변경하고(테스트인데 뭐 그냥 대충 합시다~), 더블 클릭해서 속성창을 엽니다.

6)      다음 그림과 같이 설정한 후 확인을 누릅니다.

a.         InitExpression              : 변수의 초기값.

b.        EvalExpression            : 루핑을 계속 수행할 지를 평가하는 계산식. (참일 때 까지 반복적으로 수행됩니다.)

c.         AssignExpression        : 증가 또는 반복 시키는 식

 

7)      왼쪽의 도구 상자에서 스크립트 작업을 끌어서 For 루프 컨테이너 안에다가 넣습니다.
요렇게~!

8)      스크립트 작업을 더블 클릭하여 속성을 연 다음, 스크립트 탭에서 ReadOnlyVariables AAA를 넣어줍니다.
(정확히는 [사용자::AAA] 이렇게 넣어줘야 합니다~!. 이 부분은 나중에 변수에 관련해서 다시 언급)

 

9)      그런 후, 아래에 있는 스크립트 디자인(S)를 클릭하여 스크립트 편집기를 엽니다.

10)   Main() 함수 안에 다음과 같은 스크립트 추가합니다. (그냥 확인하기 위해 메시지 창만 뿌리는 역할입니다.)

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

 

11)   스크립트 편집기를 닫고, 스크립트 속성 창에서 확인을 눌러 속성 창도 닫습니다.

12)   ~! 이제 실행해 봅시다~!

 

더 이상 설명하면 지루해질 것 같으니깐, 다음 단계로 넘어가겠습니다.^^

 

 

 

B. Foreach 루프 컨테이너

이 컨테이너는 앞의 경우보다 할 말이 좀 많습니다. 구현되는 방식은 앞의 For 루프 컨테이너와 유사하지만,

열거자(Enumerator)라는 반복적인 작업을 지정해주는 무엇인가(~)가 있어서, 몇번~! 이라는 한정 없이 조건에

맞는 만~큼 반복해서 수행하도록 하는 것입니다.

이 작업 방식 역시 VB Script For…each 구문과 비슷합니다.

 

Integration Service에서의 열거자 유형은 다음과 같습니다.

Ÿ           File 열거자 : 많이 사용될 수 있는 열거자 유형입니다. 앞서 사용할 수 있는 사례에서 나온 것과 같이 특정 폴더 내에 있는 모든 파일을 대상으로 작업을 한다든지, C:\Script\ 폴더 내의 *.sql 파일을 이용하는 경우 사용될 수 있습니다. File 열거자를 이용하는 경우는 따라하기를 참고하기 바람.

 

Ÿ           Item 열거자 : 개발자가 칼럼 유형을 정하고, 직접 입력한 데이터를 이용하는 경우입니다.


아래 쪽에 있는 열(C) 버튼을 클릭하여 입력할 데이터의 열을 미리 정한 후, 직접 데이터를 입력하면 됩니다.

 

 

Ÿ           ADO 열거자 : Object형의 변수에 들어있는 데이터를 순차적으로 나열합니다. 예를 들어, ResultSet 이라는 Object 형 변수에
   SELECT ADDRESSID FROM ADVENTUREWORKS.PERSON.ADDRESS WHERE ADDRESSID<=10
라는 명령의 결과 집합이 저장되어 있다고 합시다. (이러한 작업은 SQL 실행 작업으로 간단히 만들 수 있습니다.)
이 단계 후, ResultSet이라는 변수에 들어있는 결과 집합의 값들을 차례로 꺼내서 쓸 때 이용하는 열거자 입니다.

 

Ÿ           ADO.NET 스키마 행 집합 열거자 : .NET공급자로 만들어진 연결에 대한 스키마 정보를 이용하는 열거자 입니다. 예를 들어, .NET 공급자로 AdventureWorks 데이터베이스를 지정해 놓은 경우, 해당 DB의 모든 테이블 명을 출력하는 데에 이용할 수 있습니다.

 

 

Ÿ           From Variable 열거자 이용할 수 있는 여러 가지 방법이 있을 수 있지만, 간단히 하나만 설명하자면, InputStr 이라는 String 변수에 abcdefg 라는 값이 대입되어 있다고 가정합니다. 이 경우,  a, b, c, d, e, f, g로 값을 나누어서 작업을 수행해야 하는 경우, 이 열거자를 이용할 수 있습니다. 이 때, Foreach 루프 컨테이너 내에 변수 매핑 탭에서 매핑이 되는 변수의 유형은 Object 타입이어야 합니다.

 

Ÿ           Nodelist 열거자 : XML 형태의 데이터를 이용할 때 사용되는 열거자 입니다. XPath(XML Path Language) 식의 결과 집합을 읽어서 이용할 수 있습니다. 예를 들어 /authors/author[@period=’classical’] XPathString을 지정했다면, classical  기간의 모든 저자 목록을 읽어와서 열거자로 이용하게 됩니다.

 

 

Ÿ           SMO 열거자 : SMO SQL Server Management Object를 지칭합니다. SQL 2000 DMO와 같은 역할을 수행하는 개체이며, 스키마나 테이블 목록, 뷰 목록 등과 같이 데이터베이스의 여러 형태의 정보를 읽어올 수 있는 개체입니다. 예를 들어, 특정 데이터베이스의 모든 테이블에 대해 작업을 수행해야 하는 경우, 이 열거자를 이용하면 됩니다.

 

 

   따라하기) Foreach 루프 컨테이너를 이용하여 C:\Windows\ 폴더 아래에 있는 모든 bmp 파일을 C:\로 복사하기.

1)       빈 프로젝트 화면에서 Foreach 루프 컨테이너를 하나 놓고는, ImagePath라는 String 형 변수를 하나 추가합니다.
이 때, 이 변수의 값을 임의로 지정해 주도록 합니다.
( : C:\Windows\aaa.bmp)

 

2)      Foreach 루프 컨테이너의 속성을 연 후, 컬렉션 탭에서 다음과 같이 지정합니다.
Enumerator            : Foreach File
열거자
폴더                        : C:\Windows
파일                        : *.bmp

        

 

3)      , 이제 잠시 설명을 할 시간입니다. C:\WINDOWS 내에 *.bmp라는 파일명을 읽어온 후, 이 정보를 특정 변수에 넘겨줘야 합니다. 파일 리스트를 읽어오라고 한 것이지, 해당 파일들(여기서는 bmp 파일)을 직접 읽어와서 어떤 작업을 하는 것이 아님을 명심합시다~!. 파일의 디렉토리 정보와 파일 명을 읽어서 앞서 정의한 ImagePath 변수에 대입하도록 지정하는 단계입니다.


변수 매핑 탭을 누른 후, 다음과 같이 변수 칼럼의 밑 부분을 클릭하면 변수를 선택할 수 있습니다. 앞 단계에서 만들지 않았다면 여기서 만들어줘도 됩니다.



추가한 후 확인.

     

4)      도구 상자에서 파일 시스템 작업Foreach 루프 컨테이너 내로 끌어 넣습니다.

 

 

5)      그런 후, 다음과 같이 설정합니다다.
a. DestinationConnection
부분에서 <새 연결..> 로 대상을 추가합니다.

b. IsSourcePathVariable
True로 지정한 후, SourceConnection사용자::ImagePath 로 지정합니다.
c. Operation
파일 복사로 지정한 후 확인

     

6)      패키지를 실행하면, C:\ *.bmp 파일들이 마구 복사되어 있을 것입니다..(꼭 지워주세요~!)

 

 

 

C. 시퀀스 컨테이너

 시퀀스 컨테이너는 특별한 기능을 하지 않습니다. 단지, 관련된 작업들을 하나로 묶어주는 기능을 합니다.

예를 들어, 하나의 패키지에 테이블을 준비하는 작업들, 데이터를 변환하는 작업들, 데이터를 적재하는 작업들이 있을 경우, 각각의 관련이 있는 개별 작업들을 하나로 그룹화 해 줍니다. SSIS에서는 그룹을 엮어 주는 기능으로 그룹(G)라는 것이 있기는 합니다.

다음 그림을 보면서 비교하면서 설명하겠습니다. 참고로, 그룹을 만드는 방법은 그룹을 만들 작업들을 선택한 후(CTRL키를 누른 상태로 클릭하면 각각 선택됨) 마우스 오른쪽 버튼을 누르면 그룹(G)이라는 메뉴가 나타납니다.

 

 

같은 그룹핑 역할이지만, 왼쪽의 시퀀스 컨테이너는 하나의 작업으로 간주됩니다. , 컨테이너 안의 작업들이 모두 수행이 되어 해당 컨테이너 내의 결과가 실패든, 성공이든 종료가 되는 경우 이 상태를 가지고 다음 단계로 보내게 됩니다. 하지만, 그룹은 그냥 시각적으로 묶어주는 역할만 하며 패키지의 실행에 아무런 영향을 주지 않습니다.

또한 시퀀스 컨테이너는 다음과 같은 속성을 가지지만, 단순 그룹은 이러한 속성을 지정할 수가 없습니다.

    

 

 

D. 작업 호스트

지금까지 세 가지의 컨테이너는 도구 상자의 메뉴에 있는 것입니다. 나머지 하나인 작업 호스트는 그럼 어디에 있을까요?

작업 호스트 컨테이너는 앞의 경우와는 달리 별도로 존재하는 것이 아니라, 작업 그 자체가 하나의 컨테이너 입니다. , FTP 작업이나 스크립트 작업, 데이터 처리 작업 등과 같이 개별 작업이 컨테이너인 것입니다.

 

그럼 왜 굳이 이것을 컨테이너로 간주를 할까요?

글쎄.. 필자의 추측으로는, 데이터 처리 작업이라는 놈 때문이 아닐까가 첫 번째 생각입니다. 데이터 처리 작업은 다른 작업들과는 달리, 별도의 작업 공간을 가지며, 내부에는 여러 원본 및 변환 작업들을 포함하게 됩니다. (이것 역시 다음에 자세히 다룰 예정..^^) 또 다른 생각으로는, 실행 속성이나, 강제 실행 값, 트랜잭션 등을 지정할 수 있는 개체 단위를 컨테이너로 보기 때문이 아닐까 생각됩니다.

 

 이 외에도 필자는 패키지 자체도 하나의 컨테이너가 되지 않을까라고 생각됩니다. 각 작업을 포함하고 있으며, 속성을 지정할 수 있다는 점에서..물론 필자가 먼저 생각한 건 아니고, 외국의 유명하신 분께서 그렇지 않냐~라꼬 글 올리신 것 보니, ..그럴 수도 있겠네~ 라는 생각이 든 것입니다..

 

 

 

 지금까지 SSIS에서의 컨테이너 들에 대해 대~충 알아봤습니다. 시간이 된다면, 각 컨테이너 별, 그리고 Foreach 루프 컨테이너 내에 있는 열거자 들에 대한 데모도 올릴 계획입니다..

 

 

 

반응형
반응형

[실습 5] 오류 출력 추가

 

1.     실습 2의 패키지 복사

A.        Business Intelligence Development Studio를 아직 열지 않은 경우 시작을 클릭하고 모든 프로그램, Microsoft SQL Server 2005를 차례로 가리킨 다음 Business Intelligence Development Studio를 클릭합니다.

B.       파일 메뉴에서 열기, 프로젝트/솔루션, SSIS Tutorial 폴더, 열기를 차례로 클릭한 후 SSIS Tutorial.sln을 두 번 클릭합니다.

C.       솔루션 탐색기에서 Lesson 2.dtsx를 마우스 오른쪽 단추로 클릭한 후 복사를 클릭합니다.

D.       솔루션 탐색기에서 SSIS 패키지를 마우스 오른쪽 단추로 클릭한 후 붙여넣기를 클릭합니다.

E.        기본적으로 복사된 패키지의 이름은 Lesson 5.dtsx가 됩니다.

F.        솔루션 탐색기에서 Lesson 5.dtsx를 두 번 클릭하여 패키지를 엽니다.

 

 

2.     손상된 파일 만들기

A.        메모장이나 기타 텍스트 편집기에서 Currency_VEB.txt 파일을 엽니다.

B.       Currency_VEB.txt 파일은 C:\SSIS_Demo\Tutorial 폴더에 있습니다.

C.       메모장과 같은 텍스트 편집기의 찾기 및 바꾸기 기능을 사용하여 모든 VEB 문자열를 찾아서 BAD로 바꿉니다.

D.       C:\SSIS_Demo\Tutorial 폴더에 수정된 파일을 Currency_BAD.txt로 저장합니다.

E.        텍스트 편집기를 닫습니다.

 

 

3.     런타임 도중 오류 발생 확인

A.        디버그 메뉴에서 디버깅 시작을 클릭합니다.
세 번째 데이터 흐름 반복에서 조회 CurrencyKey 변환은 Currency_BAD.txt 파일을 처리하려 하고 변환이 실패하게 됩니다. 변환 실패로 인해 전체 패키지가 실패하게 됩니다.

B.       디버그 메뉴에서 디버깅 중지를 클릭합니다.

C.       디자인 화면에서 실행 결과 탭을 클릭합니다.

D.       로그를 찾아보고 다음의 처리되지 않은 오류가 발생했는지 확인합니다.
[Currency Key
조회[38]] 오류: 조회 중에 행에서 일치하는 항목을 생성하지 않았습니다.

 

 

4.     오류 출력 추가

A.        데이터 흐름 탭을 클릭합니다.

B.       도구 상자에서 데이터 흐름 대상을 확장하고 플랫 파일 대상을 데이터 흐름 디자인 화면에 끌어 놓습니다.

C.       Currency Key 조회 변환을 클릭한 다음 빨간색 화살표를 새 플랫 파일 대상에 끌어 놓습니다.
빨간색 화살표는 Currency Key 조회 변환의 오류 출력을 나타냅니다. 빨간색 화살표를 사용하여 변환을 대상에 연결하면 처리 오류를 대상으로 리디렉션할 수 있습니다.

D.       오류 출력 구성 대화 상자의 오류 열에서 행 리디렉션을 선택한 다음 확인을 클릭합니다.

 

E.        플랫 파일 대상을 마우스 오른쪽 단추로 클릭한 다음 편집을 클릭합니다.

F.        플랫 파일 대상 편집기 대화 상자에서 새로 만들기를 클릭합니다.

G.       플랫 파일 형식 대화 상자에서 구분 기호로 분리됨이 선택되었는지 확인한 다음 확인을 클릭합니다.

H.       플랫 파일 연결 관리자 편집기 대화 상자에서 찾아보기를 클릭합니다.

I.          열기 대화 상자에서 파일 이름C:\SSIS_Demo\ErrorOutput.txt를 입력한 다음 열기를 클릭합니다.

J.         플랫 파일 연결 관리자 편집기에서 왼쪽에 있는 항목을 클릭합니다.
원본 데이터 파일의 열 외에 새로운 열인 ErrorCode ErrorColumn이 있습니다. 이러한 열은 조회 변환의 오류 출력에 의해 생성되며 실패한 행의 원인을 해결하는 데 사용할 수 있습니다.

K.        확인을 클릭합니다.

L.        플랫 파일 대상 편집기 창에서 파일의 데이터 덮어쓰기 체크 항목을 제거합니다.

M.      플랫 파일 대상 편집기 창에서 왼쪽에 있는 매핑 항목을 클릭하여 모든 열이 올바른지 확인합니다. 대상의 열 이름을 바꿀 수도 있습니다. 확인을 클릭합니다.

      

 

 

5.     패키지 테스트

A.        디버그 메뉴에서 디버깅 시작을 클릭합니다.

B.       패키지의 실행이 완료된 후에 디버그 메뉴에서 디버깅 중지를 클릭합니다.

C.       메모장이나 텍스트 편집기 등을 이용하여 C:\SSIS_Demo\ErrorOutput.txt 파일을 엽니다.

D.       파일의 모든 행에는 BAD의 일치하지 않는 CurrencyID 값이 포함되어 있습니다.

 
반응형
반응형

[실습 4] 로깅 추가하기

 

1.     실습 2의 패키지 복사

A.        Business Intelligence Development Studio를 아직 열지 않은 경우 시작을 클릭하고 모든 프로그램, Microsoft SQL Server 2005를 차례로 가리킨 다음 Business Intelligence Development Studio를 클릭합니다.

B.       파일 메뉴에서 열기, 프로젝트/솔루션, SSIS Tutorial 폴더, 열기를 차례로 클릭한 후 SSIS Tutorial.sln을 두 번 클릭합니다.

C.       솔루션 탐색기에서 Lesson 2.dtsx를 마우스 오른쪽 단추로 클릭한 후 복사를 클릭합니다.

D.       솔루션 탐색기에서 SSIS 패키지를 마우스 오른쪽 단추로 클릭한 후 붙여넣기를 클릭합니다.

E.        기본적으로 복사된 패키지의 이름은 Lesson 4.dtsx가 됩니다.

F.        솔루션 탐색기에서 Lesson 4.dtsx를 두 번 클릭하여 패키지를 엽니다.

 

 

2.     패키지에 로깅 추가하기

A.        SSIS 메뉴에서 로깅을 클릭합니다.

B.       SSIS 로그 구성 대화 상자의 컨테이너 창에서 패키지를 나타내는 최상위 개체가 선택되었는지 확인합니다.

 

C.       공급자 및 로그 탭의 공급자 유형 상자에서 텍스트 파일용 SSIS 로그 공급자를 선택한 다음 추가를 클릭합니다.
기본 이름이 텍스트 파일용 SSIS 로그 공급자인 새 텍스트 파일 로그 공급자가 패키지에 추가됩니다. 이제 새 로그 공급자를 구성할 수 있습니다.

D.       이름 열에 Lesson 4 Log File을 입력합니다.

E.        설명을 수정할 수도 있습니다.

F.        구성 열에서 <새 연결>을 클릭하여 로그 정보가 쓰여질 대상을 지정합니다.
파일 연결 관리자 편집기 대화 상자의 사용 유형에서 파일 만들기를 선택한 다음 찾아보기를 클릭합니다.

G.       파일 선택 대화 상자의 파일 이름 상자에 C:\SSIS_Demo\TutorialLog.log를 입력하고 열기를 클릭합니다.

H.       확인을 클릭하여 파일 연결 관리자 편집기 대화 상자를 닫습니다.

 

I.          컨테이너 창에서 패키지 컨테이너 계층의 모든 노드를 확장한 다음 샘플 데이터 추출 확인란을 제외한 모든 확인란의 선택을 취소합니다.

 

J.         자세히 탭의 이벤트 열에서 PipelineExecutionPlan PipelineExecutionTrees 이벤트를 선택합니다.

 

 

K.        공급자 및 로그 탭의 이름 열에서 Lesson 4 Log File을 선택합니다. 패키지의 로그 공급자를 만든 후에는 로그 공급자를 삭제한 후 다시 만들지 않아도 이 로그 공급자를 선택 취소하여 잠시 로깅을 해제할 수 있습니다.

L.        확인을 클릭합니다.

        

 

3.     패키지 테스트

A.        디버그 메뉴에서 디버깅 시작을 클릭합니다.

B.       패키지의 실행이 완료된 후에 디버그 메뉴에서 디버깅 중지를 클릭합니다.

C.       메모장이나 텍스트 편집기를 이용하여 C:\SSIS_Demo\TutorialLog.log 파일을 엽니다.

 
반응형
반응형


[실습 3] UNION 및 집계 변환 만들기

 

1.     패키지 추가

A.        Business Intelligence Development Studio를 아직 열지 않은 경우 시작을 클릭하고 모든 프로그램, Microsoft SQL Server 2005를 차례로 가리킨 다음 Business Intelligence Development Studio를 클릭합니다.

B.       파일 메뉴에서 열기, 프로젝트/솔루션, SSIS Tutorial 폴더, 열기를 차례로 클릭한 후 SSIS Tutorial.sln을 두 번 클릭합니다.

C.       솔루션 탐색기에서 SSIS 패키지를 선택한 후 마우스 오른쪽 단추를 클릭하여 SSIS 패키지를 선택합니다.

D.       기본적으로 만들어진 패키지의 이름은 Package 1.dtsx가 됩니다.

E.        Package 1.dtsx를 선택한 후 마우스 오른쪽 단추를 클릭하여 이름 바꾸기를 선택한 후, Lesson 3.dtsx로 변경합니다.

F.        솔루션 탐색기에서 Lesson 3.dtsx를 두 번 클릭하여 패키지를 엽니다.

 

 

2.     플랫 파일 연결 관리자 추가 및 구성

A.        연결 관리자 영역에서 마우스를 오른쪽 클릭한 다음 새 플랫 파일 연결을 선택합니다.

 

B.       연결 관리자 이름 Picks, 파일 이름C:\SSIS_Demo\Picks.csv로 설정하고 첫 번째 데이터 행의 열 이름 체크 상자에 체크합니다.

C.       고급을 클릭한 후 NumberOfPicks 열의 DataType 속성 값을 부호 없는 4바이트 정수 [DT_I4]로 변경합니다.

D.       확인을 클릭하여 플랫 파일 연결 관리자 편집기를 닫습니다.

 

E.        연결 관리자 영역에서 마우스를 오른쪽 클릭한 다음 새 플랫 파일 연결을 선택합니다.

F.        연결 관리자 이름 Views, 파일 이름C:\SSIS_Demo\Views.csv로 설정하고 첫 번째 데이터 행의 열 이름 체크 상자에 체크합니다.

G.       고급을 클릭한 후 NumberOfViews 열의 DataType 속성 값을 부호 없는 4바이트 정수 [DT_I4]로 변경합니다.

H.       확인을 클릭하여 플랫 파일 연결 관리자 편집기를 닫습니다.

 

I.          연결 관리자 영역에서 마우스를 오른쪽 클릭한 다음 새 플랫 파일 연결을 선택합니다.

J.         연결 관리자 이름 Purchases, 파일 이름C:\SSIS_Demo\Purchases.csv로 설정하고 첫 번째 데이터 행의 열 이름 체크 상자에 체크합니다.

K.        고급을 클릭한 후 PurchaseValue 열의 DataType 속성 값을
10
진수 [DT_DECIMAL]로 변경합니다.

L.        확인을 클릭하여 플랫 파일 연결 관리자 편집기를 닫습니다.

 

M.      연결 관리자 영역에서 마우스를 오른쪽 클릭한 다음 새 플랫 파일 연결을 선택합니다.

N.       연결 관리자 이름 UNION_집계 대상,
파일 이름C:\SSIS_Demo\Union_Result.txt로 설정합니다.

O.       을 클릭한 후 열 구분 기호를 {t}으로 설정합니다.

P.       고급을 클릭한 후, 새로 만들기 5번 클릭하여 5개의 열을 추가하고 다음과 같이 속성을 변경합니다

Ÿ           0 – Name : Customer  DataType [DT_STR]   OutputColumnWidth : 50

Ÿ           1 – Name : Product    DataType [DT_STR]   OutputColumnWidth : 50

Ÿ           2 – Name : NumberOfViews     DataType : 부호 없는 4바이트 정수 [DT_I4]

Ÿ           3 – Name : NumberOfPicks      DataType : 부호 없는 4바이트 정수 [DT_I4]

Ÿ           4 – Name : PurchaseValue       DataType : 10진수 [DT_DECIMAL]

Q.       확인을 클릭하여 플랫 파일 연결 관리자 편집기를 닫습니다.

 

 

3.     패키지에 데이터 흐름 작업 추가하기

A.        제어 흐름 탭을 클릭합니다.

B.       도구 상자에서 제어 흐름 항목을 확장하고 데이터 흐름 작업을 제어 흐름 탭의 디자인 화면으로 끌어 놓습니다.

C.       제어 흐름 디자인 화면에서 새로 추가한 데이터 흐름 작업을 마우스 오른쪽 단추로 클릭하고 이름 바꾸기를 클릭한 다음 이름을 UNION 및 집계 변환으로 변경합니다.

 

 

4.     플랫 파일 원본 추가 및 구성

A.        UNION 및 집계 변환 데이터 흐름 작업을 두 번 클릭하거나 데이터 흐름 탭을 클릭하여 데이터 흐름 디자이너를 엽니다.

 

B.       도구 상자의 데이터 흐름 원본 부분에서 플랫 파일 원본을 데이터 흐름 탭의 디자인 화면으로 끌어다 놓습니다.

C.       데이터 흐름 디자인 화면에서 새로 추가한 플랫 파일 원본을 마우스 오른쪽 단추로 클릭하고 이름 바꾸기를 클릭한 다음 이름을 Picks로 변경합니다.

D.       플랫 파일 원본을 더블 클릭하여 플랫 파일 원본 편집기 대화 상자를 엽니다.

E.        플랫 파일 연결 관리자 상자에서 Picks를 선택합니다.

F.        을 클릭하고 열 이름이 올바른지 확인합니다.

G.       확인을 클릭합니다.

 

H.       도구 상자의 데이터 흐름 원본 부분에서 플랫 파일 원본을 데이터 흐름 탭의 디자인 화면으로 끌어다 놓습니다.

I.          데이터 흐름 디자인 화면에서 새로 추가한 플랫 파일 원본을 마우스 오른쪽 단추로 클릭하고 이름 바꾸기를 클릭한 다음 이름을 Views로 변경합니다.

J.         플랫 파일 원본을 더블 클릭하여 플랫 파일 원본 편집기 대화 상자를 엽니다.

K.        플랫 파일 연결 관리자 상자에서 Views를 선택합니다.

L.        을 클릭하고 열 이름이 올바른지 확인합니다.

M.      확인을 클릭합니다.

 

N.       도구 상자의 데이터 흐름 원본 부분에서 플랫 파일 원본을 데이터 흐름 탭의 디자인 화면으로 끌어다 놓습니다.

O.       데이터 흐름 디자인 화면에서 새로 추가한 플랫 파일 원본을 마우스 오른쪽 단추로 클릭하고 이름 바꾸기를 클릭한 다음 이름을 Purchases로 변경합니다.

P.       플랫 파일 원본을 더블 클릭하여 플랫 파일 원본 편집기 대화 상자를 엽니다.

Q.       플랫 파일 연결 관리자 상자에서 Purchases를 선택합니다.

R.       을 클릭하고 열 이름이 올바른지 확인합니다.

S.       확인을 클릭합니다.

 

 

5.     UNION ALL 변환 설정

A.        도구 상자의 데이터 흐름 변환 부분에서 UNION ALL 데이터 흐름 탭의 디자인 화면으로 끌어다 놓습니다.

B.       Picks를 클릭한 후 녹색 화살표를 UNION ALL 변환에 갖다 놓습니다. Views Purchases에 대해서도 동일한 작업을 수행합니다. 작업 후에는 UNION ALL 변환에는 세 개의 녹색 화살표가 연결이 됩니다.

 

 

C.       UNION ALL 변환을 더블 클릭한 후, 출력 열 이름에 NumberOfViews를 추가하고, UNION ALL 입력 1<무시> 상태로 설정하고, UNION ALL 입력 2NumberOfViews를 선택, UNION ALL 입력 3<무시>로 설정합니다.

D.       출력 열 이름에 PurchaseValue를 추가하고, UNION ALL 입력 1과 입력 2<무시>로 설정하고, UNION ALL 입력 3PurchaseValue로 설정합니다. 다음과 같이 설정이 되었는지 확인합니다.

 

 

6.     정렬 변환 추가하기

A.        도구 상자의 데이터 흐름 변환 부분에서 정렬을 데이터 흐름 탭의 디자인 화면으로 끌어다 놓습니다.

B.       UNION ALL 변환을 클릭한 후 녹색 화살표를 정렬 변환에 끌어 놓아 두 변환 작업을 연결합니다.

C.       정렬 변환을 더블 클릭한 후, 정렬 변환 편집기사용 가능한 입력 열에서 CustomerProduct 열의 체크상자에 체크를 합니다.

D.       체크를 하게 되면 아래의 표에 CustomerProduct 열이 추가가 될 것입니다. 추가된 열의 정렬 유형오름차순인지를 확인한 후, 확인을 눌러 정렬 변환 편집기 창을 닫습니다.

 

 

 

7.     집계 변환 추가하기

A.        도구 상자의 데이터 흐름 변환 부분에서 집계를 데이터 흐름 탭의 디자인 화면으로 끌어다 놓습니다.

B.       정렬 변환을 클릭한 후 녹색 화살표를 집계 변환에 끌어 놓아 두 변환 작업을 연결합니다.

C.       집계 변환을 더블 클릭한 후, 집계 변환 편집기사용 가능한 입력 열에서 Customer, Product, NumberOfViews, NumberOfPicks, PurchaseValue 열의 체크상자에 체크를 합니다.

D.       체크를 하게 되면 아래의 표에 Customer, Product, NumberOfViews, NumberOfPicks, PurchaseValue 열이 추가가 될 것입니다.

E.        Customer, Product 입력 열에 대해서는 Group By 연산을, NumberOfViews, NumberOfPicks, PurchaseValue 열에 대해서는 Sum 연산을 설정합니다.

 

 

8.     파생 열 변환 추가하기

A.        도구 상자의 데이터 흐름 변환 부분에서 파생 열을 데이터 흐름 탭의 디자인 화면으로 끌어다 놓습니다.

B.       집계 변환을 클릭한 후 녹색 화살표를 파생 열 변환에 끌어 놓아 두 변환 작업을 연결합니다.

C.       파생 열 변환을 더블 클릭하여 파생 열 변환 편집기를 엽니다.

D.       아래 표에서

Ÿ           파생 열 이름 : NumberOfViews, 파생 열 : 바꾸기 ’NumberOfViews’
: ISNULL(NumberOfViews) ? 0 : NumberOfViews

Ÿ           파생 열 이름 : NumberOfPicks, 파생 열 : 바꾸기 ’NumberOfPicks’
: ISNULL(NumberOfPicks) ? 0 : NumberOfPicks

Ÿ           파생 열 이름 : PurchaseValue, 파생 열 : 바꾸기 ’ PurchaseValue
: ISNULL(PurchaseValue) ? 0 : PurchaseValue

로 설정 합니다.

 

E.        확인을 클릭하여 파생 열 변환 편집기를 닫습니다.

 

 

9.     플랫 파일 대상 추가하기

A.        도구 상자의 데이터 흐름 대상 부분에서 플랫 파일 대상을 데이터 흐름 텝의 디자인 화면으로 끌어다 놓습니다. 플랫 파일 대상을 클릭한 후 마우스 오른쪽 버튼을 눌러 이름 바꾸기를 선택한 후, UNION_집계 대상으로 이름을 변경합니다.

B.       파생 열 변환을 클릭한 후 녹색 화살표를 UNION_집계 대상에 끌어 놓아 두 작업 개체를 연결합니다.

C.       UNION_집계 대상을 더블 클릭한 후 플랫 파일 대상 편집기 창을 엽니다.

D.       플랫 파일 연결 관리자에서 UNION_집계 대상을 선택한 후, 매핑을 눌러 각 열이 제대로 매핑 되었는지를 확인합니다.

E.        확인을 눌러 플랫 파일 대상 편집기를 닫습니다.

 

 

10.패키지 테스트

A.        디버그 메뉴에서 디버깅 시작을 클릭합니다.

B.       패키지의 실행이 완료된 후에 디버그 메뉴에서 디버깅 중지를 클릭합니다.

C.       메모장이나 텍스트 편집기 등을 이용하여 C:\SSIS_Demo\Union_Result.txt 파일을 열어 결과가 제대로 출력되었는지를 확인합니다.

 
반응형
반응형

[실습 1] 간단한 ETL 패키지 만들기

 

1.     Integration Services 프로젝트 만들기

A.        시작 메뉴에서 모든 프로그램, Microsoft SQL Server 2005를 차례로 가리킨 다음 SQL Server Business Intelligence Development Studio를 클릭합니다.

B.       파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 클릭하여 새 Integration Services 프로젝트를 만듭니다.

C.       새 프로젝트 대화 상자에서 템플릿 창의 Integration Services 프로젝트를 선택합니다.

D.       이름 상자에서 기본 이름을 SSIS Tutorial로 변경하고 확인을 클릭합니다.

E.        기본적으로 Package.dtsx라는 빈 패키지가 만들어지고 프로젝트에 추가됩니다.

F.        솔루션 탐색기 창에서 SSIS 패키지 항목에 있는 Package.dtsx를 마우스 오른쪽 단추로 클릭한 다음 이름 바꾸기를 클릭하여 기본 패키지의 이름을 Lesson 1.dtsx로 바꿉니다.

G.       패키지 개체의 이름을 바꾸라는 메시지가 나타나면 예를 누릅니다.

 

 

2.     플랫 파일 연결 관리자 추가 및 구성

A.        화면의 하단에 있는 연결 관리자 영역에서 마우스 오른쪽 단추로 클릭한 다음 새 플랫 파일 연결을 선택합니다

B.       플랫 파일 연결 관리자 편집기 대화 상자에서 연결 관리자 이름에 Sample Flat File Source를 입력합니다.

C.       찾아보기를 클릭합니다.

D.       열기 대화 상자에서 C:\SSIS_Demo\Tutorial\SampleCurrencyData.txt 파일을 엽니다.

E.        플랫 파일 연결 관리자 편집기 대화 상자에서 고급을 클릭합니다.

F.        속성 창에 다음 내용을 변경합니다.

Ÿ           0Name 속성을 AverageRate로 변경합니다.

Ÿ           1Name 속성을 CurrencyID로 변경합니다.

Ÿ           2Name 속성을 CurrencyDate로 변경합니다.

Ÿ           3Name 속성을 EndOfDayRate로 변경합니다.

G.       속성 창에 다음 내용을 변경합니다.

Ÿ           0DataType 속성을 부동 소수점 수[DT_R4]로 변경합니다.

Ÿ           1DataType 속성을 유니코드 문자열[DT_WSTR]로 변경합니다.

Ÿ           2DataType 속성을 데이터베이스 타임스템프[DT_DBTIMESTAMP]로 변경합니다.

Ÿ           3DataType 속성을 부동 소수점 수 [DT_R4]로 변경합니다.

 

 

H.       미리 보기로 데이터를 확인한 후, 확인을 클릭합니다.

 

 

3.     OLE DB 연결 관리자 추가 및 구성

A.        연결 관리자 영역의 아무 곳이나 마우스 오른쪽 단추로 클릭한 다음
OLE DB 연결을 클릭합니다.

B.       OLE DB 연결 관리자 구성 대화 상자에서 새로 만들기를 클릭합니다.

C.       서버 이름localhost를 입력합니다.

D.       서버에 로그온 그룹에서 Windows 인증 사용을 선택했는지 확인합니다.

E.        데이터베이스에 연결 그룹의 데이터베이스 이름 선택 또는 입력 상자에
AdventureWorksDW
를 입력하거나 선택합니다.

F.        연결 테스트를 클릭하여 지정한 연결 설정이 올바른지 확인합니다.

G.       확인을 클릭합니다.

H.       확인을 클릭합니다.

I.          OLE DB 연결 관리자 구성 대화 상자의 데이터 연결 창에서
localhost.AdventureWorksDW
를 선택했는지 확인합니다.

J.         확인을 클릭합니다.

 

 

 

4.     패키지에 데이터 흐름 작업 추가하기

A.        제어 흐름 탭을 클릭합니다.

B.       도구 상자에서 제어 흐름 항목을 확장하고 데이터 흐름 작업을 제어 흐름 탭의 디자인 화면으로 끌어 놓습니다.

C.       제어 흐름 디자인 화면에서 새로 추가한 데이터 흐름 작업을 마우스 오른쪽 단추로 클릭하고 이름 바꾸기를 클릭한 다음 이름을 샘플 데이터 추출로 변경합니다.

 

 

5.     플랫 파일 원본 추가 및 구성

A.        샘플 데이터 추출 데이터 흐름 작업을 두 번 클릭하거나 데이터 흐름 탭을 클릭하여 데이터 흐름 디자이너를 엽니다.

B.       도구 상자의 데이터 흐름 원본 부분에서 플랫 파일 원본을 데이터 흐름 탭의 디자인 화면으로 끌어다 놓습니다.

C.       데이터 흐름 디자인 화면에서 새로 추가한 플랫 파일 원본을 마우스 오른쪽 단추로 클릭하고 이름 바꾸기를 클릭한 다음 이름을 샘플 데이터 원본으로 변경합니다.

D.       샘플 파일 원본을 더블 클릭하여 플랫 파일 원본 편집기 대화 상자를 엽니다.

E.        플랫 파일 연결 관리자 상자에서 Sample Flat File Source를 입력하거나 선택합니다.

F.        을 클릭하고 열 이름이 올바른지 확인합니다.

G.       확인을 클릭합니다.

 

 

6.     CurrencyKey 조회 추가하고 구성

A.        도구 상자의 데이터 흐름 변환 부분에서 조회를 데이터 흐름 탭의 디자인 화면으로 끌어다 놓습니다.

B.       샘플 데이터 원본 플랫 파일 원본을 클릭하고 녹색 화살표를 새로 추가한 조회 변환으로 끌어다 놓아서 두 구성 요소를 연결합니다.

C.       데이터 흐름 디자인 화면에서 새로 추가한 조회를 마우스 오른쪽 단추로 클릭하고 이름 바꾸기를 클릭한 다음 이름을 Currency Key 조회로 변경합니다.

D.       Currency Key 조회를 두 번 클릭합니다.

E.        조회 변환 편집기 대화 상자의 OLE DB 연결 관리자 상자에서
localhost.AdventureWorksDW
가 표시되는지 확인합니다.

F.        테이블 또는 뷰 사용 상자에서 [dbo].[DimCurrency]를 입력하거나 선택합니다.

G.       열 탭을 클릭합니다.

H.       사용 가능한 입력 열 패널에서 CurrencyID사용 가능한 조회 열 패널에 있는 CurrencyAlternateKey 열에 끌어다 놓습니다.

I.          CurrencyKey의 체크 상자를 체크합니다.

J.         확인을 클릭합니다.

 

 

 

7.     DateKey 조회 변환을 추가하고 구성

A.        도구 상자에서 조회를 데이터 흐름 디자인 화면으로 끌어다 놓습니다.

B.       Currency Key 조회 변환을 클릭하고 녹색 화살표를 새로 추가한 조회 변환으로 끌어다 놓아서 두 구성 요소를 연결합니다.

C.       데이터 흐름 디자인 화면에서 새로 추가한 조회 변환을 마우스 오른쪽 단추로 클릭하고 이름 바꾸기를 클릭한 다음 이름을 Date Key 조회로 변경합니다.

D.       Date Key 조회 변환을 두 번 클릭합니다.

E.        조회 변환 편집기 대화 상자의 OLE DB 연결 관리자 상자에서
localhost.AdventureWorksDW
가 표시되는지 확인합니다.

F.        테이블 또는 뷰 사용 상자에서 [dbo].[DimTime]을 입력하거나 선택합니다.

G.       열 탭을 클릭합니다.

H.       사용 가능한 입력 열 패널에서 CurrencyDate사용 가능한 조회 열 패널에 있는 FullDateAlternateKey 열에 놓습니다.

I.          TimeKey를 선택합니다.

J.         확인을 클릭합니다.

 

8.     OLE DB 대상 추가 및 구성

A.        도구 상자에서 OLE DB 대상을 데이터 흐름 탭의 디자인 화면으로 끌어 놓습니다.

B.       Date Key 조회 변환을 클릭하고 새로 추가한 OLE DB 대상 위로 녹색 화살표를 끌어 두 구성 요소를 함께 연결합니다.

C.       데이터 흐름 디자인 화면에서 새로 추가한 OLE DB 대상 구성 요소를 마우스 오른쪽 단추로 클릭하고 이름 바꾸기를 클릭한 다음 이름을 샘플 OLE DB 대상으로 변경합니다.

D.       샘플 OLE DB 대상을 두 번 클릭합니다.

E.        OLE DB 대상 편집기 대화 상자의 OLE DB 연결 관리자 상자에서
localhost.AdventureWorksDW
가 선택되어 있는지 확인합니다.

F.        테이블 또는 뷰 이름 상자에서 [dbo].[FactCurrencyRate]를 입력하거나 선택합니다.

G.       매핑을 클릭합니다.

H.       입력 열이 대상 열에 올바르게 매핑되는지 확인합니다.

I.          확인을 클릭합니다.

 

 

9.     패키지 테스트

A.        디버그 메뉴에서 디버깅 시작을 클릭합니다.

B.       패키지가 실행되어 1,097개의 행이 AdventureWorksDWFactCurrency 팩트 테이블에 추가되는 것을 확인합니다.

C.       패키지의 실행이 완료된 후에 디버그 메뉴에서 디버깅 중지를 클릭합니다.

 
반응형
반응형


[실습 2] 루핑(Looping) 추가하기

 

1.     실습 1의 패키지 복사

A.        Business Intelligence Development Studio를 아직 열지 않은 경우 시작을 클릭하고 모든 프로그램, Microsoft SQL Server 2005를 차례로 가리킨 다음 Business Intelligence Development Studio를 클릭합니다.

B.       파일 메뉴에서 열기, 프로젝트/솔루션, SSIS Tutorial 폴더, 열기를 차례로 클릭한 후 SSIS Tutorial.sln을 두 번 클릭합니다.

C.       솔루션 탐색기에서 Lesson 1.dtsx를 마우스 오른쪽 단추로 클릭한 후 복사를 클릭합니다.

D.       솔루션 탐색기에서 SSIS 패키지를 마우스 오른쪽 단추로 클릭한 후 붙여넣기를 클릭합니다.

E.        기본적으로 복사된 패키지의 이름은 Lesson 2.dtsx가 됩니다.

F.        솔루션 탐색기에서 Lesson 2.dtsx를 두 번 클릭하여 패키지를 엽니다.

 

 

2.     Foreach 루프 컨테이너 추가 및 구성

A.        Business Intelligence Development Studio에서 제어 흐름 탭을 클릭합니다.

B.       도구 상자의 제어 흐름 항목에서 Foreach 루프 컨테이너제어 흐름 탭의 디자인 화면으로 끌어 놓습니다.

C.       새로 추가한 Foreach 루프 컨테이너를 마우스 오른쪽 단추로 클릭하고 편집을 선택합니다.

D.       Foreach 루프 편집기 대화 상자의 일반 페이지에서 이름에 Foreach File in Folder를 입력합니다.

 

 

3.     Foreach 루프 컨테이너에서 열거자 구성

A.        컬렉션을 클릭합니다.

B.       컬렉션 페이지의 Enumerator 속성에서 Foreach File 열거자를 선택합니다.

C.       열거자 구성 그룹에서 찾아보기를 클릭합니다.

D.       폴더 찾아보기 대화 상자에서 C:\SSIS_Demo\Tutorial\를 선택합니다.

E.        파일 상자에 Currency_*.txt를 입력합니다.

 

 

4.     사용자 정의 변수에 열거자를 매핑

A.        변수 매핑을 클릭합니다.

B.       변수 매핑 페이지의 변수 열에서 빈 셀을 클릭하고 <새 변수...>를 선택합니다.

C.       변수 추가 대화 상자에서 이름varFileName을 입력합니다.

D.       확인을 클릭합니다.

E.        확인을 다시 클릭하여 Foreach 루프 편집기 대화 상자를 종료합니다.

 

 

5.     루프에 데이터 흐름 작업 추가

A.        Foreach File in Folder로 이름이 바뀐 Foreach 루프 컨테이너로 샘플 데이터 추출 데이터 흐름 작업을 끌어 놓습니다.

 

 

6.     플랫 파일 연결 관리자 수정

A.        연결 관리자 창에서 Sample Flat File Source를 클릭합니다.

B.       속성 창에서 Expressions의 빈 셀을 클릭한 다음 줄임표 단추 ()를 클릭합니다.

C.       속성 식 편집기 대화 상자의 속성 열에서 ConnectionString을 선택합니다.

D.       식 열 옆에 있는 줄임표 단추 ()를 클릭하여 식 작성기 대화 상자를 엽니다.

E.        식 작성기 대화 상자에서 변수 노드를 확장합니다.

F.        사용자::varFileName 변수를 상자로 끌어 놓습니다.

G.       확인을 클릭하여 식 작성기 대화 상자를 닫습니다.

H.       다시 확인을 클릭하여 속성 식 편집기 대화 상자를 닫습니다.

 

 

7.     패키지 테스트

A.        디버그 메뉴에서 디버깅 시작을 클릭합니다.

B.       패키지가 실행됩니다. 출력 창에서 각 루프 상태를 확인하거나 진행률 탭을 클릭하여 확인할 수 있습니다. 예를 들어 Currency_VEB.txt 파일에서 대상 테이블로 1097개의 행이 추가되었음을 확인할 수 있습니다.

C.       패키지의 실행이 완료된 후에 디버그 메뉴에서 디버깅 중지를 클릭합니다.

 
반응형
반응형

SSIS 패키지 수행하기

 

SSIS 패키지를 만든 후, 이를 수동으로 수행하는 방법 및 SQL Agent에 등록시켜 수행하는 방법에 대해 간략히 설명 드리겠습니다. SSIS에 대해 설명하기 전에 SQL Server 2000 DTS에서 수행했던 방법을 잠시 살펴보겠습니다.

 

2000 DTS Enterprise Manager(EM)에서 작성한 후, 해당 패키지 명을 마우스 오른쪽 클릭하면 패키지 실행 및 패키지 예약 옵션이 나타납니다.

SQL Agent에 등록하는 경우, 패키지 예약(S)를 선택하면 다음과 같은 화면이 나오며, 일정 등을 설정하면 바로 등록이 됩니다.

2005 SSIS는 이와는 약간 다릅니다.

 

SQLLeader.com SSIS게시판에 등록되어 있는 실습 패키지1을 이용하여 설명하겠습니다.

SSIS는 기본적으로 확장자가 .dtsx 인 파일로 존재합니다. 2000 DTS에서와 같이 msdb를 이용할 수도 있지만, 파일로 저장하는 방식이 기본값입니다. 여기서는 D:\SSIS\Lesson1.dtsx 라는 파일입니다.

 

 

패키지를 수동으로 수행하는 방법

패키지를 수동으로 실행하는 방법에는 크게 세가지가 있습니다. 첫 번째는 개발 툴인 BIDS(SQL Server Business Intelligence Development Studio)에서 직접 실행하는 방법입니다.

두 번째 방법은 패키지 실행 유틸리티라고 하는 DTEXECUI를 이용하는 방법입니다. [시작] à [실행] 에서 dtexecui.exe를 입력하여 이를 실행시킨 후, 수행하고자 하는 패키지를 열어서 수행하는 방법이 있으며, 간단하게는 수행하고자 하는 패키지 파일(.dtsx)을 더블클릭 하여 dtexecui를 실행시킬 수 있습니다.

위의 그림에서 보는 바와 같이, 구성, 명령 파일, 연결 관리자, 실행 옵션, 보고, 로깅, 값 설정, 확인, 명령줄과 같이 여러 옵션을 설정할 수 있는 탭으로 구성이 되어 있습니다. 각각의 설정화면에 대해서는 다음에 자세히 설명하도록 하겠습니다.

연결 관리자 탭에서 적절한 연결 설정을 조정할 수 있으며, 보고 탭에서 수행될 때 나타날 정보의 수준 등을 설정할 수 있습니다. 이런 설정을 마친 후, 실행 버튼을 누르면 해당 패키지가 실행이 됩니다.

 

다른 방법을 수행하기에 앞서 위의 그림에서 명령 탭을 한 번 자세히 보고 넘어가겠습니다.

몇 가지 설정을 한 후에 명령줄 탭을 보면 그림과 같이 나타납니다. 명령줄은 패키지를 수행하는 세 번째 방법인 dtexec.exe 에서 사용할 수 있는 옵션입니다.

 

dtexec.exe라는 패키지 수행 프로그램이 있으며, 이는 dtexecui.exe 와는 달리 콘솔 모드에서 수행이 됩니다.

여러 옵션을 지정하여 패키지를 수행하게 되는데, 이러한 옵션을 수동으로 다 지정한다는 것은 사실상 불가능합니다. 대신 앞에서 말한 명령줄 옵션에 나오는 부분을 바로 붙여서 수행하면 됩니다.

 

이상으로 세 가지 방법으로 패키지를 실행하는 방법을 말씀 드렸습니다. 성능 상으로는 콘솔 모드에서dtexec.exe를 이용하여 여러 정보들을 나타내지 않는 옵션으로 수행하는 것이 가장 우수합니다. (조만간 관련된 글 올리겠습니다.)

 

 

패키지를 SQL Agent에 등록하는 방법

Management Studios 에서 SQL Server 에이전트 à 작업에서 새 작업(N)을 클릭합니다.

 

작업 속성에서 적절한 이름과 소유자를 지정합니다.

 

단계 탭에서 새로 만들기를 클릭한 후, 유형에서 SQL Server Integration Service 패키지를 선택합니다.

 

이후, 패키지 원본에서 파일 시스템을 선택하고 패키지를 지정합니다.

구성, 명령 파일 등의 탭은 앞서 수동으로 실행하기에서 패키지 실행 유틸리티(dtexecui)에서와 동일합니다.

 

패키지 옵션 등을 설정하신 후, 작업 속성 탭에서 적절한 일정을 등록하신 후, 확인을 누르시면 작업으로 등록이 됩니다.

 

 

 

운영 방안

각각의 환경에 따라 운영하는 방법이 다르겠지만, 필자 개인적인 생각으로의 운영 방안에 대해 언급하겠습니다.

파일 형태로 패키지를 관리하는 경우, 패키지를 수정하는 경우에 편리합니다. msdb에 저장되어 있는 경우, SSIS 패키지 가져오기 마법사를 이용하여 해당 패키지를 불러오는 단계를 거쳐야 합니다. 파일로 존재하는 경우, 파일 시스템의 보안 시스템을 이용할 수도 있습니다.

하지만, 단점으로는 별도의 파일로 존재하기 때문에, 실수로 해당 파일을 삭제한다든지, 이동시키는 경우, SQL Agent의 작업이 실패 날 수 있습니다.

따라서, 개발이 완료되어 변경이 자주 발생하지 않는 경우라면, 패키지 파일(.dtsx) msdb로 저장시키고(저장 옵션에서 파일 시스템 대신 SQL Server를 선택), SQL Agent에 작업으로 등록할 때 패키지 원본에서 파일 시스템 대신 SQL Server로 지정하면 됩니다.

 

SQL Server 2005에서는 성능 카운터에도 SSIS와 관련된 카운터가 추가되어 있습니다.

[SQL Server:SSIS Pipeline] [SQL Server:SSIS Service]개체가 있으며 각 개체에 세부적인 카운터들이 있기 때문에, 이를 잘 이용하면 수행되는 패키지에 대한 모니터링을 적절히 할 수 있습니다.

반응형

+ Recent posts

반응형