저도 카페에 글을 올렸지만... SQLER에도 공유 해야 할 것 같아 한번 더 게시 합니다 ^_^~!
안녕하세요,
SQLER(http://SQLER.com) 사이트와
SQLTAG에서 후원하는 SQL Start (Http://SQLTAG.org) 커뮤니티 에서
활동 하고 있는, Daily-SQL 블로그의 차태욱입니다.
지난 4차 포스트
( http://daily-sql.tistory.com/entry/4차-SQLER-on-Windows-Azure-후기-차태욱 )에 이어 이번에는 SQL 데이터베이스 동기화 기능에 대한 리뷰를 하였습니다.
이번 5차 캠프 때는, 개인적인 일정으로 인해,
제한된 시간 내에 많은 것들을 경험 해 보지 못하여,
포스트용 스크린 샷 추출에 사용된 계정은 Windows Azure 평가판 계정을 활용 하였습니다.
개인적으로는 캠프 중에 제공 되는 이미 설정 되어있는 계정을 사용하는 것 도 좋지만, Azure 서비스를 처음부터 구축/설정 해 볼 수 있다는 점에서, 평가판 계정 활용 한 부분도 의미 있었습니다 ^^..
Step 1. 신규로 DB생성 하기
먼저, manage.windowsazure.com 페이지에서 최초로 DB만들기를 하는 페이지 입니다.
먼저 DB 이름과, 버전, 최대 제한크기, 데이터 정렬 및 해당 DB가 소속 될 DB 서버 (SQL Azure에서의 DB서버는,,, SQL Server의 Instance 같은 개념이죠…?)를 설정 해 주게 됩니다.
다음으로, 해당 SQL Azure 서버가 위치할 지역, 로그인 이름, 비밀번호를 입력해 주게 되면…
다음과 같이 데이터베이스가 생성 되어 집니다.
저는 SQLDBWOOK01 로 DB를 생성 하였고, 동일한 서버에 SQLDBWOOK02 라는 DB를 추가로 생성 하였습니다.
Step 2. 신규로 DB생성 하기~SQL 데이터 동기화 기본설정 하기
이제 SQL Azure 페이지 최 하단에 있는 동기화 추기 메뉴를 통해, SQL 테이터 동기화를 설정 해보겠습니다.
Manage.windowszaure.com의 SQL 데이터베이스 관리 페이지 최하단의 동기화 추가 메뉴로 접근 합니다.
다음과 같은 페이지가 나오면, 동기화 그룹의 이름을 설정 해 줍니다.
저는 SQLDataCompare라고 명명 해 주었습니다.
다음 페이지에서, 허브 데이터베이스의 로그인 이름과 암호를 입력하여 주고,,,,
(충돌 해결 박스에 대해서는 아래에서 설명 하겠습니다.)
마지막 페이지에서 동기화의 방향(양 방향 인지, 단 방향 인지(허브to클라 or 클라to허브)…) 설정
참조 데이터베이스 선택 및 로그인 이름과 암호를 입력하여 주면……
동기화(review) 메뉴에, 다음과 같이 준비되지 않은 상태의 SQL 데이터베이스 동기화 그룹이 생성 되게 됩니다.
여기에 표기된 SQL 데이터베이스 동기화 그룹인 SQLDataCompare를 클릭하고 들어 가면…
다음과 같이 SQLDataCompare 동기화 그룹에 속한 두 개의 데이터베이스와, 현재 상태(준비 안됨이죠?) 허브 여부, 동기화 방향, SQL Azure 서버 이름과 에이전트 이름이 표기 됩니다.
현재 준비 안된 상태이기에, 상단 메뉴에서 빨간 사각형으로 표기 된, 구성을 클릭하고, 구성 페이지로 이동 합니다.
구성 일반 메뉴에서 자동 동기화를 할지, 자동 동기화의 간격을 어떻게 할 지에 대한 부분을 설정 하게 됩니다. 동기화 빈도의 경우, Books Online 에 따르면 5분~1달사이로 지정 가능 하다고 합니다.
연결 자격 증명은 앞에서 이미 설정 하였기에, 따로 설정하지 않았습니다.
모두 잘 알고 계시겠지만 ^^;;.. Web Manage 페이지에서 만나는 Azure 서비스의 경우
변경사항은 항상 저장 해준 후 서비스를 이동 하여야 합니다.
Step 3. SQL 데이터베이스 동기화 규칙 설정
여기까지 진행 하신 후, 구성 메뉴 우측의 동기화 규칙 메뉴를 클릭하여, 규칙 설정을 진행 하여 보겠습니다.
현재는 해당 데이터베이스에 아무런 테이블이 없기 때문에,
SSMS로 해당 DB에 접속하여 테이블 생성 및 데이터 입력을 진행 하겠습니다.
접속 설정에 대해서는 이전 포스트 참조 해주세요.
( http://daily-sql.tistory.com/entry/4차-SQLER-on-Windows-Azure-후기-차태욱 )
현재 동기화 설정이 양방향이기 때문에 테이블은 02번 DB에만 생성 하였습니다.
다시 동기화 규칙페이지로 돌아 가서 스키마를 새로 고치십시오 메뉴를 선택한 후, 02번 데이터베이스를 선택합니다.…
그 후 동기화 대상 테이블을 선택 하고,
동기화 대상 컬럼을 선정 한 후, 상태를 저장하여 주면……
참조 화면에서 다음과 같이 상태가 양호 로 변경 되어진 두 개의 데이터베이스를 만날 수 있습니다.
Step 4. SQL 데이터베이스 동기화 실제 체험
Step 3 까지의 일련의 설정이 완료 되면, 해당 2개의 DB상에 02번 DB에만 생성 하였던 테이블이 01번 DB에도 동일하게 생성 된 것을 볼 수 있습니다.
또한 DataSync 라는 스키마가 신규로 생성 되었고, 한눈에 보아도, 이 스키마에 속한 다섯 개의 테이블들이 SQL 데이터베이스 동기화 기능에 관여 하는 시스템 테이블 이라는 것을 짐작 가능합니다.
또한, SQL 데이터베이스 동기화에 대한 간단한 모니터링도 가능 합니다.
Azure Web Manage Page 를 통해 SQLDataCompare동기화 그룹에 대한 로그 메뉴로 가면 어떤 항목들이 언제 어떻게 동기화 되었는지 볼 수 있습니다.
마치 SQL Server Replication Monitor 와 같은 느낌이네요 ^^. (기능도 많이 비슷 한 것 같다는 생각이구요 ^^;;ㅎㅎ)
양 DB에 동기화 된 테이블은 02번 DB에 생성 하였으니, 데이터 동기화를 확인 하기 위해, 이번에는 1번 DB에서 데이터 입력을 하도록 하겠습니다.
당연히, 위에서 동기화 그룹에 대해 시간을 설정 한 것 처럼(저는 5분으로 설정 하였습니다.) 바로 데이터가 동기화 되지는 않았으며..
또한 DataSync스키마의 TBL_X_dss_tracking 이라는 테이블을 보면, 다음과 같이, 히스토리가 남습니다.
그리고 컵라면에 물을 담고…5분을 기다리면…
짜잔~~!! 다음과 같이 두 개의 DB에 동일하게 데이터가 동기화 되었습니다.
다음과 같이 로그를 보면, 5분간격으로 잘 돌고 있는 것을 볼 수 있습니다.(10초정도씩 밀리고 있긴 하네요 ^^;;)
Step 5. SQL 데이터베이스 동기화의 데이터 무결성 보장
양측 DB에 모두 데이터 입력이 가능한 상태에서, 양쪽을 모두 동기화 대상으로 삼을 때…
제가 해당 테이블의 Primary Key 인 Idx컬럼을 Identity 속성으로 생성 하였기 때문에,
양쪽 DB에 Identity값 인 Idx가 충돌! 하여 무결성이 훼손 되는 상황이 쉽게 발생 할 수 있기에,,
이에 대해 SQL Azure의 데이터베이스 동기화에서는 어떻게 이런 문제를 해결 할 지 궁금증이 발생 하였고,
이처럼…무결성이 훼손 될 때는 어떻게 될지에 대해 테스트 해 보았습니다.
먼저, 차태욱11~15까지(Identity인 Idx 값은 11~15까지 입력 되겠지요?) 01번 DB에는 -01 , 02번 DB에는 -02를 붙여 입력 하고, 데이터가 동기화 되기를 기다립니다.
5분 후 확인 해보면, 02번 DB가 01번DB(허브) 기준으로 수정되어진 것을 볼 수 있습니다.
그 이유는…… 최초 동기화 생성 시, 동기화 허브 정의의 충돌해결 설정에서 에서 허브 우선설정 하였기 때문입니다.
충돌 해결 설정의 설명을 보면, '서로 다른 데이터베이스에서 동일한 레코드를 변경 할 때마다 유지할 데이터와 손실될 데이터를 결정하는 데 도움이 되는 설정 입니다.'
라는 내용이 나와 있네요 ^^.
Step 6. 맺는말 – SQL Azure
개인적으로 HA에 관심이 많아, SQLAzure에서 가장 관심 가던 기술 중 하나인, SQL 데이터베이스 동기화를 체험해 볼 수 있어서 즐거운 시간이었습니다.
5분이라는 동기화 텀이 길고, 10초 정도씩 동기화 일정이 밀리는 부분이 조금(많이;;;) 아쉽긴 하지만, 소규모 DB에서의 쓰기 분산 기능으로 사용하기에는 부족함이 없어 보입니다.
혹시 6차때 기회가 주어 진다면……! 다음에는 꼭 미리 준비하고 공부해서, 페더레이션 기능을 통한, 샤딩 구현을 해보고 싶습니다 ^_^~!
그럼 SQLER-Online Azure Camp 5차 참가 후기를 이만 줄이겠습니다^^.
(원문-http://daily-sql.tistory.com/18)