데이터베이스 스키마 비교 및 동기화

업데이트: 2010년 6월

이 항목은 다음 언어에 적용됩니다.

Visual Studio Ultimate

Visual Studio Premium

Visual Studio Professional 

Visual Studio Express

항목이 적용됨 항목이 적용됨 항목이 적용되지 않음 항목이 적용되지 않음

Visual Studio Premium 또는 Visual Studio Ultimate을 사용하여 대상 스키마와 소스 스키마를 비교할 수 있습니다. 각 차이점에 대해 소스와 일치하도록 대상을 업데이트할지 여부를 지정할 수 있습니다. 이러한 업데이트를 대상에 직접 쓰거나 업데이트 스크립트를 Transact-SQL 편집기 또는 파일로 내보낼 수 있습니다. 비교 내용을 데이터베이스 프로젝트의 일부나 독립 실행형 파일로 저장할 수도 있습니다. 비교 내용을 저장하면 보다 쉽게 비교를 반복하거나 동일한 소스 및 대상을 다시 동기화할 수 있습니다.

스키마 비교 형식

데이터베이스 스키마 정의가 포함된 다음 항목을 비교할 수 있습니다.

  • SQL Server 데이터베이스 - SQL Server 2008 또는 SQL Server 2005 인스턴스에서 실행되는 데이터베이스입니다.

  • 데이터베이스 프로젝트 - SQL Server 2008 또는 SQL Server 2005 데이터베이스에 대한 정의가 포함되어 있으며 빌드 시 .dbschema 파일을 생성하는 프로젝트입니다.

  • 서버 프로젝트 - SQL Server 2008 또는 SQL Server 2005 서버에 있는 '마스터' 데이터베이스의 개체와 서버 개체에 대한 정의가 포함되어 있으며 빌드 시 .dbschema 파일을 생성하는 프로젝트입니다.

  • DAC(데이터 계층 응용 프로그램 구성 요소) 프로젝트 - 빌드 시 .dacpac 파일을 생성하는 프로젝트입니다.

  • .dbschema 파일 - 데이터베이스 또는 서버 프로젝트를 빌드할 때의 출력입니다.

  • .dacpac 파일 - DAC(데이터 계층 응용 프로그램 구성 요소) 프로젝트를 빌드할 때의 출력입니다.

다음 표에서는 비교할 수 있는 스키마 형식과 대상에 업데이트를 쓸 수 있는지 여부를 보여 줍니다.

소스(세로) 및

대상(가로)

SQL Server 데이터베이스

데이터베이스 프로젝트

.dbschema 파일

서버 프로젝트

DAC 프로젝트

.dacpac 파일

SQL Server 데이터베이스

비교 + 업데이트

비교 + 업데이트

비교

비교 + 업데이트

비교

비교

데이터베이스 프로젝트

비교 + 업데이트

비교 + 업데이트

비교

없음

없음

없음

.dbschema 파일

비교 + 업데이트

비교 + 업데이트

비교

비교 + 업데이트

없음

없음

서버 프로젝트

비교 + 업데이트

없음

비교

비교 + 업데이트

없음

없음

DAC 프로젝트

비교

없음

없음

없음

비교 + 업데이트

비교

.dacpac 파일

비교

없음

없음

없음

비교 + 업데이트

비교

이 표를 읽으려면 맨 왼쪽 열에서 소스 스키마의 행을 찾습니다. 그런 다음 맨 위 행에서 대상 스키마의 열을 찾습니다. 해당 열과 행이 교차하는 지점에 소스와 대상을 비교만 할 수 있는지 아니면 비교 후 선택적으로 대상 스키마를 업데이트할 수 있는지에 대한 정보가 표시됩니다.

서버 스키마를 데이터베이스 스키마와 비교하거나 데이터베이스 스키마를 서버 스키마와 비교할 수는 없습니다. 여기에는 .dbschema 파일의 양식에 있는 스키마가 포함됩니다. 예를 들어 서버 프로젝트를 서버 프로젝트에서 만들어진 .dbschema 파일과 비교할 수 있습니다.

Visual Studio에서 두 데이터베이스 프로젝트가 동일한 솔루션 내에 포함되어 있는 경우에만 두 프로젝트를 비교할 수 있습니다.

경고

