[개요]

한 장비에서 SQL Agent를 통해 여러 SSIS 패키지를 수행하는 경우 각 SSIS 패키지별로 서로 다른 Windows 계정을 사용하여 SSIS 패키지를 수행해야 할 때가 있습니다. 예를 들어 [그림1]과 같이 각 SSIS 패키지 내에서 서로 다른 Windows 계정을 이용하여 대상 서버에 인증을 해야 하는 경우입니다. SSIS 패키지에서 이런 Windows 계정을 통한 인증은 SQL Server로 로그인, 특정 폴더나 파일 접근과 같은 작업에 필요합니다. 기본적으로 SQL Agent를 이용하여 배치 작업을 수행시 SQL Agent 시작 계정을 인증에 사용하므로 이런 경우 여러 계정을 지정할 수 없기 때문에 권한 문제가 발생하게 됩니다. 때문에 이런 경우에는 "자격 증명"과 "프록시"를 사용하여 SQL Agent에서 SSIS 패키지 작업별로 인증에 사용할 Windows 계정을 지정할 수 있습니다.

[그림 1 – 패키지별로 서로 다른 계정을 이용하여 인증]

 

 

[SQL Agent에서 특정 Windows 계정으로 SSIS 패키지 실행하기]

  1. 인증에 사용할 로컬 Windows 계정으로 Login1, Login2이 있다고 가정합니다.
  2. 먼저 자격증명을 생성하도록 하겠습니다. SSMS(SQL Server Management Studio)를 실행한 다음 "개체 탐색기 – 보안 – 자격증명 – 새 자격 증명"을 실행합니다.
  3. 다음과 같이 정보를 채워 넣습니다. 이 단계는 Login1이라는 Windows 계정을 가지고 myCredential1이라는 자격 증명을 생성하게 됩니다.
    - 자격 증명 이름 : myCredential1
    - ID : Login1
    - 암호 : Login1의 암호
  4. 확인을 눌러 자격증명 생성을 완료한 다음 동일한 방식으로 Login2를 이용하여 myCredential2를 생성합니다. 이제 SSIS 패키지 수행할 때 사용할 자격 증명 준비가 완료 되었습니다.
  5. 이번에는 프록시를 생성하도록 하겠습니다. SSMS(SQL Server Management Studio)를 실행한 다음 "개체 탐색기 – SQL Server 에이전트 – 프록시 – 새 프록시"를 실행합니다.
  6. 다음과 같이 정보를 채워 넣습니다. 이 단계는 myCredential1 자격 증명을 이용해 proxyLogin1이라는 프록시를 생성합니다.
    - 프록시 이름 : proxyLogin1
    - 자격 증명 이름 : myCredential1
    - SQL Server Integration Services 패키지 체크
  7. 생성된 프록시는 "SSIS 패키지 실행"에서 확인할 수 있으며, myCredential2 자격 증명을 이용하여 proxyLogin2를 생성합니다. 이제 작업에 사용할 프록시가 준비 되었습니다.
  8. "SQL Server작업 – 작업 – 새 작업"을 실행합니다.
  9. 새 작업 단계에서 유형을 "SQL Server Integration Services 패키지"를 선택한 다음 "다음 계정으로 실행" 영역을 보면 생성했던 proxyLogin1, proxyLogin2를 확인할 수 있습니다. 여기서 필요한 프록시를 선택하면 프록시와 연결된 자격 증명을 통해 해당 Windows 계정의 인증을 사용해 SSIS 패키지를 실행할 수 있습니다.
  10. 다음 계정으로 실행(R)에서 proxyLogin1을 선택 하여 작업을 생성했을 경우 작업 수행 시 작업의 기록 보기에서 다음과 같은 내용을 확인할 수 있습니다.

 

 

[참고자료]
자격 증명(데이터베이스 엔진)
http://msdn.microsoft.com/ko-kr/library/ms161950.aspx
SQL Server 에이전트 프록시 만들기
http://msdn.microsoft.com/ko-kr/library/ms189064.aspx
작업 구현
http://msdn.microsoft.com/ko-kr/library/ms187880.aspx

 

AND

Windows 2008 R2 Hyper-V에서 클러스터 테스트 환경 구성

하만철 (feisia@naver.com)

 

0단계. 구성 계획
AD, Cluster Node 1, 2 이렇게 3개의 VM을 생성하여 테스트 환경 구성

VM Name

Hostname

IP

Win2K8R2-AD

Win2K8R2-AD

192.168.1.50

Win2K8R2-SQL2K8R2-Node1

Win2K8R2-Node1

192.168.1.1

Win2K8R2-SQL2K8R2-Node2

Win2K8R2-Node2

