다음을 통해 공유


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

업데이트: 2010년 7월

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

Visual Studio Ultimate

Visual Studio Premium

Visual Studio Professional 

Visual Studio Express

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

Visual Studio Premium 또는 Visual Studio Ultimate을 사용하면 두 데이터베이스 스키마를 비교할 수 있습니다. 이러한 스키마는 데이터베이스, 데이터 계층 응용 프로그램 프로젝트, 데이터베이스 프로젝트 또는 데이터베이스 프로젝트의 빌드 출력(.dbschema 파일)으로 표현될 수 있습니다. 비교하는 엔터티를 소스 및 대상이라고 합니다. 스키마 비교가 완료되면 해당 결과가 스키마 비교 창에 나타납니다. 또한 Visual Studio에서는 다른 스키마를 동기화하는 데 사용할 수 있는 DDL(데이터 정의 언어) 스크립트를 생성합니다.

반복적으로 데이터베이스 프로젝트를 대상 데이터베이스와 비교하려면 데이터베이스 프로젝트에 스키마 비교를 추가합니다. 그런 다음 해당 비교를 다시 열어서 스키마를 다시 비교할 수 있습니다. 스키마 비교를 저장하면 연결 정보, 세션 관련 옵션 및 SQLCMD 변수 값이 저장됩니다. 결과는 저장되지 않으며 저장된 스키마 비교의 .scmp 파일을 열 때 다시 생성됩니다.

비교가 완료된 후 다른 단계를 수행할 수 있습니다.

  • 두 데이터베이스 간의 구조적 차이점을 볼 수 있습니다. 자세한 내용은 스키마 차이 확인을 참조하십시오.

  • 스키마를 동기화하려는 경우 업데이트 스크립트 새로 고침을 클릭하여 스키마를 동기화하는 데 사용되는 전체 스크립트를 확인할 수 있습니다.

  • 소스와 일치하도록 대상의 일부 또는 전체를 업데이트할 수 있습니다. 자세한 내용은 데이터베이스 또는 서버 개체 동기화를 참조하십시오.

  • 대상 및 소스에 있는 데이터를 비교할 수 있습니다. 자세한 내용은 방법: 두 데이터베이스의 데이터 비교 및 동기화를 참조하십시오.

스키마 비교 시나리오에 대한 자세한 내용은 데이터베이스 스키마 비교 및 동기화를 참조하십시오.

VSDBCMD.EXE를 사용하여 명령 프롬프트에서 .dbschema 파일을 비교할 수도 있습니다. 예를 들어 대상 서버에 직접 액세스할 수 없을 때 이 작업을 수행하여 업데이트 스크립트를 생성하고 대상 데이터베이스를 업데이트할 수 있습니다.

항목 내용