소스 데이터베이스를 대상 데이터베이스 프로젝트(.dbproj)와 비교할 수 있지만 대신 데이터베이스 프로젝트를 변경하고 해당 변경 내용을 데이터베이스에 배포해야 합니다. 프로젝트(.dbproj)는 버전 제어에서 관리되므로 프로젝트를 변경한 다음 배포하면 사용자가 변경한 내용과 팀의 다른 멤버가 변경한 내용이 충돌할 위험이 줄어듭니다.

데이터베이스 스키마 업데이트 시 데이터 손실 방지

스키마 비교를 사용하여 데이터베이스 스키마를 업데이트할 경우 데이터가 손실될 수 있습니다. 데이터 손실을 방지하려면 소스와 대상의 개체 이름에 주의를 기울여야 하는데 특히 대상의 스키마를 업데이트하기 전에 주의해야 합니다.

예를 들어 대상 데이터베이스가 아니라 소스 데이터베이스에 있는 Order_Details의 테이블 이름을 OrderDetails로 바꾼 다음 두 데이터베이스를 비교할 수 있습니다. 동기화하기 전에는 두 테이블 모두의 데이터가 동일합니다. 그러나 대상을 업데이트하면 Order_Details 테이블이 삭제되고 OrderDetails 테이블이 만들어집니다. 따라서 Order_Details 테이블의 모든 데이터가 손실될 수 있습니다.

데이터 손실을 방지하려면 도구 메뉴를 열고 옵션을 클릭한 다음 데이터가 손실되면 스키마 업데이트 차단 확인란을 선택합니다. 또한 데이터베이스에 업데이트를 쓰기 전에 항상 데이터베이스를 백업해야 합니다. 스키마를 비교할 때 비교 옵션을 지정할 수도 있습니다. 자세한 내용은 방법: 데이터베이스 스키마 비교 옵션 설정을 참조하십시오.

중요

리팩터링을 사용하여 데이터베이스 프로젝트의 개체 이름을 바꿀 경우 리팩터링 로그를 사용하여 데이터베이스를 빌드 및 배포할 때의 데이터 손실을 방지할 수도 있습니다. 이 로그를 통해 변경 의도를 보존할 수 있습니다. 예를 들어 테이블의 이름을 적절하게 바꿀 수 있습니다.

스키마 비교와 증분 배포의 차이점

기존 데이터베이스에 업데이트를 배포할 때의 프로세스는 스키마 비교를 사용하여 두 데이터베이스 스키마를 동기화할 때의 프로세스와 매우 비슷합니다. 그러나 스키마 비교의 경우에는 기본적으로 확장 속성이 무시된다는 중요한 차이점이 한 가지 있습니다.

확장 속성 및 사용 권한을 무시하지 않으려면 모든 스키마 비교 세션이나 현재 세션에 대해 스키마 비교 옵션을 변경합니다. 자세한 내용은 방법: 데이터베이스 스키마 비교 옵션 설정을 참조하십시오.

일반 작업

다음 표에서는 이 시나리오를 지원하는 일반적인 작업에 대한 설명과 해당 작업을 성공적으로 완료하는 방법에 대한 자세한 내용을 볼 수 있는 링크를 보여 줍니다.

일반 작업

지원 내용

실습: 기초 연습 과정을 따라 두 데이터베이스 또는 데이터베이스와 프로젝트(.dbproj)를 비교하는 방법을 익힐 수 있습니다.

연습: 두 데이터베이스의 스키마 비교

연습: 데이터베이스 및 데이터베이스 프로젝트의 스키마 비교

스키마 비교 방식을 제어하는 옵션 설정: 스키마가 비교되는 방식을 제어하는 정보를 구성할 수 있습니다. 공백, 파일 그룹 및 주석과 같은 특정 유형의 차이점은 무시할 수 있습니다. 사용자 또는 로그인과 같은 범주의 개체도 무시할 수 있습니다. 생성되는 업데이트 스크립트를 제어하는 옵션을 지정할 수도 있습니다.

방법: 데이터베이스 스키마 비교 옵션 설정

