데이터 계층 응용 프로그램 업그레이드

배포된 DAC(데이터 계층 응용 프로그램)를 새 버전으로 업그레이드하는 프로세스는 스크립트를 사용하여 데이터베이스나 데이터베이스 변경 내용을 배포하는 것보다 간단합니다. 데이터베이스 개발자는 새 버전의 스키마와 속성을 기술하는 DAC 패키지를 작성하기면 하면 됩니다. DAC 업그레이드 프로세스에서는 새 스키마를 배포된 기존 스키마와 비교하고 새 스키마를 변경하는 데 필요한 동작을 동적으로 수행합니다.

업그레이드 프로세스

SQL Server 데이터 계층 응용 프로그램 업그레이드 프로세스에서는 배포된 DAC를 같은 응용 프로그램의 다른 버전으로 변환합니다. 예를 들어 Finance 버전 1.0을 Finance 버전 2.0으로 업그레이드합니다. 다음 단계에서는 간단한 배포 프로세스를 보여 줍니다.

  • 개발자가 Finance 버전 1.0 DAC 개발을 완료하고 FinanceVersion1.dacpac DAC 패키지를 만듭니다.

  • 데이터베이스 관리자가 Finance 1.0 DAC를 프로덕션 환경으로 배포합니다. 이제 데이터베이스 엔진의 프로덕션 인스턴스에는 응용 프로그램 이름이 Finance이고 버전이 1.0이며 Finance라는 데이터베이스가 연결된 배포된 DAC가 포함됩니다.

  • 데이터베이스 개발자가 다음 버전 개발을 시작하고 작업을 완료하여 FinanceVersion2.dacpac를 만듭니다.

  • 데이터베이스 관리자는 DAC 업그레이드 프로세스를 계획합니다. 관리자는 Finance 데이터베이스를 백업합니다. 또한 DAC 패키지의 내용과 업그레이드에서 수행할 조치 보고서를 검토하여 이러한 사항들이 프로덕션 데이터베이스에서 문제를 일으키지 않는지 확인합니다.

  • 데이터베이스 관리자는 현재 배포된 버전 1.0 DAC와 버전 2.0 DAC 패키지를 모두 지정하는 DAC 업그레이드를 수행합니다. 업그레이드를 수행하는 옵션에는 두 가지가 있습니다.

    • DAC IncrementalUpgrade() 메서드를 호출하는 Windows PowerShell 스크립트를 사용하여 전체 업그레이드를 수행합니다. 전체 업그레이드는 기존 데이터베이스의 스키마를 새 DAC 버전에 정의된 스키마와 일치하도록 변경합니다.

    • DAC Upgrade() 메서드 또는 데이터 계층 응용 프로그램 업그레이드 마법사를 사용하여 병렬 업그레이드를 수행합니다. 병렬 업그레이드는 새 스키마를 사용하여 새 데이터베이스를 만들고 원본 데이터베이스의 데이터를 새 데이터베이스로 전송합니다.

  • 업그레이드가 완료되면 업그레이드된 DAC는 여전히 응용 프로그램 이름이 Finance이고 연결된 데이터베이스 이름이 Finance이지만 이제 DAC 버전은 2.0입니다.

배포 후 데이터베이스 변경 내용

DAC 업그레이드 외의 다른 메커니즘을 사용하여 데이터베이스가 변경된 경우 이 데이터베이스는 연결된 DAC와 다르게 변형되었다고 할 수 있습니다. 그 예로 CREATE TRIGGER 문을 사용하여 새 트리거를 추가하거나 ALTER TABLE 문을 사용하여 테이블의 구조를 변경하는 것이 있습니다. 지정된 업그레이드 옵션에 따라 몇 가지 변경 유형으로 인해 DAC 업그레이드 프로세스를 완료하지 못할 수 있습니다. 또한 변경 내용이 업그레이드된 데이터베이스에 나타나지 않습니다.

DAC 업그레이드 작업에서는 현재 데이터베이스 스키마와 msdb 시스템 데이터베이스에 저장된 DAC 정의 간의 차이점을 검사합니다. 그리고 차이점이 발견되면 이를 표시하는 경고 대화 상자를 엽니다. 업그레이드에서 전송할 수 없지만 새 시스템에 필요한 개체나 데이터를 전송하려면 보고된 차이점을 분석하고 프로세스나 스크립트를 설정한 다음에 업그레이드를 계속해야 합니다.