스키마 비교를 사용하여 두 스키마를 비교하려면

  1. 두 스키마를 비교만 하고 사용한 설정을 데이터베이스 프로젝트의 일부로 저장하지 않으려면 다음 단계를 수행합니다.

    1. 데이터 메뉴를 열고 스키마 비교를 가리킨 다음 새 스키마 비교를 클릭합니다.

    2. 3단계로 건너뜁니다.

  2. 두 스키마를 비교한 다음 사용한 설정을 데이터베이스 프로젝트의 일부로 저장하려면 다음 단계를 수행합니다.

    1. 솔루션 탐색기에서 스키마 비교 폴더를 마우스 오른쪽 단추로 클릭하고 추가를 가리킨 다음 스키마 비교를 클릭합니다.

      새 항목 추가 대화 상자가 나타납니다.

    2. 이름에서 스키마 비교에 지정할 이름을 입력한 다음 추가를 클릭합니다.

  3. 각 스키마에 대해 프로젝트, 데이터베이스 또는 데이터베이스 스키마 파일을 클릭하여 비교할 소스와 대상을 지정합니다.

    참고

    대상 스키마에 대한 데이터베이스 스키마 파일을 지정할 수 있지만 이를 업데이트할 수는 없습니다. 지원되는 비교 시나리오의 전체 목록은 데이터베이스 스키마 비교 및 동기화를 참조하십시오.

  4. 소스 또는 대상에 대해 데이터베이스를 클릭한 경우 목록에서 클릭하여 데이터 소스에 연결합니다.

    해당 데이터베이스가 목록에 표시되지 않으면 새 연결을 클릭합니다. 연결 속성 대화 상자에서 소스 또는 대상이 있는 서버와 서버에 연결하는 데 사용할 인증 형식을 확인합니다. 필요한 경우 해당 서버의 데이터베이스를 클릭합니다. 끝마쳤으면 확인을 클릭합니다.

    참고

    연결을 설정한 후 솔루션 탐색기데이터 연결 아래에 연결이 나타납니다.

  5. 소스 또는 대상에 대해 데이터베이스 스키마 파일을 클릭한 경우 경로 및 파일 이름을 입력하거나 찾아보기를 클릭하여 파일을 지정합니다.

  6. (선택 사항) 옵션을 클릭하여 비교할 개체, 무시할 차이 유형 및 생성된 업데이트 스크립트에 포함할 내용을 지정합니다.

    중요

    기본적으로 스키마 비교 세션에서는 도구 메뉴를 열고 옵션을 클릭하여 구성한 옵션이 사용됩니다. 확장 속성을 무시하지 않으려면 옵션을 클릭하여 해당 설정을 변경합니다. 스키마 비교의 옵션을 설정하는 방법에 대한 자세한 내용은 방법: 데이터베이스 스키마 비교 옵션 설정을 참조하십시오.

  7. (선택 사항) SQLCMD 변수를 클릭하여 변수 목록과 해당 값이 들어 있는 .sqlcmdvars 파일을 지정합니다.

    참고

    두 프로젝트(데이터베이스 프로젝트, 서버 프로젝트 또는 데이터 계층 응용 프로그램 프로젝트)를 비교하는 경우에만 SQLCMD 변수를 지정할 수 있습니다.

    변수 값은 스키마가 비교될 때 해당 데이터베이스 프로젝트에서 대체됩니다.

  8. 확인을 클릭합니다.

    스키마 비교가 시작됩니다.

    참고

    도구 모음에서 중지를 클릭하여 진행 중인 비교를 중지할 수 있습니다.

Visual Studio 자동화 모델을 사용하여 스키마를 비교하려면

  1. 보기 메뉴를 열고 다른 창을 가리킨 다음 명령 창을 클릭합니다.

  2. 명령 창에서 다음 명령을 입력합니다.

    Data.NewSchemaComparison sourceIdentifier targetIdentifier
    

    sourceIdentifier를 다음 중 하나로 바꿉니다.

    • /ProviderType ConnectionBased /ConnectionString "myConnectString"

    • /ProviderType ConnectionBased /ConnectionName myConnectionName

    • /ProviderType ProjectBased /ProjectName myFileName.dbproj

    • /ProviderType FileBased /ProjectName myFileName.dbschema

    • /ProviderType FileBased /ProjectName myFileName.dacpac

    targetIdentifier를 다음 중 하나로 바꿉니다.

    • /ProviderType ConnectionBased /ConnectionString "myConnectString"

    • /ProviderType ConnectionBased /ConnectionName myConnectionName

    • /ProviderType ProjectBased /ProjectName myFileName.dbproj

    • /ProviderType FileBased /ProjectName myFileName.dbschema

    • /ProviderType FileBased /ProjectName myFileName.dacpac

    소스 및 대상을 지정하지 않으면 새 스키마 비교 대화 상자가 나타납니다. Data.NewSchemaComparison 명령의 매개 변수에 대한 자세한 내용은 Visual Studio의 데이터베이스 기능에 대한 자동화 명령 참조를 참조하십시오.

    지정한 소스와 대상의 개체 및 설정이 비교되고, 스키마 비교 세션에 선택적으로 저장할 수 있는 결과가 나타납니다. 결과를 보거나 스키마를 동기화하는 방법에 대한 자세한 내용은 스키마 차이 보기 및 데이터베이스 또는 서버 개체 동기화를 참조하십시오.

스키마 비교를 처음으로 저장하려면

  1. 파일 메뉴에서 SchemaComparisonName.scmp 저장을 클릭합니다.

    다른 이름으로 파일 저장 대화 상자가 열립니다.

  2. 스키마 비교의 경로와 파일 이름을 지정합니다.

    비교가 데이터베이스 프로젝트의 일부인 경우 이 비교는 해당 프로젝트의 SchemaComparisons 폴더에 저장됩니다.

  3. 저장을 클릭합니다.

    지정한 위치에 스키마 비교가 저장됩니다.

