방법: 스키마 비교를 사용하여 서로 다른 데이터베이스 정의 비교

SSDT(SQL Server Data Tools)에는 두 데이터베이스 정의를 비교하는 데 사용할 수 있는 스키마 비교 유틸리티가 포함되어 있습니다. 비교의 원본과 대상은 연결된 데이터베이스, SQL Server 데이터베이스 프로젝트나 스냅샷 또는 .dacpac 파일의 조합일 수 있습니다. 비교 결과는 대상을 원본과 동일하게 만들기 위해 수행해야 하는 일련의 작업으로 표시됩니다. 비교가 완료되면 대상을 직접 업데이트하거나(대상이 프로젝트 또는 데이터베이스인 경우) 같은 효과가 있는 업데이트 스크립트를 생성할 수 있습니다.

손쉬운 검토를 위해 원본과 대상 간의 차이점이 표에 표시됩니다. 결과 표 또는 스크립트 형식의 각 차이점을 자세히 살펴보고 검토할 수 있습니다. 그런 다음 특정 차이점을 선택적으로 제외할 수 있습니다.

SQL Server 데이터베이스 프로젝트의 일부 또는 독립 실행형 파일로 비교를 저장할 수 있습니다. 비교 범위 및 업데이트 측면을 제어하는 옵션을 설정할 수도 있습니다. 그런 다음 나중에 동일한 비교를 쉽게 반복하거나 새 비교의 시작점으로 사용할 수 있도록 비교를 저장할 수 있습니다.

Warning

비교할 대상으로 프로젝트를 지정할 경우 프로젝트에 대해 지원되는 최대 경로 길이(드라이브 문자, 콜론 및 선행 백슬래시 제외)는 256자입니다. 프로젝트 경로가 256자를 초과하더라도 해당 스키마를 데이터베이스 또는 다른 프로젝트와 비교할 수 있습니다. 그러나 해당 스키마를 업데이트할 수는 없습니다.

다음 절차에서는 데이터베이스 프로젝트의 스키마를 연결된 데이터베이스와 비교합니다. 테이블 관리, 관계, 오류 수정프로젝트 기반 오프라인 데이터베이스 개발 섹션의 이전 절차에서 만든 엔터티를 사용합니다.