업그레이드가 완료된 후 데이터베이스는 새 DAC 버전에 정의되어 새 DAC에 지정된 형식을 가지는 모든 개체를 포함합니다. 대부분의 경우 이 형식은 새 버전의 DAC와 데이터베이스에 연결된 응용 프로그램 버전에 필요한 형식입니다. 업그레이드 변경 내용 보고서를 주의하여 분석하고 새 시스템에 필요한 개체만 전송해야 합니다. 예를 들어 현재 DAC와 데이터베이스에 있는 개체 중 일부가 새 DAC에 누락되더라도 오류가 아닐 수 있습니다. 예를 들어 어떤 개체는 DAC를 사용하는 새 버전의 응용 프로그램에서 제거되거나 설계가 변경된 기능과 관련될 수 있습니다.

전체 업그레이드의 경우 변경된 개체는 유지되지 않습니다. 업그레이드를 시작하기 전에 개체 정의와 데이터를 저장해야 합니다. 병렬 업그레이드의 경우 개체와 데이터는 이름이 변경된 원래 데이터베이스에 유지됩니다. 변경된 모든 개체를 새 데이터베이스에 수동으로 전송해야 합니다.

새 데이터베이스로 전송되도록 개체를 스크립팅하는 방법에 대한 자세한 내용은 방법: 스크립트 생성(SQL Server Management Studio)을 참조하십시오.

DAC 프로젝트는 배포 전 및 배포 후 스크립트를 지정할 수 있습니다. 이러한 스크립트는 DAC에서 지원되지 않는 개체 만들기를 포함하여 모든 작업을 수행할 수 있는 Transact-SQL 스크립트입니다. 원본 DAC에 DAC에서 지원하지 않는 개체를 만든 배포 후 스크립트가 포함된 경우 전체 업그레이드 동안 삭제되거나 병렬 업그레이드에 의해 원본 데이터베이스에 남아 있는 개체에 허용되는 메커니즘을 사용하여 이러한 개체를 별도로 업그레이드해야 합니다.

전체 업그레이드

전체 업그레이드에서는 다음 동작을 수행합니다.

  • 배포된 DAC와 DAC 패키지의 응용 프로그램 이름이 모두 동일한지(예를 들어, 두 이름 모두 Finance로 설정) 확인합니다. 또한 데이터베이스 엔진 인스턴스가 새 DAC 버전의 서버 선택 정책에 지정된 요구 사항(정의된 경우)을 충족하는지와 기존 데이터베이스에 DAC에서 지원하지 않는 개체가 포함되어 있는지를 검사합니다.

  • 데이터베이스 스키마가 새 DAC 버전에 정의된 스키마와 일치하는지 확인하는 데 필요한 CREATE, ALTER 및 DROP 문 같은 모든 수정을 수행합니다.

Ignore Data Loss 옵션이 True로 설정된 경우 DAC 업그레이드는 데이터를 제거하는 동작을 수행할 수 있습니다. 예를 들어, 테이블이 현재 데이터베이스에는 있지만 새 DAC 스키마에는 없는 경우 업그레이드에서 테이블을 삭제합니다. 작업을 수행하기 전에 데이터베이스 관리자는 업그레이드 후에 필요할 수 있는 모든 데이터를 보관해야 합니다.

전체 업그레이드는 데이터베이스 엔진의 인스턴스 및 SQL Azure에서 모두 지원됩니다. 전체 업그레이드를 수행하려면 SQL Server 2008 R2 서비스 팩 1(SP1)에 포함되어 있는 DAC Framework 1.1 및 새 DAC 업그레이드 마법사가 필요합니다.

병렬 업그레이드

병렬 업그레이드는 SQL Azure에서 지원되지 않고 SQL Server 다음 버전에서도 지원되지 않습니다. 권장되는 업그레이드 메커니즘은 SQL Server 2008 R2 SP1에 포함된 전체 업그레이드입니다.