스키마 차이 보기

소스 스키마와 대상 스키마를 비교한 다음 해당 결과를 스키마 비교 창에 트리로 표시하여 두 스키마의 차이를 확인할 수 있습니다. 예를 들어 소스에는 있는데 대상에는 없는 개체만 표시할 수 있습니다. 특정 개체가 어떤 점에서 다른지를 자세히 보고, 결과를 새로 고쳐 최근 변경 내용을 반영할 수도 있습니다.

또한 대상을 소스와 동기화하는 스크립트의 Transact-SQL 명령으로 결과를 볼 수도 있습니다. 스키마 업데이트 스크립트 창이나 Transact-SQL 편집기에 이 스크립트를 표시할 수 있으며, 스크립트를 파일로 내보낼 수도 있습니다. 대상을 소스와 일치하도록 업데이트하려면 곧바로 이 스크립트를 실행하여 스키마를 동기화하거나, 스크립트를 수정한 다음 실행합니다. 자세한 내용은 데이터베이스 또는 서버 개체 동기화를 참조하십시오.

결과를 유형별로 필터링하려면

  1. 스키마 비교 도구 모음에서 필터를 클릭합니다.

  2. 하나 이상의 필터를 클릭하여 표시할 결과 집합을 지정합니다.

    참고

    필터 설정은 .scmp 파일과 함께 저장되며 소스 및 대상 스키마를 변경할 때도 유지됩니다.

개체 정의 내에서 변경 내용을 보려면

  • 표에서 상태가 "새로 만들기", "없음" 또는 "모양별로 다름"인 행을 클릭합니다.

비교 결과를 새로 고치려면

  • 스키마 비교 도구 모음에서 새로 고침을 클릭합니다.

    소스와 대상이 다시 비교되고 비교 결과가 업데이트됩니다.

동기화 스크립트를 보려면

  • 데이터 메뉴에서 스키마 비교를 가리킨 다음 스키마 업데이트 스크립트 표시를 클릭합니다.

    참고

    스키마 업데이트 스크립트 표시를 사용할 수 없으면 지정한 대상에 대해 스크립트를 생성할 수 없거나 비교를 새로 고쳐야 하는 경우입니다. 예를 들어 대상 스키마가 .dbschema 파일인 경우에는 업데이트 스크립트를 만들 수 없습니다.

    스키마 업데이트 스크립트 창이 나타나고 대상을 소스와 일치하도록 업데이트하는 데 사용할 수 있는 스크립트가 표시됩니다.

    참고

    스키마 업데이트 스크립트 창이 열려 있는 경우에는 스키마 업데이트 스크립트 새로 고침을 클릭할 수도 있습니다.

Transact-SQL 편집기에서 동기화 스크립트를 열려면

  • 데이터 메뉴에서 스키마 비교, 내보내기를 차례로 가리킨 다음 편집기를 클릭합니다.

    Transact-SQL 편집기가 나타나고 대상을 소스와 일치하도록 업데이트하는 데 사용할 수 있는 스크립트가 표시됩니다.

동기화 스크립트를 파일에 저장하려면

  1. 데이터 메뉴에서 스키마 비교, 내보내기를 차례로 가리킨 다음 파일을 클릭합니다.

    스키마 업데이트 스크립트 저장 대화 상자가 나타납니다.

  2. 개체 이름에 동기화 스크립트에 지정할 이름을 입력하고 저장을 클릭합니다.

    스크립트가 지정한 파일 이름으로 저장됩니다.

데이터베이스 또는 서버 개체 동기화

소스와 대상의 스키마를 비교한 후 전체 스키마를 동기화하거나 해당 스키마 내의 지정한 데이터베이스 개체만 동기화할 수 있습니다. 자세한 내용은 데이터베이스 스키마 비교 및 동기화를 참조하십시오.

