이번 후기에서는 로컬의 SQL Server 데이터를 SQL Azure로 마이그레이션하는 방법에 대해서 간단히 테스트해봤습니다. http://msdn.microsoft.com/ko-kr/library/windowsazure/ee730904.aspx 페이지에 접속해보면 마이그레이션할 수 있는 방법에 대해서 몇가지 나와 있습니다.

 

  • 기존 데이터베이스의 스크립트를 생성하여 SQL 데이터베이스로  마이그레이션
  • Microsoft Sync Framework 2.1을 사용하여 SQL 데이터베이스로 마이그레이션
  • 데이터 계층 응용 프로그램 내보내기 및 가져오기를 사용하여 SQL 데이터베이스로 마이그레이션
  • SQL 데이터베이스로 데이터 이동(SSIS)

 

SQL에서 마이그레이션이라 함은 크게 스키마에 대한 마이그레이션과 데이터 자체에 대한 마이그레이션이 있을 수 있겠죠. 2가지를 한꺼번에 처리해 줄 수 있는 방법도 있고, 스키마 생성 스크립트와 데이터 마이그레이션을 각각 실행하는 다양한 방법들이 있습니다. MSDN 도움말 문서를 참조해가면서 몇가지 테스트를 진행하도록 하겠습니다.

 

이번 후기에서 살펴볼 것은  위에서 안내되는 방법 중 제일 마지막의 SSIS를 사용한 방법 빼고 나머지에 대해서 대략 살펴봅니다.

 

1. 기존 데이터베이스의 스크립트를 생성하여  SQL 데이터베이스로 마이그레이션

MSDN에서는 http://msdn.microsoft.com/ko-kr/library/windowsazure/ee621790.aspx 페이지에서 해당 기능을 설명하고 있습니다만, 전 기존에 로컬에 존재하던 데이터베이스(OCSFTADD)를 사용하여 마이그레이션 해보기로 합니다.

 

a. 스크립트를 생성할 데이터베이스를 로컬 SQL Managemenu Studio에서 선택한 후 오른쪽 마우스를 클릭하여 스크립트 생성 메뉴를 선택합니다.

image

 

b. 다음을 눌러 개체 선택 단계로 이동한 후에 “전체 데이터베이스 및 모든 데이터베이스 개체 스크립팅”옵션을 선택합니다.

image

 

c. 스크립트 생성 및 게시 옵션에서는 파일에 저장/클립보드에 저장/ 새쿼리 창에 저장 3가지 중 아무거나 해도 상관은 없구요. 전 파일에 저장을 선택했습니다. 그리고 “고급”버튼을 선택합니다.

image

 

d. SQL Azure 데이터베이스용 스크립트를 생성하기 위해서는 고급 스크립팅 옵션에서 빨간부분으로 표시했듯이 "UDDT를 기본 형식으로 변환” 설정을 “True”로 하고 “데이터베이스 엔진 유형에 대한 스크립트”항목을 “SQL Azure 데이터베이스”로 지정합니다.

image

 

e. 확인을 누르고 다음페이지에 나오는 요약 페이지에서도 다음을 선택하면 스크립트 생성 진행화면이 나오고, 정상적으로 다 처리가 되면 완료되었음을 알리고 “마침” 버튼을 선택하면 지정한 위치에 스크립트 생성 파일이 생성되어 있는걸 확인할 수 있습니다.

image

 

f. 생성된 스크립트를  SQL Azure 데이터엡이스에서 실행하도록 합니다. 전 로컬에서 Azure에 연결하여 04번 DB에서 새쿼리 창을 띄우고 스크립트를 복사하여 실행하였습니다. 처리 시간은 4분 10초로 생각보다 좀 오래걸리긴 했는데, 아마 정합성 검증 등을 진행하느라 그러지 않았을까 생각됩니다. 결과를 보시면 오류가 몇개 있는데 이건 아래와 같이 외부 DB 를 참조하는 View나 SP이기 때문에 에러가 나타난 것이 당연했던 거구요. 이와같이 사전에 문제가 될 수 있는 스크립트 문은 수정이 필요한 후에 실행하는 것이 맞겠습니다.

image

 

g. 04번 DB 에 테이블 등의 스키마가 정상적으로 생성된 것을 볼 수 있습니다.

