DAC 패키지 유효성 검사

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

프로덕션 환경에 배포하기 전에 DAC 패키지의 내용을 검토하고 기존 DAC를 업그레이드하기 전에 업그레이드 작업의 유효성을 검사하는 것이 좋습니다. 조직에서 개발되지 않은 패키지를 배포할 때 특히 그렇습니다.

DAC 패키지를 업그레이드하는 방법은 다음과 같습니다.

신뢰할 수 없는 DAC 패키지

출처를 알 수 없거나 신뢰할 수 없는 DAC 패키지는 배포하지 않는 것이 좋습니다. 이러한 DAC에는 의도하지 않은 Transact-SQL 코드를 실행하거나 스키마를 수정하여 오류를 일으킬 수 있는 악성 코드가 포함될 수 있습니다. 알 수 없거나 신뢰할 수 없는 원본에서 DAC를 사용하기 전에 데이터베이스 엔진의 격리된 테스트 인스턴스에 배포하고, 데이터베이스에서 DBCC CHECKDB(Transact-SQL)를 실행하고, 데이터베이스에서 저장 프로시저 또는 기타 사용자 정의 코드와 같은 코드를 검사합니다.

DAC 내용 보기

DAC(데이터 계층 애플리케이션) 패키지의 내용을 보기 위한 두 가지 메커니즘이 있습니다.

  • SQL Server 개발자 도구에서 SQL 프로젝트로 DAC 패키지 가져오기
  • DAC 패키지를 테스트 인스턴스에 게시

SQL Server 개발자 도구에서 DAC 가져오기

  1. 파일 메뉴를 열고 새로 만들기를 선택한 다음 프로젝트...를 선택합니다.

  2. SQL Server 프로젝트 템플릿을 선택하고 이름, 위치솔루션 이름을 지정합니다.

  3. 솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 [속성]을 선택합니다.

  4. 프로젝트 설정 탭의 출력 형식 섹션에서 데이터 계층 애플리케이션(.dacpac 파일) 확인란을 선택한 다음 속성 대화 상자를 닫습니다.

  5. 솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 데이터 계층 애플리케이션 가져오기를 선택합니다.

  6. 솔루션 탐색기를 사용하여 서버 선택 정책 및 배포 전 및 배포 후 스크립트와 같은 DAC의 모든 파일을 엽니다.

  7. 스키마 뷰사용하여 스키마의 모든 개체를 검토하고, 특히 함수 또는 저장 프로시저와 같은 개체의 코드를 검토합니다.

테스트 인스턴스에 DAC 패키지 게시

여러 도구를 사용하여 DAC 패키지를 테스트 인스턴스에 게시할 수 있습니다. Azure Data Studio용 SQL Server Dacpac 확장에는 데이터 계층 애플리케이션 마법사포함되어 있습니다. DAC 패키지를 테스트 인스턴스에 게시하는 방법을 안내합니다.

  1. 필요한 경우 배포 마법사를 사용하여 테스트 인스턴스를 배포합니다.

  2. Azure Data Studio에서 테스트 인스턴스에 연결하고 서버 노드를 마우스 오른쪽 단추로 클릭합니다. 상황에 맞는 메뉴에서 데이터 계층 애플리케이션 마법사를 선택합니다.

  3. 마법사의 1단계에서 SQL Server 인스턴스에 데이터 계층 애플리케이션 .dacpac 파일 배포를 선택합니다 .

  4. 마법사의 2단계에서 파일 위치를 입력하고 대상 데이터베이스에 대해 새 데이터베이스를 선택합니다. 데이터베이스 이름을 입력합니다.

  5. 마법사의 3단계에서 배포를 선택하기 전에 요약을 검토합니다.

  6. 배포가 완료되면 개체 탐색기에서 데이터베이스의 내용을 검토합니다.

  7. 선택 사항: 개체 탐색기에서 데이터베이스를 마우스 오른쪽 단추로 클릭하고 데이터베이스에서 프로젝트 만들기를 선택하여 데이터베이스 에서 SQL 프로젝트를 생성합니다.

데이터베이스 변경 내용 보기