192.168.1.2

 

 

1단계. Hyper-V 준비

  1. 당근 Windows 2008 Server가 필요합니다. Hyper-V는 Windows 2008부터 사용 가능합니다.
  2. 관리도구 – 서버 관리 실행
  3. 서버 관리에서 역할 – 역할 추가 실행
  4. Hyper-V 역할에 체크한 다음 "설치"를 수행
  5. 설치가 정상적으로 완료 되시면 다음과 같이 역할에서 Hyper-V를 확인할 수 있습니다.
  6. 왼쪽의 역할 – Hyper-V – Hyper-V Manager – 장비명 – 마우스 우클릭 – New – Virtual Machine을 선택
  7. Virtual Machine 명을 입력. 저는 Win2K8R2-AD라고 입력 했습니다.
  8. 사용할 메모리는 디폴트인 512MB로 하였습니다.
  9. 네트워크은 일단 Not Connected로 선택합니다. 일단 윈도 설치 후 다시 조정 가능합니다.
  10. 이미지 파일의 이름과 위치, 용량을 정합니다. 용량의 경우 127GB로 지정 하더라도 처음부터 127GB를 할당하는게 아니라 VM이 데이터를 쓰는만큼 순차적으로 증가하게 되므로 넉넉하게 잡았습니다.
  11. OS 설치는 좀이따 하도록 하고 넘어갑니다.
  12. Finish~ 를 선택하면 VM이 하나 생성되게 됩니다. 현재는 꺼져 있는 상태이네요. ㅎㅎ~
  13. 이제 Hyper-V 이미지 준비는 끝이 났습니다. 앞으로 남은건 여기에 OS를 설치하고, 이걸 통해 나머지 2개의 VM을 생성해 클러스터를 구성하는 것입니다.

 

2단계. VM에 OS설치

  1. Virtual Machine 이름에서 마우스 오른쪽 버튼을 클릭해 "Settings"를 선택합니다.
  2. 왼쪽 메뉴에서 DVD Drive를 선택한 다음 "Image file"을 선택해 준비한 Windows 2008 R2 파일을 선택합니다. DVD 미디어로 사용할 경우 "Physical CS/DVD drive"를 선택해 host장비의 미디어를 geust장비로 맵핑하여 설치 할 수도 있습니다.
  3. 이제 Virtual Machines 목록에서 생성했던 virtual machine을 더블클릭한 다음 아래와 같은 화면에서 왼쪽 상단의 "start"버튼을 클릭해 guest OS를 부팅합니다. 이제 Windows 미디어를 인식해 OS 설치를 시작하게 됩니다.
  4. OS 설정은 별다른게 없으므로 넘어가도록 하겠습니다.
    OS 설치가 다 되었으면 이제 이걸 공장 출하 상태로 돌린 다음 2개의 VM을 더 만들건데요. 저는 보안패치 여러번 하기 귀찮아서 보안패치를 미리 한 다음에 진행 하였습니다.
  5. VM 목록에서 마우스 우클릭 후 "Settings"로 다시 들어갑니다.
  6. Network Adapter 선택 후 오른쪽의 Network에서 Not Connected -> Local Area Connection 으로 변경해 줍니다. 그러면 해당 guest OS의 네트워크가 host의 네트워크를 통해 인터넷을 할 수 있게 됩니다.
  7. "OK"를 누르고 빠져나와 다시 해당 VM으로 가서 인터넷이 되는지 확인해본 다음에 보안 업데이트를 합니다. 저는 한 40개 나오네요. -_-;
  8. 이제 모든 준비가 끝났습니다. 이 설치한 OS를 이제 리팩키징 할 단계입니다. C:\windows\system32\sysprep\sysprep.exe 를 실행합니다.
  9. 시스템 준비 도구에서 아래와 같이 선택 합니다.
  10. 이제 리팩키징 작업이 진행되고 작업이 완료되고 나면 자동으로 VM의 시스템이 종료됩니다.
  11. VM Image파일이 있는 폴더로 가서 기존의 vhd파일(빨간박스)을 복사해 Node1과 Node2의 퐁 파일을 생성합니다. 저는 만일의 사태에 사용하기 위해 clean_Win2KR2라는 폴더에도 하나 따로 복사해 두었습니다. ㅎㅎ
  12. 이제 단계1 의 virtual machine 추가에서 기존의 이미지 파일을 추가하여 다음과 같이 2개의 VM을 더 생성 하였습니다. 진행하면서 다른 부분은 아래와 같이 단계1-10에서 기존의 vhd 파일을 이용하는 부분입니다.
  13. 이제 클러스터에서 사용할 VM 3개가 준비 되었습니다.
  14. 먼저 Win2K8R2-AD를 시작 시킵니다. 아래와 같은 화면이 나오고 간단한 언어 선택, 암호 설정을 마치면 windows 시작이 됩니다.
  15. Windows의 hostname을 변경합니다. 저는 WIN2K8R2-AD로 하였습니다. 다른 2대의 VM도 모두 켜서 hostname을 설정합니다. (저는 WIN2K8R2-Node1 , WIN2K8R2-Node2)
  16. 여기 까지로 VM에 OS를 설치해 준비하는 단계가 완료 되었습니다.

 