image

 

h. 데이터베이스를 내보내기해야 할텐데요. MSDN 문서에서도 이부분 설명이 조금 미약합니다. 스크립트 생성까지만 나와 있고, 데이터베이스 마이그레이션은 그냥 예제 샘플스크립트에 포함되어 있더라구요. 일단 로컬에서 운영중인 샘플 데이터를 기준으로 저는 테스트했기 때문에 기본적으로 데이터내보내기를 통해서 잘 되는지 확인해봤습니다.

image

 

i. 해당 기능이야 다 아실텐디 원본 선택은 소스가 되는 “COSFTADD”를 선택하구요. 중요한게 대상 데이터베이스 선택화면입니다. 서버이름은 SQL Azure의 데이터베이스 서버 Full 주소를 적습니다. 그리고 사용자 이름은  아이디@서버명” 과 같은 형식으로 입력해야 하더군요.

image

 

j. 다음 버튼을 눌러 이후 작업을 진행했더니 진행 도중 아래와 같은 에러가 떨어지네요. 마이그레이션이 쉽지는 않은 것 같습니다.

image

 

k. 그래서 이번에는 SQL Server 에서 SQL Azure로 Migration하는 Codeplex Tool을 잠깐 테스트해보기로 했습니다. 아래 Codeplex에서 Zip 파일을 다운로드 받고 압축을 해제하면 나오는 실행파일을 선택합니다.

image

 

l. 최초 실행 화면입니다. 매뉴얼이나 그런 것 안보고 일단 그냥 직관에 맡기고 “Analyze/Migrate”  항목의 “Database”를 선택했습니다.

image

 

m.  Source 서버를 선택하고 다음을 진햏하여  Destination 서버도 마찬가지로 선택합니다. DB명은 선택상자에 뜨는게 아니라 직접 입력을 해줘야 하더군요.

image image

 

n. 다음 단계를 진행하여 “EXecute Script”를 실행하면 아래와 같이 마이그레이션이 정상적으로 완료되었다고 뜨더군요.

image

 

o. 소스에 문제가 있는건지 아니면 제가 매뉴얼을 안 읽어 보고 한거라서 그런지 03번 서버에 스키마는 정상적으로 만들어져 있는데, 데이터까지 마이그레이션되지는 않았더군요. 다만 로컬 폴더에 각 테이블별로 dat 파일이 만들어진 것으로 보아 마이그레이션 과정 중에 이를 export해줘야 하는데 뭐가 문제가 있었나봅니다. 일단 운영 DB 에 대한 SQL Azure로의 마이그레이션은 시간 관계상 여기까지에서 마무리하기로 했습니다.

image

 

 

2. Microsoft Sync Framework 2.1을 사용하여 SQL 데이터베이스로 마이그레이션

MSDN 문서에 나와 있는 두번째 마이그레이션 방법은 Microsoft Sync Framework 2.1을 사용한 마이그레이션입니다. SyncFramework는 회사 프로젝트 때문에 초기 버전일때 얼핏 살펴본 이후로 직접 실무에서 만져보지는 못했습니다. 어찌 보면 마이그레이션  툴보다는 이름 그대로 동기화 프레임워크이니깐요. 깊이 살펴보지는 못하고 문서상으로 제공하는 간단한 샘플을 통해서 로컬 SQL Server의 DB를 SQL Azure로 마이그레이션해보도록 하겠습니다.

가이드 문서는 http://msdn.microsoft.com/ko-kr/library/ff928514(SQL.110).aspx 페이지를 기본으로 진행합니다.

 

a. SyncFramework 2.1 버전을 다운로드 합니다. [SyncFramework 2.1 다운로드 ] 링크에 들어가면 32/64비트 다운로드가 제공됩니다. 전 64비트를 설치진행했습니다.

image

 

b.  다운로드 후 설치를 진행하면 아래와 같이 간단히 설치가 가능합니다.

image imageimage image

 