데이터베이스 정의 비교 도구

  1. 도구 메뉴에서 SQL Server를 선택한 다음 새 스키마 비교를 선택합니다.

    또는 솔루션 탐색기에서 TradeDev 프로젝트를 마우스 오른쪽 단추로 클릭하고 스키마 비교를 선택합니다.

    스키마 비교 창이 열리면 Visual Studio가 SqlSchemaCompare1과 같은 이름을 자동으로 할당합니다.

    스키마 비교 창 툴바 바로 아래에 녹색 화살표가 있는 두 개의 드롭다운 메뉴가 나타납니다. 이러한 메뉴를 사용하면 비교 원본 및 대상에 대한 데이터베이스 정의를 선택할 수 있습니다.

  2. 원본 선택 드롭다운에서 원본 선택을 선택하면 원본 스키마 선택 대화 상자가 열립니다.

    프로젝트 이름을 마우스 오른쪽 단추로 클릭하여 스키마 비교 창을 연 경우 원본 스키마가 이미 채워져 있으며 4단계로 진행할 수 있습니다.

  3. 프로젝트 라디오 단추를 선택한 다음 이전 절차에서 만든 TradeDev 데이터베이스 프로젝트를 선택합니다.

  4. 스키마 비교 창대상 선택 드롭다운에서 대상 선택을 고르면 대상 스키마 선택 대화 상자가 열립니다. 스키마 구역에서 데이터베이스 라디오 단추를 선택한 다음 새 연결 단추를 선택합니다.

  5. 연결 속성 대화 상자에서 TradeDev 데이터베이스가 있는 서버 이름을 입력하고 올바른 인증 자격 증명이 제공되었는지 확인합니다. 그런 다음 데이터베이스에 연결TradeDev를 선택하고 OK를 선택합니다.

    스키마 비교 창 툴바에서 옵션 단추를 선택하여 비교할 개체, 무시할 차이 형식 및 기타 설정을 지정할 수도 있습니다.

  6. 스키마 비교 창 툴바에서 비교 단추를 선택하여 비교 프로세스를 시작합니다.

    비교가 완료되면 프로젝트와 데이터베이스 간의 구조적 차이가 창의 위쪽 부분에 있는 결과 창에 나타납니다. 기본적으로 비교 결과 그룹은 모든 차이점을 작업(예: 삭제, 변경 또는 추가)으로 그룹화합니다. 결과 창에는 데이터베이스 정의 간에 다른 각 데이터베이스 개체에 대한 행이 표시됩니다. 각 행은 원본 또는 대상 스키마(또는 둘 다)의 개체 및 대상 개체를 원본 개체와 동일하게 만들기 위해 대상 스키마에서 수행할 작업을 식별합니다. 개체를 리팩터링하고 이름을 바꾸거나 새 스키마로 이동한 경우 원본과 대상 이름이 다르고 원본 이름이 굵은 글꼴로 표시되어 차이점을 강조 표시합니다.

    기본적으로 결과 목록은 두 스키마에서 동일하거나 업데이트에 지원되지 않는 개체(예: 기본 제공 개체)를 숨깁니다. 도구 모음에 있는 해당 필터 단추를 선택하여 이러한 개체를 표시할 수 있습니다.

    그룹화 기본 설정을 변경하려면 도구 모음에서 그룹 결과 드롭다운 목록을 선택합니다. 형식을 선택하여 결과를 개체 형식별(예: 테이블, 보기 또는 저장 프로시저별)로 그룹화합니다.

  7. Tables 그룹에서 Products 테이블을 찾습니다. 행을 선택하면 개체 정의 창에 차이가 강조 표시된 테이블의 원본 및 대상 정의가 나타납니다. 결과 창에서 Products 테이블 행을 확장하여 테이블의 다른 특정 요소를 검사할 수도 있습니다.

  8. 기본적으로 모든 차이점은 대상 업데이트 작업의 범위에 포함됩니다. 동기화하지 않으려는 차이점을 제외할 수 있습니다. 이렇게 하려면 각 행의 가운데에 있는 작업 열을 선택 취소합니다. 또는 스키마 창에서 행을 마우스 오른쪽 단추로 클릭하고 제외를 선택합니다. 행이 즉시 회색으로 표시됩니다. 대상 데이터베이스를 업데이트할 때 이 행은 보류 중인 변경 내용으로 고려되지 않습니다.

    그룹 행을 마우스 오른쪽 단추로 클릭하고 모두 제외 또는 모두 포함을 선택할 수도 있습니다. 이는 해당 그룹의 모든 차이점을 선택 취소 또는 선택하는 것과 같습니다. 스키마별로 결과를 그룹화할 때 이것은 특정 스키마에 대한 모든 변경 내용을 포함하거나 제외하는 유용한 방법입니다.

    • 제외되는 행에 종속 개체(예: 행에서 참조하는 테이블 행)가 있는 경우 제외된 행은 비활성화되지만 해당 확인란의 선택은 취소되지 않습니다. 해당 행에 종속된 모든 행이 선택 취소이면 사용 중지된 행은 해제됩니다. 또한 행을 리팩터링(이름을 바꾸거나 다른 스키마로 이동)하는 경우 해당 행과 해당 종속 자식 행에 대해 확인란을 사용할 수 없습니다.

      비교를 새로 고치면 건너뛰도록 선택한 차이점이 무시됩니다.

    • SQLCMD 변수를 사용하는 경우 스키마 비교 도구는 프로젝트 속성에서 로컬 값을 사용하며 기본값은 무시됩니다. 자세한 내용은 데이터베이스 프로젝트 설정을 참조하세요.

