데이터베이스 스키마 비교 개요
업데이트: 2007년 11월
Visual Studio Team System Database Edition을 사용하여 두 데이터베이스의 스키마를 비교한 다음 소스의 일부 또는 모든 스키마 개체를 대상에 적용할지 여부를 결정할 수 있습니다. 예제 시나리오를 보려면 데이터베이스 스키마를 비교하는 이유를 참조하십시오.
다음에 대한 스키마를 비교할 수 있습니다.
같은 데이터베이스의 두 가지 버전이 있는 두 개의 데이터베이스
Visual Studio 데이터베이스 프로젝트 및 데이터베이스
비교를 구성할 때 스키마 비교 대화 상자를 사용하여 소스와 대상을 지정합니다. 자세한 내용은 방법: 두 데이터베이스의 스키마 비교를 참조하십시오.
스키마 비교를 마치면 볼 수 있는 비교 결과가 표시됩니다. 자세한 내용은 방법: 스키마 차이 보기를 참조하십시오. 그런 다음 소스의 스키마 요소를 대상에 전파할 수 있습니다. 자세한 내용은 방법: 데이터베이스 스키마 동기화를 참조하십시오.
데이터베이스 스키마를 비교하는 이유
다음에서는 데이터베이스 스키마를 비교하는 시나리오를 설명합니다. 이 경우 두 개의 데이터베이스 대신 데이터베이스 하나와 데이터베이스 프로젝트 하나를 비교합니다.
팀 데이터베이스 개발
이 시나리오에서는 사용자가 데이터베이스를 만드는 데 도움이 되는 Database Edition 데이터베이스 프로젝트를 사용하는 데이터베이스 개발자인 것으로 가정합니다. 시간이 지나면서 해당 팀이 데이터베이스의 후속 버전을 빌드하여 테스트 서버에 배포합니다. 팀의 다른 멤버는 데이터베이스를 디자인합니다.
데이터베이스 개발자는 데이터베이스 스키마 변경을 방금 마쳤으며 자신의 컴퓨터에서 변경 내용을 테스트했습니다. 오류가 없기 때문에 팀의 품질 보증 담당자가 테스트할 수 있도록 이제 업데이트 내용을 테스트 서버에 게시하려고 합니다.
데이터베이스 프로젝트를 열고 새 스키마 비교 대화 상자를 사용하여 테스트 서버에 대한 연결을 설정합니다. 프로젝트(소스)를 배포된 데이터베이스(대상)와 비교하고 두 엔터티 간에 많은 개체가 다른지 확인합니다. 그러나 대부분의 차이는 자신이 담당하지 않는 개체에 있음을 알았습니다. 다른 사람이 변경한 내용이므로 덮어쓰지 않으려고 합니다.
이제 작업하던 개체를 선택하고 업데이트 쓰기를 클릭합니다. 이 작업을 통해 데이터베이스의 일부를 업데이트하고 나머지 부분은 이전 상태로 둡니다. 이제 작업을 배포하고 테스트할 준비가 되었습니다.
다음 단원에서는 Team Edition for Database Professionals에서 스키마 개체가 변경한 내용을 표시하고 사용자가 수행할 작업을 결정하는 데 도움을 주는 방법을 설명합니다.
스키마 비교 제어
스키마 비교 과정과 스크립트 생성 과정을 제어하는 옵션을 두 수준으로 지정할 수 있습니다. 옵션을 전역으로 설정하려면 도구 메뉴를 열고 옵션을 클릭하고 데이터베이스 도구를 확장한 다음 스키마 비교를 클릭합니다. 전역으로 설정한 옵션은 특정 비교를 위해 스키마 비교 작업을 재정의하지 않는 한 모든 후속 스키마 비교 작업에 영향을 줍니다.
스키마 비교 뷰
두 가지 스키마를 비교하면 스키마 비교 창에 표 형태로 결과가 표시됩니다. 또한 창에는 데이터베이스의 개체에 대한 정보와 개체를 동기화하는 스크립트가 함께 표시됩니다.
스키마 비교 결과 이해
개체 정의 보기
업데이트 스크립트 미리 보기
스키마 비교 결과 이해
스키마 비교 창은 Visual Studio의 주 편집 영역에 있습니다. 창에는 확장 가능한 폴더로 구성된 양쪽 스키마의 모든 개체가 표시됩니다. 이러한 개체에는 테이블, 뷰, 저장 프로시저, 함수, 사용자 정의 형식, 규칙, 기본값, 전체 텍스트 카탈로그, 사용자, 역할이 포함됩니다.
이 창의 열에는 각 개체에 대해 다음과 같은 정보가 표시됩니다.
첫 번째 열인 상태는 비교된 개체의 비교 상태를 보여 줍니다.
같음. 소스 개체와 대상 개체는 구조적으로 동일합니다.
다름. 대상 개체와 소스 개체는 구조적으로 다릅니다.
없음. 개체가 대상에는 있지만 소스에는 없습니다.
최신. 개체가 소스에는 있지만 대상에는 없습니다.
참고: 개체는 사용자가 설정한 스키마 비교 옵션의 컨텍스트에서 같거나 다르게 정해집니다. 자세한 내용은 스키마 비교 제어를 참조하십시오.
두 번째 열은 개체 형식별로 계층적으로 구성되는 소스의 스키마 개체 이름을 나열합니다. 이 열에서는 노드를 확장하거나 축소하여 원하는 개체 형식만 표시할 수 있습니다.
세 번째 열인 업데이트 작업은 특정 개체에 대해 두 가지 스키마 간의 해당 개체 구조를 동기화하는 작업을 보여 줍니다. 변경 내용은 대상에만 기록됩니다. 업데이트 작업 열의 값은 상태 열의 값과 일치합니다. 모든 개체에 대해 비교 전의 상태로 대상의 개체를 남겨 두는 건너뛰기 작업을 선택할 수 있습니다. 종속성 포함 확인란을 선택하는 경우 업데이트를 건너뛰지 못할 수도 있습니다. 이 확인란의 상태를 확인하려면 도구 메뉴를 열고 옵션을 클릭합니다. 예를 들어 소스 데이터베이스에 인덱스, 키 및 트리거가 있는 새 테이블이 있고 인덱스, 키 및 트리거를 추가하는 경우 테이블을 건너뛸 수 없습니다.
참고: 업데이트 작업 열에서 값을 변경하면 실제로는 실행될 업데이트 스크립트가 변경됩니다. 즉 업데이트 쓰기를 클릭할 때 표시되는 결과가 변경됩니다. 자세한 내용은 방법: 데이터베이스 스키마 동기화를 참조하십시오.
다음 표에서는 이러한 작업을 요약하여 보여 줍니다.
비교 상태 |
사용 가능한 업데이트 작업(기본값은 굵게 표시됨) |
기본 작업 설명 |
같음 |
건너뛰기 |
같은 개체에 대한 기본 작업인 건너뛰기는 개체를 변경하지 않은 채로 둡니다. |
다름 |
업데이트, 건너뛰기 |
같지 않은 개체에 대한 기본 작업인 업데이트는 대상 데이터베이스의 개체 구조를 변경합니다. 예를 들어 업데이트 작업은 테이블에서 열을 추가하거나 삭제하거나 이름을 바꿀 수 있습니다. |
없음 |
삭제, 건너뛰기 |
소스 데이터베이스에 없는 개체에 대한 기본 작업인 삭제는 대상 데이터베이스의 개체를 삭제합니다. |
최신 |
만들기, 건너뛰기 |
소스 데이터베이스에 없는 개체에 대한 기본 작업인 만들기는 대상 데이터베이스에서 개체를 만듭니다. |
- 네 번째 열은 대상의 스키마 개체 이름을 나열합니다.
개체 정의 보기
또한 스키마 비교 창에 나열된 각 데이터베이스 개체의 SQL 정의를 볼 수 있습니다. 주 문서 창에서 개체의 행을 클릭하면 해당 정의가 개체 정의 창에 읽기 전용으로 표시됩니다. 개체 정의 창의 왼쪽에는 소스에서 선택한 개체의 정의가 표시되고 오른쪽에는 대상에서 선택한 개체의 정의가 표시됩니다. 어느 쪽에서든 스크롤 막대를 사용하여 양쪽 정의를 동시에 스크롤할 수 있습니다. 소스 개체 정의와 대상 개체 정의 간에 다른 줄은 강조 표시됩니다.
개체 정의는 비교를 실행한 당시의 개체 상태를 반영합니다. 업데이트 작업 열의 값을 변경하거나 개체가 이 스키마 비교 세션을 벗어나서 변경되는 경우 개체 정의가 변경되지 않습니다.
업데이트 스크립트 미리 보기
또한 스키마를 비교하면 자동으로 동기화 스크립트가 생성되어 스키마 업데이트 스크립트 창에 표시됩니다. 이 DDL(데이터 정의 언어) 스크립트는 대상을 업데이트하는 데 사용됩니다. 스크립트에는 비교 상태가 업데이트, 삭제 또는 만들기인 개체만 있습니다. 건너뛸 항목은 스키마 업데이트 스크립트 창에 표시되지 않습니다.
업데이트 작업 열에서 값을 변경하면 스키마 업데이트 스크립트 창에 변경 내용이 반영됩니다.
참고: |
---|
업데이트 작업 열의 변경 내용 범위에 따라 스크립트 미리 보기 창의 내용을 업데이트하는 데 몇 초 정도 걸릴 수 있습니다. |
업데이트 작업을 변경하여 DDL 스크립트를 변경할 수는 있지만 스크립트 미리 보기 창이 읽기 전용이기 때문에 이 창에서 직접 스크립트를 편집할 수 없습니다. 업데이트 스크립트를 편집하려는 경우 편집기로 내보내기를 클릭한 다음 T-SQL(Transact-SQL) 편집기에서 업데이트 스크립트를 수정합니다.
비교 결과 새로 고침
소스 스키마와 대상 스키마 간 차이의 뷰를 업데이트할 수 있습니다. 일단 소스와 대상을 비교한 후에 스키마 중 하나나 둘 다 변경되는 경우 뷰를 새로 고칠 수 있습니다. 또한 스키마 비교 옵션을 변경하는 경우 결과를 새로 고칠 수 있습니다. 새로 고침을 클릭하면 이전에 표시한 구성 정보를 다시 사용하여 새 비교 데이터가 생성됩니다.
데이터베이스 개체는 최근의 스키마 비교 이후에 소스에 추가되었거나 소스에서 삭제되었을 수 있습니다. 이 경우 새로 고침을 클릭하면 스키마 비교는 적절하게 새 비교에 새 개체를 포함하고 새 비교에서 삭제된 개체를 제외하려고 합니다. 그러나 특정 개체에 대한 업데이트 작업 설정을 변경한 경우 최근 스키마 비교 이후 발생한 개체에 대한 변경 내용에 관계없이 해당 설정이 유지됩니다.
안전하게 데이터베이스 스키마 전파
데이터베이스 스키마를 전파하면 데이터가 손실될 수 있습니다. 이러한 데이터 손실을 없애려면 소스와 대상의 개체 이름에 주의를 기울여야 하는데 특히 대상에서 스키마를 업데이트하기 전에 주의해야 합니다.
예를 들어 대상에는 Order_Details라는 테이블이 있는데 소스 데이터베이스에서 밑줄 없는 Order Details로 이름을 바꿨습니다. 그런 다음 두 개의 데이터베이스를 비교합니다. 소스의 스키마를 대상에 전파하기 전에 양쪽 테이블의 데이터는 동일합니다. 그러나 스키마 업데이트를 대상에 쓰면 Order_Details 테이블이 삭제되고 새 Order Details 테이블이 생성됩니다. Order_Details 테이블의 모든 데이터가 손실될 수 있습니다.
도구 메뉴를 열고 옵션을 클릭하여 데이터가 손실되면 스키마 업데이트 차단 확인란을 선택하여 데이터 손실을 방지할 수 있습니다. 또한 데이터베이스에 변경 내용을 배포하기 전에 항상 데이터베이스를 백업해야 합니다.