c. 테스트를 위한 데이터베이스를 생성합니다. [데이터베이스 공급자용 설치 스크립트 방법 항목] 페이지의 첫번째 스크립트를 복사하여 로컬에서 실행합니다.  가이드 상에서는 “데이터베이스 공급자용 설치 스크립트 방법 항목의 "SQL Server 공동 작업 시나리오를 위한 테이블" Transact-SQL 스크립트를 실행합니다. 이 스크립트는 첫 번째 데이터베이스에 일련의 테이블이 포함된 3개의 데이터베이스를 만듭니다.” 이와 같이 나와 있고, 3개의 데이터베이스가 생성된다는 말에 조금 헷갈렸습니다.  해당 페이지로 이동하게 되면 4개의 샘플 스크립트가 존재하는데, 첫번째가 2개, 네번째가 3개의 DB를 만들게 됩니다.

테스트 해보니 결과적으로는 첫번째 스크립트가 맞는 것 같습니다만 지금도 헷갈리긴 하네요. 일단 첫번째 네번째 스크립트를 실행합니다.

image

 

d. Visual Studio 에서 “SQLAzureSyncTest”라는 콘솔 어플리케이션 프로젝트를 신규로 생성합니다. Sync Framework는 프로그램 모드에서 실행되어야 하기 때문에 개발작업이 조금 들어가게 됩니다.

image

 

d. [데이터엡이스 공급자용 설치 스크립트 방법 항목.]  페이지에서 Utility Class복사하여 위에서 만든 프로젝트에 추가합니다.

image

 

e. 프로젝트 참조에 아래의 5개 dll 에 대한 참조를 추가합니다.

imageimage

 

f. [방법: SQL Azure와의 동기화 구성 및 실행] 페이지의 하단에 있는 전체 예제 샘플을 복사합니다. 해당 내용은 Program.cs 파일입니다.

image

 

g. 프로젝트의 Program.cs 파일을 위의 복사한 내용으로 덮어쓰고, Namespace 항목은 원래 값으로 다시 수정해줍니다. 전 “SQLAzureSyncTest”라는 이름으로 프로젝트를 만들었기 때문에 아래와 같이 다시 수정해줬습니다.

image

 

h. SQL Azure로 데이터엡이스를 프로비저닝하기 위해 Utility.cs 파일을 열고, 아래와 같이 “ConnStr_SqlAzure_Server”메서드로 이동합니다.

image

 

i. 프로비저닝하고자 하는 SQL 데이텅베이스의 연결문자열을 아래와 같이 포털의 대시보드 화면에서 확인합니다. “연결문자열” 항목을 누르면 4가지 샘플 연결문자열이 나오는데 그 중에 젤 위에 있는 ADO.NET 부분을 복사합니다.

image

 

j. 프로젝트에서 앞서 Utility.cs에서 해당 연결문자열 부분을 복사한 내용으로 변경하고 암호를 맞게 수정합니다.

image

이후 빌드 과정에서 위와 같이 연결문자열을 복사하여 그대로 사용했더니 연결에 실패했다는 에러가 뜨더군요. 결국 해당 메서드에 적용될 연결문자열은 다른 연결문자열과 비슷한 형태로 아래처럼 입력해야 하더군요.

@"Data Source=rl0lm8we8j.database.windows.net;User ID=rlaaudfuf01;Initial Catalog=rlaaudfuf01;Password={사용자암호};Persist Security Info=True";

k. Utility.cs  의 경우 클래스 부분만 복사했더니 상단의  using 구문에 일부 추가가 안된 참조파일들이 있어서 최종적으로 아래와 같은 using 구문이 되었습니다.

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlServerCe;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

 

l. 일단 위와 같이 구성 후 빌드를 하게 되면 몇가지 에러가 아래와 같이 발생합니다.

image

 

m. 첫번째 오류는 “MaxiumApplicationTransactionSize” 부분에서 발생하는데 2.1 버전이 되면서 변경이 발생했나 봅니다. 크게 중요한 것 같지 않아서 일단 해당 라인은 주석처리를 해줍니다.

image

 

n. 다음 발생 에러는 중복되서 몇개가 발생했는데요. “UserDescription”속성이  “UserComment”로 변경이 되었나 봅니다. 아래와 같이 오류 발생 부분을 “UserComment” 로 변경해주었습니다. 5개 중 3개의 오류가 이 부분이었습니다.

image

 

o. 마지막으로 발생한 오류 부분역시 2.1이 되면서 변경이 된 듯한데. 일단 해당 부분을 아래와 같이 Aborted  한 라인만 빼고 모두 주석처리해주었습니다.

