에피소드

오래 전 집 컴퓨터를 서버로 운영하면서 Virtual Server 를 이용하여 Team Foundation Server 를 구성하였습니다. 3-Tire 로 구성된 Team Server 는 Windows Server 2003 에서 2008 로 업그레이드를 하였고, Virtual Server 는 Hyper-V 로 교체를 하기 위해 Team Foundation Server 의 데이터베이스를 백업을 해두고 간직해 두고 있었습니다.

사실 Team Foundation Server 를 사용하면서 손에 익으면 익을수록 정말 잘 만든 ALM 솔루션이라는 것을 느꼈지만, 이번에 그 환상은 홀딱 깨지고 말았습니다. 속내를 알면 알수록 잘된 것인지 잘못된 것인지는 현기증이 날 정도로, 고리타분한 구석이 상당히 많기로도 유명합니다. 예를 들어, 소스 제어에서 체크인을 할 수록 데이터베이스는 기하급수적으로 늘어나기도 합니다. 실제로 지난 프로젝트에서는 갑자기 Team Foundation Server 의 운영이 중단되었는데, 그 원인은 바로 하드 디스크의 용량이 부족한 탓이었답니다. Tracking 을 위해 어쩔 수 없다라고 쳐도 데이터베이스의 용량 증가는 무지막지할 정도로 빠르게 진행되기도 합니다. 그 밖에, 도메인 계정을 삭제를 하면 엑세스가 정상적이지 못한 문제 등도 발생하기도 합니다.

각설하고, TFS 의 데이터베이스 백업 파일만 달랑 남은 상황에서 다른 것은 몰라도 소스 코드만은 반드시 건져야 할 상황이 닥쳤습니다. 왜냐하면 제가 만든 소프트웨어 들이 모두 TFS 데이터베이스 백업 파일에 모두 존재했기 때문이죠. TFS 데이터베이스 백업 파일을 복원하고 데이터베이스만으로 소스 코드를 취득하려고 했으나 쉽지 않았습니다.

그 이유는, 소스 제어 데이터베이스의 소스 코드는 GZIP+(암호화?)+Encoding 되어 있습니다. Team Foundation Server 의 소스 코드의 텍스트를 GZIP 압축하는 것은 익히 알고 있었으나, 실제 복원하는 과정에서는 추가적인 알고리즘이 적용이 되어 있어 이것을 복원할 좋은 방법은 없어 보입니다. Reflector 로 코드를 거꾸로 분석부터 해보려고 했지만, 지름길이 아닌 것을 직감하고 진작부터 시도하지는 않았답니다.

또 하나, 사용자 계정으로 체크인 된 소스 코드는 TFS 계정 정보와 매핑이 되기 때문에 무작정 복원했다가 다시 처음부터 다시 복원을 해야 하는 낭패를 볼 수 도 있습니다.

아래는 복원하는 모든 과정을 설명하지 않고, 일부 시행 착오를 격은 부분만 설명하니 주의하시기 바랍니다.

   

새로운 도메인과 컴퓨터에서 복원하기

우선 Virtual Server 에서 가동 중이던 가상 서버는 데이터베이스만 백업 받아놓은 상태로 모두 지워버렸습니다. ㅡ,.ㅡ 만약 같은 도메인과 컴퓨터라면 백업은 크게 문제가 될 것이 없었지만, 제가 처했던 상황은 생각보다 중대한 상황이라는 것을 뒤늦게 알게 되었습니다.

우선 친절하게 MSDN 에서는 이 과정을 잘 설명해 주고 있습니다.

Team Foundation Server 데이터 백업 복원

http://msdn.microsoft.com/ko-kr/library/ms253080(VS.80).aspx

   

방법: 하드웨어 구성에서 다른 하드웨어 구성으로 Team Foundation Server 이동

http://msdn.microsoft.com/ko-kr/library/ms404869(VS.80).aspx

   

계정의 SID 매핑 하기

우선 데이터베이스의 .bak 파일을 복원합니다. 일부 데이터베이스는 동시에 복원되는 것을 추천하기 때문에, 되도록이면 한꺼번에 데이터베이스를 복원하시면 됩니다.

아래의 Command Line 과 같은 폴더에 TfsAdminUtil 를 실행해보면 엑세스 오류가 발생합니다.

 

만약 위와 같이 데이터베이스 엑세스 오류가 발생하면 아래의 절차를 수행하여, [TfsIntegration].[dbo].[tbl_database] 테이블의 servername 컬럼에 자신의 컴퓨터 이름으로 변경해 줍니다.

 

참고 자료

Server Restore

http://social.msdn.microsoft.com/Forums/en-US/tfssetup/thread/c8d49d80-5966-42de-8115-efc23eedf554

그리고 다시 TfsAdminUtil Sid 를 실행하면 아래와 같은 결과가 나오며, 정상적으로 데이터베이스에 엑세스 할 수 있습니다. 이제 이전 서버의 도메인의 계정과 신규 서버의 도메인 계정을 TfsAdminUtil 로 사용자 매핑이 완료될 때 까지 반복해 주시면 됩니다.

TfsAdminUtil - Team Foundation Admin Utility

Copyright (c) Microsoft Corporation. All rights reserved.

   

Account Name Found Equal to Windows SID

--------------------------------------------------------------------

POWERUMC\Episode2 False False

POWERUMC\episode3 False False

POWERUMC\umc False False

POWERUMC\episode1 False False

POWERUMC\TFSSETUP False False

POWERUMC\TFS2008 False False

POWERUMC\TFSService True False

POWERUMC\TFSReports False False

POWERUMC\Admin False False

 

사용 권한이 유효하지 않을 때

기존에 데이터베이스의 스키마는 이전 TFS 가 설치된 도메인의 TFSService 계정의 스키마이므로, 신규 서버로 도메인을 이전하였다면 TFSService 계정의 데이터베이스 스키마는 계정의 SID 가 달라지게 되므로, 더 이상 유효하지 않게 됩니다. 사실 이 부분에서 시행 착오를 많이 겪었던 것으로 기억합니다.

우선 백업을 복원한 데이터베이스의 TFSService 사용자 계정과 스키마를 삭제하고, 아래와 그림과 같이 관리->로그인 에서 다시 매핑을 하면 됩니다.

 

그리고 로그인에서 사용자 매핑으로 복원된 모든 데이터베이스에 사용자와 스키마를 매핑합니다.

 

팀 탐색기에서 사용 권한 문제

여기 까지 잘 따라왔다면 이제 Team Explorer 를 통해 Team Foundation Server 에 접속해 보면, 아래와 같이 권한 관련 문제가 발생합니다.

 

이러한 경우 TfsSecurity 명령 도구를 이용하여 해결 할 수 있습니다. 하지만 아래와 같은 오류가 발생하는데, RunAS 명령으로 인증된 계정으로 명령을 실행하면 가능할 것으로 예상이 됩니다.

 

참고 자료

No user is licensed

http://social.msdn.microsoft.com/forums/en-US/tfsadmin/thread/01fe1307-abd8-4d65-9f17-3a428f4431e3/

현재까지 성공했다면 적어도 TFSService 계정으로 Team Foundation Server 에 접속을 할 수 있습니다. 드디어 Team Explorer 로 소스 제어의 최신 소스 코드를 다운로드 받을 수 있게 되었습니다. ^___^

신고
Posted by 땡초 POWERUMC

댓글을 달아 주세요