Share via


방법: DAC 패키지 유효성 검사

프로덕션 환경에 배포하기 전에 DAC(데이터 계층 응용 프로그램) 패키지의 내용을 검토하고 DAC 패키지를 사용하여 기존 DAC를 업그레이드하기 전에 업그레이드 동작의 유효성을 검사하는 것이 좋습니다. 사용자의 조직에서 개발되지 않은 패키지를 배포하는 경우에는 더욱 그렇습니다.

DAC 내용 보기

DAC 패키지의 내용을 볼 수 있는 두 가지 메커니즘이 있습니다. 첫 번째는 Microsoft Visual Studio 2010에서 DAC 프로젝트를 만들고 DAC 패키지를 프로젝트로 가져오는 것이며 두 번째는 패키지 내용을 폴더에 압축을 푸는 것입니다.

보안 정보보안 정보

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

DAC 패키지의 내용을 보는 한 가지 방법은 Microsoft Visual Studio 2010에서 DAC 프로젝트를 만들고 패키지를 프로젝트로 가져오는 것입니다. 그런 다음 솔루션 탐색기를 사용하여 서버 선택 정책과 배포 이전 및 배포 이후 스크립트와 같은 DAC의 모든 파일을 열 수 있습니다. 스키마 뷰를 사용하여 스키마 내의 모든 개체를 검토할 수 있으며, 특히 함수나 저장 프로시저와 같은 개체 내의 코드를 검토할 수 있습니다.

Visual Studio 2010을 사용할 수 없는 경우에는 DAC의 내용을 폴더에 압축을 풀 수 있습니다. 그런 다음 Transact-SQL 스크립트는 SQL Server Management Studio의 데이터베이스 엔진 쿼리 편집기에서 열고, 파일은 메모장과 같은 도구에서 열 수 있습니다. 자세한 내용은 방법: DAC 패키지 압축 풀기를 참조하십시오.

마법사를 사용하여 업그레이드의 유효성 검사

DAC를 업그레이드하기 전에 초기 DAC 배포 후에 데이터베이스에 적용된 변경 사항을 먼저 확인하고 업그레이드가 수행할 변경 스크립트를 검토하는 것이 좋습니다. 데이터 계층 응용 프로그램 업그레이드 마법사를 사용하여 이 정보를 볼 수 있습니다. 변경 내용 검색 페이지에서 데이터베이스 변경 내용을 검토하고 요약 페이지에서 업그레이드 동작을 검토할 수 있습니다. 업그레이드를 수행하지 않으려면 요약 페이지에서 취소를 클릭합니다. 자세한 내용은 방법: 데이터 계층 응용 프로그램 업그레이드를 참조하십시오.

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

새 버전의 DAC 패키지를 사용하여 이전 DAC 패키지에서 배포된 DAC를 업그레이드하기 전에 데이터베이스에 적용된 변경 사항이 업그레이드에 영향을 미칠 수 있는지 확인하십시오.

[!참고]

이 항목의 PowerShell 예제는 DAC Framework 1.1 기능 팩에 소개된 방법을 사용합니다. 기능 팩은 이 웹 페이지에서 다운로드할 수 있습니다.

다음 코드가 포함된 PowerShell 스크립트 파일(.ps1)을 만듭니다.

  1. SMO Server 개체를 만들어 업그레이드할 DAC를 포함하는 인스턴스로 설정하는 코드를 추가합니다. 이 예에서는 Server 개체를 로컬 컴퓨터의 기본 인스턴스로 설정합니다.

    ## Set a SMO Server object to the default instance on the local computer.
    CD SQLSERVER:\SQL\localhost\DEFAULT
    $srv = get-item .
    
  2. ServerConnection 개체를 열고 동일 인스턴스에 연결하는 코드를 추가합니다.

    ## 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)
    
  3. 이전에 배포한 DAC를 지정한 다음 ChangeResults 개체를 만들고 텍스트 파일로 파이프 지정하여 신규, 삭제 및 변경된 개체의 간단한 보고서를 생성하는 코드를 추가합니다.

    ## 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
    

SQL Server PowerShell 스냅인을 로드한 PowerShell 세션에서 또는 sqlps 명령 프롬프트 유틸리티를 사용하여 .ps1 파일을 실행합니다.

PowerShell을 사용하여 업그레이드 스크립트 생성

새 버전의 DAC 패키지를 사용하여 이전 DAC 패키지에서 배포된 DAC를 업그레이드하기 전에 업그레이드 동안 실행할 Transact-SQL 문이 포함된 스크립트 파일을 생성한 다음 스크립트를 검토할 수 있습니다. 다음 코드가 포함된 PowerShell 스크립트 파일(.ps1)을 만듭니다.

  1. SMO Server 개체를 만들어 업그레이드할 DAC를 포함하는 인스턴스로 설정하는 코드를 추가합니다. 이 예에서는 Server 개체를 로컬 컴퓨터의 기본 인스턴스로 설정합니다.

    ## Set a SMO Server object to the default instance on the local computer.
    CD SQLSERVER:\SQL\localhost\DEFAULT
    $srv = get-item .
    
  2. ServerConnection 개체를 열고 동일 인스턴스에 연결하는 코드를 추가합니다.

    ## 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)
    
  3. DAC 패키지 파일을 로드하는 코드를 추가합니다. 이 예에서는 MyApplication.dacpac 파일을 로드합니다.

    ## Load the DAC package file.
    $dacpacPath = "C:\MyDACs\MyApplication.dacpac"
    $fileStream = [System.IO.File]::Open($dacpacPath,[System.IO.FileMode]::OpenOrCreate)
    $dacType = [Microsoft.SqlServer.Management.Dac.DacType]::Load($fileStream)
    
  4. 이전에 배포한 DAC를 지정한 다음 Transact-SQL 스크립트를 만들고 .sql 파일로 파이프 지정하는 코드를 추가합니다. 새 DAC 패키지를 읽는 데 사용한 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()
    

SQL Server PowerShell 스냅인을 로드한 PowerShell 세션에서 또는 sqlps 명령 프롬프트 유틸리티를 사용하여 .ps1 파일을 실행합니다.

DAC 비교

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

두 DAC 프로젝트를 Visual Studio 2010의 DAC 프로젝트로 가져오면 스키마 비교 도구를 사용하여 두 DAC 간의 차이점을 분석할 수 있습니다.

Visual Studio 2010을 사용할 수 없는 경우에는 별도 폴더에 DAC 압축을 풀 수 있습니다. 그런 다음 WinDiff 유틸리티와 같은 비교 도구를 사용하여 차이를 분석할 수 있습니다.