SSIS 실행 로그 남기기

 

-       Version : SSIS Server 2005, 2008, 2008R2, 2012, 2014, 2015

 

SSIS 패키지를 운영할 때 중요한 요소 중 하나는 로깅이다. SSIS에서는 다양한 로깅 방법을 지원한다.

l  텍스트 파일 가장 기본적인 로깅

l  SQL Server 테이블 가장 큰 장점은 쉽게 로그 결과를 조회할 수 있다.

l  SQL Server 프로파일러 이벤트 프로파일 캡처할 수 있다. 추적에 기록된다.

l  Windows 이벤트 로그

l  XML 파일

 

[SQL Server 테이블에 로깅]

SQL Server 테이블에 로깅하는 방법에 대해서 알아본다. (다른 옵션들을 선택해도 설정 방법은 유사하기 때문에 응용하여 사용할 수 있다.) 로깅을 테스트하기 위해 SSIS 제어흐름에서 SQL 실행 작업과 매우 간단한 패키지를 생성하였다. SQL 구문은 0으로 나누기하여 오류를 발생시키도록 하였다.

 

제어흐름에서 마우스 오른쪽 버튼을 클릭하고 로깅을 선택하거나 작업표시줄에서 SSIS 메뉴로 이동하여 로깅을 선택한다.

 

로깅의 공급자 메뉴에서SSIS log provider for SQL Server 을 선택한다.

 

 

로그 공급자를 추가한다. 하나의 패키지에 여러 공급자를 추가하는 것이 가능하다. 로그 테이블을 유지하려는 데이터베이스 연결관리자를 지정한다. 테이블을 지정하는 것은 불가능하다. SSIS에서는 특정 이름으로 테이블을 자동으로 생성한다.

 

 

작업의 왼쪽 창에서 작업을 취소하여 구성할 수 있다. 오른쪽 창에서 로그 공급자를 선택해야 한다.

 

 

마지막 단계는 로그 공급자가 SQL Server에 기록할 이벤트를 선택한다. 세부정보는 아래 탭에서 선택할 수 있다.

 

설정이 완료되면 SSIS dbo.sysssislog 이름으로 데이터베이스에 테이블을 생성한다.

 

각 열의 정의는 다음과 같다.

l  ID : 테이블의 기본 ID (기본키)

l  Event : 로그 이벤트 유형 (: OnError)

l  Computer : 패키지를 실행한 호스트명

l  Operator : 패키지를 실행한 사용자 ID

l  Source : 이벤트를 생성한 작업 또는 패키지명

l  Sourceid : 소스 작업 도는 패키지의 GUID

l  Executionid : 패키지를 실행한 GUID

l  Starttime : 작업의 시작시간

l  Endtime : 작업의 종료 시간

l  Datacode : 태스크 또는 컨테이너의 실행 결과를 포함할 수 있는 임의의 번호 (0 성공, 1 실패)

l  Databytes : 로그메시지에 대한 바이트 배열

l  Message : 로그 이벤트 메시지

 

로그 테이블 조회는 아래 스크립트로 확인할 수 있다.

SELECT

        [event]

       ,[computer]

       ,[operator]

       ,[source]

       ,[starttime]

       ,[endtime]

       ,[message]

FROM [dbo].[sysssislog];

 

 


[스크립트 작업에서 로깅]

일부 작업은 특정이벤트가 포함되어 있는 경우가 있다. 스크립트 작업에서도 ScriptTaskLogEntry 이벤트를 사용하여 로깅을할 수 있다.

 


실제로 스크립트 작업에서 로깅하려면 세개의 매개 변수를 받아들이는 Dts.log 이벤트를 사용한다.

l  Log message

l  Datacode

l  Databytes

 

첫 번째 값은 매우 중요하여 나머지 두 값은 더미 값이 될 수 있다.

 


패키지를 실행할 때 로깅 테이블에서 사용자 지정 로그를 확인할 수 있다.

 

 

[참고자료]

https://www.mssqltips.com/sqlservertip/4070/integrated-logging-with-the-integration-services-package-log-providers/

 

2015-11-09 / 강성욱 / http://sqlmvp.kr

 

 

MS SQL Server, MS SQL, SSIS, SSIS 로깅, Integrated Logging, SQL Server Integration Services,ETL, BI

SSIS 패지키의 메타데이터 유효성 검사 중지하기

 

  • Version : SSIS Server 2005, 2008, 2008R2, 2012, 2014

 

SSIS패키지는 모든 연결 및 관련 구성요소의 메타데이터가 유효한지 확인한다. 이 때문에 SSDT를 실행할 때마다 유효성 검사로 인해 오랜시간동안 기다려야하는 경우가 있다. 패키지내의 작업이 많을수록 해당 작업에 대한 유효성 검사 시간이 오래 걸린다.(길게는 몇 분이상 기다려야 한다.) 이러한 유효성 검사를 중지하는 방법에 대해서 알아본다.

 

[Work Offline]

SSDT 프로그램의 메뉴바에서 [SSIS] – [Work Offline]를 체크하면 유효성 검사를 방지할 수 있다. 패키지를 열기전에 설정해야 유효성 검사를 방지할 수 있다.

 

Work Offline를 체크하면 프로젝트.dtproj.user 파일의 속성에 <OfflineMode> 속성이 True로변경된다. 해당 파일을 편집하여 실행해도 유효성 검사를 중지할 수 있다.

 

[Offline Connection Managers]

SSIS 2012의 새로운 옵션이다. 해당 연결관리자에서 단일 연결에 대해 오프라인으로 작업할 수 있도록 설정할 수 있다. 이 옵션의 단점으로는 패키지를 열어야 옵션을 변경할 수 있다. (패키지를 여는 순간 유효성 검사는 시작된다.) 프로젝트를 닫으면 모든 연결관리자는 온라인 작업으로 재설정 된다.

 

 

[참고자료]

http://microsoft-ssis.blogspot.kr/2011/11/long-validation-of-ssis-packages-in.html

 

 

2015-06-30 / 강성욱 / http://sqlmvp.kr

 

SSIS, SQL Server, SSIS Validation, SSIS 유효성 검사, SSIS 커넥션 체크, SSIS패키지 실행

 

SSIS 로그 보관기간 설정 (CleanUp 기간 설정)

 

  • Version : SSIS Server 2005, 2008, 2008R2, 2012, 2014

 

SQL Server 2012에서 SSIS 패키지를 생성하고 1분마다 실행하도록 Job Agent에 등록하였다. 어느날 SQL Server의 디스크 부족 경고가 발생하여 확인해본 결과 SSISDB가 매우 큰 용량을 차지하고 있음을 알게 되었다.

처음엔 SSIS의 대규모 배치성 작업으로 인한 트랜잭션 로그 증가 때문인것으로 판단하여 SSISDB의 데이터베이스 속성을 Simple(단순)으로 변경하였는데 트랜잭션 로그는 더 이상 쌓이지 않았지만 데이터의 크기는 계속해서 증가하고 있었다.

 

SSISDB의 각 테이블에 대한 사용량을 확인한 결과 다음과 같은 테이블에서 많은 데이터가 생성되어 있음을 확인할 수 있었다. Internal.event_messages 의 경우 20GB이상 사용하고 있는 상태였다.

(아래 그림은 이미 최소 로깅을 적용한 후의 그림이다.)

 

 

SSIS는 실행 될 때 각종 실행 로그를 저장하게 되는데 로그를 보관하는 기간 및 로깅 수준 옵션을 설정하여 일정 기간이 지난 로그 삭제를 진행하거나 불필요한 로그를 쌓지 않게 할 수 있다. 속성을 변경하는 방법으로는 SSIDB에서 마우스 오른쪽을 클릭하여 [속성]을 선택한다.

 

 

카탈로그 속성을 확인해보면 [작업 로그] 항목에서 보존 기간 및 로깅 수준을 변경한다. 보존 기간의 경우 기본값으로 [365]일이 지정되어 있다. 로깅 수준은 [기본]으로 되어 있는데 보관주기를 설정하고 (필자의 경우 2일로 설정) 로깅 또한 없음으로 설정하여 로그를 남기지 않았다(단순 작업이어서 로그가 필요 없는 상태였음).

 

주기적으로 로그 정리를 활성화 하여 사용자가 설정한 기간 이후의 로그는 자동으로 삭제 되도록 하여 로그가 계속해서 증가하는 것을 방지 할 수 있다. 여기서 주의할 점은 대규모 데이터베이스에서 보존 기간을 크게 변경하여 정리할 경우(기존 보존 기간보다 많이 축소하였을 경우) 삭제하는데 오랜 시간이 걸릴 수 있다.

 

 

[참고자료]

http://benevold.blogspot.kr/2013/08/ssisdb-performance-problem.html

 

 

2015-04-21 / 강성욱 / http://sqlmvp.kr

 

 

SQL Server, ETL, SSIS, SSIS 로깅, SSIS 로그 보관기간 설정, SSIS 설정, SSISDB, SSISDB Performance, SSIS Catalog

SSIS 패키지 보호 레벨

 

  • Version : SSIS Server 2005, 2008, 2008R2, 2012

 

SSIS 패키지를 개발하고 빌드하는 과정에 다음과 같은 오류가 발생 하였다.

Error 1 Project consistency check failed. The following inconsistencies were detected: Test BIML Package.dtsx has a different ProtectionLevel than the project. 0 0 "

 

우선 패키지의 속성에서 ProtectionLevel의 속성을 확인 하였다.

 

 

그리고 프로젝트 레벨에서 프로젝트의 보호 수준 속성을 확인 한다.

 

 

프로젝트의 ProtectionLevel과 패키지의 ProtectionLevel 속성이 다르게 지정되어 있어 발생한 에러였다. 프로젝트의 보호 속성에 따라 패키지의 보호 속성을 "EncryptionSensitiveWithUserKey"로 보호 수준을 변경하여 리빌드 결과 정상적으로 패키지가 완성 되었다. SSIS 2012에서 일관성 검사는 프로젝트의 모든 패키지에 적용해야 한다.

 

 

[참고자료]

http://intelligentsql.wordpress.com/2013/12/30/ssis-package-has-a-different-protection-level-than-the-project/

 

 

2014-03-13 / 강성욱 / http://sqlmvp.kr

 

BIDS 임시 파일 위치 설정

 

  • Version : SQL Server 2005, 2008, 2008R2, 2012

 

BIDS에서 SSIS의 임시 파일을 저장할 위치를 결정하기 위해 환경 변수 TMP 값을 수정 해야한다.

 

다음 그림을 참고 하여 TMP 값 변경을 알아 보자.

 

[제어판] – [시스템 및 보안] – [시스템] – [고급 시스템 설정]을 선택 한다.

 

 

[시스템 속성]에서 하단의 [환경 변수]를 클릭 한다.

 

 

[환경 변수]창이 나타나면 TMP값을 변경 한다.

이때 사용자 수준에서 임시 위치 경로를 변경하려면 상단 사용자 변수의 값을 수정하며

시스템 수준에서 임시 위치를 변경하려면 하단의 시스템 변수의 값을 수정 한다.

 

 

2013-04-12 / 강성욱 / http://sqlmvp.kr / http://datawaffle.com

 

SSIS패키지 실행 하기 – Job Agent 등록 및 수동 실행

 