소스와 대상이 모두 동일한 서버에 있는 경우 스키마를 동기화하려고 하면 오류가 발생할 수 있습니다. 파일 그룹 파일과 같은 대상 파일은 서버에 해당 파일이 이미 있는 경우 소스와 동일한 이름으로 만들 수 없기 때문에 이 오류가 발생합니다. 이 문제를 해결하려면 충돌하는 파일에 대해 업데이트 작업건너뛰기로 변경합니다.

참고

비교하는 데이터베이스를 소스와 대상이라고 합니다. 데이터베이스 스키마를 동기화하는 경우 대상을 업데이트하며 소스는 변경하지 않고 그대로 둡니다. 프로젝트 파일(.dbschema)을 대상으로 지정할 수 있지만 프로젝트 파일은 업데이트할 수 없습니다.

대상 스키마를 업데이트하려면

  1. 두 스키마를 비교합니다.

    비교가 완료되면 스키마 비교 창에 비교된 데이터베이스 개체가 나열됩니다. 각 행이 하나의 데이터베이스 개체를 나타냅니다.

  2. (선택 사항) 업데이트 작업 열에서 결과 목록의 각 개체에 대해 업데이트를 적용할지 건너뛸지를 지정합니다.

    개별 동기화 작업은 즉시 수행되지 않고 다음 단계의 일괄 처리 실행을 위해 저장됩니다.

    참고

    특정 형식의 모든 개체에 대한 업데이트 작업 열을 다시 설정하려면 테이블 노드 등 해당 형식의 노드를 마우스 오른쪽 단추로 클릭하고 기본값 복원을 클릭합니다. 특정 형식의 모든 개체에 대해 업데이트 작업 열을 특정 상태로 설정하려면 해당 형식의 노드를 마우스 오른쪽 단추로 클릭한 다음 모두 만들기, 모두 업데이트 또는 모두 건너뛰기를 클릭합니다.

  3. 서로 다르거나 누락되었거나 새로운 데이터베이스 개체를 동기화하려면 다음 작업 중 하나를 수행합니다.

    • 즉시 대상을 업데이트하려면 업데이트 쓰기를 클릭합니다.

      이 옵션은 건너뛰기로 표시된 개체를 제외하고 소스에서 선택한 데이터베이스 개체의 스키마를 대상의 해당 개체에 적용합니다. 이 동기화는 대상 개체의 업데이트, 생성 또는 삭제를 의미합니다.

      중요

      스키마가 업데이트되는 동안 대상에 쓰기 중지를 클릭하여 작업을 취소할 수 있습니다. 업데이트를 중지하면 대부분의 개체 형식에 대해 변경 내용이 전파되지 않습니다. 하지만 사용자 및 역할 개체의 경우 트랜잭션에 래핑될 수 없으므로 이러한 개체의 특정 변경 내용을 롤백하지 못할 수도 있습니다.

    • 대상을 업데이트하기 전에 변경 내용을 검토하려면 스키마 업데이트 스크립트 창을 사용하거나 편집기로 내보내기를 클릭합니다.

      이 옵션은 Transact-SQL 스크립트를 생성하여 Transact-SQL 편집기 창에서 엽니다. 대상에 대해 스크립트를 실행하기 전에 스크립트를 검토하고 필요한 경우 수정할 수 있습니다. 생성된 Transact-SQL 스크립트는 업데이트 쓰기를 클릭하면 실행되는 스크립트와 일치합니다.

      참고

      Visual Studio에서는 업데이트 쓰기 작업이 완료된 후 스키마 비교 창에 표시되는 결과를 자동으로 새로 고치지 않습니다. 대신 상태 표시줄이 업데이트되어 새로 고침을 클릭하라는 메시지가 표시됩니다. 이 동작은 다시 스키마를 비교할 수 있는 옵션을 제공하며, 스키마가 큰 경우 작업을 수행하는 데 오랜 시간이 걸릴 수 있습니다.

    • 변경 내용을 Transact-SQL 편집기에서 보지 않고 파일로 저장하려면 파일로 내보내기를 클릭합니다.

      이 옵션은 Transact-SQL 스크립트를 생성한 다음 지정한 파일 이름으로 저장합니다. 생성된 스크립트는 업데이트 쓰기를 클릭하면 실행되는 스크립트와 일치합니다. 제공한 스크립트를 사용하여 나중에 다른 사람이 대상을 업데이트할 경우나 다른 사람이 스크립트에 대한 추가 변경 작업을 수행해야 하는 경우에 이 방법을 사용합니다.