대상의 스키마를 업데이트하려면 두 가지 옵션이 있습니다. 대상이 데이터베이스 또는 프로젝트이면 스키마 비교 창에서 대상을 직접 업데이트할 수 있고 대상이 데이터베이스 또는 데이터베이스 파일이면 업데이트 스크립트를 생성할 수 있습니다. 생성된 스크립트는 Transact-SQL 편집기에 표시되며 여기에서 스크립트를 검사하고 데이터베이스에 대해 실행할 수 있습니다. 다음 절차에서는 이러한 옵션을 추가로 설명합니다.

Warning

변경 내용으로 인해 열이 NOT NULL에서 NULL로 바뀌고 결과적으로 데이터가 손실되므로 업데이트가 실패합니다. 업데이트를 계속하려면 스키마 비교 툴바의 옵션 단추(왼쪽에서 다섯 번째 단추)를 선택하고 데이터 손실인 경우 증분 배포 차단 옵션을 선택 취소합니다.

Visual Studio 자동화 모델을 사용해서 스키마 비교

  1. 보기 메뉴를 열고 다른 창을 가리킨 후 명령 창을 선택합니다.

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

    Tools.SSDTNewSchemaComparison
    

스키마 비교 창에서 직접 업데이트

  1. 스키마 비교 창의 툴바에서 업데이트 단추를 선택합니다.

  2. 생성된 변경 스크립트를 검사합니다. 파일/새 메뉴를 사용하여 스크립트를 저장할 수 있습니다. 이는 프로덕션 데이터베이스를 업데이트할 권한이 없는 경우에 유용할 수 있으며, 이 경우 나중에 배포를 위해 DBA에 스크립트를 제공할 수 있습니다.

  3. 데이터베이스를 업데이트하는 데 필요한 권한이 있는 경우 편집 창 툴바에서 쿼리 실행 단추를 선택하여 스크립트를 실행합니다.

스크립트로 업데이트

  1. 스키마 비교 창의 툴바에서 스크립트 생성 단추(왼쪽에서 네 번째)를 선택합니다.

    생성된 스크립트가 새 Transact-SQL 편집기 창에 표시됩니다.

    Warning

    SSDT 스냅샷 프로세스에서 생성된 .dacpac 파일만 이 동작을 지원합니다. 현재는 SQL DAC(데이터 계층 애플리케이션) 도구 또는 프레임워크에서 생성된 .dacpac 파일을 대상으로 지정할 수 없습니다.

  2. 생성된 변경 스크립트를 검사합니다. 파일/저장 또는 파일/다른 이름으로 저장 메뉴 명령을 사용하여 스크립트를 저장할 수 있습니다.

    저장된 스크립트는 프로덕션 데이터베이스를 업데이트할 권한이 없는 경우에 유용할 수 있습니다. 이러한 경우 나중에 배포를 위해 DBA에 스크립트를 제공할 수 있습니다.

    또는 Transact-SQL 편집기를 해당 서버에 연결하여 직접 스크립트를 실행할 수 있습니다. 이 절차를 수행하기 전에 데이터베이스를 만들거나 업데이트하는 데 필요한 권한이 있어야 합니다. 데이터베이스를 업데이트하는 데 필요한 권한이 있는 경우 편집 창 툴바에서 쿼리 실행 단추를 선택하여 스크립트를 실행합니다.

  3. 연결 단추를 선택합니다. 이 작업은 현재 서버에 연결하거나 서버에 연결 대화 상자에서 서버를 입력하거나 선택하라는 메시지를 표시합니다. 데이터베이스 이름은 스크립트에 명령 변수로 정의됩니다.

  4. 스크립트를 검사하고 필요한 경우 대상 데이터베이스 이름 및 연결된 접두사 및 파일 경로를 정의하는 명령 변수를 변경합니다.

  5. 편집 창 툴바의 실행 단추를 선택하여 스크립트를 실행합니다.

참고 항목