구성 기능을 이용하여 패키지 연결 정보 관리하기
구성 기능을 이용하여 패키지 연결 정보 관리하기
한대성
![]() |
전에 질문드리고 답변 내용보고 나름 구성파일도 건드려보고 XML도 만들어보고 했는데 답이 잘 안나오네요 ㅡㅜ 연결관리자에 등록된 서버가 변경된경우 작업한 모든 패키지를 열어서 수정해야하는데 이걸 깔끔하게 한방에 처리하고 싶습니다. >.,< |
여러 패키지의 연결 정보를 하나로 관리하는 방법에는 몇 가지 있습니다. 이 중에서 패키지 구성(Configuration) 기능을 이용한 방법을 설명 드리겠습니다.
패키지 구성 기능은 패키지 내에 있는 여러 개체들, 즉 작업 태스크, 변수, 연결 정보 등의 속성을 설정해 주는 기능입니다. 이를 이용하여 연결 관리자에 있는 연결 정보만을 저장하는 파일로 만들고 이를 다른 패키지에서 가져다 쓰는 형태로 설정할 수 있습니다.
OLE DB 연결이 포함된 간단한 패키지를 하나 만듭시다. 이 연결의 이름을 DBConnA라고 변경합시다. 본 예제에서는 DBConnA라는 연결은 DSHAN이라는 서버의 tempdb를 가리키도록 설정해 놨습니다.
패키지에 dbname 이라는 string 변수를 하나 추가하고, SQL 실행 작업을 하나 추가한 후
SELECT db_name() as DBName
이라는 쿼리를 사용하여 현재의 데이터베이스 명을 출력하도록 설정합니다.
결과 집합 탭에서 결과를 변수에 저장하도록 설정합니다.
스크립트 작업을 추가한 후, ReadOnlyVariables 속성에 dbname 변수를 추가하고, 스크립트 편집기에서 다음과 같은 간단한 스크립트를 입력하여 dbconn 변수의 값을 출력하도록 설정합니다.
MsgBox(Dts.Variables("dbname").Value.ToString)
이제 구성을 설정해 봅시다. 상단 메뉴에서 SSIS(S) à 패키지 구성(C)를 선택해서 패키지 구성 도우미를 열고, 패키지 구성 설정(E) 옵션을 체크해서 패키지가 구성 기능을 사용하도록 설정합니다.
추가를 눌러서 패키지 구성 마법사를 실행시킨 후, 다음과 같이 구성 유형을 XML 구성 파일로 설정하고 적절한 구성 파일, 즉 연결 정보가 저장될 파일을 설정합니다.
현재는 이 파일이 없기 때문에 특별한 메시지 없이 이 파일에 담길 내용을 선택하는 창으로 넘어갑니다. 여러 속성들 중에서 연결 관리자 부분에 있는 DBCOnnA 연결에 대한 ConnectionString 속성을 선택하겠습니다.
다음을 누른 후, 적절한 구성 이름을 정해주면 설정이 끝입니다.
자, 그럼 패키지를 실행해 볼까요?
에러가 날 것입니다~! (만약 에러가 발생하지 않는다면, 연결 관리자에 있는 DB 연결이 윈도우 인증을 하도록 설정한 경우일 것입니다.)
왜 에러가 발생할까요? 구성을 설정하기 전에는 잘 되던 놈이. ㅡ,.ㅡ
패키지가 구성을 사용하도록 설정했다면, 패키지가 실행될 때 구성이 저장된 파일이나 테이블 등에서 지정된 속성 값을 읽어옵니다. 본 예제에서도 구성 파일을 만들었기 때문에 DBConnA의 연결 정보를 구성 파일인 D:\ConnectionString.dtsConfig 라는 파일에서 읽어오겠지요.
그런데 뭐가 문제일까요? 이 구성 파일을 열어봅시다. XML 형태로 저장하도록 설정되었기 때문에 다음과 같은 형태일 것입니다.
주저리 긴 내용인데, 줄 맞춰서 보면 위와 같이 연결 정보가 포함되어 있습니다. 그런데? Password 속성이 빠졌네요. 보안 때문에 자동으로 Password 정보는 빠지게 됩니다. 그래서 에러가 발생된 것이지요.
그래서 패키지의 에러 메시지도 다음과 같이 나타난 것입니다.
[연결 관리자 "DBConnA"] 오류: SSIS 오류 코드 DTS_E_OLEDBERROR. OLE DB 오류가 발생했습니다. 오류 코드: 0x80040E4D. OLE DB 레코드를 사용할 수 있습니다. 원본: "Microsoft SQL Native Client" Hresult: 0x80040E4D 설명: "사용자 'sa'이(가) 로그인하지 못했습니다.". |
자, 그럼 이 연결 정보에 Password = xxxxxx 구문을 추가한 후에 다시 패키지를 실행해 봅시다. 성공적으로 수행될 것입니다.
여기까지가 구성 파일을 만들고 이용하는 부분입니다.
이제 이 구성 파일을 여러 다른 패키지에서 사용하도록 설정해 봅시다.
다른 패키지에서 이 구성 파일, 정확히는 연결 정보가 포함된 구성 파일을 공유해서 사용하려면 패키지들의 연결 정보 이름이 동일해야 합니다. (@.@) 간단히 말해 다른 패키지에서도 DBConnA라는 OLE DB 연결이 있어야 한다는 것이지요. 구성 파일에서 연결 정보를 내려 받아서 적용할 때 이름으로 찾아가기 때문에 반드시 이름을 일치시켜줘야 한다는 말입니다.
다른 패키지를 하나 추가한 후, 간단히 구성해 봅시다. 앞의 패키지와 동일한 모습으로 otherpackage.dtsx 라는 이름으로 패키지를 만들었습니다. 자, 이제 이 패키지에서도 기존에 있는 구성 파일을 이용하도록 설정하겠습니다. 상단 메뉴의 SSIS à 패키지 구성 메뉴를 선택한 후, 앞에서와 같이 XML 구성 파일을 사용하도록 설정합니다. 이 때, 구성 파일 이름은 이미 만들어진 구성 파일을 선택합니다.
다음을 누르면 아래와 같은 경고 메시지가 나타납니다.
이 때, 기존 파일 다시 사용(R)을 선택합니다. 덮어쓰기를 선택했다간 기존 내용을 다 날리게 됩니다.
이미 구성 파일에는 password 부분이 추가되어 있기 때문에 패키지를 돌리더라도 성공적으로 실행됩니다.
테스트를 해 봅시다. 간단히, 데이터베이스를 tempdb에서 AdventureWorks로 바꾸도록 하겠습니다. 구성 파일의 연결 문자열 중 Initial Catalog=tempdb 부분을 Initial Catalog=AdventureWorks로만 바꾸면 되겠지요.
이렇게 한 다음, 앞서 만든 패키지와 새로 만든 패키지를 각각 돌려봅시다.
둘 다 바뀐 것을 확인할 수 있습니다.
참고로, 만약 구성 파일을 만들었다면 이 파일의 속성을 읽기 전용으로 설정할 것을 권고합니다. 패키지 구성 설정을 하다 보면 실수로 파일 덮어쓰기를 할 경우를 대비해서이지요.(^^)
보안이 걱정된다면, 이 구성 파일에 대한 보안 설정에서 읽을 수 있는 사용 권한을 패키지를 실행시키는 사용자(SQL Agent 서비스 시작 계정)과 패키지를 만드는 사용자(현재 패키지를 만들 때 로그인한 사용자) 정도만으로 설정하면 되겠지요.
그럼 도움이 되셨기를~^^