현재 버전의 DAC가 프로덕션에 배포된 후 새 버전의 DAC에 정의된 스키마와 충돌할 수 있는 연결된 데이터베이스에 직접 변경이 이루어졌을 수 있습니다. DAC의 새 버전으로 업그레이드하기 전에 데이터베이스에 대한 변경 내용이 있는지 확인합니다. 여러 시나리오에서 데이터베이스와 DAC 패키지 간의 차이를 볼 수 있습니다. 예를 들어 새 버전의 DAC에 정의된 스키마와 충돌할 수 있는 연결된 데이터베이스를 직접 변경했을 수 있습니다.

모든 데이터베이스

스키마 비교를 사용하여 데이터베이스 변경 내용 보기

  • Azure Data Studio에서 스키마 비교 확장을 사용하면 Windows, macOS 및 Linux에서 기존 .dacpac과 동일한 데이터베이스 또는 두 데이터베이스 간의 스키마 차이를 볼 수 있습니다.

  • Visual Studio에서 SQL Server Data Tools를 사용하면 기존 .dacpac와 동일한 데이터베이스 또는 두 데이터베이스 간의 스키마 차이점을 Windows에서 볼 수 있습니다.

SqlPackage CLI를 사용하여 데이터베이스 변경 내용 보기

SqlPackage CLI를 DeployReport 작업과 함께 사용하여 .dacpac가 데이터베이스에 게시된 경우 수행할 작업을 통해 .dacpac와 데이터베이스 간의 차이점을 볼 수 있습니다.

데이터 계층 애플리케이션으로 등록된 데이터베이스

마법사를 사용하여 데이터베이스 변경 내용 보기

  1. 새 버전의 DAC를 포함하는 DAC 패키지와 현재 배포된 DAC를 지정하여 데이터 계층 애플리케이션 업그레이드 마법사를 실행합니다.

  2. 변경 내용 검색 페이지에서 데이터베이스에 적용된 변경 내용의 보고서를 검토합니다.

  3. 업그레이드를 계속하지 않으려면 취소를 선택합니다.

  4. 마법사 사용에 대한 자세한 내용은 데이터 계층 애플리케이션 업그레이드를 참조하세요.

PowerShell을 사용하여 데이터베이스 변경 내용 보기

  1. SMO Server 개체를 만들고 볼 DAC가 포함된 인스턴스로 설정합니다.

  2. ServerConnection 개체를 열고 동일한 인스턴스에 연결합니다.

  3. 변수에서 DAC 이름을 지정합니다.

  4. GetDatabaseChanges() 메서드를 사용하여 ChangeResults 개체를 검색하고 개체를 텍스트 파일에 파이핑하여 새 개체, 삭제된 개체 및 변경된 개체에 대한 간단한 보고서를 생성합니다.

다음 예제에서는 MyApplication이라는 배포된 DAC에서 수행된 모든 데이터베이스 변경 내용을 보고합니다.

## Set a SMO Server object to the default instance on the local computer.  
CD SQLSERVER:\SQL\localhost\DEFAULT  
$srv = get-item .  
  
## Open a Common.ServerConnection to the same instance.  
$serverconnection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection($srv.ConnectionContext.SqlConnectionObject)  
$serverconnection.Connect()  
$dacstore = New-Object Microsoft.SqlServer.Management.Dac.DacStore($serverconnection)  
  
## Specify the DAC instance name.  
$dacName  = "MyApplication"  
  
## Generate the change list and save to file.  
$dacChanges = $dacstore.GetDatabaseChanges($dacName) | Out-File -Filepath C:\DACScripts\MyApplicationChanges.txt  

SqlPackage CLI를 사용하여 데이터베이스 변경 내용 보기

SqlPackage CLI를 DriftReport 작업과 함께 사용하여 데이터베이스가 마지막으로 등록된 이후 변경된 내용을 볼 수 있습니다.

업그레이드 작업 보기

모든 데이터베이스

SQL 프로젝트 게시를 사용하여 데이터베이스 변경 내용 보기

  • Azure Data Studio에서 SQL Database Projects 확장을 사용하면 게시 프로세스 중에 "스크립트 생성"을 선택하여 SQL 프로젝트를 데이터베이스에 게시할 때 수행할 작업을 Windows, macOS 및 Linux에서 볼 수 있습니다.

  • Visual Studio에서 SQL Server Data Tools를 사용하면 SQL 프로젝트를 데이터베이스에 게시할 때 수행할 작업을 Windows에서 배포 스크립트로 볼 수 있습니다.