단계 3. Cluster 구성1

  1. 왼쪽의 역할 – Hyper-V – Hyper-V Manager – 장비명 – 마우스 우클릭 – Virtual Network Manager 선택
  2. 왼쪽 메뉴에서 New virtual network를 선택하고, 오른쪽에서 Private를 선택한 다음 "Add" 버튼을 클릭해 새로운 네트워크를 생성합니다.
  3. 네트워크 이름을 적고, Private virtual machine network가 선택된 것을 확인한 다음 "OK"버튼을 누르시면 네트워크가 생성 됩니다.
  4. 이런식으로 Private Network 2개와 Internal Network 1개를 생성합니다. 저는 아래와 같이 생성 하였습니다. 이것은 클러스터에서 사용할 public network, private network그룹과 관리 목적으로 host PC와 guest PC간의 통신을 위한 네트워크가 될 예정입니다.
  5. 3개의 VM 설정에서 Network Adapter를 privateNetwork로 선택 합니다. 여러대를 설정 하실때는 왼쪽 위의 select box를 통해 좀 더 손쉽게 할 수 있습니다.
  6. 이제 3개의 VM에서 네트워크 어댑터 이름을 "public"으로 변경해 줍니다. 나중에 하나씩 더 추가할 것이기 때문에 햇갈리지 않게 하기 위해서 입니다.
  7. 각 장비의 IP를 설정해 줍니다. 저는 단계0의 구성대로 3개 VM의 IP를 설정했고, 게이트웨이는 192.168.1.254 , DNS는 192.168.1.50으로 하였습니다.
  8. 이제 3대의 VM을 모두 종료 후 네트워크 어댑터를 하나씩 더 추가를 합니다. VM의 설정에 가셔서 Add Hardware – Network Adapter – Add를 선택합니다.
  9. 새로 추가된 어댑터를 AD장비는 internalNetwork로 Node 1, Node2는 privateNetwork2로 지정합니다.
  10. 이제 다시 VM 3대를 켠 다음에 Windows에서 AD장비의 네트워크 어댑터명은 Management, Node의 네트워크 어댑터명은 private로 변경합니다. 또, AD장비의 IP는 192.168.0.50, Node1의 IP는 10.0.0.1, Node2의 IP는 10.0.0.2로 합니다. IP와 Subnetmask만 입력하면 됩니다.
  11. Node1, Node2에서 네트워크 연결의 고급 – 고급 설정으로 갑니다.
  12. 네트워크 순서는 public , private 순서로 맞추고, private 네트워크에서 파일 및 프린터 공유의 체크는 지웁니다.
  13. 이번에는 private IP설정의 고급 버튼을 클릭합니다.
  14. DNS 탭에서 "주 DNS 접미사의 부모 접미사 추가"와 "DNS에 이 연결의 주소를 등록" 체크를 지웁니다.
  15. WINS 탭에서 "LMHOSTS 조회 가능" 체크를 지우고, NetBIOS를 사용안함으로 선택합니다.
  16. 나머지 노드의 private network를 위와 같이 설정합니다.
  17. AD역할을 할 장비에서 AD를 설치할 차례입니다. 관리도구 – 서버 관리자 를 실행합니다.
  18. 왼쪽 상단의 역할 – 마우스 우클릭 – 역할 추가
  19. Active Directory 도메인 서비스를 체크하여 "다음" 버튼을 클릭해 설치합니다. 도중에 .Net관련된 서비스 추가에 대한 물음이 나오는데 설치함을 선택하시면 됩니다.
  20. 설치가 완료되면 역할에 "Active Directory 도메인 서비스"가 생기고, 이걸 선택하신 다음 오른쪽 화면의 "도메인 서비스 설치 마법사"를 클릭합니다.
  21. 별건 없을것 같은데 "고급 모드 설치 사용"을 체크하고 한번 넘어가 보겠습니다.
  22. 새 포리스트에 새 도메인을 만듭니다.
  23. 모메인을 정합니다. 저는 MANHA.COM입니다. 하하하. -_-;
  24. 도메인 NetBIOS는 저는 "MANHA"라고 나왔는데 그냥 두고 "다음"을 눌러 넘어갑니다.
  25. 포리스트 기능 수준 설정이 나오는데 하위 호환성이 제공되지 않는다고 합니다. 저는 Windows 2008 R2로만 구성할 것이기 때문에 "Windows Server 2008 R2"를 선택 했습니다.
  26. 원래 DNS를 설치 후 AD를 설치해야 하는데 DNS를 설치하지 않았기 때문에 DNS 설치 단계가 나타납니다. 당근 설치를 해야 하므로 "DNS 서버"에 체크를 하고 다음으로 넘어갑니다.
  27. 경고 메세지가 뜨는데 그냥 무시하고 다음, 다음을 해서 폴더설정, 암호 설정을 마치고 나면 AD설치가 완료되게 됩니다. 시간이 좀 걸리며 완료 후 리붓을 하게 됩니다.
  28. 리붓 후 관리도구 – Ac tive Directory 사용자 및 컴퓨터 를 실행합니다. 그리고 Users – 새로 만들기 – 사용자를 실행해 관리용 계정을 하나 따로 만듭니다.
  29. 저는 feisia라는 계정을 만들었고, 마우스 오른쪽을 클릭해 "그룹에 추가"를 선택 후 Domain Admins 그룹에 추가해 줍니다.
  30. 이제 Node1 , Node2를 방금 생성한 AD에 가입시킬 차례입니다. 먼저 Node1번 VM으로 가서 도메인에 가입시켜 줍니다. 저는 MANHA.COM으로 가입을 시킵니다. 가입시킬때 도메인 가입 권한이 있는 계정을 요청하는데 좀전에 만든 도메인 관리용 계정을 이용해 가입을 시켜줍니다.
  31. AD에 가입을 시키면 리붓을 하는데 리붓 후 로그인 할때는 이전 단계에서 추가한 관리자 계정으로 로그인 해 줍니다. 이제 클러스터 서비스를 추가할건데 이때 도메인 계정으로 로그인하는 작업이 필요합니다.




