Share via


방법: 데이터 계층 응용 프로그램 배포

데이터 계층 응용 프로그램 배포 마법사를 사용하여 DAC 패키지에서 기존 SQL Azure 또는 SQL Server 2005 SP4 이상 인스턴스로 DAC(데이터 계층 응용 프로그램)를 배포할 수 있습니다. 배포 프로세스에서는 DAC 정의를 msdb 시스템 데이터베이스(SQL Azure의 master)에 저장하여 DAC 인스턴스를 등록하고 데이터베이스를 만든 다음 DAC에 정의된 모든 데이터베이스 개체로 데이터베이스를 채웁니다.

시작하기 전에

SQL Server 2005 SP4(서비스 팩 4) 이상의 데이터베이스 엔진 인스턴스 또는 SQL Azure에만 DAC를 배포할 수 있습니다. SQL Server 2008 R2에서 클라이언트 도구를 사용해야 하며 DAC Framework 1.1을 사용해야 할 수도 있습니다. 자세한 내용은 SQL Server 개체 및 버전에 대한 DAC 지원을 참조하십시오.

데이터베이스 엔진의 관리되는 인스턴스의 경우 배포된 DAC는 다음 번에 유틸리티 컬렉션 집합이 인스턴스에서 유틸리티 제어 지점으로 전송될 때 SQL Server 유틸리티로 통합됩니다. 그러면 DAC가 Management Studio유틸리티 탐색기배포된 데이터 계층 응용 프로그램 노드에 표시되고 배포된 데이터 계층 응용 프로그램 세부 정보 페이지에 보고됩니다.

DAC 패키지를 만드는 방법은 데이터 계층 응용 프로그램 구현을 참조하십시오.

요구 사항

SQL Server 2005 SP4 이상에 연결되어 있으면 sysadmin 또는 serveradmin 고정 서버 역할의 멤버이거나 dbcreator 고정 서버 역할에 포함되고 ALTER ANY LOGIN 권한이 있는 로그인을 통해서만 DAC를 배포할 수 있습니다. 기본 제공 SQL Server 시스템 관리자 계정인 sa도 DAC를 배포할 수 있습니다. SQL Azure에 대한 로그인이 있는 DAC를 배포하려면 loginmanager 또는 serveradmin 역할의 멤버 자격이 필요합니다. SQL Azure에 대한 로그인이 없는 DAC를 배포하려면 dbmanager 또는 serveradmin 역할의 멤버 자격이 필요합니다.

보안 정보보안 정보

출처를 알 수 없거나 신뢰할 수 없는 DAC 패키지는 배포하지 않는 것이 좋습니다. 이러한 DAC에 포함된 악성 코드가 의도하지 않은 Transact-SQL 코드를 실행하거나 스키마를 수정하여 오류가 발생할 수 있습니다. 출처를 알 수 없거나 신뢰할 수 없는 DAC를 사용하려면 먼저 DAC의 압축을 풀고 저장 프로시저나 다른 사용자 정의 코드와 같이 코드를 검사하십시오. DAC의 내용을 보는 방법은 방법: DAC 패키지 유효성 검사를 참조하십시오.

로그인 암호

보안을 개선하기 위해 SQL Server 인증 로그인은 암호 없이 DAC 패키지에 저장됩니다. 패키지가 배포 또는 업그레이드되면 생성된 암호와 함께 비활성 로그인이 생성됩니다. 로그인을 활성화하려면 ALTER ANY LOGIN 권한이 있는 로그인을 사용하여 로그인하고 ALTER LOGIN을 사용하여 로그인을 활성화하여 사용자에게 알려 줄 수 있는 새 암호를 할당합니다. Windows 인증 로그인의 경우 암호가 SQL Server에서 관리되지 않으므로 이 과정이 필요 없습니다.

데이터베이스 옵션 및 설정