image

 

p. 위와 같이 수정하고 빌드하면 에러 없이 빌드가 가능했습니다. 이후 프로젝트를 실행하게 되면(최초엔 Azure 연결 문자열을 복사해서 그대로 사용했었기 때문에) 연결 실패 에러메시지가 발생했습니다.

image

 

q. 그래서 연결문자열을 앞서 나왔던 내용처럼 수정 후에 다시 실행을 하게 되면 이번엔 새로운 에러 메시지가 뜨게 됩니다.

image

SyncFramework의 경우 First Provision하는 부분이 있어서 발생하는 문제이구요. 앞서 나왔던 로컬의 샘플 DB 스크립트를 아예 다시 실행했습니다.(해당 스크립트의 경우 기존 DB를 지우고 다시 만들게끔 되어 있습니다)

위와 같이 오류가 발생하는 것은  Program.cs  파일 중

DbSyncScopeDescription customersScopeDesc = new DbSyncScopeDescription("customers");

위와 같은 내용이 있는데, 여기에 “ customers”라는 범위명을 사용하여 SyncFramework 에서 사용하는 scope 테이블 등에 해당 정보가 이미 등록되어 있기 때문에, DB 연결문자열 수정 후 재실행했을 때 이미 동일한 이름이 존재한다는 에러가 발생되는 것입니다.

 

r. 다시 프로젝트를 실행하게 되면 또 아래와 같은 에러 메시지 창이 저를 반겨주더군요. 구글에서 검색을 해보니 프로젝트가 64비트가 아닌 경우(전 SyncFramework를 64비트를 다운 받아 설치했습니다) 발생한다고 하네요.

image

 

s. 프로젝트 빌드 항목을 살펴보니 역시나 AnyCPU이긴 하지만 디폴트로는 32비트 모드로 돌게끔 되어 있는 것 같아서 아래와 같이 64비트로 명시적으로 변경하였습니다.

image

 

t.  다시 로컬  DB를 초기화한 후 프로젝트를 실행하면 아래와 같이 Sync 가 성공되었음을 알리는 메시지가 보입니다.

image

하단에 보이는 에러는 확인해보니  로컬 SQL-> SQL Azure로의 마이그레이션이 아니라, SQL Azure의 변경 내용을 로컬의 SQL CE로 동기화하는 부분인 것 같아 주석 처리했습니다.

 

u. 마이그레이션이 잘 되었을까요? 일단 싱크 이전에 캡쳐해놓은 01 DB의 두 테이블 정보는 아래와 같습니다.

image

 

v. 마이그레이션 완료 후 01번 데이터베이스에 대한 2 테이블 쿼리 화면입니다. 로컬 데이터와 같이 Customer테이블은 5개, CustomerContact 테이블은 4개의 데이터가 채워진 걸 확인할 수 있습니다.

image

 

w.  SyncFRamework 2.1 이다보니 로컬의 데이터가 변경된 후 Sync 작업을 하면 어떻게 될까요? 테스트에 들어가봅니다. 아래와 같이 업데이트를 실행합니다(원래 업데이트에 ID조건을 줄려고 했는데 빼먹고 하다보니 전체 변경이 되었습니다). 영역 지정해서 Update를 먼저 실행 후 상단의 Select 를 쿼리한 화면입니다.

image

 

x. Visual Studio의 프로젝트 소스 파일 중 Program.cs 의 내용 중에서 최초 Provision 부분과 SQL CE와 마이그레이션하는 부분을 주석처리한 후에 프로젝트를 실행하면 아래와 같이 정상적으로  Sync되었음을 확인할 수 있구요.

image

 

y. 다시 SQL Azure의 포털에서 데이터를 확인해보면 아래와 같이 이름 값이 모두 변경된걸 확인할 수 있습니다.

image

 

이상으로 Microsoft Sync Framework 2.1을 사용하여 로컬의 SQL 데이터를  SQL Azure로 마이그레이션하는 방법에 대해서 간략히 살펴보았습니다. SyncFramework 부분 역시 깊게 들어가면 기본 아키텍쳐부터 이해하고 확인해야할 부분이 있지만 개발자라면 나름 한번은 사용해볼만하지 않나 생각됩니다.

 

 