음.. 이번주에 다 적을수 있을줄 알았는데 캡춰해서 붙이는것만 해도 시간이 너무 오래 걸리네요 -_-;
다음주에는 나머지 클러스터 구성과 SQL 설치를 추가하도록 하겠습니다~

하만철 / Ha Man-cheol


AND


아.. 거의 3주동안 이걸로 삽질을 한거 같다.
Windows 2008 R2에서 Hyper-V로 guestOS 3개 만들어서 드디어 클러스터 구성을 완료!!!
마지막까지 iSCSI 초기자 때문에 삽질 하다가 드디어 디스크 구성 완료 하여서 모든 리소스 구성을 완료했다.

테스트 환경 구축하면서 방화벽, AD, 권한, iSCSI software Disk, windows sid 등 계속해서 문제가 생겨서 해결이 안되었는데... 우하하하하. 다끝났다.
이제 SQL만 올리면 되지만 이거야 뭐 맨날 하던거니 껌이겠지~
끝까지 다 구성해본 다음에 매뉴얼이라도 한번 만들던지 해야겠다.

오늘은 발뻗고 잘 수 있을듯!!! 아쏴~ +_+

AND


이것은 linked server 수행을 별도 프로세스로 띄우는 방식으로 OOP(Out-of-process)라고도 합니다.

이것은 다음 경우에 도움이 될 수 있을것 같습니다.
1. x86의 경우 프로세스당 메모리를 2GB까지밖에 사용할 수 없는데 linked server에서 많은 메모리가 필요할 때
2. Linked server가 문제를 발생시키는데 Inprocess라 SQL Service까지 영향을 받을 경우 linked server process만 죽일 수 있습니다.

하지만 별도 프로세스를 사용할 경우 MySQL과 연결할때는 text 컬럼에 대해 insert, delete, update시 문제가 발생할 수 있고,
oracle과 사용할 경우 oracle provider를 실행하기 위한 권한 설정이 추가로 필요할 수 있다고 합니다.
때문에 사용하기 전에 테스트 환경에서 문제가 없는지 확인이 필요해 보입니다.

@설정 방법
아래와 같이 SSMS에서 "서버 개체 – 연결된 서버 – 공급자 – MSDASQL"의 속성에서 "Inprocess 허용"을 체크 해제 합니다.



설정 후 연결된 서버가 사용될 때 마다 아래와 같이 "dllhost.exe" 프로세스가 별도로 수행되는것을 확인할 수 있습니다.
물론 연속적으로 연결된 서버를 사용하는 쿼리가 수행되면 하나의 프로세스를 사용하게 됩니다. (여러개 프로세스가 뜨지 않습니다! ^^; )

 

하만철 / Ha Man-cheol

AND