기본적으로 배포 중에 생성된 데이터베이스에는 다음을 제외한 CREATE DATABASE 문의 모든 기본 설정이 적용됩니다.

  • 데이터베이스 데이터 정렬 및 호환성 수준은 DAC 패키지에 정의된 값으로 설정됩니다. Visual Studio에서 DAC 프로젝트로 만든 패키지는 DAC 프로젝트의 값으로 설정됩니다. 기존 데이터베이스에서 추출한 패키지는 기존 데이터베이스의 값을 사용합니다.

  • 데이터베이스 이름과 파일 경로와 같은 일부 데이터베이스 설정을 구성 업데이트 페이지에서 조정할 수 있습니다. SQL Azure에 배포할 때는 파일 경로를 설정할 수 없습니다.

TRUSTWORTHY, DB_CHAINING 및 HONOR_BROKER_PRIORITY와 같은 일부 데이터베이스 옵션은 배포 프로세스 도중 조정할 수 없습니다. 파일 그룹의 수, 파일의 수 및 크기와 같은 물리적 속성은 배포 프로세스 도중 변경할 수 없습니다. 배포가 완료된 후 ALTER DATABASE 문, SQL Server Management Studio 또는 SQL Server PowerShell을 사용하여 데이터베이스를 맞춤 구성할 수 있습니다. 자세한 내용은 데이터베이스 수정을 참조하십시오.

다중 배포

같은 DAC 패키지를 단일 데이터베이스 엔진 인스턴스에 여러 번 배포할 수 있지만 한 번에 한 개씩 배포해야 합니다. 지정된 DAC 인스턴스 이름은 데이터베이스 엔진 인스턴스 내에서 각 배포마다 고유해야 합니다.

PowerShell을 사용하여 DAC 배포

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

  1. SMO 서버 개체를 만들고 이를 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 배포 이벤트를 구독하는 코드를 추가합니다.

    ## Subscribe to the DAC deployment events.
    $dacstore.add_DacActionStarted({Write-Host `n`nStarting at $(get-date) :: $_.Description})
    $dacstore.add_DacActionFinished({Write-Host Completed at $(get-date) :: $_.Description})
    
  5. DAC를 배포하고, 데이터베이스를 만들고, DAC 패키지 파일을 닫는 코드를 추가합니다.

    ## Deploy the DAC and create the database.
    $dacName  = "MyApplication"
    $evaluateTSPolicy = $true
    $deployProperties = New-Object Microsoft.SqlServer.Management.Dac.DatabaseDeploymentProperties($serverconnection,$dacName)
    $dacstore.Install($dacType, $deployProperties, $evaluateTSPolicy)
    $fileStream.Close()
    

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

데이터 계층 응용 프로그램 배포 마법사 사용

Management Studio에서 개체 탐색기의 서버 아래에 있는 관리 노드로 이동하고 데이터 계층 응용 프로그램 노드를 마우스 오른쪽 단추로 클릭한 다음 **데이터 계층 응용 프로그램 배포...**를 선택하면 데이터 계층 응용 프로그램 배포 마법사를 시작할 수 있습니다.

마법사는 개체 탐색기 계층에서 선택한 노드와 연결된 데이터베이스 엔진 인스턴스에 DAC를 배포합니다. 예를 들어 인스턴스 이름이 ProductionServer01/Accounting인 서버 노드를 마우스 오른쪽 단추로 클릭하여 마법사를 시작하면 DAC는 해당 데이터베이스 엔진 인스턴스에 배포됩니다.

아래 목록의 링크를 클릭하여 마법사 페이지에 대한 세부 정보를 탐색할 수 있습니다.

  • 소개 페이지

  • DAC 패키지 선택 페이지

  • 정책 검토 페이지

  • 구성 업데이트 페이지

  • 요약 페이지

  • 배포 페이지

소개 페이지

이 페이지에서는 데이터 계층 응용 프로그램을 배포하는 단계에 대해 설명합니다.

이 페이지를 다시 표시 안 함 - 앞으로 이 페이지가 표시되지 않도록 하려면 이 확인란을 클릭합니다.

다음 > - DAC 패키지 선택 페이지로 진행합니다.

취소 - DAC를 배포하지 않고 마법사를 종료합니다.

DAC 패키지 선택 페이지