병렬 업그레이드에서는 다음 동작을 수행합니다.

  • 배포된 DAC와 DAC 패키지의 응용 프로그램 이름이 모두 동일한지(예를 들어, 두 이름 모두 Finance로 설정) 확인합니다. 또한 데이터베이스 엔진 인스턴스가 새 DAC 버전의 서버 선택 정책에 지정된 요구 사항(정의된 경우)을 충족하는지와 기존 데이터베이스에 DAC에서 지원하지 않는 개체가 포함되어 있는지를 검사합니다.

  • DAC 패키지에서 새 버전의 DAC를 배포합니다. 이렇게 하면 임시 이름으로 새 데이터베이스가 생성됩니다.

  • 원래 데이터베이스가 읽기 전용 모드가 아닌 경우 읽기 전용 모드로 설정하고 데이터를 새 데이터베이스로 복사합니다.

  • 원래 데이터베이스가 읽기 전용 모드였으면 새 데이터베이스가 읽기 전용으로 설정됩니다.

  • 원래 데이터베이스 이름 뒤에 문자열을 추가하여 이름을 변경합니다.

  • 새 데이터베이스에 원래 데이터베이스 이름이 할당됩니다.

  • 데이터베이스 관리자는 새 데이터베이스가 잘 작동하는지 확인한 후 원래 데이터베이스를 보관할 수 있습니다.

데이터베이스 변경 내용에 따라 테이블의 데이터를 새 데이터베이스로 전송할지 여부가 결정될 수 있습니다. 데이터베이스의 변경에 따라 테이블은 다음과 같은 상태가 될 수 있습니다.

  • 테이블 구조가 msdb의 현재 DAC 정의, 현재 데이터베이스 및 새 DAC의 세 위치에서 모두 동일합니다. 테이블이 새 데이터베이스에도 있게 되며 업그레이드 작업에서 데이터를 새 데이터베이스로 전송합니다. 전송은 이전 테이블의 SELECT를 기반으로 INSERT 문을 사용하여 수행됩니다.

  • 테이블이 현재 DAC 정의나 데이터베이스에는 없지만 새 DAC에는 정의되어 있습니다. 테이블이 새 데이터베이스에 있게 되지만 전송할 기존 데이터가 없으므로 비어 있습니다.

  • 테이블이 현재 DAC 정의에는 없지만 현재 데이터베이스와 새 DAC에는 있습니다. 테이블이 새 데이터베이스에도 있게 되지만 업데이트 작업에서 데이터를 전송하지 않습니다. 업그레이드가 완료된 후에 수동으로 데이터를 전송해야 합니다.

  • 테이블이 현재 DAC 정의와 데이터베이스에 있지만 새 DAC에 없습니다. 새 데이터베이스에는 테이블이 없게 됩니다. 이 테이블이 새 시스템에 필요하면 업그레이드가 완료된 후에 수동으로 테이블을 만들고 데이터를 전송해야 합니다.

  • 테이블이 세 위치에 모두 있지만 현재 DAC 정의와 데이터베이스에 있는 테이블의 구조가 새 DAC에 있는 테이블의 구조와 다릅니다. 테이블이 새 DAC에 정의된 구조로 새 데이터베이스에 있게 됩니다.

    • 테이블과 열 이름이 일치하지 않으면 업데이트 작업에서 데이터를 전송하지 않았음을 보고합니다. 업그레이드가 완료된 후에 수동으로 데이터를 전송해야 합니다.

    • 테이블 이름과 열 이름이 같으면 업데이트 작업에서 데이터를 전송하려고 시도합니다. 한 개 이상의 열에서 데이터 형식이 변경되었거나 호환되지 않으면 INSERT 문이 실패하여 업그레이드 프로세스가 롤백됩니다.

새 버전의 테이블에 데이터를 전송하는 데는 원하는 메커니즘을 사용할 수 있습니다. 이전 버전의 테이블에서 선택하는 INSERT 문을 사용할 수 있습니다. 또는 대량 데이터 가져오기 및 내보내기에 나오는 대량 삽입 기술 중 하나를 사용해도 됩니다.

변경 내역

업데이트된 내용

DAC Framework 1.1에 도입된 전체 업그레이드가 설명되어 있습니다. 다른 항목에 중복된 내용이 제거되었습니다.

SQL Server 2008 R2 SP1은 DAC Framework 1.1과 새 업그레이드 마법사를 비롯해 전체 업그레이드를 완벽하게 지원합니다.