SqlPackage CLI를 사용하여 업그레이드 작업 보기 SqlPackage CLI를 DeployReport 작업과 함께 사용하여 .dacpac이 데이터베이스에 게시된 경우 수행할 작업을 통해 .dacpac와 데이터베이스 간의 차이점을 볼 수 있습니다.

데이터 계층 애플리케이션으로 등록된 데이터베이스

이전 DAC 패키지에서 배포된 DAC를 업그레이드하기 위해 새 버전의 DAC 패키지를 사용하기 전에 업그레이드 중에 실행될 Transact-SQL 문이 포함된 보고서를 생성한 다음, 문을 검토할 수 있습니다.

마법사를 사용하여 업그레이드 작업 보고

  1. 새 버전의 DAC를 포함하는 DAC 패키지와 현재 배포된 DAC를 지정하여 데이터 계층 애플리케이션 업그레이드 마법사를 실행합니다.

  2. 요약 페이지에서 업그레이드 작업의 보고서를 검토합니다.

  3. 업그레이드를 계속하지 않으려면 취소를 선택합니다.

  4. 마법사 사용에 대한 자세한 내용은 데이터 계층 애플리케이션 업그레이드를 참조하세요.

PowerShell을 사용하여 업그레이드 작업 보고

  1. SMO Server 개체를 만들고 배포된 DAC를 포함하는 인스턴스로 설정합니다.

  2. ServerConnection 개체를 열고 동일한 인스턴스에 연결합니다.

  3. System.IO.File을 사용하여 DAC 패키지 파일을 로드합니다.

  4. 변수에서 DAC 이름을 지정합니다.

  5. GetIncrementalUpgradeScript() 메서드를 사용하여 업그레이드를 실행할 Transact-SQL 문 목록을 가져온 다음 목록을 텍스트 파일에 파이핑합니다.

  6. DAC 패키지 파일을 읽는 데 사용되는 파일 스트림을 닫습니다.

다음 예제에서는 MyApplication이라는 DAC를 MyApplication2017.dacpac 파일에 정의된 스키마로 업그레이드하기 위해 실행될 Transact-SQL 문을 보고합니다.

## Set a SMO Server object to the default instance on the local computer.  
CD SQLSERVER:\SQL\localhost\DEFAULT  
$srv = get-item .  
  
## Open a Common.ServerConnection to the same instance.  
$serverconnection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection($srv.ConnectionContext.SqlConnectionObject)  
$serverconnection.Connect()  
$dacstore = New-Object Microsoft.SqlServer.Management.Dac.DacStore($serverconnection)  
  
## Load the DAC package file.  
$dacpacPath = "C:\MyDACs\MyApplication2017.dacpac"  
$fileStream = [System.IO.File]::Open($dacpacPath,[System.IO.FileMode]::OpenOrCreate)  
$dacType = [Microsoft.SqlServer.Management.Dac.DacType]::Load($fileStream)  
  
## Specify the DAC instance name.  
$dacName  = "MyApplication"  
  
## Generate the upgrade script and save to file.  
$dacstore.GetIncrementalUpgradeScript($dacName, $dacType) | Out-File -Filepath C:\DACScripts\MyApplicationUpgrade.sql  
  
## Close the filestream to the new DAC package.  
$fileStream.Close()  

DAC 비교

DAC를 업그레이드하기 전에 현재와 새 DAC 간의 데이터베이스 및 인스턴스 수준 개체의 차이점을 검토하는 것이 좋습니다. 현재 DAC에 대한 패키지 복사본이 없는 경우 현재 데이터베이스에서 패키지를 추출할 수 있습니다.

SQL Server 개발자 도구에서 두 DAC 패키지를 DAC 프로젝트로 가져오는 경우 스키마 비교 도구를 사용하여 두 DAC 간의 차이점을 분석할 수 있습니다.

또는 DAC를 별도의 폴더로 압축을 풉니다. 그런 다음 WinDiff 유틸리티와 같은 비교 도구를 사용하여 차이를 분석할 수 있습니다.

참고 항목

데이터 계층 애플리케이션
데이터 계층 애플리케이션 배포
데이터 계층 애플리케이션 업그레이드