이 페이지를 사용하여 배포할 데이터 계층 응용 프로그램을 포함하는 DAC 패키지를 지정할 수 있습니다. 이 페이지는 세 가지 상태로 전환됩니다.

DAC 패키지 선택

이 페이지의 초기 상태에서는 배포할 DAC 패키지를 선택할 수 있습니다. DAC 패키지는 유효한 DAC 패키지 파일이어야 하며 확장자가 .dacpac여야 합니다.

DAC 패키지 - 배포할 데이터 계층 응용 프로그램이 포함된 DAC 패키지의 경로와 파일 이름을 지정합니다. 입력란 오른쪽의 찾아보기 단추를 선택하여 DAC 패키지의 위치를 찾아볼 수 있습니다.

응용 프로그램 이름 - DAC를 만들거나 데이터베이스에서 추출할 때 할당된 DAC 이름을 표시하는 읽기 전용 입력란입니다.

버전 - DAC를 만들거나 데이터베이스에서 추출할 때 할당된 버전을 표시하는 읽기 전용 입력란입니다.

설명 - DAC를 만들거나 데이터베이스에서 추출할 때 작성된 설명을 표시하는 읽기 전용 입력란입니다.

< 이전 - 소개 페이지로 돌아갑니다.

다음 > - 선택한 파일이 유효한 DAC 패키지인지 확인하는 동안 진행률 표시줄이 표시됩니다.

취소 - DAC를 배포하지 않고 마법사를 종료합니다.

DAC 패키지 유효성 검사

선택한 파일이 유효한 DAC 패키지인지 확인하는 동안 진행률 표시줄이 표시됩니다. DAC 패키지의 유효성이 확인되면 마법사는 유효성 검사 결과를 검토할 수 있는 패키지 선택 페이지의 최종 버전으로 진행합니다. 파일이 유효한 DAC 패키지가 아닌 경우 마법사는 DAC 패키지 선택 상태로 유지됩니다. 이 경우 다른 유효한 DAC 패키지를 선택하거나 마법사를 취소하고 새 DAC 패키지를 생성할 수 있습니다.

DAC 내용의 유효성을 검사하고 있습니다. - 유효성 검사의 현재 상태를 보고하는 진행률 표시줄입니다.

< 이전 - 패키지 선택 페이지의 초기 상태로 돌아갑니다.

다음 > - 패키지 선택 페이지의 최종 버전으로 진행합니다.

취소 - DAC를 배포하지 않고 마법사를 종료합니다.

정책 검토 페이지

DAC에 정책이 있는 경우 이 페이지를 사용하여 DAC 서버 선택 정책을 평가한 결과를 검토할 수 있습니다. DAC 서버 선택 정책은 선택적이며 Visual Studio에서 DAC를 만들면 여기에 할당됩니다. 정책에서는 서버 선택 정책 패싯을 사용하여 데이터베이스 엔진 인스턴스가 DAC를 호스팅하기 위해 충족해야 하는 조건을 지정합니다.

정책 조건의 평가 결과 - DAC 배포 정책의 조건이 성공했는지 보여 주는 읽기 전용 보고서입니다. 각 조건을 평가한 결과가 별도의 행에 보고됩니다.

SQL Azure에 DAC를 배포할 경우 운영 체제 버전, 언어, 명명된 파이프 사용, 플랫폼, TCP 사용 등의 서버 선택 정책을 평가한 결과가 항상 false입니다.

정책 위반을 무시합니다. - 정책 조건이 한 개 이상 위반되더라도 배포를 진행하려면 이 확인란을 사용합니다. 실패한 모든 조건이 DAC 작동에 영향을 주지 않는 것이 확실한 경우에만 이 옵션을 선택합니다.

< 이전 - 패키지 선택 페이지로 돌아갑니다.

다음 > - 구성 업데이트 페이지로 진행합니다.

취소 - DAC를 배포하지 않고 마법사를 종료합니다.

구성 업데이트 페이지

이 페이지를 사용하여 배포된 DAC 인스턴스와 배포를 통해 생성된 데이터베이스의 이름을 지정하고 데이터베이스 옵션을 설정할 수 있습니다.