3. 데이터 계층 응용 프로그램 내보내기 및 가져오기를 사용하여 SQL 데이터베이스로 마이그레이션

세번째로 나온 방법을 사용하여 로컬 SQL데이터를 SQL Azure로 마이그레이션 해볼려고 했더니, 시간도 부족하고 해서 여기까지는 완벽히 테스트를 해보지 못했습니다. MSDN 문서의 경우도 SQL Azure의 데이터를 동일한 Azure서버로 복사하거나 스토리지로 내보내기 하는 등의 설명이나 가이드 문서는 나와 있는데, 로컬 DB 자체를  데이터계층 응용프로그램 내보내기를 통해서 처리하는 부분은 확인하지 못했습니다.

그래도 혹시나 싶어서 간단히 로컬 SQL에서 해당 메뉴만 실행해보았습니다.

 

a. 마이그레이션을 원하는 DB의 오른쪽 마우스를 클릭하여 “태스크-> 데이터계층 응용프로글매 추출” 항목을 선택합니다.

image

 

b. 데이터 계층 응용 프로그램 추출 화면이 나오구요.(사실 이 메뉴는 이번에 처음 실행해봤습니다. 요즘엔 DB쪽 작업을 크게 할일이 없었나 봐요)

image

 

c. DAC 속성을 설정하는 화면입니다. 기본으로 놔두고 다음 버튼을 클릭합니다.

image

 

d. 유효성 검사 등을 잠시 진행하더니 아래와 같은 결과가 나오는군요. 오류 개체가 있어서인지 다음 단계로 진행은 되지 않았습니다.

image

 

여기까지가 데이터 계층 응용 프로그램 추출을 테스트해본 상황입니다. 하지만 SQL  Azure 서버 데이터에 대해서는 MSDN보시면 알겠지만 관련자료가 꽤 됩니다. Azure 스토어의  Container를 사용한 방법 등이 나와 있습니다만 거기까지는 테스트하지 못했네요.  4번째 방법인 SSIS를 사용한 마이그레이션 역시 이번 체험에서는 진행하지 못했구요.

 

여기까지 “SQL 데이터베이스” 주제로 열린 6차 체험을 마무리해야 할 것 같습니다. 이번 6차때는 다행히 후기를 정리하고 있는 지금시간까지(일요일 오후 10:00) 아직 체험 계정이 열려 있어서 미처 확인하지 못했던 사항들을 볼 수 있어서 좋긴 하네요.

 

Azure는 참 공부할 수록 해야할게 많다는 걸 느낍니다. 눈으로만 관련 문서를 훑어보는 것보다는 지금처럼 직접 코딩도 하고 이것저것 스크립트 실행도 해가면서 되는거 안되는거 확인하고 하면서 나만의 지식으로 만들어가는 것이 좋은 것 같습니다.

 

다음 7차 체험 이벤트가 언제 열릴지는 모르겠지만 계속해서 참여해보고 싶습니다. 4~6차 체험의 외전 격으로 제가 개인적으로 테스트하고 있는 부분은 Azure VM에서 AD 설치 후 해당 AD에 연결하여 Lync 2013서버를 설치한 후 사용자 계정으로 직접 운영테스트까지 하였습니다만, 평가판의 경우 기간 제한이 있다보니 조금 아쉬운 부분이 있더라구요.  Azure VM에서의 AD  설치나 Lync 2013 설치 과정 등에 대해서도 체험후기를 적을까 하다가 일반 VM  에서와 크게 다른 것은 없어서 그냥 안하기로 했었는데요, 개인 블로그에라도 정리 차원에서 올려 놓던지 해야겠네요.

 

아니면 얼마 전에 출시된  Lync2013 CU1 업데이트와 여기에 포함된 UCWA 를 사용한 웹채팅방에 대한 간단한 사용법이라도 정리해봐야겠구요.

 

주말 동안 이거저거 하는 중에 후기 정리하느라 시간이 후딱 가버렸군요. 아쉽지만 다음 체험기회를 또 기다리겠습니다.

 

블로그 이미지

별아해

카테고리

분류 전체보기 (12)
닷넷 (5)
안드로이드 (1)
데이터베이스 (0)
아이폰 (0)
IT일반 (0)