데이터베이스 또는 서버 개체 비교 및 필요한 경우 소스와 일치하도록 대상 업데이트: 비교할 소스 및 대상 스키마를 지정하고 스키마 비교 창에서 결과를 볼 수 있습니다. 차이점에 대한 자세한 정보와 데이터베이스를 동기화하는 데 사용되는 업데이트 스크립트를 볼 수 있습니다. 각 스키마 비교는 프로젝트나 독립 실행형 .scmp 파일에 저장할 수 있습니다. 소스 스키마와 대상 스키마 간의 각 차이점에 대해 수행할 작업을 지정한 다음 대상에 업데이트를 쓸 수 있습니다. 변경 내용을 대상에 적용하기 전에 검토할 수 있도록 업데이트 스크립트를 Transact-SQL 편집기나 파일로 내보낼 수도 있습니다.

방법: 데이터베이스 스키마 비교

스키마 비교 결과 이해

문제 해결: 데이터베이스 스키마를 비교하고 동기화할 때 발생할 수 있는 일반적인 문제를 해결하는 방법에 대해 알아보십시오.

스키마 비교 문제 해결

스키마 비교 결과 이해

스키마 비교 창에는 비교되는 각 개체에 대한 네 개의 열이 표시됩니다. 다음 표에서는 각 열의 내용에 대해 설명합니다.

상태

  • 같음 – 개체 정의가 동일하며 개체에 포함된 개체가 소스 스키마와 대상 스키마에서 동일합니다.

  • 새로 만들기 - 개체가 소스 스키마에만 있고 대상 스키마에는 없습니다.

  • 없음 - 개체가 대상 스키마에만 있고 소스 스키마에는 없습니다.

  • 다른 정의 – 소스 스키마의 개체 정의가 대상 스키마의 개체 정의와 다릅니다.

  • 다른 종속성 – 개체 정의는 동일하지만 개체에 포함된 개체가 소스 스키마와 대상 스키마에서 서로 다릅니다.

예를 들어 대상 스키마가 아니라 소스 스키마에서 테이블 정의를 변경한 다음 이를 비교할 수 있습니다. 이때 테이블은 다른 정의로 표시되고 이러한 테이블이 들어 있는 스키마는 다른 종속성으로 표시됩니다.

SourceName(소스 프로젝트/데이터베이스/프로젝트 파일(.dbschema))

비교하는 소스 프로젝트, 데이터베이스 또는 프로젝트 파일의 이름입니다.

업데이트 작업

  • 건너뛰기 - 대상 스키마에서 개체가 업데이트되지 않습니다. 개체에 변경된 종속 개체가 있는 경우 이 아이콘은 해당 행을 확장하여 차이가 있는 참조된 개체를 확인해야 함을 나타냅니다.

  • 참조 건너뛰기 – 개체가 참조되는 데이터베이스에 있으므로 이를 저장하거나 만들 필요가 없습니다.

  • 만들기 – 업데이트를 쓰거나 업데이트 스크립트를 실행할 때 개체가 만들어집니다.

  • 업데이트 – 업데이트를 쓰거나 업데이트 스크립트를 실행할 때 소스 스키마와 일치하도록 개체 정의가 업데이트됩니다.

  • 삭제 – 업데이트를 쓰거나 업데이트 스크립트를 실행할 때 개체가 대상 스키마에서 제거됩니다.

참고참고
기본 작업은 상태에 따라 결정됩니다."같음" 개체의 경우 기본 작업은 건너뛰기이며 이는 변경할 수 없습니다."새로 만들기" 개체의 경우 기본 작업은 만들기이지만 건너뛰기를 지정할 수 있습니다."없음" 개체의 경우 기본 작업은 삭제이지만 건너뛰기를 지정할 수도 있습니다."다른 정의"의 경우 기본 작업은 업데이트이지만 건너뛰기를 지정할 수 있습니다."다른 종속성"의 경우 기본 작업은 건너뛰기이며 이는 변경할 수 없습니다. 이 경우 개체는 같지만 해당 개체에 새 개체, 없는 개체 또는 변경된 개체가 포함되어 있습니다.

TargetName(대상 프로젝트/데이터베이스/프로젝트 파일(.dbschema))

비교하는 대상 프로젝트, 데이터베이스 또는 프로젝트 파일의 이름입니다.

관련 시나리오

변경 기록

날짜

변경 내용

이유

2010년 6월

고객 의견을 반영하여 이 항목의 첫 번째 표를 읽는 방법에 대한 정보를 추가했습니다.

고객 의견

2010년 8월

프로젝트가 동일한 솔루션에 포함되어 있는 경우에만 비교할 수 있다는 것을 명확히 설명했습니다.

고객 의견