데이터베이스 이름: - 배포를 통해 생성된 데이터베이스의 이름을 지정합니다. 기본은 DAC가 추출된 원본 데이터베이스 이름입니다. 이름은 데이터베이스 엔진 인스턴스 내에서 고유해야 하며 데이터베이스 엔진 식별자 규칙을 준수해야 합니다.

데이터베이스 이름을 변경하면 새 값에 맞게 데이터 파일과 로그 파일의 이름이 변경됩니다.

데이터베이스 이름은 DAC 인스턴스 이름에도 사용됩니다. 인스턴스 이름은 개체 탐색기데이터 계층 응용 프로그램 노드 아래에 있는 DAC에 대한 노드나 유틸리티 탐색기배포된 데이터 계층 응용 프로그램 노드에 표시됩니다.

다음 옵션은 SQL Azure에는 적용되지 않으며 SQL Azure에 배포할 때는 표시되지 않습니다.

기본 데이터베이스 위치 사용 - 데이터베이스 엔진 인스턴스에 대한 기본 위치에 데이터베이스 파일과 로그 파일을 생성하려면 이 옵션을 선택합니다. 파일 이름은 데이터베이스 이름을 사용하여 생성됩니다.

데이터베이스 파일 지정 - 데이터와 로그 파일의 다른 위치나 이름을 지정하려면 이 옵션을 선택합니다.

데이터 파일 경로 및 이름: - 데이터 파일의 전체 경로와 파일 이름을 지정합니다. 입력란은 기본 경로와 파일 이름으로 채워집니다. 입력란의 문자열을 편집하여 기본값을 변경하거나 찾아보기 단추를 사용하여 데이터 파일이 있는 폴더를 탐색할 수 있습니다.

로그 파일 경로 및 이름: - 로그 파일의 전체 경로와 파일 이름을 지정합니다. 입력란은 기본 경로와 파일 이름으로 채워집니다. 입력란의 문자열을 편집하여 기본값을 변경하거나 찾아보기 단추를 사용하여 로그 파일이 있는 폴더를 탐색할 수 있습니다.

< 이전 - DAC 패키지 선택 페이지로 돌아갑니다.

다음 > - 요약 페이지로 진행합니다.

취소 - DAC를 배포하지 않고 마법사를 종료합니다.

요약 페이지

이 페이지를 사용하여 DAC를 배포할 때 마법사가 수행할 동작을 검토할 수 있습니다.

DAC를 배포하는 데 사용되는 설정은 다음과 같습니다. - 표시된 정보를 검토하여 수행할 작업이 올바른지 확인합니다. 창에는 선택한 DAC 패키지와 배포하도록 선택한 DAC 인스턴스 이름이 표시됩니다. 창에는 DAC와 연결된 데이터베이스를 만들 때 사용되는 설정도 표시됩니다.

< 이전 - 선택을 변경하기 위해 구성 업데이트 페이지로 돌아갑니다.

다음 > - DAC를 배포하고 DAC 배포 페이지에 결과를 표시합니다.

취소 - DAC를 배포하지 않고 마법사를 종료합니다.

배포 페이지

이 페이지에서는 배포 작업의 성공 또는 실패를 보고합니다.

DAC를 배포하는 중 - DAC를 배포하기 위해 수행한 각 동작의 성공 또는 실패를 보고합니다. 정보를 검토하여 각 동작의 성공 또는 실패를 확인합니다. 오류가 발생한 동작에는 모두 결과 열에 링크가 있습니다. 링크를 선택하면 해당 동작의 오류에 대한 보고서가 표시됩니다.

보고서 저장 - 배포 보고서를 HTML 파일로 저장하려면 이 단추를 선택합니다. 파일은 모든 동작에서 생성된 모든 오류를 비롯하여 각 동작의 상태를 보고합니다. 기본 폴더는 Windows 계정의 Documents 폴더에 있는 SQL Server Management Studio\DAC Packages 폴더입니다.

마침 - 마법사를 종료합니다.

변경 내역

업데이트된 내용

PowerShell 사용에 대한 섹션이 추가되었습니다.