다음을 통해 공유


스키마 비교 개요

적용 대상: Microsoft Fabric의 SQL ServerAzure SQL Database Azure SQL Managed Instance SQL 데이터베이스

스키마 비교 도구를 사용하면 두 개의 데이터베이스 정의를 비교할 수 있습니다. 여기서 비교의 원본과 대상은 연결된 데이터베이스, SQL 데이터베이스 프로젝트 또는 .dacpac 파일의 조합일 수 있습니다. 비교가 완료되면 비교 결과는 원본 제어 차이와 비슷한 방식으로 대상을 원본과 동일하게 만드는 작업 집합으로 표시됩니다. 스키마 비교 인터페이스에서 대상을 직접 업데이트하거나(대상이 프로젝트 또는 데이터베이스인 경우) 동일한 효과의 업데이트 스크립트를 생성할 수 있습니다.

패키지와 데이터베이스 간의 개념적 차이점 스크린샷

스키마 비교는 다음 기능을 제공합니다.

  • 두 dacpac 파일, 데이터베이스 또는 SQL 프로젝트 간에 스키마를 비교합니다.
  • 원본과 일치하도록 대상에 대해 수행해야 하는 작업 세트로 결과를 표시합니다.
  • 결과에 나열된 작업을 선택적으로 제외합니다.
  • 비교 범위를 제어하는 옵션을 설정합니다.
  • 변경 내용을 대상에 직접 적용하거나 나중에 변경 내용을 적용하는 스크립트를 생성합니다.
  • 비교를 저장합니다.

기능

손쉬운 검토를 위해 원본과 대상 간의 차이점이 표에 표시됩니다. 다음 중 하나에서 파생된 데이터베이스 모델 간에 어느 방향으로든 비교할 수 있습니다.

  • 연결된 데이터베이스
  • SQL Database 프로젝트
  • .dacpac 파일

스키마 비교에서 변경 내용의 세부 정보를 줄 단위 수준에서 사용할 수 있는 스크립트 형식이나 결과 표의 각 차이점을 자세히 살펴보고 검토할 수 있습니다. 대상을 업데이트하기 전에 특정 차이점을 선택적으로 제외할 수도 있습니다. 스키마 비교 도구는 Visual Studio, Azure Data Studio 및 명령줄에서 사용할 수 있습니다.

스키마 비교 옵션

스키마 비교 옵션은 DacFx .NET 라이브러리에서 사용할 수 있는 배포 옵션에서 가져옵니다. 이러한 옵션에는 다음이 포함됩니다.

  • 공백 무시
  • 파티션 구성표 무시
  • 열 순서 무시
  • 원본에 없는 인덱스 삭제
  • 가능한 데이터 손실에 대한 차단

비교에 포함된 개체 형식도 구성할 수 있습니다. 이러한 개체에는 테이블, 저장 프로시저, 인덱스, 권한, 사용자 정의 형식 등이 포함됩니다.

스키마 비교 파일

스키마 비교에 대한 비교 정의는 스키마 비교 파일이라고 하는 .scmp 파일로 저장할 수 있습니다. 이 파일은 XML에 스키마 비교에 대한 정보를 저장하고 다음을 포함합니다.

  • 원본 및 대상 연결 정보
  • 비교 옵션
  • 제외된 개체 형식

추후 동일한 비교를 쉽게 실행하거나 다른 사용자와 비교를 공유하기 위해 Visual Studio 또는 Azure Data Studio에서 .scmp 파일을 열 수 있습니다.

스키마 비교 시작 및 사용

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

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

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

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

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

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

    Visual Studio의 스키마 비교 원본 선택 대화 상자 스크린샷

  3. 프로젝트, 데이터베이스 연결 또는 .dacpac 파일을 선택하여 스키마 비교 원본에 대한 선택을 완료합니다. 원본은 대상 변경의 기준으로 사용할 데이터베이스 정의입니다.

  4. 스키마 비교 창대상 선택 드롭다운 리스트에서 대상 선택을 고르면 대상 스키마 선택 대화 상자가 열립니다. 프로젝트, 데이터베이스 연결 또는 .dacpac 파일을 선택하여 스키마 비교 대상에 대한 선택을 완료합니다. 대상은 변경 내용을 평가하고 적용하려는 데이터베이스 정의입니다.

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

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

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

    Visual Studio에서 데이터베이스를 프로젝트와 비교하는 스키마 비교 인터페이스의 스크린샷

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

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

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

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

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

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

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

그래픽 스키마 비교는 Visual Studio의 SDK 스타일 SQL 프로젝트 미리 보기에서 아직 사용할 수 없습니다. Azure Data Studio를 사용하여 스키마를 비교합니다.

참고 항목

Visual Studio Code에서는 스키마 비교를 사용할 수 없습니다. Azure Data Studio 또는 Visual Studio를 사용하여 스키마를 비교합니다.

  1. 명령 팔레트(ctrl/cmd+shift+P)의 Azure Data Studio에서 스키마 비교를 검색하고 선택합니다.

    또는 데이터베이스 프로젝트 보기 또는 개체 탐색기 데이터베이스에서 데이터베이스 프로젝트를 마우스 오른쪽 단추로 클릭하고 스키마 비교를 선택합니다.

    Azure Data Studio 개체 탐색기의 스키마 비교 메뉴 항목 스크린샷

    스키마 비교 창이 열리고 시작 지점에 따라 원본 또는 대상이 미리 설정될 수 있습니다.

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

  2. 원본 또는 대상에 대한 줄임표 버튼을 선택하면 둘 중 하나 또는 둘 다를 업데이트할 수 있는 대화 상자가 열립니다. 프로젝트, 데이터베이스 연결 또는 .dacpac 파일을 선택하여 스키마 비교 원본에 대한 선택을 완료합니다. 원본은 대상 변경의 기준으로 사용할 데이터베이스 정의입니다. 대상은 변경 내용을 평가하고 적용하려는 데이터베이스 정의입니다.

    Azure Data Studio의 스키마 비교 원본 선택 대화 상자 스크린샷

    선택 영역이 완료되면 확인을 선택하여 대화 상자를 닫고 스키마 비교 창으로 돌아갑니다.

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

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

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

    Azure Data Studio에서 데이터베이스를 프로젝트와 비교하는 스키마 비교 인터페이스의 스크린샷

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

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

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

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

대상의 스키마를 업데이트하려면 두 가지 옵션이 있습니다. 대상이 데이터베이스 또는 프로젝트인 경우 적용 버튼을 사용하여 스키마 비교 창에서 직접 대상을 업데이트하거나, 스크립트 생성 버튼을 사용하여 대상이 데이터베이스인 경우 업데이트 스크립트를 생성할 수 있습니다. 생성된 스크립트는 Transact-SQL 편집기에 표시되며 여기에서 스크립트를 검사하고 데이터베이스에 대해 실행할 수 있습니다.

스키마 비교에는 Visual Studio 또는 Azure Data Studio와 같은 그래픽 도구가 필요합니다.