안녕하세요 강성욱 입니다.(www.sqltag.org, www.sqler.com, http://jevida.blog.me)

이번 시간에는 SSIS패키지의 다양한 실행 방법 및 Agent 등록 방법을 알아 보도록 하겠습니다.

 

패키지를 실행하는 방법은 크게 3가지로 분류 할 수 있습니다.

  • BIDS에서 수동으로 직접 실행 하는 방법.
  • 패키지 실행 유틸리티를 이용하는 방법.
  • SQL Server Agent에 등록 하는 방법.

 

[BIDS에서 수동으로 실행]

[디버그] – [디버깅 시작] 또는 단축키 [F5]를 실행 합니다.

 

[패키지 실행 유틸리티 이용]

[시작] – [실행]에서 dtexecui.exe를 입력합니다. 또는 수행할 패키지 파일(.dtsx)을 더블 클릭하여 DTEXEXUI를 실행 할 수도 있습니다.

 

 

패키지 실행 유틸리티가 실행 됩니다. 구성, 명령파일, 연결관리자, 실행 옵션, 보고, 로깅, 값 설정, 확인, 명령줄 등 다양한 옵션을 설정 할 수 있는 탭으로 구성되어 있습니다.

 

 

[연결관리자] 탭에서는 이미 지정되어 있는 연결과 다른 연결을 설정 할 수 있습니다.

 

 

[보고] 탭에서는 수행 될 때 출력할 상태 정보의 수준을 설정할 수도 있습니다.

실행에 필요한 설정을 마친 후 [실행]버튼을 클릭하면 해당 패키지가 실행 됩니다.

 

 

[명령줄]탭은 위에서 설정한 사항들이 매개변수 형식으로 표시 됩니다. 이 명령어는 콘솔모드에서 수행가능 합니다.

 

 

명령줄에 나타난 매개변수를 복사하여 콘솔 모드에서 다음과 같이 dtexec 입력 후 붙여넣기를 실행 합니다. 그리고 실행을 하면 다음과 같이 패키지기 실행되는 것을 확인 할 수 있습니다.

 

 

[SQL Server Job Agent 등록 하는 방법]

SSMS에서 [SQL Server 에이전트] – [작업] – [새 작업]으로 등록 합니다.

[단계]탭에서 새로 만들기를 클릭한 후 유형에서 [SQL Server Integration Services 패키지]를 선택 합니다. 패키지 원본에서 파일 시스템을 선택하고 패키지를 지정합니다.

구성, 명령파일 등의 탭은 패키지 실행 유틸리티(DTEXECUI)와 동일 합니다. 패키지 실행에 필요한 여러 옵션들을 설정 한 후 작업 속성 탭에서 적절한 일정을 등록하고 확인을 누르면 SQL Server에이전트 작업으로 등록 됩니다.

 

[SQL Server Agent 패키지 실행 오류]

로컬PC 또는 서버에서 패키지를 실행하면 제대로 수행되지만 간혹 다른 서버 또는 PC에서 실행하는 경우 오류가 발생하는 경우가 있습니다.

기본적으로 BIDS에서 수동으로 실행 할 때에는 개인키로 등록되어 있어서 암호화된 개인키와 실행 환경의 개인키가 동일하기 때문에 정상 작동 합니다. 하지만 다른 환경의 경우에는 개인키가 다르기 때문에 오류가 발생 합니다.

 

 

이 때에는 BIDS에서 [Protection Level]을 [EncryptionSensitiveWithPassword] 또는 [EncryptAllWithPassword]로 설정 한 후 [PackagePassword]에 암호를 입력 합니다. 이 방식으로 저장하면 패키지의 중요한 정보는 개인키가 아닌 암호화 기반으로 대체 됩니다.

 

보안레벨에 따른 암호화 수준 관련 글 참고 링크

http://blog.naver.com/jevida/140163534497

 

SLQ Server 에이전트에 해당 패키지를 등록하면 아래 그림과 같이 암호 입력창이 나타납니다.

(일반 탭에서 다른 탭을 클릭할 경우 암호창이 나타남.)

 

 

'SQL Server > SSIS 강좌' 카테고리의 다른 글

SSIS 패키지 보호 레벨  (0) 2015.07.16
BIDS 임시 파일 위치 설정  (0) 2015.07.16
패키지 저장 방식  (0) 2015.07.16
성능 카운터 – SSIS를 튜닝하자  (0) 2015.07.16
배포 및 배포 마법사  (0) 2015.07.16

패키지 저장 방식

안녕하세요 강성욱 입니다.(www.sqltag.org, www.sqler.com, http://jevida.blog.me)

이번 시간에는 패키지 저장 방식에 따른 장점에 대해서 알아 보도록 하겠습니다.

 

SSIS 패키지를 작업에 등록할 때에는 3가지 방식으로 등록 할 수 있습니다.

  • SQL Server
  • 파일 시스템
  • SSIS 패키지 저장소

 

SQL Server 저장

SQL Server로 지정하면 SQL Server의 msdb에 저장됩니다.

  • SQL 2005 - msdb.dbo.sysdtspackages90
  • SQL 2008(r2) – msdb.dbo.sysdtspackages

[장점]

  • 여러 사용자들이 공유하기가 용이
  • 데이터베이스의 보안기능을 사용하여 관리 가능. SSIS 패키지의 운영이나 수정과 관련된 역할(Role)등을 적용 할 수 있음.
  • Msdb DB에 테이블 형태로 저장되기 때문에 일반 DB백업과 같은 방식으로 패키지를 백업하여 관리.
  • SQL 쿼리를 이용하여 패키지에 대한 정보를 조회

자주 수정이 일어나지 않는 형태인 운영환경에 적합.

 

파일 시스템 저장

파일 시스템 저장으로 선택하면 사용자가 지정한 위치에 저장.

 

[장점]

  • 연결 정보를 쉽게 공유하여 사용 가능
  • 보안 설정에서 사용자 키 기반의 암호화(EncryptSensitiveWithUserKey, EncyrptAllWithUserKey)로 설정한 경우 매우 강력한 패키지 암호화를 구현 가능.
  • 네트워크 장애 또는 DB 장애 발생시 안전.
  • 구성 파일이나 기타 파일들을 함께 관리 가능
  • 패키지를 수정해야 할 때 개발환경으로 로드하는 작업이 간단.
  • 파일로 관리되기 때문에 파일 시스템의 계층 구조를 이용하여 관리 할 수 있음.

자주 수정되거나 최정적으로 개발이 완료되지 않은 개발환경에 적합.

 

성능 카운터 – SSIS를 튜닝하자

 

안녕하세요 강성욱 입니다.(www.sqltag.org, www.sqler.com, http://jevida.blog.me)

이번 시간에는 성능 카운터에 대해서 알아 보도록 하겠습니다.

 

SQL Server SSIS를 설치하면 윈도우의 성능 카운터에 SSIS 카운터가 추가 됩니다.

 

SQL Server:SSIS Pipeline 과 SQL Server:SSIS Service가 SSIS의 성능 모니터링할 수 있는 카운터 입니다.

 

 

  • SQL Server:SSIS Service : SSIS Packate Instances라는 카운터 만 존재하며 현재 수행되고 있는 SSIS패키지의 개체 수를 나타냅니다.
  • SQL Server:SSIS Pipeline : 데이터 흐름 작업에서의 성능에 대한 정보를 제공. 현재 패키지가 사용하고 있는 메모리 버퍼의 크기 또는 원본 또는 대상에서의 행 수, BLOB(Binary Large Object) 데이터의 통계 정보 등을 제공.

성능 카운터

설명

BLOB bytes read

데이터 흐름 엔진이 모든 원본에서 읽어 온 BLOB 데이터의 바이트 수

BLOB bytes written

데이터 흐름 엔진이 모든 대상에 기록한 전체 BLOB 데이터의 바이트 수

BLOB files in use

데이터 흐름 엔진이 스풀링을 위해 사용하는 BLOB 파일 수

Buffer memory

사용중인 모든 유형의 메모리 버퍼 양. 이 값이 물리적인 메모리의 양보다 크면 Buffer Spolled는 늘어나며 이는 메모리의 스와핑이 증가함을 나타냅니다. 메모리 스와핑이 증가하면 데이터 흐름 엔진의 성능이 떨어짐.

Buffer in use

데이터 흐름 엔진이 현재 사용 중인 모든 유형의 버퍼 개체 수

Buffers spooled

디스크에 쓰여진 버퍼의 수. 데이터 허름 엔진에 물리적 메모리가 부족하면 현재 사용되지 않는 버퍼는 디스크에 쓰여지고 필요에 따라 다시 로드 됩니다.

Flat buffer memory

모든 플랫 버퍼가 사용하는 전체 메모리(바이트)입니다. 플랫 버퍼는 구성 요소가 데이터 저장에 사용하는 메모리 블록입니다. 플랫 버퍼는 바이트의 큰 블록이며 바이트 단위로 액세스 됩니다.

Flat buffers in use

데이터 흐름 엔진이 사용하는 플랫 버퍼 수. 모든 플랫 버퍼는 전용 버퍼 입니다.

Private buffer memory

모든 전용 버퍼가 사용하는 전체 메모리 양. 데이터 흐름 엔진이 데이터 흐름을 지원하기 위해 만드는 버퍼는 전용 버퍼가 아닙니다. 전용 버퍼는 변환 작업에서 임시 작업용으로만 사용하는 버퍼입니다. 예를 들어 집계 변환은 전용 버퍼를 사용하여 내부 계산을 수행.

Private buffers in use

변환 작업에서 사용하는 버퍼 수

Rows read

원본에서 생성하는 행 수. 조회 변환이 참조 테이블에서 읽은 행은 포함되지 않습니다.

Rows written

대상에 제공된 행 수. 대상 데이터 저장소에 쓰여진 행은 반영되지 않음.

 

  • Private Buffer – 정렬 변환이나 집계 변환등과 같이 변호나 작업 개체가 결과를 처리하기 위해 사용하는 임시 메모리 공간.
  • Flat Buffer – 데이터 흐름 작업에서 데이터를 저장하는데 이용되는 메모리 공간. 예를 들어 조회 변환에서 조회 테이블의 데이터를 임시로 저장하여 사용할 때 Flat buffer 이용.

 

 

현재 작업량에 비해 사용 가능한 메모리가 클 경우 DefaultBufferSize의 크기를 늘려 성능 향상을 유도 할 수 있습니다. Text형이나 Image같은 BLOB데이터 처리가 많은 경우 BLOBTempStoragePath를 별도로 지정하여 처리 성능을 개선할 수도 있습니다.

BLOBTempStoragePath – BLOB 데이터를 포함하는 열의 임시 저장소 위치. 세미콜론으로 디렉터리 이름을 구분하여 여러 디렉터리를 지정 할 수 있음.

BufferTempStoragePath – 버퍼 데이터의 임시 저장소 위치. 세미콜론으로 디렉터리 이름을 구분하여 여러 디렉터리를 지정할 수 있음.

DefaultBufferMaxRows – 작업시 한번에 가져올 ROW 수

DefaultBufferSize – 작업시 사용 할 버퍼 사이즈 설정.

EngineThreads – 작업에 사용할 스레드 개수.

배포 및 배포 마법사

 

안녕하세요 강성욱 입니다.(www.sqltag.org, www.sqler.com, http://jevida.blog.me)

이번 시간에는 [배포 및 배포 마법사]에 대해서 알아 보겠습니다.

 

패키지를 개발한 후 서버에 등록하거나 다른 서버에 배포하기 위해서는 단순히 .dtsx파일을 서버로 복사하거나 BIDS의 복사복을 이용하여 배포하였습니다. 하지만 프로젝트가 크거나 구성 정보등을 포함하여야 할 경우에는 배포 마법사를 이용하여 어플리케이션 설치와 같은 방식으로 배포하는 것이 효과적입니다.

 

배포 마법사는 개별 패키지 수준이 아닌 프로젝트 전체 수준으로 수행 됩니다.

 

[BIDS]를 실행하여 [Integration Services 프로젝트]를 생성합니다.

 

[솔루션 탐색기]에서 마우스 오른쪽 버튼을 클릭하여 [속성]을 선택 합니다.

 

 

[배포 및 배포마법사 속성 페이지]가 나타납니다. [CreateDeploymentUtility]의 값을 [True]로 변경합니다.

  • AllowConfigurationChanges – 패키지를 배포할 때 구성 정보를 수정 할 수 있도록 허용할지를 설정. 예를들어 파일 연결의 Connection 정보를 관리하는 구성 파일을 설정하였을 때 AllowConfigurationChanges 속성을 True로 한 후 배포 파일을 만들면 배포 과정에서 구성으로 설정된 값에 대해 수정할 수 있습니다. 개발 서버와 운영서버의 환경이 다르거나 연결 정보를 변경해야 할 경우 이 속성을 Ture로 구성하여 배포 합니다.
  • CreateDeploymentUtility – 패키지를 배포할 수 있는 유틸리티(마법사)를 포함할지를 설정. 배포할 수 있는 유틸리티 파일은 확장자가 .SSISDeploymentManifest 인 형태 입니다. 이 유틸리티를 사용하여 실행하면 배포 위치를 지정하거나 설정등을 쉽게 지정할 수 있는 패키지 설치 마법사가 실행 됩니다.
  • DeploymentOutputPath – 배포 파일과 유틸리티가 저장되는 폴더의 위치를 지정. 기본적으로 프로젝트 파일이 있는 하위 폴더에 생성.

 

 

[빌드] – [배포 및 배포마법사 빌드]를 선택 합니다.

속성 패키지의 배포 유틸리티 부분에서 배포와 관련된 사항을 설정하였더라도 패키지를 빌드하기 전에는 배포 파일이 생성되지 않습니다.

 

[배포 및 배포마법사 빌드]가 완료되면 아래 그림과 같이 하위 폴더에 배포파일이 생성 됩니다.

 

 

배포파일을 실행하면 [패키지 설치 마법사 시작]가 실행됩니다.

 

사용자가 설치 폴더 등을 지정할 수 있습니다.

 

 

마법사가 정상적으로 실행된 것을 확인 할 수 있습니다.

 

 

사용자가 지정한 폴더를 확인해 보면 배포 마법사에 의해 패키지 파일을 설치 된 것을 확인 할 수 있습니다.

 

패키지 설치 마법사를 이용하여 개발된 패키지 파일을 손쉽게 파일 시스템 또는 SQL Server에 배포할 수 있으며 구성 정보에 대한 세부 항목을 사용자가 쉽게 변경 할 수 있습니다.

로깅 – SSIS의 실행 정보를 로깅하자

 

안녕하세요 강성욱 입니다.(www.sqltag.org, www.sqler.com, http://jevida.blog.me)

이번 시간에는 [로깅]에 대해서 알아 보도록 하겠습니다.

 

SSIS패키지는 실행될 때의 이벤트 정보를 기록할 수 있는 로깅 기능을 제공합니다. 패키지가 시작되는 시간 및 종료되는 시간, 오류가 발생했을 때의 정보등 SSIS에서 발생하는 모든 종류의 이벤트에 대해서 로그를 남길 수 있습니다.

 

하나의 패키지 내에 있는 모든 작업에 대해 일괄적으로 로그를 남기도록 설정 할 수 있으며 일부 작업 개체에 대해서만 로그를 남기도록 설정할 수도 있습니다.

 

[BIDS]를 실행하여 [Integration Services 프로젝트]를 실행 합니다.

 

 

[제어 흐름]탭에서 [SQL 실행 태스크]를 마우스를 이용하여 드래그 앤 드롭으로 끌어다 놓습니다.

[속성]창에서 [LoggingMode]에서 [UserParentSetting]를 선택 합니다.

기본값은 [UserParentSetting]이며 현재 작업 개체가 포함된 컨테이너의 로그 설정을 따른다는 의미 입니다. LoggingMode 값을 Disable로 설정하면 패키지에서 로그를 남기도록 설정하더라도 로그를 발생 시키지 않습니다.

 

 

[제어 흐름]탭의 빈 공간에서 마우스 오른쪽을 클릭 또는 메뉴의 [SSIS(S)]에서 [로깅(L)]을 선택합니다.

 

 

로그 구성 창이 나타납니다.

  • 컨테이너© - 패키지 내에서 로그를 남길 요소를 선택. 상위 개체가 선택되면 자동으로 하위 개체는 로그를 남기게 되며 비활성화 됩니다. 만약 일부 개체에 대해서만 로그를 남기고자 한다면 이 부분에서 해당 개체만 선택하면 됩니다.
  • 공급자 및 로그 – 로그를 남길 유형을 지정. 다양한 형태의 로그 유형 설정 가능.

 

유형

설명

텍스트 파일용

SSIS 로그 공급자

CSV(쉼표로 구분된 형태)파일로 저장. 일반 메모장과 같은 편집기에서 확인할 수 있으며 엑셀에서 해당 파일을 읽어올 수도 있습니다.

SQL 프로파일러용

SSIS 로그 공급자

SQL Server 프로파일러에서 읽어올 수 있는 형태의 로그 파일을 생성. 기본 확장자는 .trc 입니다.

SQL Server용

SSIS 로그 공급자

로그 구성 화면에서 설정된 OLE DB 연결에 해당하는 데이터베이스에 sysdtslog10이라는 테이블이 생성되며 이 테이블에 로그 정보를 기록.

Windows 이벤트 로그용 SSIS 로그 공급자

Windows의 이벤트 로그 정보에 로그 기록. 별도의 로그파일을 관리하는 프로그램을 사용하는 경우 다른 어플리케이션의 로그와 같이 관리할 수 있는 장점이 있습니다.

XML 파일용

SSIS 로그 공급자

XML형태의 파일로 로그 정보가 기록. XML 형태로 저장된 파일은 XML viewsk 기타 관리 프로그램을 이용하여 쉽게 관리할 수 있으며 SQL쿼리를 사용하여 쉽게 조회 할 수 있음.

 

 

이번 실습에서는 XML로 로그를 남겨 보도록 하겠습니다.

공급자 유형에서 [XML 파일용 SSIS 로그 공급자]를 선택 합니다. 파일 만들기를 지정하고 경로와 파일명을 입력 합니다.

 

 

[자세히] 탭을 클릭하면 로그를 남길 이벤트를 선택할 수 있습니다.

(실습에서는 모든 이벤트를 선택하여 실습 합니다.)

 

 

[고급] 버튼을 클릭하면 각 이벤트에 대한 열 정보(스키마 정보)를 선택 할 수 있습니다. 저장 버튼을 이용하여 로그 설정 사항을 XML 파일로 저장할 수 있으며 기존에 저장된 로그 설정 파일이 있을 경우 [로드] 버튼을 이용하여 불러올 수 있습니다.

 

 

 

편집이 완료 되었으면 패키지를 실행 합니다.

늘 그러듯!

녹색 : 정상 실행

빨간색 : 오류 발생

 

패키지 실행이 정상적으로 완료되고 지정한 폴더에 XML파일이 생성된 것을 확인할 수 있습니다.

XML파일을 열어보면 패키지가 실행될 때의 SSIS 패키지 정보가 기록 된 것을 볼 수 있습니다.

 

 

[공급자 및 로그]탭에서 이벤트 로그에 기록하는 작업을 추가하여 패키지를 만들어 봅니다.

 

 

패키지 실행이 완료되고 이벤트 로그를 확인하면 SSIS의 패키지 로그 정보를 확인 할 수 있습니다.

 

 

궁금증..

[BIDS]에서 윈도우 이벤트에 로그를 남기도록 설정 후 패키지 실행. 정상 실행이 완료되고 패키지를 중지 하지 않았을 경우 MMC의 메모리가 계속 증가하는 현상을 목격. 패키지 종료 후 메모리 감소됨을 확인.

(아직 원인 분석 중)

 

보안 – 보안 레벨에 따른 암호화 수준

 

안녕하세요 강성욱 입니다.(www.sqltag.org, www.sqler.com, http://jevida.blog.me)

이번 시간에는 [보안] 에 대해서 알아 보겠습니다.

 

SSIS는 패키기 수준에서 강력한 보안을 제공 합니다. SSIS에서 제공하는 보안과 관련된 사항은 다음과 같습니다.

  • 패키지의 ProtectionLevel 설정에 따라 패키지의 암호화를 설정할 수 있습니다. 데이터베이스 암호나 연결 문자열 등과 같은 중요한 데이터를 포함시키지 않도록 설정하거나 암호화 수준을 설정할 수 있습니다.
  • ProtectionLevel 및 PackagePassword 속성을 이용하여 패키지의 보안을 설정할 수 있습니다. 암호를 이용하거나 개인 키를 이용하여 보안을 설정할 수 있습니다.
  • 보안과 관련된 사항을 SQL Server가 담당하도록 지정할 수 있습니다. ProtectionLevel을 ServeStorage로 설정한 후 패키지를 SQL Server의 msdb에 직접 저장하면 패키지의 보안 관련된 사항은 모두 SQL Server에서 관리하게 됩니다.

 

중요한 데이터란 DB 연결정보, 암호, MXL노드 정보 등과 같은 연결 정보입니다.

 

[BIDS]를 실행하여 [Integration Services 프로젝트]를 실행 합니다.

 

[제어 흐름]탭에서 [SQL 실행 태스크]를 마우스를 이용하여 드래그 앤 드롭으로 끌어다 놓습니다.

[속성]창에서 [ProtectionLevel]을 선택 합니다. [EncryptionAllWithPassword]를 선택 합니다.

 

[Protection Level]

설정값

상세 설명

DontSaveSensitive

(중요한 정보 저장 안함)

패키지를 저장할 때 중요한 정보 제외. 암호화는 사용하지 않지만 중요한 것으로 표시된 속성이 패키지로 저장되는 것을 방지. 사용자가 중요한 데이터를 사용하지 못하도록 함. 이 설정은 동일한 사용자가 패키지를 저장하여 닫은 후 다시 여는 경우라도 저장이 되지 않기 때문에 매번 패키지를 열 때마다 중요한 정보를 다시 지정해야 함.

EncryptAllWithPassword

(암호로 모두 암호화)

암호를 사용하여 전체 패키지를 암호화. 패키지를 만들거나 내보낼 때 사용자가 입력한 암호를 사용하여 패키지를 암호화 함. 사용자는 SSIS 디자이너에서 패키지를 열거나 dtexec명령프롬프트 유틸리티에서 패키지를 실행 할 때 패키지 암호를 입력해야 함. 암호를 입력하지 않을 시 패키지 실행이 불가능 함. 이 설정을 적용할 경우 PackagePassword 항목에 적절한 암호를 지정한 후 패키지를 저장해야 합니다.

EncryptAllWithUserKey

(사용자 키로 모두 암호화)

사용자 프로필을 기반으로 하는 암호를 사용하여 전체 패키지를 암호화 함. 동일한 프로필을 사용하는 동일한 사용자만 패키지를 로드 할 수 있음. 패키지를 만들거나 내보낸 사용자를 기반으로 하는 키를 사용하여 패키지를 암호화 함. 패키지를 만들거나 내보낸 사용자만 SSIS 디자이너에서 패키지를 열거나 dtexec 명령프롬프트 유틸리티를 사용하여 패키지를 실행 할 수 있음.

EncryptSensitiveWithPassword

(암호로 중요한 정보 암호화)

암호를 사용하여 패키지 내의 중요한 정보를 암호화. 암호화에는 DPAPI가 사용. 중요한 데이터는 패키지의 일부로 저장되지만 패키지를 만들거나 내보낼 때 사용자가 입력한 암호를 사용하여 암호화 됨. SSIS 디자이너에서 패키지를 열려면 패키지 암호를 입력해야 합니다. 암호를 입력하지 않으면 패키지의 중요한 정보 부분에 값을 입력해야 합니다. 암호를 입력하지 않으면 패키지를 실행 할 수 없습니다. 이 설정을 적용할 경우 PackagePassword 항목에 적절한 암호를 지정한 후 패키지를 저장해야 합니다.

EncryptSensitiveWithUserKey

(사용자키로 중요정보 암호화)

현재 사용자를 기반으로 하는 키를 사용하여 패키지 내의 중요한 정보를 암호화. 동일한 프로필을 사용하는 동일한 사용자만 패키지를 로드할 수 있음. 다른 사용자가 패키지를 여는 경우 중요한 정보는 빈칸으로 대체되므로 현재 사용자가 중요한 데이터에 새 값을 지정해야 합니다. 사용자가 패키지를 실행하려고 시도하는 경우 패키지 실행이 실패 합니다. 암호화는 DPAPI가 사용 됩니다.

ServerStorage

(암호화에 서버 저장소 사용)

SQL Server 데이터베이스 역할을 사용하여 전체 패키지를 보호. 이 옵션은 패키지를 SQL Server msdb데이터베이스에 저장할 때만 지원됨. BIDS에서 파일 시스템에 패키지를 저장하는 경우에는 지원되지 않습니다.

 

 

[PackagePassword]를 클릭하여 암호를 입력 합니다.

 

[BIDS]를 재실행 하여 실습한 [보안] 프로젝트를 불러오기 합니다.

아래 그림과 같이 패키지 암호를 입력하는 창이 나타납니다.

[취소]를 클릭하여 암호 입력을 하지 않습니다.

 

 

패키지를 로드 할 수 없다는 오류와 함께 패키지 조회가 불가능 합니다.

 

ProtectionLevel이 Sensitive인 경우에는 중요 정보만 확인할 수 없으며 나머지 패키지의 개체는 조회가 가능 합니다. All인 경우에는 암호가 다르면 패키지의 조회도 불가능 합니다.

트랜잭션 – 패키지에서 트랜잭션을 제어하자

 

안녕하세요 강성욱 입니다.(www.sqltag.org, www.sqler.com, http://blog.naver.com/jevida)

이번 시간에는 트랜잭션에 대해서 알아 보도록 하겠습니다.

 

SQL Server SSIS에서는 데이터베이스 작업에 대해서 트랜잭션을 지원 합니다. 여러 작업들이 하나의 트랜잭션으로 구성되어 있을 때 모든 작업이 성공해야 커밋되고 그렇지 않을 경우 롤백이 되도록 설정 할 수 있습니다.

패키지 전체 또는 일부 작업들에(컨테이너 단위)대해 트랜잭션을 이용하여 데이터 무결성을 관리 할 수 있는 기능 입니다.

 

SSIS의 모든 작업 개체 및 컨테이너 속성에서 TransactionOption을 설정할 수 있지만 트랜잭션은 데이터베이스 관련작업 개체에서만 적용 됩니다.

 

[BIDS]를 실행하여 [Integration Services 프로젝트]를 실행 합니다.

 

 

[제어 흐름] 탭에서 아래 그림과 같이 작업을 끌어다 놓습니다.

 

속성 창에서 [TransactionOption] 을 [Supported]로 설정 합니다.

 

[TransactionOption 옵션]

  • Required – 선택한 개체가 트랜잭션을 생성. 만약 선택한 개체가 부모 컨테이너에 포함되어 있으며 부모 컨테이너에서 트랜잭션이 생성되도록 설정되어 있는 경우에는 Supported 설정과 동일한 방식으로 부모 컨테이너의 트랜잭션에 참여. 만약 패키지는 Not Required로 설정되어 있더라도 패키지 내에 있는 시퀀스 컨테이너의 트랜잭션 속성이 Required로 설정된 경우 시퀀스 컨테이너는 트랜잭션을 생성하며 이 컨테이너 내에 포함되는 작업들(Not Required 설정된 작업 제외)에는 트랜잭션이 적용.
  • Supported – 선택한 개체가 새로운 트랜잭션을 생성하지는 않고 단지 부모 컨테이너의 트랜잭션에 참여만 함. 예를 들어 패키지는 트랜잭션을 생성하는 Required로 설정이 되어 있으며 패키지 내에 포함된 세 개의 SQL 실행 작업들은 Supported로 설정 되어 있는 경우 각각의 SQL 실행 작업은 부모 컨테이너인 패키지의 트랜잭션에 참여하게 되며 세 작업 중 하나라도 실패하면 전체 작업이 롤백 됩니다.
  • Not Required – 선택한 개체가 새로운 트랜잭션을 생성하지도 않으며 부모 컨테이너의 트랜잭션에 참여하지도 않습니다.

 

 

 

패키지를 실행 합니다. 아무런 응답이 없거나 패키지 실행 자체가 실패하였다면 다음과 같이 [진행률] 탭을 확인 합니다.

 

SSIS에서 트랜잭션을 사용하기 위해서는 패키지가 수행되는 서버 또는 PC에 MSDTC 서비스가 실행되고 있어야 합니다.

 

MSTC 관련 링크

http://blog.naver.com/jevida/140151557692

 

 

MSDTC 설명이 완료 되었으면 패키지를 실행 합니다.

그림과 같이 [SQL 실행 태스크]와 [파일 시스템 태스크]는 정상 실행 되었으며 [SQL 실행 태스크1]작업만 실패 하였습니다.

 

[SQL 실행 태스크]의 작업이 롤백 되었음을 확인 할 수 있습니다. 하지만 [파일 시스템 태스크]의 작업은 롤백이 되지 않았습니다. SSIS의 트랜잭션은 데이터베이스 작업에만 해당 됩니다.

 

 

데이터베이스와 관련된 작업이 아닌 경우에도 트랜잭션이 필요한 이유가 있습니다.

아래 그림과 같이 작업의 순서를 수정 합니다.

[SQL 실행 태스크](정상 실행) -> [SQL 실행 태스크1](정상 실행) -> [파일 시스템 태스크](작업 실패)

패키지를 실행 합니다.

 

데이터베이스 작업 1,2는 정상 실행 되었지만 파일 시스템 작업의 실패로 인하여 전체 롤백이 된 것을 확인 할 수 있습니다. 파일 시스템 작업이 트랜잭션의 처리 결과에 대해 커밋이나 롤백 할 작업은 아니지만 트랜잭션에 영향을 미칠 수 있는 개체 이기 때문입니다.

 

 

패키지에서 모든 작업을 정상 실행 하도록 수정하여 패키지를 실행 합니다.

 

[SQL 실행 태스크], [SQL 실행 태스크1], [파일 시스템 태스크] 모든 작업이 완료되고 정상적으로 파일 복사 및 데이터베이스 작업이 커밋 된 것을 확인 할 수 있습니다.

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

 

안녕하세요 강성욱 입니다.(www.sqltag.org, www.sqler.com, http://blog.naver.com/jevida)

이번 시간에는 스크립트 작업 및 ActiveX 스크립트 작업에 대해서 알아 보도록 하겠습니다.

 

스크립트 작업 및 ActiveX 스크립트 작업은 기본적으로 제공되는 작업 개체 이외의 기능이 필요하거나 SQL 쿼리로 처리하기 어려운 작업에서 이용할 수 있는 유용한 작업 개체 입니다.

 

스크립트 작업시 제공되는 VSA(Visual Studio for Application)는 일반적인 Visual Studio환경과 매우 유사한 환경을 제공 합니다.

 

이번 실습에서는 c#코드를 이용하여 메시지 박스를 출력하는 패키지를 만들어 보겠습니다.

 

[BIDS]를 실행하여 [Integration Services 프로젝트]를 실행 합니다.

 

 

[제어 흐름] 탭에서 [스크립트 태스크]를 마우스를 이용하여 끌어다 놓습니다.

 

 

작업창의 빈 곳에서 마우스 오른쪽 버튼을 클릭하여 변수를 선택 합니다.

변수 창에서 변수 추가를 하여 다음과 같이 변수를 생성 합니다.

 

 

변수 생성이 완료 되었으면 [스크립트 태스크]에서 마우스 오른쪽을 클릭하여 [편집]을 선택 합니다.

 

 

[스크립트 태스크 편집기]가 나타나면 아래와 같이 ReadOnlyVariables 에서 (…)을 클릭하여 사용자 변수를 선택 합니다.

 

 

[스크립트 편집] 버튼을 클릭하여 스크립트 편집기를 실행 합니다.

다음과 같이 메지시 박스를 출력하는 C#코드를 입력 합니다.

(C#, VBScript, Jscript 사용 가능합니다.)

MessageBox.Show(Dts.Variables["Val1"].Value.ToString());

MessageBox.Show(Dts.Variables["Val2"].Value.ToString());

 

 

 

편집이 완료 되었으면 패키지를 실행 합니다. 다음과 같이 사용자 변수에 할당 된 값이 메시지 박스로 출력되는 것을 확인 할 수 있습니다.

 

 

 

ActiveX 스크립트 작업은 SQL 2000DTS 패키지를 SQL 2005, 2008 SSIS로 업그레이드 시 호환성을 유지하기 위한 작업 개체 입니다.

 

[제어 흐름] 탭에서 [ActiveX 스크립트 태스크]를 추가 합니다.

 

 

[ActiveX 스크립트 태스크]에서 마우스 오른쪽을 클릭하여 [편집]을 선택 합니다.

 

 

[ActiveX 스크립트 태스크 편집기]가 나타납니다.

  • Language – 스크립터 언어를 설정
  • Script – 작업 스크립트를 지정.
  • Entrymethod – 시작 함수를 지정.

 

 

다음과 같이 스크립트를 입력 합니다.

 

 

구문분석을 클릭하여 오류를 검사 합니다.

 

현재 실습 환경에서는 DTS 2000 런타임이 설치되어 있지 않아 실패하는 것을 확인 할 수 있습니다. 이 작업은 하위 호환성을 유지하기 위해 있는 것으로 다음 버전에서는 제거될 수도 있으니 ActiveX 스크립트 작업을 스크립트 작업으로 수정하여 사용하시길 바랍니다.

SQL 실행 작업

 

안녕하세요 강성욱 입니다.(www.sqltag.org, www.sqler.com, http://blog.naver.com/jevida)

이번 시간에는 [SQL 실행 태스크]에 대해서 알아 보도록 하겠습니다.

 

SQL 실행 태스크는 OLEDB, ODBC, ADO, EXCEL 연결 등을 이용하여 SQL 쿼리를 실행할 수 있는 작업 개체 입니다. 단순한 쿼리 형태 뿐만 아니라 입력 매개변수가 포함된 쿼리도 사용할 수 있으며 수행된 결과를 변수에 출력하도록 설정 할 수도 있습니다.

 

[BIDS]를 실행하여 [Integration Services 프로젝트]를 실행 합니다.

 

 

[제어 흐름]탭에서 [SQL 실행 태스크]를 마우스를 이용하여 드래그 앤 드롭으로 끌어다 놓습니다.

 

 

[SQL 실행 태스크]에서 마우스 오른쪽을 클릭하여 [편집]을 선택 합니다.

 

 

[SQL 실행 태스크 편집기]가 나타납니다.

[일반]탭에서는 연결 관리자 및 명령어 입력, 다양한 옵션을 설정할 수 있습니다.

SQL 문

  • ConnectionType – 연결 유형을 지정 합니다. OLE DB, EXCEL, ODBC, ADO, ADO.NET, SQLMOBILE의 연결 유형이 있습니다.
  • Connection – 연결 관리자 설정.

 

  • SQLSourceType
    • 직접 입력 – 실행할 쿼리를 직접 입력
    • 파일 연결 – 실행할 쿼리를 별도의 파일에 저장한 후 이 파일을 사용. 파일 연결을 선택하면 SQLStatement 부분이 FileConnection으로 변경되며 쿼리가 저장된 파일에 대한 연결이 나타남.
    • 변수 – 실행 할 SQL 쿼리를 String형 변수에 저장한 후 이를 사용.

 

  • SQLStatement – 실행 할 쿼리문을 입력.

 

  • IsQueryStroredProcedure – 실행할 쿼리가 저장 프로시저인지 설정.
  • BypassPrepare – 쿼리를 실행하기 전에 쿼리에서 사용되는 열 정보에 대한 조사 작업을 건너뛸지 설정. OLE DB 연결을 이용하면 입력 매개 변수가 포함된 쿼리를 실행할 경우에는 이 값을 Ture로 설정 해야함.

 

결과 집합

  • ResultSet – 쿼리 결과 유형을 지정. 결과 출력없이 단순히 실행되는 쿼리인 경우에는 없음으로 지정. 출력 결과가 존재하는 경우 결과 집합 탭에서 결과를 저장할 변수를 지정.

 

옵션

  • TimeOut – 쿼리가 실행 할 수 있는 최대 시간 설정. 0으로 설정한 경우 시간제한 없이 계속 수행.
  • CodePage – 실행도리 쿼리의 코드 페이지

 

일반

  • Name – 작업 이름 설정
  • Description – 작업의 설명을 설정

 

편집이 완료 되었으면 패키지를 실행 합니다.

늘 그러듯!

녹색 : 정상 실행

빨간색 : 오류 발생

 

간단하게 직접 쿼리문을 이용한 작업을 완료 하였습니다.

 

다음으로 매개변수 매핑을 하여 패키지를 만들어 보겠습니다.

매개변수를 매핑하기에 앞서 사용자 변수를 생성 합니다.

 

 

[편집]에서 [일반] 탭을 선택 합니다.

아래 그림과 같이 쿼리문에 ?를 확인 할 수 있습니다. SSIS의 변수를 WHERE 절의 매개 변수에 대입하여 실행하는 쿼리 입니다. ? 부분이 매개 변수 값이 입력되는 부분이며 [매개 변수 매핑] 탭에서 이를 지정하게 됩니다.

 

 

[매개 변수 매핑]탭을 선택 합니다.

추가 버튼을 이용하요 매핑할 항목을 등록 합니다.

변수 이름 – 대입할 변수를 지정. 미리 정해 놓은 변수가 없을 경우 [새 변수]를 이용하여 변수를 추가 합니다.

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

데이터 형식 – 매개 변수의 데이터 형식을 지정.

매개 변수 이름 – 기본 값으로 NewParameterName이 입력되어 있지만 연결 방식에 따라 변경 해야 합니다.

연결 방식

입력 쿼리(프로시저 아닐 경우)

매개 변수 이름

EXCEL, OLE DB

SELECT * FROM TABLE WHERE Vals1 = ? AND Vals2 = ?

0, 1, 2, ----

ODBC

SELECT * FROM TABLE WHERE Vals1 = ? AND Vals2 = ?

1, 2, 3, ----

ADO

SELECT * FROM TABLE WHERE Vals1 = ? AND Vals2 = ?

임의의 이름 지정 가능 순서대로 매핑됨.

ADO.NET

SELECT * FROM TABLE WHERE Vals1 = @Param1 AND Vals2 = @Param2

쿼리에서 사용한 매개 변수 이름(예, @Param1, @Param2)

 

 

연결 방식

입력 쿼리(저장 프로시저)

매개 변수 이름

EXCEL, OLE DB

EXEC usp_Proc ?, ?

0, 1, 2, ----

ODBC

EXEC usp_Proc ?, ?

1, 2, 3, ----

ADO

IsStoredProcedure = False 경우

EXEC usp_Proc ?, ?

IsStoredProcedure = True 경우

usp_Proc ?, ?

임의의 이름 지정 가능 순서대로 매핑됨.

ADO.NET

IsStoredProcedure = False 경우

EXEC usp_Proc @Param1

IsStoredProcedure = True 경우

usp_Proc @Param1

IsStoredProcedure가 false인 경우 쿼리에서 사용한 매개변수 이름 , True인 경우 프로시저에서 정의된 매개 변수 이름

 

 

결과 집합

결과 집합 탭은 쿼리가 실행 된 후 출력되는 결과가 있을 경우 결과값을 저장할 변수를 지정하는 부분입니다.

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

  • 단일 행 – 결과 이름에 출력되는 결과의 열 이름을 지정하고 변수 이름에는 값을 저장할 변수를 지정.
  • 전체 결과 집합, XML – 반드시 결과 이름은 0으로 지정. 결과를 저장할 변수는 전체 겨로가 집합인 경우에는 Object 형, XML형인 경우에는 Object형 또는 String형 이어야 합니다.

 

 

매개변수 매핑이 완료 되었으면 패키지를 실행 합니다.

 

Profiler를 실행하여 보면 매개변수로 입력된 쿼리가 정상적으로 실행 되는 것을 확인 할 수 있습니다.

 

WMI 이벤트 감시자 작업

 

안녕하세요 강성욱 입니다.(www.sqltag.org, www.sqler.com, http://blog.naver.com)

이번 시간에는 [WMI 이벤트 감시자 작업]에 대해서 알아 보도록 하겠습니다.

 

WMI 이벤트 감시자 작업은 시스템에서 발생하는 이벤트 정보를 인식하는 작업 입니다. WMI이벤트란 파일의 생성이나 삭제, 응용 프로그램 실행, 프로그램 설치, 서비스 종료 등과 같은 행위를 말합니다.

WMI 이벤트 감시자를 이용한 작업

지정된 폴더에 원하는 파일이 전송되는 경우 파일을 읽어서 테이블에 로딩하는 작업을 수행.

특정 폴더로 파일이 생성되면 자동으로 여러 대상으로 배포하는 작업을 수행

특정 서비스 또는 응용 프로그램이 종료될 때 사용자가 지정한 작업을 수행하도록 함.

 

이번 실습에서는 특정 폴더로 파일이 복사 되었을 때 이벤트를 감지하여 SSIS 작업을 실행하는 방법을 알아 보도록 하겠습니다.

 

 

[BIDS]를 실행하여 [Integration Services 프로젝트]를 실행 합니다.

 

 

[제어 흐름]탭에서 [WMI 이벤트 감시자 태스크]를 마우스를 이용하여 드래그 앤 드롭으로 끌어다 놓습니다.

 

 

[WMI 이벤트 감시자 태스크]에서 마우스 오른쪽을 클릭하여 [편집]을 선택 합니다.

 

 

[WMI 이벤트 감시자 태스크 편집기]창이 나타납니다.

[일반] 탭에서는 태스크의 이름과 설명을 설정 합니다.

 

 

[WMI 옵션]탭에서는 연결 관리자 및 옵션 등을 지정 합니다.

WMI 옵션

  • WmiConnection – WMI 연결을 지정.

 

 

  • WqlQuerySourceType – WMI 이벤트를 인식하기 위한 WQL 쿼리의 입력 형태를 지정. 직접 입력 또는 변수에 WQL 쿼리를 저장한 후 이 변수를 사용하도록 지정 할 수도 있으며 별도의 파일로 만든 후 이 파일을 사용하도록 지정할 수도 있습니다.

  • WqlQuerySource – 직접 입력으로 지정한 경우 WQL 쿼리를 입력.

SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE TargetInstance ISA "CIM_DirectoryContainsFile" AND TargetInstance.GroupComponent = "Win32_Directory.Name=\"D:\\\\SSIS_TEST\""

 

 

 

 

  • ActionAtEvent – 이벤트가 발생 되었을 때 행할 수행 동작을 설정.
    • 이벤트 기록 – 단순히 이벤트가 발생된 것을 감지하고 AfterEvent 속성에 지정된 대로 진행.
    • 이벤트를 기록하고 SSIS 이벤트를 실행 – AfterEvent 속성에 지정된 대로 진행할 뿐만 아니라 이벤트 처리기에서 WMI 이벤트 발생 시 수행 되도록 설정한 이벤트 처리 작업을 실행. 즉 이벤트 처리기의 WMIEventWatcherEventOccurred 부분에 구성된 작업들이 수행.

 

 

 

 

  • AfterEvent – 이벤트가 발생 될 경우 작업 결과를 성공 또는 실패로 반환하고 작업을 종료 하거나 다시 감시하도록 설정. 이벤트를 다시 감시하도록 설정할 경우 아래에 있는 NumberOfEvents의 횟수만큼 반복하게 됨.
  • ActionAtTimeout – Timeout 속성에서 지정된 시간(초)이 지난 경우 작업 결과를 성공 또는 실패로 반환하고 작업을 종료하거나 다시 감시하도록 설정. 이벤트를 다시 감시하도록 설정한 경우에는 NumberOfEvents 의 횟수 만큼 반복.
  • NumberOfEvents – 이벤트를 다시 감시할 횟수 설정. 이 값을 0으로 설정되면 계속해서 감시하게 됨.
  • Timeout – 이벤트가 발생 할 때 까지 대기하는 시간. 값이 0으로 설정되면 이벤트가 발생 할 때까지 무한 대기

 

 

[제어 흐름]탭에서 [스크립트 태스크]를 끌어다 놓습니다.

 

아래 그림과 같이 코드를 입력 합니다.

 

 

편집이 완료 되었으면 패키지를 실행 합니다.

패키지를 실행하면 아래 그림과 같이 대기 상태로 진행 됩니다.

 

 

바탕화면의 텍스트 파일을 WQL에서 입력한 폴더의 위치로 복사해 보도록 하겠습니다.

 

 

이벤트가 감지 되는 순간 작업이 실행되며 나머지 패키지가 실행 됩니다.

 

이 작업을 응용하여 여러가지 이벤트 발생시점에 따라 다양한 작업을 실행 할 수 있을 듯 합니다.

 

WMI 데이터 판독기 태스크

 

안녕하세요 강성욱 입니다.(www.sqltag.org, www.sqler.com, http://blog.naver.com/jevida)

이번 시간에는 [WIM 데이터 판독기 태스크]에 대해서 알아 보도록 하겠습니다.

 

WMI는 OS에서 Windows Management Instrumentation 서비스를 통해 OS에서 관리 됩니다.

WMI 정보를 사용하기 위해서는 WMI 정보를 읽어올 서버에 대한 연결과 WMI 정보를 읽어올 명령어가 필요합니다. WMI 연결은 SSIS의 연결 관리자에서 지정할 수 있으며 WMI정보는 SQL쿼리와 유사한 형태인 WQL(WMI Query Language)이라는 스크립트 언어를 이용하여 읽어올 수 있습니다.

 

이번 실습에서는 서버의 CPU사용률이 30% 미만일 때 현재 실행 중인 모든 프로세스의 이름과 경과된 시간, 스레드 수 등을 읽어서 텍스트 파일로 저장하는 작업을 구현 합니다.

 

[BIDS]를 실행하여 [Intergration Services 프로젝트]를 실행 합니다.

 

 

[제어 흐름] 탭에서 [WMI 데이터 판독기 태스크]를 마우스를 이용하여 드래그 앤 드롭으로 끌어다 놓습니다.

 

 

[WMI 데이터 판독기 태스크]에서 마우스 오른쪽을 클릭하여 [편집]을 선택 합니다.

 

 

[WMI 데이터 판독기 태스크 편집기]창이 나타납니다.

[일반] 탭에서는 태스크의 이름과 설명을 지정 할 수 있습니다.

 

 

[WMI 옵션]창에서는 연결 방법 및 작업 속성을 지정 합니다.

WMI 옵션

  • WmiConnection - WMI연결을 지정 합니다.

 

  • WqlQuerySourceType – 데이터를 판독하기 위해 수행하는 쿼리인 WQL쿼리의 입력형태를 지정. 직접 입력하도록 하거나 변수에 WQL 쿼리를 저장한 후 이 변수를 사용하도록 지정할 수 있으며 별도의 파일로 만든 후 이 파일을 사용하도록 지정할 수 도 있습니다.
  • WqlQuerySource – 직접 입력으로 지정한 경우 WQL 쿼리를 입력. (본 예제에서는 _Total에 대한 값만 읽어오도록 설정 합니다.)

SELECT PercentProcessorTime FROM Win32_PerfFormattedData_PerfOS_Processor WHERE NAME = '_Total'

 

  • OutputType – 결과 형태를 설정. 데이터 테이블인 경우 결과가 테이블 형태로 출력, 이외에도 [속성 이름 및 값] 또는 [속성 값]만 출력되도록 설정 가능. 결과가 데이터 테이블인 경우 대상은 파일 형태이거나 Object형 변수이어야 하며 속성 이름 및 값 또는 값인 경우에는 파일 형태이거나 String형 또는 Object형 변수이어야 합니다.
  • OverwriteDwstination – 기존의 파일 또는 변수의 값이 있는 경우에 대한 처리 유형 지정.
  • DestinationType – 결과를 저장할 유형을 지정. 파일 또는 변수에 저장할 수 있습니다.
  • Destination – 결과를 파일에 저장하도록 설정한 경우에는 파일 연결을 지정하며 변수로 저장하도록 설정한 경우에는 저장할 변수 이름을 지정.

 

 

WQL쿼리를 이용하여 현재 서버의 %Process Time정보를 읽어 들인 후 이 값을 ProcessorTime라는 변수에 저장하는 작업이 완료 되었습니다.

이제 CPU의 사용량이 30 미만인지를 판단한 후 현재 수행되는 프로세스 정보를 수집하는 작업을 구성하도록 하겠습니다.

[제어 흐름] 탭에서 [WMI 데이터 판독기 태스크]를 추가합니다. 이름을 [프로세스 정보 수집]으로 변경 합니다.

 

 

[프로세스 정보 수집]에서 마우스 오른쪽을 클릭하여 편집을 선택 합니다.

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

 

파일 연결 관리자 편집기에서 사용 유형을 파일 만들기로 지정한 후 새로운 파일 이름을 지정하거나 기존 파일로 지정한 경우 해당 파일을 선택 합니다.

 

두 개의 WMI작업을 연결합니다. 이제 CPU 사용량이 30%미만일 때 실행되도록 선행 제약 조건을 추가해야 합니다. 녹샌선을 더블 클릭하여 [선행 제약 조건 편집기]를 실행 합니다.

 

평가 작업을 [식 및 제약 조건]으러 변경합니다.

식(X)부분에 다음과 같은 조건을 입력 합니다.

@ProcessorTime<"30"

 

 

 

[편집]이 완료 되었으면 패키지를 실행 합니다.

늘 그러듯!

녹색 : 정상 실행

빨간색 : 오류 발생

(CPU 사용률이 30미만이어야 패키지가 실행 됩니다.!)

 

패키지가 정상적으로 완료 되었으면 해당 파일을 열어 정상적으로 기록되었는지 확인 합니다.

 

해당 정보가 저장된 것을 확인 할 수 있습니다.

 

이 작업을 통해서 CPU 사용률이 높을 때 실행 중인 프로세스들의 정보를 남기는 모니터링 작업이나 특정 디스크의 여유 공간이 부족할 때 지정한 파일들을 삭제하는 시스템 관리 작업을 구현할 수 있습니다.

 

[데이터 판독기에서 사용할 수 있는 WQL]

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

SELECT Name, FileSystem, FreeSpace, Size FROM Win32_LogicalDisk

 

--시스템의페이지파일정보를반환

SELECT Description, FileSize FROM Win32_PageFIle

 

--성능모니터의Logical Disk에포함된카운터의값출력

SELECT * FROM Win32_PerfWawData_PerfDisk_LogicalDisk

 

--CPU 정보를출력

SELECT Caption, CpuStatus, DeviceID FROM Win32_Processor

'SQL Server > SSIS 강좌' 카테고리의 다른 글

SQL 실행 작업  (0) 2015.07.16
WMI 이벤트 감시자 작업  (0) 2015.07.16
FTP 작업  (0) 2015.07.16
파일 시스템 작업 – 폴더 생성, 삭제, 파일 복사, 파일 삭제  (0) 2015.07.16
오류 메시지 전송 작업  (0) 2015.07.16

FTP 작업

 

안녕하세요 강성욱 입니다.(www.sqltag.org, www.sqler.com, http://blog.naver.com/jevida)

이번 시간에는 [FTP 작업]에 대해서 알아 보도록 하겠습니다.

파일을 가져오거나 복사, 전송 작업을 파일 시스템 작업을 이용할 수 없는 경우 FTP 작업을 통하여 파일을 주고 받을 수 있습니다.

 

이번 실습에서는 [파일 보내기]작업을 예를 들어 보겠습니다.

기능은 파일 시스템 작업과 거의 유사한 기능을 제공 합니다.

파일 시스템 관련 링크

http://blog.naver.com/jevida/140162761441

 

[BIDS]를 실행하여 [Integration Services 프로젝트]를 실행 합니다.

 

 

[제어 흐름]탭에서 [FTP 태스크]를 마우스를 이용하여 드래그 앤 드롭으로 끌어다 놓습니다.

 

 

[FTP 태스크]에서 마우스 오른쪽을 클릭하여 [편집]을 선택 합니다.

 

 

[FTP 태스크 편집기] 창이 나타납니다.

 

[일반] 탭에서 연결관리자를 설정 합니다.

  • FTPConnection – FTP의 연결 정보를 입력 합니다.
  • StopOnFailure – 작업이 실패하는 경우 태스크의 중지 여부를 설정 합니다.

 

 

 

[파일 전송]탭에서는 FTP로 전송할 파일 및 작업등을 설정 합니다.

작업

  • Operation – 태스크에서 수행할 FTP 작업을 선택 합니다.
  • IsTransferAscii – ASCII 모드로 파일을 전송할지 여부를 지정 합니다.

 

로컬 매개 변수

  • IsLocalPathVariable – 로컬 경로가 변수에 저정되는지 여부를 나타냄
  • LocalPath – FTP로 전송할 파일 선택.

 

 

원격 매개 변수

  • IsRemotePathVariable – 원격 경로가 변수에 저장되는지 여부를 나타냄
  • RemotePath - 원격 디렉토리의 경로 지정
  • OverwriteFileAtdest – 대상 파일을 덮어쓸지 여부를 지정.

 

[일반] 탭에서 FTP연결을 미리 설정해야 원격 매개 변수를 설정 할 수 있습니다.

 

 

FTP 태스크에서 지원되는 작업

  • 파일 보내기 – LocalPath에 지정된 연결에 해당되는 파일을 RemotePath에 지정된 FTP 연결에 해당되는 사이트로 파일을 보내는 작업.
  • 파일 받기 – 원격지 사이트의 파일을 지정된 로컬 디렉터리로 가져오는 작업
  • 로컬 디렉터리 만들기 – 로컬 서버에 디렉터리를 만드는 작업.
  • 원격 디렉터리 작업 – 원격 서버에 디렉터리를 만드는 작업
  • 로컬 디렉터리 제거 – LocalPath에 지정한 폴더를 삭제, 해당 디렉터리가 없는 경우 작업은 실패 됨.
  • 원격 디렉터리 제거 – RemotePath 지정한 폴더를 삭제, 해당 디렉터리가 없는 경우 작업은 실패 됨.
  • 로컬 파일 삭제 – LocalPath에 지정된 파일을 삭제. 이 작업은 파일 시스템 작업의 파일 삭제 작업과 달리 삭제할 파일이 없는 경우 작업이 실패하게 됨.
  • 원격 파일 삭제 – RemotePath에 지정된 파일을 삭제.

파일 시스템 작업 – 폴더 생성, 삭제, 파일 복사, 파일 삭제

 

안녕하세요 강성욱 입니다.(www.sqltag.org, www.sqler.com, http://blog.naver.com/jevida)

이번 시간에는 [파일 시스템 태스크]에 대해서 알아 보도록 하겠습니다.

 

파일 시스템 작업은 데이터를 처리하는 과정에서 원본 파일의 복사, 삭제, 이동, 폴더 생성과 같은 관리 작업을 제공 합니다.

 

이번 실습에서는 여러가지 작업 중 파일 복사에 대해서 다루어 보도록 하겠습니다.

 

[BIDS]를 실행하여 [Integration Services 프로젝트]를 실행 합니다.

 

 

[제어 흐름]탭에서 [파일 시스템 태스크]를 마우스를 이용하여 드래그 앤 드롭으로 끌어다 놓습니다.

 

 

[파일 시스템 태스크]에서 마우스 오른쪽을 클릭하여 [편집]을 선택 합니다.

 

 

작업에서 파일 복사를 선택 합니다.

 

 

대상 연결과 원본 연결에서 각 위치를 지정 합니다.

 

 

편집이 완료되면 패키지를 실행 합니다.

늘 그러듯!

녹색 : 정상 실행

빨간색 : 오류 발생

 

패키지가 정상적으로 실행되었으면 대상 위치에 올바르게 파일이 복사되었는지 확인 합니다.

 

파일이 정상적으로 복사된 것을 확인 할 수 있습니다.

'SQL Server > SSIS 강좌' 카테고리의 다른 글

WMI 데이터 판독기 태스크  (0) 2015.07.16
FTP 작업  (0) 2015.07.16
오류 메시지 전송 작업  (0) 2015.07.16
작업 전송 작업  (0) 2015.07.16
로그인 전송 작업  (0) 2015.07.16

오류 메시지 전송 작업

 

안녕하세요 강성욱 입니다.(www.sqltag.org, www.sqler.com, http://blog.naver.com/jevida)

이번 시간에는 [오류 메시지 전송 작업]에 대해서 알아 보도록 하겠습니다.

 

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

사용자 정의 오류는 Message_ID가 50000 이상인 메시지 이며 sys.messages 뷰에서 확인 할 수 있습니다.

 

SSMS를 실행하여 원본 서버에 사용자 메시지를 등록 합니다.

EXEC SYS.SP_ADDMESSAGE 60000, 15, 'THIS IS MY ERROR %S.', 'US_ENGLISH'

GO

 

 

 

[BIDS]를 실행하여 [Integration Services 프로젝트]를 실행 합니다.

 

 

[제어 흐름] 탭에서 [오류 메시지 전송 태스크]를 마우스를 이용하여 드래그 앤 드롭으로 끌어다 놓습니다.

 

 

[오류 메시지 전송 태스크]에서 마우스 오른쪽 버튼을 클릭하여 [편집]을 선택 합니다.

 

 

[오류 메시지 전송 태스크 편집기] 창이 나타납니다.

[일반] 탭에서는 작업의 이름과 설명을 입력 할 수 있습니다.

 

 

[메시지] 탭에서는 원본 서버, 대상 서버, 옵션 등을 설정 할 수 있습니다.

연결

  • SourceConnection – 원본 서버에 대한 연결을 지정.
  • DestinationConnection – 대상 서버에 대한 연결을 지정

 

 

메시지

  • IfObjectExists – 대상 서버에 전송할 오류 메시지가 있는 경우 이에 대한 처리 방법을 설정
    • FailTask – 동일한 메시지가 있는 경유 오류 메시지 전송 작업이 실패
    • Overwrite – 대성 서버의 메시지를 덮어 씀
    • Skip – 대상 서버의 메시지를 덮어쓰지 않고 건너띔.
  • TransferAllErrorMessages – 대성 서버로 모든 메시지를 전송할지 설정
  • ErrorMessageList – 모든 메시지를 전송하지 않는 경우 전송할 메시지를 선택
  • ErrorMessageLanguagesList – 대성 서버로 전송할 다른 언어 버전의 메시지를 선택. 다른 언어의 메시지를 전송하기 위해서는 대상 서버에 us_english(1033)인 메시지가 반드시 있어야 합니다.

 

 

편집이 완료 되었으면 패키지를 실행 합니다.

늘 그러듯!

녹색 : 정상 실행

빨간색 : 오류 발생

 

패기지가 정상적으로 완료 되었으면 SSMS를 이용하여 사용자 오류 메시지가 정상적으로 전송 되었는지 확인 합니다.

SELECT * FROM SYS.SYSMESSAGES

GO

 

 

사용자 오류 정의 메시지가 정상적으로 전송된 것을 확인 할 수 있습니다.

 

'SQL Server > SSIS 강좌' 카테고리의 다른 글

FTP 작업  (0) 2015.07.16
파일 시스템 작업 – 폴더 생성, 삭제, 파일 복사, 파일 삭제  (0) 2015.07.16
작업 전송 작업  (0) 2015.07.16
로그인 전송 작업  (0) 2015.07.16
데이터베이스 전송 작업  (0) 2015.07.16

작업 전송 작업

 

안녕하세요 강성욱 입니다.(www.sqltag.org, www.sqler.com, http://blog.naver.com/jevida)

이번 시간에는 [작업 전송 작업]에 대해서 알아 보도록 하겠습니다.

 

[작업 전송 작업]은 원본 서버의 SQL Server 에이전트에 등록된 예약 작업(Job)을 대상 서버로 전송하는 작업 입니다. 전체 작업 또는 특정 작업만 전송이 가능합니다.

 

[BIDS]를 실행하여 [Integration Services 프로젝트]를 실행 합니다.

 

 

[제어 흐름] 탭에서 [작업 전송 태스크]를 마우스를 이용하여 드래그 앤 드롭으로 끌어다 놓습니다.

 

 

[작업 전송 태스크]에서 마우스 오른쪽 버튼을 클릭하여 [편집]을 선택 합니다.

 

 

[작업 전송 태스크 편집기]가 나타납니다.

[일반] 탭에서는 작업의 이름과 설명을 입력 할 수 있습니다.

 

 

[작업]탭에서는 원본 서버, 대상 서버, 작업 등을 지정 할 수 있습니다.

연결

  • SourceConnection – 원본 서버에 대한 연결을 지정.
  • DestinationConnection – 대성 서버에 대한 연결을 지정.

 

옵션

  • IfObjectExists – 대상 서버에 전송할 작업이 있는 경우 이에 대한 처리 방법을 설정
    • FailTask – 동일한 작업이 있는 경우 작업 전송 작업이 실패.
    • Overwrite – 대상 서버의 작업을 덮어 씀
    • Skip – 대상 서버의 작업을 덮어 쓰지 않고 그냥 건너띔.
  • Enablejobsatdestination – 대상 서버로 작업을 전송 한 후 해당 작업의 활성화 여부를 설정.

 

작업

  • TransferAllJobs – 모든 작업을 전송할지 설정.
  • JobList – 모든 작업을 전송하지 않는 경우

 

 

편집이 완료 되었으면 패키지를 실행 합니다.

늘 그러듯!

녹색 : 정상 실행

빨간색 : 오류 발생

 

 

패키지가 정상적으로 실행 되었으면 SSMS를 이용하여 작업이 정상적으로 전송 되었는지 확인 합니다.

 

DB_Backup이라는 작업이 정상적으로 전송된 것을 확인 할 수 있으며 옵션에 따라 비활성화 된 것을 확인 할 수 있습니다.

 

 

로그인 전송 작업

 

안녕하세요 강성욱 입니다.(www.sqltag.org, www.sqler.com, http://blog.naver.com/jevida)

이번 시간에는 [로그인 전송 작업]에 대해서 알아 보도록 하겠습니다.

 

로그인 전송 작업은 원본 서버의 로그인 정보를 대상 서버로 전송하는 작업 개체 입니다.

전송 작업 시 전체 또는 특정 로그인만 전송할 수 있습니다. 또한 로그인에 연결된 sid(보안ID)를 같이 복사할 수도 있습니다.

 

[BIDS]를 실행하여 [Integration Services 프로젝트]를 실행 합니다.

 

 

[제어 흐름] 탭에서 [로그인 전송 태스크]를 마우스를 이용하여 드래그 앤 도릅으로 끌어다 놓습니다.

 

 

[로그인 전송 태스크]에서 마우스 오른쪽을 클릭하여 [편집]을 선택 합니다.

 

 

[로그인 전송 태스크 편집기]가 나타납니다.

 

[일반] 탭에서는 작업의 이름과 설명을 입력할 수 있습니다.

 

 

[로그인] 탭에서는 원본 서버, 대상 서버, 로그인 리스트 등을 설정 할 수 있습니다.

연결

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

서버 연결방식은 다른 전송작업과 동일하게 SMO를 이용합니다.

원본과 대상은 반드시 다른 서버로 지정 하여야 합니다.

 

 

 

로그인

  • LoginsToTransfer – 원본 서버에서 대상 서버로 전송할 작업 유형을 지정
    • AllLogins – 원본 서버의 모든 로그인 정보를 대상 서버로 전송.
    • SelectedLogins – 원본 서버에서 선택한 로그인 정보만 대상 서버로 전송
    • AllLoginsFromSelectedDatabases – DatabaseList에 지정된 데이터베이스의 모든 로그인 정보를 대상 서버로 전송
  • LoginList – SelectedLogins로 선택한 경우 전송할 로그인을 선택.
  • DatabaseList – AllLoginsFromSelectedDatabases로 선택한 경우 전송할 로그인의 데이터베이스를 선택.

 

옵션

  • IfObjectExists – 대상 서버에 전송할 로그인이 있는 경우 처리 방법을 설정
    • FailTask – 동일한 로그인이 있는 경우 로그인 전송 작업이 실패.
    • Overwrite – 대상 서버의 로그인을 덮어 씀.
    • Skip – 대상 서버의 로그인을 덮어 쓰지 않고 그냥 건너뜀
  • CopySids – 로그인에 연결된 sid(보안ID)를 함께 전송할지를 설정.

 

편집이 완료 되었으면 패키지를 실행 합니다.

늘 그러듯!

녹색 : 정상 실행

빨간색 : 오류 발생

 

패키지가 정상적으로 실행되었으면 SSMS를 이용하여 로그인이 정상적으로 전송되었는지 확인 합니다.

해당 로그인이 비활성화 되어 전송된 것을 확인 할 수 있습니다.

로그인 전송작업을 이용하여 전송된 로그인은 기본적으로 비활성화 되며 임의의 암호가 부여 됩니다. 반드시 암호를 재설정 해야 합니다.

 

원본 데이터베이스를 다른 서버에 복원하여 사용할 경우 로그인 정보를 복사하고 로그인의 sid원본 서버와 동일하게 변경해야 하는 작업을 대체할 때 유용할 듯 합니다.

 

데이터베이스 전송 작업

 

안녕하세요 강성욱 입니다. (www.sqltag.org, www.sqler.com, http://blog.naver.com/jevida)

이번 시간에는 [데이터베이스 전송 작업]에 대해서 알아 보도록 하겠습니다.

 

데이터베이스 전송 작업은 SQL Server 개체 전송 작업과는 달리 데이터베이스 전체를 대상으로 복사 또는 이전 하는 작업 입니다.

이 작업은 동일 인스턴스 내에서 데이터베이스를 복사하는 경우에도 사용할 수 있습니다.

 

개체전송작업 관련 링크

http://blog.naver.com/jevida/140158933424

 

데이터베이스 전송 작업 시 온라인 또는 오프라인으로 수행할 수 있으며 온라인으로 설정시하면 원본 데이터베이스가 온라인 상태에서 전송되며 SMO를 이용하여 데이터베이스 개체 및 데이터가 전송 됩니다.

오프라인으로 설명하면 데이터베이스를 분리(Detach)한 후 데이터 파일 및 로그 파일을 대상 위치로 복사하고 다시 연결(Attach)하는 방식으로 작업이 이루어 집니다.

 

[BIDS]를 실행하여 [Integration Services 프로젝트]를 실행 합니다.

 

 

[제어 흐름] 탭에서 [데이터베이스 전송 태스크]를 마우스를 이용하여 드래그 앤 드롭으로 끌어다 놓습니다.

 

 

[데이터베이스 전송 태스크]에서 마우스 오른쪽 버튼을 클릭하여 [편집]을 선택 합니다.

 

 

[데이터 베이스 전송 태스크 편집기]가 나타납니다.

 

[일반]탭에서는 작업의 이름과 설명을 입력 할 수 있습니다.

 

 

[데이터베이스] 탭에서는 대상 서버, 원본서버 등 다양한 연결을 설정합니다.

 

연결

  • SourceConnection – 원본 서버에 대한 연결을 지정.
  • DestinationConnection – 대상 서버에 대한 연결을 지정

아래 그림처럼 SMO 연결관리자를 통하여 연결 설정을 합니다.

 

 

원본 데이터베이스

  • Action – 원본 서버의 데이터베이스를 대상 서버로 복사(copy) 또는 이동(move)할지 설정.
  • Method – 데이터베이스를 온라인 또는 오프라인으로 전송할지 설정. 온라인 상태로 전송하기 위해서는 패키지를 실행하는 사용자가 sysadmin 고정 서버 역할의 멤버이거나 전송할 데이터베이스의 소유자(dbo)이어야 합니다. 오프라인 상태로 전송하기 위해서는 sysadmin 고정 서버 역할의 멤버이면 됩니다.

 

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

  • SourceDatabaseName – 원본 서버에서 전송할 데이터베이스 이름을 지정.
  • SourceDatabaseFile – 원본 서버에서 전송할 데이터베이스의 파일을 지정.
  • ReattachSourceDatabase – 전송 작업 수행 중 오류가 발생하였을 때 원본 데이터베이스를 자동으로 연결(Attach)시킬지 설정.

 

 

대상 데이터 베이스

  • DestinationDatabaseName – 대상 서버에 전송될 데이터베이스의 이름을 지정
  • DestinationDatabaseFile – 대상 서버에 전송될 데이터베잇의 파일 지정.
  • DestinationOverwrite – 대상 서버에 이미 동일한 데이터베이스가 있는 경우 덮어 쓸지 설정.

대상 데이터베이스에 동일한 데이터베이스명이 존재하지 않아야 합니다

 

다음과 같이 설정이 완료 되었는지 확인 합니다.

(원본의 SSIS_TEST를 대상의 SSIS_TEST2로 복사 합니다. 위치는 Local 입니다.)

 

 

편집이 완료 되었으면 패키지를 실행 합니다.

늘 그러듯!

녹색 : 정상 실행

빨간색 : 오류 발생

 

패키지 작업이 완료 되었으면 SSMS를 이용하여 데이터베이스가 복사되었는지 확인 합니다.

 

SSIS_TEST가 SSIS_TEST2로 복사된 것을 확인 할 수 있습니다.

 

Master 저장 프로시저 전송 태스크

 

안녕하세요 강성욱 입니다.(www.sqltag.org, www.sqler.com, http://blog.naver.com)

이번 시간에서는 [Master 저장 프로시저 전송 태스크]에 대해서 알아 보도록 하겠습니다.

 

Master 저장 프로시저 전송 작업은 원본 서버의 master DB에 있는 사용자 저장 프로시저를 다른 서버의 master DB로 전송하는 작업 입니다.

오직 master DB에 있는 사용자 저장 프로시저만 대상이 되며 해당 프로시저의 소유자가 dbo인 프로시저만 옮길 수 있습니다.

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

 

 

[BIDS]를 실행하여 [Integration Services 프로젝트]를 실행 합니다.

 

 

[제어 흐름]탭에서 [master 저장 프로시저 전송 작업]작업을 마우스를 이용하여 드래그 앤 드롭으로 끌어다 놓습니다.

 

 

[master 저장 프로시저 전송 작업]에서 마우스 오른쪽 버튼을 클릭하여 [편집]을 선택 합니다.

 

 

[일반]탭에서는 작업의 이름과 설명을 입력 할 수 있습니다.

 

 

[저장 프로시저] 탭에서는 연결에 필요한 다양한 설정을 변경 할 수 있습니다.

연결

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

아래 그림에서 보듯이 전송 작업에 이용되는 원본 및 대상 서버의 연결은 SMOServer를 이용합니다.

SMO(Server Management Objects)연결은 서로 다른 인스턴스 간 데이터베이스 개체를 전송하는데 이용되는 연결이며 OLEDB 연결이나 ADO.NET 연결과는 달리 데이터베이스를 지정하지는 않습니다.

 

반드시 원본과 대상은 다른 인스턴스 이어야 합니다!

 

저장 프로시저

  • IfObjectExists – 대상 서버의 master DB에 이미 동일한 저장 프로시저가 있는 경우 처리할 방법을 지정.
    • FailTask – 동일한 프로시저가 있을 때 실패
    • Overwirte – 덮어쓰기
    • SKil – 건너뛰기
  • TransferAllStoredProcedures – 저장 프로시저 모두를 전송 할 것인지 일부만 전송할 것인지 지정.

 

  • StoredProceduresList – 저장 프로시저를 모두 전송하지 않는 경우 전송할 저장 프로시저를 지정.

 

편집이 완료 되었으면 패키지를 실행 합니다.

늘 그러듯!

녹색 : 정상 실행

빨간색 : 오류 발생.

 

패키지 실행이 완료 되었으면 SSMS를 실행하여 실제로 master의 사용자 저장 프로시저가 정상적으로 복사 되었는지 확인 합니다.

원본 서버의 master DB의 사용자 저장 프로시저가 대상 서버 local의 master DB로 복사된 것을 확인 할 수 있습니다.

 

Master 저장 프로시저 전송 작업은 master에 있는 사용자 저장 프로시저만을 전송하기 위한 특화된 작업으로 마이그레이션 및 통합, 이전 등에서 유용하게 사용할 수 있을 듯 합니다.

 

 

패키지 실행 – 부모 패키지와 자식 패키지로 효율적인 관리하기

 

안녕하세요 강성욱 입니다.(www.sqltag.org, www.sqler.com, http://blog.naver.com/jevida)

 

이번 시간에는 [패키지 실행]에 대해서 알아 보도록 하겠습니다.

 

SSIS에서는 패키지 실행 작업을 이용하여 다른 SSIS 패키지를 호출하여 실행 할 수 있습니다.

패키지 호출 기능은 다음과 같이 이용할 수 있습니다.

  • 복잡한 대규모 데이터 처리 프로세스의 각 작업들을 작은 단위로 분리하여 관리할 수 있습니다.
  • 패키지 보안을 사용할 수 있습니다. 중요한 프로세스 경우 별도의 패키지를 만들고 패치지 호출 작업으로 해당 부분의 패키지를 호출 할 수 있습니다. 별도로 만든 패키지에는 SSIS에서 기본적으로 제공하는 암호 설정 기능을 이용하여 조회나 수정이 불가능하도록 설정 할 수 있습니다.
  • 작업 수행 및 관리가 용이 합니다. 마스터 패키지에서 자식 패키지를 호출하여 패키지 순서나 동시에 수행할 패키지 수를 조절할 수 있습니다.

패키지를 호출하는 패키지를 부모 패키지라 하고 호출 당하는 패키지를 자식 패키지라고 합니다. 부모 패키지는 자식 패키지에게 값을 전달할 수 있으며 자식 패키지에서는 이 값을 넘겨 받아 사용할 수 있습니다.

 

이번 실습 에서는 부모 패키지에서 자식 패키지로 변수 값을 설정하여 호출하는 방법에 대해서 알아 봅니다.

 

[BIDS]를 실행하여 [Integration Services 프로젝트]를 실행 합니다.

 

[솔루션 탐색기]에서 마우스 오른쪽을 클릭하여 [새 SSIS 패키지]를 선택 합니다.

[자식 패키지]로 이름을 변경 합니다.

 

 

[자식 패키지]에서 제어 흐름에서 [스크립트 태스크]를 마우스를 이용하여 드래그 앤 드롭 으로 끌어다 놓습니다.

 

 

[변수]에서 아래 그림과 같이 변수 값과 범위, 데이터 형식 등을 지정 합니다.

그리고 스크립트 태스크 속성에서 ReadOnlyVariables 항목에서 [User::Var1]을 설정합니다.

 

스크립트 편집기를 이용하여 다음과 같이 코드를 입력 합니다.

MessageBox.Show(Dts.Variables["Var1"].Value.ToString());

 

패키지를 실행하여 입력한 변수가 정상적으로 출력되는지 확인 합니다.

(현재 자식패키지가 호출되었으므로 팝업으로 자식 패키지 라는 글자가 나타납니다.)

 

 

이제 부모 패키지의 변수 값을 받아 오는 부분을 설정 하도록 하겠습니다.

[SSIS]-[패키지 구성]을 선택 합니다.

 

 

[패키지 구성 도우미] 창이 나타나면 [패키지 구성 설정]을 활성화 하고 [추가]버튼을 눌러 마법사를 시작 합니다.

 

 

[구성 유형 선택]에서 [구성 유형]은 부모 패키지 변수를 선택 합니다.

[구성 설정을 직접 지정]으로 선택하고 부모 변수를 아래 그림과 같이 입력 합니다.

 

 

 

[대상 속성 선택]에서 [변수] – [Var1] – [Properties] – [Value]를 선택 합니다.

 

 

구성 이름을 지정하고 마법사를 완료 합니다.

 

 

[부모 패키지]에서 다음 그림과 같이 변수 값을 설정 합니다. 그리고 [패키지 실행 태스크]를 드래그 앤 드롭으로 끌어다 놓습니다.

 

[패키지 실행 태스크] 편집기에서 다음과 같이 설정 합니다.

 

 

패키지를 수행하면 부모 패키지가 자식 패키지를 호출하면서 부모 패키지의 변수 값을 자식 패키지에게 할당 함으로써 자식 패키지는 부모 패키지의 변수를 받아 출력된 것을 확인 할 수 있습니다.

 

 

 

부모 패키지에서 자식 패키지를 호출 하는 방식은 복잡한 처리 프로세스를 개발하거나 관리 할 때 유용하게 사용합니다.

 

복잡한 프로세스에서 연관된 작업을 각각의 개별 패키지로 분리하여 각 패키지를 관리하는 부모패키지를 만들어 운용한다면 효율적으로 관리 할 수 있을 듯 합니다

XML 태스크 – XML 비교, 병합, 출력 등 다양한 작업을 하자

   

이번 시간에는 [XML 태스크] 에 대해서 알아 보도록 하겠습니다.

   

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

   

[XML 태스크]를 이용한 작업

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

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

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

XML 파일들에 대한 비교 및 XML Diffgram 파일에 eogked 차이점 기록 작업.

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

   

[BIDS]를 실행하여 [Integration Services 프로젝트]를 생성 합니다.

 

 

   

[제어 흐름] 탭에서 [XML 태스크] 작업을 드래그앤 드래그로 끌어다 놓습니다.

 

 

   

[XML 태스크]작업에서 마우스 오른쪽을 클릭하여 [편집]을 선택 합니다.

 

 

   

[XML]태스크 편집기가 나타납니다.

 

 

   

[두 번째 피연산자]

l  SecondOperandType – XQuery를 지정. 변수, 직적 입력, 파일 연결로 지정할 수 있음.

 

 

l  SecondOperandType – XML 원본 입력

 

   

   

[비교 옵션]

 

l  Diff Algorithm – 문서를 비교할 때 사용할 알고리즘을 지정.

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

Ø  빠름 – 빠르지만 정확도가 낮은 비교 알고리즘을 사용

Ø  정확 – 정확한 비교 알고리즘 사용

   

 

 

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

Ø  IgnoreXMLDeclaration – XML 선언을 비교할지를 설정.

Ø  IgnoreDTD – DTD(문서 유형 정의)를 무시할지를 설정.

Ø  IgnoreWhiteSpaces – 공백을 비교할지 설정.

Ø  IgnoreNameSpaces – 각 요소의 네임스페이스 URI(Uniform Resource Identifier)와 해당 요소의 특성 이름을 비교할지를 설정.

Ø  IgnoreProcessingInstructions – 처리 명령을 비교할지를 설정.

Ø  IgnoreOrderOfChildElements – 자식 요소의 순서를 비교할지를 설정.

Ø  IgnoreComments – 주석 노드를 비교할지를 설정.

Ø  IgnorePrefixes – 요소와 특성 이름의 접두사를 비교할지를 설정.

   

   

l  FailOnDifference – 두 문서간 차이점이 존재하는 경우 작업을 실패로 처리할지를 설정.

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

l  DiffGramSave – SaveDiffGram 속성이 Ture인 경우 DiffGram 문서를 저장할 위치를 지정.

   

   

   

[입력]

 

l  OperationType – XML 작업의 유형을 설정.

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

Ø  XLST – 원본 XML문서를 XSL Style sheet에 지정된 형태로 출력.

Ø  XPATH - XAPTH라는 XML 데이터 조회 문을 이용하여 원본 XML문서에 있는 데이터를 조회.

Ø  Merge – 두 개의 XML 문서를 병합.

Ø  Diff – 두 개의 XML 문서를 비교.

Ø  Patch – 비교(Diff)작업에서 두 문서간의 비교 결과인 XDL Diffgram 출력을 생성한 경우 이를 이용하여 원본 문서에 변경작업을 수행.

l  SourceType – 원본 XML의 입력 형태를 지정. 변수, 직접 입력, 파일 연결로 설정 할 수 있음.

   

   

   

[출력]

 

l  SaveOperationResult – 결과를 지정할 것인지를 설정. Ture로 설정할 경우 OperationResult 속성에서 결과 파일 형태를 지정.

 

웹 서비스 작업

 

안녕하세요 강성욱 입니다.(www.sqltag.org, www.sqler.com, http://blog.naver.com/jevida)

 

이번 시간에는 [웹 서비스]작업에 대해서 알아 보도록 하겠습니다.

 

웹 서비스 작업은 SSIS 2005부터 추가된 작업으로 웹 메서드를 이용하여 웹 서비스에 있는 정보를 읽어오는 기능을 합니다.

 

예를 들면 웹의 도서목록 서비스나 환율, 주식정보 등을 읽어 올 수 있습니다.

 

[BIDS]를 실행하여 [Integration Services 프로젝트]를 생성 합니다.

 

[제어 흐름] 탭에서 [웹 서비스 태스크] 작업을 드래그 앤 드롭으로 끌어다 놓습니다.

 

[웹 서비스 작업]에서 마우스 오른쪽 버튼을 클릭하여 [편집]을 선택 합니다.

 

[웹 서비스 태스크 편집기]가 나타 납니다.

[일반] 탭에서는 웹서비스를 작업을 수행하기 위해서는 연결 관리자의 HTTP 설정이나 작업의 이름 설정 등 환경을 설정 할 수 있습니다.

연결

  • HttpConnection – 웹 서비스 작업을 수행하기 위한 HTTP 연결을 지정.
    • 서버 URL정보나 프록시 설정 정보, 웹 서버 액세스를 위한 자격 증명 및 제한시간 설정등을 설정.

 

  • WSDLFile – WSDL(Web Services Description Language)는 웹 서비스에서 제공하는 메서드, 메서드에 필요한 입력 매개 변수, 메서드가 반환하는 응답 및 웹서비스와 통신하는 방법 등이 나열되어 있는 문서 입니다. WSDL이 있는 경우에는 해당 파일을 지정할 수 있으며 파일이 저장될 경로만 지정한 후에는 아래 이 있는 WSDL 다운로드 버튼을 눌러 다운로드 받을 수도 있습니다.
  • OverwriteWSDL 파일을 다운로드 할 때 기존 파일이 있으면 덮어 쓸지 설정.

일반

  • Name – 작업 이름을 지정.
  • Description – 작업에 대한 설명을 지정.

 

 

[입력]

입력

  • Service – 목록에서 웹 메서드를 실행하는데 사용할 웹 서비스를 지정.
  • Method – 목록에서 실행할 작업에 사용할 웹 메서드를 지정.
  • WebMethodDocumentation – 웹 메서드에 대한 설명을 입력하거나 찾아보기(…) 버튼을 클릭하여 웹 메서드 설명서 대화 상자에 설명을 입력.
    • 이름 – 웹 메서드에 대한 입력의 이름
    • 유형 – 입력 데이터의 유형을 나타 냅니다.
    • 값 – 입력되는 값을 설정 합니다.
    • 변수 – 입력되는 값이 변수에 저장된 경우, 변수 체크박스를 선택한 후 값에서 해당 변수를 지정 합니다.

 

[출력]

출력

  • OutputType – 출력 결과를 저장할 형태를 지정. 파일 연결을 사용할 경우에는 File속성에서 파일 연결을 지정하며 변수를 사용할 경우에는 Variable 속성에서 저장 할 변수를 지정 합니다.

메시지 큐

 

안녕하세요 강성욱 입니다.(www.sqltag.org, www.sqler.com, http://blog.naver.com/jevida)

 

이번 시간에는 [메시지 큐]에 대해서 알아 보도록 하겠습니다.

 

[메시지 큐 작업]은 MSMQ(Microsoft Message Queuing)서비스를 이용하여 메시지를 주고 받을 수 있는 기능 입니다. 메시지 큐를 이용하면 비 동기적으로 서로 다른 작업 간에 메시지 또는 파일 등을 주고 받을 수 있습니다.

 

메시지를 보내거나 받을 때 메시지 큐 작업은 데이터 파일, 문자열, 변수에 대한 문자열 메시지, 변수 중 하나의 유형을 사용합니다.

변수에 대한 문자열 메시지는 메시지를 받을 때만 사용할 수 있습니다.

 

메시지 큐 작업을 수행하기 위해서는 Integration Services 가 설치되어 있어야 합니다.

 

[BIDS]를 실행하여 [Integration Services프로젝트]를 생성 합니다.

 

[제어 흐름] 탭에서 [메시지 큐] 작업을 드래그 앤 드롭으로 끌어다 놓습니다.

 

[메시지 큐 태스크]에서 마우스 오른쪽 버튼을 클릭하여 [편집]을 선택 합니다.

 

[메시지 큐 태스크 편집기]가 나타납니다.

 

[일반] 탭에서는 작업의 이름 및 커넥션 연결 메시지 등을 지정 할 수 있습니다.

  • Name – 작업의 이름을 지정.
  • Description – 작업의 설명을 지정.
  • Use2000Format – MSMQ 2000 형식을 사용하지 설정
  • MSMQConnection – 메시지 큐 작업을 위한 MSMQ 연결 지정.

  • Message – 메시지 큐 작업에서 메시지를 보내거나 받을지를 지정.

 

[보내기]

  • UseEncryption – 메시지를 암호화 하여 보낼지 설정.
  • EncryptionAlgorithm – 암호화하여 보낼 경우 암호화 할 알고리즘 지정.
  • MessageType – 보낼 메시지의 유형을 설정.
    • 데이터 파일 메시지 – 파일 형태의 메시지 보냄.
    • 변수 메시지 – 변수에 저장된 메시지를 보냄.
    • 문자열 메시지 – 사용자가 입력한 문자열을 메시지로 보냄.

 

 

[받기]

  • RemoveFromMessageQueue – 메시지를 받은 후 큐에서 제거할지를 설정.
  • ErrorIfMessageTimeOut – 메시지 제한 시간이 초과할 경우 작업을 실패로 처리할지를 설정.
  • TimeoutAfter – ErrorIfMessageTimeout이 True인경우 Timeout 시간(초)을 지정.
  • MessageType – 받을 메시지 유형을 지정.
    • 데이터 파일 메시지 – 메시지가 파일 형태로 저장.
    • 변수 메시지 – 메시지가 변수에 저장.
    • 문자열 메시지 – 메시지 큐에서 받은 메시지가 StringMessage에 지정한 문자열과 동일한지 비교.
    • 변수에 대한 문자열 메시지 – 문자열 메시지로 전송되는 내용을 변수에 저장.
  • SaveFileAs – MessageType이 데이터 파일 메시지인 경우 나타나며 메시를 저장할 파일 위치를 지정.
  • OverWrite – MessageType이 데이터 파일 메시지인 경우 나타나며 저장할 위치에 동일한 파일이 있는 경우 덮어쓸지를 설정.
  • Filter – 메시지에 대한 필터를 사용할지를 설정. 특정 패키지로부터 온 메시지만 받도록 할 경우 이 속성값을 Ture로 지정하고 IdentifierReadOnly의 값을 지정.
  • Compare – MessageType이 문자열 메시지 또는 변수에 대한 문자열 메시지 인 경우 나타나며 없음 외의 경우 CompareString에 지정된 값과 메시지의 값에 대한 비교 작업을 수행.

 

 

[식] – 다양한 형식의 식을 설정 합니다.

 

 

메일 보내기 – 데이터 처리 결과를 메일로 전송하자

 

안녕하세요 강성욱 입니다.(www.sqltag.org, www.sqler.com, http://blog.naver.com)

이번 시간에는 [메일 보내기 작업]에 대해서 알아 보도록 하겠습니다.

 

메일 보내기 작업은 SMTP를 이용하여 메일을 보낼 수 있는 작업 개체 입니다.

메일 보내기 태스크]는 데이터 처리 후 생성 파일 또는 보고서 등을 메일로 보낼 수 있습니다.

 

[BIDS]를 실행하여 [Integration Services 프로젝트]를 생성 합니다.

 

[제어 흐름] 탭에서 [메일 보내기 태스크]를 드래그 앤 드롭으로 끌어다 놓습니다.

 

[메일 보내기 태스크]에서 마우스 오른쪽을 클릭하여 [편집]을 선택 합니다.

 

[메일 보내기 태스크 편집기]가 나타납니다.

[일반] 탭에서는 태스크의 이름과 설명을 설정 할 수 있습니다.

 

[메일] 탭에서는 메일 전송을 위한 설정을 합니다.

  • Smtp Connection – SMTP 연결을 지정.

 

  • From – 메일을 보내는 사람 주소
  • To – 메일을 받는 사람 주소. 여러 명일 경우 세미콜론( ; )으로 구분
  • Cc – 참조 메일 주소
  • BCc – 숨은 참조 메일 주소.
  • Subject – 메일 제목
  • MessageSourceType - 메일 본문 저장 형태 지정
    • 직접 입력 – 직접 텍스트 형식으로 입력
    • 파일 연결 – 텍스트 형식으로 저장된 파일을 이용
    • 변수 – 본문 내용이 저장된 변수를 지정

 

  • MessageSource – 메일 본문 내용
  • Priority – 메시지의 우선 순위

 

  • Attachments – 첨부 파일

 

[식] 탭에서는 여러가지 식을 설정 할 수 있습니다.

예를 들어 보고서_20120622.txt 등과 같이 동적인 메일 제목이나 첨부 파일등은 [식] 탭에서 구현 할 수 있습니다.

 

메일 보내기 기능을 잘 활용하면 일일 보고서 및 데이터 처리 결과 등을 직접 사용자가 접속하지 않고도 메일 등을 간단히 보고서를 받아 볼 수 있습니다.

 

'SQL Server > SSIS 강좌' 카테고리의 다른 글

웹 서비스 작업  (0) 2015.07.16
메시지 큐  (0) 2015.07.16
대량 삽입 작업  (0) 2015.07.16
이벤트 처리 및 오류 출력 – 다양한 이벤트로 오류를 출력하자  (0) 2015.07.16
데이터 흐름 경로  (0) 2015.07.16

대량 삽입 작업

 

안녕하세요 강성욱 입니다.(www.sqltagl.org, www.sqler.com, http://blog.naver.com/jevida)

 

이번 시간에는 [대량 삽입 작업]에 대해서 알아 보도록 하겠습니다.

 

대량 삽입작업은 SQL Server의 [BULK INSERT], [BCP.EXE]와 같은 텍스트 형식의 데이터 파일을 SQL Server의 테이블로 빠르게 입력할 때 이용되는 개체 입니다.

대량 삽입 작업은 [데이터 흐름 엔진]을 사용하지 않음으로 단순희 원본 텍스트 파일에서 테이블로 로딩만 가능하며 가공이나 집계, 편집, 변환 기능을 구현할 수가 없습니다.

 

[BIDS]를 실행하여 [Integration Services 프로젝트]를 생성 합니다.

 

[제어 흐름] 탭에서 [대량 삽입 태스크]를 드래그 앤 드롭으로 추가 합니다.

 

[대량 삽입 태스크]에서 마우스 오른쪽을 클릭하여 [편집]을 선택 합니다.

 

 

[일반] 탭에서는 태스크의 이름과 설명을 입력 합니다.

 

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

대상 연결

  • Connection – 원본 텍스트 파일의 데이터를 저장할 데이터베이스 연결을 지정
  • DestinationTable – 원본 텍스트 파일을 저장할 테이블을 지정

서식

  • Format – 대량 삽입 작업을 위한 서식의 형태를 선택.
    • 파일 사용 – 서식이 지정된 파일을 사용 합니다. (BULK INSERT 명령의 WITH (FORMATFILE) 옵션과 동일)
    • 지정 – 직접 RowDelimiter 및 ColumnDelimiter의 속성을 지정.
  • RowDelimeter – 행 구분자를 설정.
  • ColumnDelimiter – 열 구분자를 설정.

원본 연결

  • 파일 – 원본으로 사용될 텍스트를 지정.

 

[옵션] 탭에서는 CodePage나 FileType 등과 같이 고급 옵션을 설정 할 수 있습니다.

고급 옵션

  • CodePage
    • ACP – char, varchar 또는 text 데이터 형식의 열은 ANSI/Microsoft Windows 코드 페이지(ISO 1252)에서 SQL Server 코드 페이지로 변환.
    • OEM – char, varchar 또는 text 데이터 형식의 열은 시스템 OEM 코드 페이지에서 SQL Server 코드 페이지로 변환됩니다.
    • RAW – 다른 코드 페이지로의 변호나이 이루어지지 않는 가장 빠른 옵션
    • 기타 코드 페이지 – 특정 코드(예: 949, 1252)로 변환.
  • DataFileType
    • Char – 일반 문자 형식
    • Native – 네이티브(데이터베이스) 데이터 형식. BCP 유틸리티로 SQL Server에서 데이터를 대량 로드하여 네이티브 데이터 파일을 만들 수 있습니다. 네이티브 형식은 char형식보다 성능이 좋음.
    • Widechar – 유니코드 문자 형식
    • Widenative – 데이터가 유니코드로 저장되는 네이티브(데이터베이스) 형식. Char, varchar alc Text열은 제외. 데이터 파일에 ANSI 확장 문자가 포함되어 있으면 widenative로 지정해야 한다.
  • BatchSize – 일괄 처리의 행 수를 지정합니다. BatchSize를 0으로 설정하면 데이터가 단일 일괄 처리로 로드.
  • LastRow – 삽입할 마지막 행의 번호를 지정. 기본값은 0이며 이는 지정한 데이터 파일의 마지막 행을 가리킵니다.
  • FirstRow – 삽입할 첫 번째 행의 번호를 지정. 기본ㄱ밧은 1이며 이는 지정한 데이터 파일의 첫 번째 행입니다.

옵션

  • Option
    • 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 작업에 대해 정의되어 있는 경우에는 모든 입력 데이터에 대해 발생.
  • SorteData – 데이터 파일의 데이터 정렬 방법을 지정. 로드된 데이터가 테이블의 클러스터형 인덱스와 동일한 순서로 정렬되어 있으면 대량 삽입 작업의 성능이 향상 됩니다. 데이터 파일을 다른 순서로 정렬하거나 테이블에 클러스터형 인덱스가 없으면 ORDER 절이 무시 됩니다. SortedData 속성에서 지정된 열 이름은 대상 테이블의 열 이어야 합니다.
  • MaxErrors – 허용되는 최대 오류 수 지정. 대량 삽입 작업으로 가져올 수 없는 각 행은 무시되고 하나의 오류로 계산됨. 기본값은 0.

 

[식] 탭에서는 다양한 식을 정의 할 수 있습니다.

 

[편집]이 완료 되었으면 패키지를 실행 합니다.

늘 그러듯!

녹색 : 정상 실행

빨간색 : 오류 발생

 

패키지 작업이 완료 되었으면 SSMS를 실행하여 정상적으로 BLUK INSERT 가 되었는지 확인 합니다.

 

단순히 데이터를 로딩하는 작업이라면 [대량 삽입 작업]이 매우 효과적 입니다.

 

이벤트 처리 및 오류 출력 – 다양한 이벤트로 오류를 출력하자

 

안녕하세요 강서욱 입니다.(www.sqltag.org, www.sqler.com, http://blog.naver.com/jevida)

이번 시간에는 이벤트 처리 및 오류 출력에 대해서 알아 보도록 하겠습니다.

 

SSIS에서는 패키지 및 패키지 내의 개별 작업 개체들이 실행 될 때 이벤트가 발생 합니다. 패키지에서 지정한 오류가 발생하면 OnError 이벤트가 발생되며 오류와 관련된 시스템 변수에 저장된 정보들을 이용하여 오류처리 작업을 수행 할 수 있습니다.

 

[이벤트 처리기] 탭에서 이벤트에 대한 처리작업을 수행 할 수 있습니다. 왼쪽의 실행 파일 부분에서는 이벤트 처리기가 작동될 범위를 지정하며 오른쪽의 이벤트 처리기에서는 처리할 이벤트를 선택 할 수 있습니다.

 

종류

이벤트

OnError

오류가 발생할 때 실행 개체에 의해 발생.

OnExecStatusChanged

실행 상태가 변경될 때 실행 개체에 의해 발생.

OnInformation

정보 보고를 위한 실행 개체의 유효성 검사 및 실행 중에 발생. 오류 또는 경고를 제외한 정보만 포함.

OnPostExecute

실행을 마친 바로 다음 실행 개체에 의해 발생.

OnPostValidate

유효성 검사가 완료될 때 실행 개체에 의해 발생

OnPreExecute

실행되기 바로 전에 실행 개체에 의해 발생

OnPreValidate

유효성 검사가 시작될 때 실행 개체에 의해 발생

OnProgress

실행 개체의 진행 상태를 측정할 수 있는 경우 실행 개체에 의해 발생.

OnQueryCancle

실행 중지 시기를 결정하기 위해 실행 개체에 의해 발생

OnTaskFailed

작업이 실패할 때 해당 작업에 의해 발생

OnVariableValueChanged

변수 값이 변경될 때 실행 개체에 의해 발생. 변수가 정의되는 실행 개체에 의해 발생. 변수에 대한 RaiseChangeEvent 속성을 False로 설정한 경우에는 이벤트가 발생하지 않음.

OnWarning

경고가 발생할 때 실행 개체에 의해 발생.

 

이벤트 처리 수준은 계층으로 관리 됩니다. Package 수준으로 OnError 이벤트 처리기를 설정하였다면 이 이벤트 처리기는 패키지에서 발생하는 모든 이벤트 오류에 대해 수행 합니다.

 

이벤트 처리기 작업 영역에서는 제어 흐름 영역이나 데이터 흐름 영역보다 더 많은 시스템 변수가 있습니다. 시스템과 관련된 기본적인 정보 외에도 해당 이벤트 정보를 저장하기 위한 변수들이 추가되어 있습니다. 예를 들어 OnError 이벤트 처리기에는 어떤 작업 개체 ID에서 오류가 발생되었으며([시스템::TaskID]), 오류 코든는 무엇이며([시스템::ErrorCode]), 오류 처리기가 시작된 시간이 언제인지([시스템::EventHandelerStartTime])등의 정보를 가지고 있는 변수들이 있습니다.

 

[오류 출력 세가지]

 

  1. 제어 흐름 영역의 각 작업들이 실패로 처리될 경우에 대한 설정으로 선행 제약 조건을 실패로 설정한 후 작업이 실패가 되었을 때 처리할 다음 작업과 연결시키는 방식으로 두 작업을 연결하는 연결선(선행 제약 조건)은 적색으로 표시 됩니다.

    흐름선에서 마우스 오른쪽 클릭하여 [실패]를 선택 합니다.

     

     

  2. 이벤트 처리기의 OnError 이벤트를 사용하는 방식으로 패키지 내의 작업개체에서 오류가 발생하면 OnError 이벤트가 발생하며 이벤트 처리기의 OnError 처리 영역에 지정한 작업들이 수행되도록 구성하는 방식 입니다.

 

  1. 데이터 흐름 영역 내에서 원본 변환, 대상 등에서 오류를 출력하는 방식 입니다.

    오류 출력은 데이터 흐름 영역에서만 설정할 수 있습니다.

     

[데이터 흐름 작업 수행 시 발생 할 수 있는 오류]

  • 데이터 원본 오류 : 연결 관리자에서 지정한 연결 방식을 이용하여 DataReader 원본, OLE DB 원본, 플랫 파일 원본 등 원본 개체를 이용하여 읽어 올 때 연결에서 정의된 열의 정보가 실제 데이터와 다른 경우 오류가 발생.
  • 데이터 변환 오류 : 병합 변환이나 데이터 변환, 조회, 파생 열 등과 같은 변환 작업을 수행할 때 발생할 수 DT는 오류.
  • 데이터 대상 오류 : 데이터 원본 또는 변환 개체에서 대상으로 지정된 데이터 연결에 저장할 때 발생할 수 있는 오류.

     

데이터 흐름 영역의 각 개체에서 오류 출력을 구성하는 방식은 모두 동일 합니다. 원본이나 대상, 또는 편집기에 있는 오류 출력 탭을 이용하거나 각 개체를 적색 선으로 연결하면 오류 출력을 구성할 수 있는 설정 창이 나타납니다.

 

적색선을 연결하면 다음과 같은 오류 출력 창이 나타 납니다.

 

오류 출력은 다섯 개의 열로 구성되어 있습니다.

입력 또는 출력은 현재 오류 구성의 작업 이름에 대한 입력 또는 출력을 나타냅니다. 오류 출력 구성은 각 데이터의 각 열 별로 설정을 할 수 있습니다. 중요하지 않는 열에서 오류가 발생시 [오류 무시]를 설정하면 오류가 발생하더라도 처리 작업을 계속 진행 할 수 있습니다.

데이터 처리 중 [오류]와 [잘림]을 구분하여 처리 합니다. 데이터 오류에 대한 처리는 [오류 열]에서 설정하며 데이터 잘림에 대한 처리 방식은 [잘림 열]에서 설정 합니다.

  • 오류 무시 : 오류 또는 데이터 잘림이 발생하더라도 이를 무시하고 계속 작업을 진행.
  • 행 리디렉션 : 오류 또는 데이터 잘림 현상이 발생할 경우 해당 오류 데이터를 별도의 경로(적색 선)로 출력. 행 리디렉션으로 설정한 경우 반드시 적색 선을 다른 개체와 연결시켜야 합니다.
  • 구성 요소 실패 : 오류 또는 데이터 잘림 현상이 발생할 경우 작업을 실패로 처리.

 

설정해야 할 열이 여러 개이며 모두 동일한 설정을 하고자 할 경우에는 여러 열을 선택한 후 [이 값을 선택한 셀에 설정(S)]기능을 이용하여 한번에 설정 할 수 있습니다.

 

행 리디렉션 방식으로 오류가 처리될 때에는 오류 코드(ErrorCode_와 오류가 발생된 열의 번호(ErrorColumn)정보가 추가되어 출력됩니다.

 

+ Recent posts