VSDBCMD.EXE를 사용하여 스키마 비교

액세스할 수 없는 데이터베이스의 배포 스크립트를 생성해야 할 경우가 있습니다. 배포할 프로젝트의 .dbschema 파일 또는 대상 데이터베이스의 현재 상태를 나타내는 .dbschema가 있을 경우 VSDBCMD.EXE를 사용하여 이 작업을 수행할 수 있습니다. 대상 스키마가 없으면 데이터베이스 관리자에게 문의하여 이 단원의 두 번째 절차를 사용하여 해당 스키마를 가져올 수 있습니다.

VSDBCMD.EXE 도구와 지원 파일이 있는 컴퓨터에서는 이 두 가지 절차를 모두 수행할 수 있습니다. %PROGRAM FILES%\Microsoft Visual Studio 10.0\VSTSDB\Deploy 폴더 및 하위 폴더에서 필요한 파일을 모두 찾을 수 있습니다. 자세한 내용은 VSDBCMD.EXE 명령줄 참조(배포 및 스키마 가져오기)를 참조하십시오.

명령 프롬프트에서 스키마를 비교하려면

  1. 명령 프롬프트를 엽니다.

  2. VSDBCMD.EXE가 있는 폴더로 폴더를 변경합니다.

  3. 명령 프롬프트에서 vsdbcmd.exe /a:deploy /dd:- /dsp:sql /model:ProjectName.dbschema /targetmodelfile:TargetDatabase.dbschema /DeploymentScriptFile:OutputFilename.sql /p:TargetDatabase="TargetDatabaseName" 명령을 입력합니다.

    ProjectName을 데이터베이스 프로젝트를 빌드하여 만든 .dbschema 파일 이름으로 바꿉니다. TargetDatabase를 대상 데이터베이스의 스키마가 있는 .dbschema 파일 이름으로 바꿉니다. OutputFilename을 배포 스크립트를 제공할 이름으로 바꿉니다. TargetDatabaseName을 업데이트할 데이터베이스 이름으로 바꿉니다.

    참고

    데이터베이스 프로젝트의 배포 전 스크립트와 배포 후 스크립트를 포함하려는 경우 /ManifestFile:ProjectName.deploymanifest와 같이 명령줄에 매개 변수 하나를 추가할 수 있습니다. 프로젝트 폴더 아래 sql 폴더의 하위 폴더에서 .deploymanifest 파일을 찾을 수 있습니다.

  4. 이제 OutputFilename.sql 파일을 사용하여 대상 서버에 업데이트를 배포하거나 데이터베이스 관리자에게 업데이트를 요청할 수 있습니다.

대상 스키마를 가져오려면

  1. 명령 프롬프트를 엽니다.

  2. VSDBCMD.EXE가 있는 폴더를 찾습니다.

  3. 명령 프롬프트에서 vsdbcmd.exe /a:Import /dsp:sql /model:TargetDatabase.dbschema /cs:ConnectionString 명령을 입력합니다.

    TargetDatabase를 대상 데이터베이스에서 가져올 .dbschema 파일 이름으로 바꿉니다. ConnectionString을 대상 데이터베이스에 대한 연결 문자열로 바꿉니다. 예를 들어 /cs:"Data Source=MyServer/SQL2K8;Integrated Security=True;Pooling=False;Initial Catalog=MyDatabase"를 지정할 수 있습니다.

    명령이 완료되면 .dbschema 파일이 만들어집니다. 이 파일에는 스키마를 가져온 데이터베이스의 스키마 정의가 있습니다. 자세한 내용은 방법: 명령 프롬프트에서 스키마 가져오기VSDBCMD.EXE 명령줄 참조(배포 및 스키마 가져오기)를 참조하십시오.

참고 항목

작업

방법: 두 데이터베이스의 데이터 비교 및 동기화

개념

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

변경 기록

날짜

변경 내용

이유

2010년 7월

명령 프롬프트에서 VSDBCMD.EXE를 사용하여 스키마를 비교하는 방법에 대한 정보가 추가되었습니다.

고객 의견