다음을 통해 공유


데이터베이스 빌드 및 배포 개요

업데이트: 2010년 7월

데이터베이스를 만들거나 데이터베이스 프로젝트에서 데이터베이스 서버로 기존 데이터베이스에 대한 업데이트를 게시하려면 데이터베이스 프로젝트를 빌드한 다음 해당 서버로 배포해야 합니다.

빌드 단계에서는 데이터베이스 프로젝트를 배포에 사용되는 파일로 컴파일합니다. 이러한 파일에는 .dbschema 파일, .deploymentmanifest 파일, 배포 전 스크립트 및 배포 후 스크립트가 포함됩니다. 데이터베이스 프로젝트를 빌드할 때 대상 데이터베이스와의 비교는 수행되지 않습니다. 데이터베이스 프로젝트를 배포할 때 대상 데이터베이스가 있으면 빌드 작업의 출력과 대상 데이터베이스가 비교되고, 데이터베이스 프로젝트에 맞게 대상을 업데이트하는 데 필요한 작업이 확인됩니다. 설정에 따라 이러한 업데이트는 대상 데이터베이스에 배포됩니다.

또는 배포 스크립트(.SQL 파일)를 생성한 다음 이를 스테이징 또는 프로덕션 서버에 배포하기 전에 Transact-SQL 편집기나 SQL Server Management Studio 등의 다른 도구를 사용하여 수정할 수도 있습니다. 빌드 정리 작업에서는 스크립트, 배포 매니페스트, .dbschema 파일 등의 기존 빌드 아티팩트를 삭제합니다.

배포 스크립트

대상을 만들거나 업데이트하는 스크립트 이전 또는 이후에 실행되는 스크립트를 만들 수 있습니다. 배포 전 스크립트 하나와 배포 후 스크립트 하나만 지정할 수 있지만 해당 스크립트 내에서 다른 스크립트를 포함할 수 있습니다. 자세한 내용은 데이터베이스 스크립트 만들기 및 수정을 참조하십시오.

배포 매니페스트

데이터베이스 프로젝트를 빌드하면 배포 매니페스트가 생성됩니다. 이 매니페스트에는 데이터베이스 프로젝트 파일(.dbproj) 없이 배포하는 데 필요한 프로젝트 수준 구성 정보가 모두 포함되어 있습니다.

배포 매니페스트 파일(.deploymanifest)은 MSBuild 프로젝트 파일과 매우 유사한 구조의 XML 파일입니다. .deploymanifest 파일은 데이터베이스 프로젝트 폴더의 sql\Configuration 폴더에 만들어집니다. 여기서 Configuration은 debug 또는 release 등의 빌드 구성입니다.

다음 예제에서는 Empty2008DbProj라는 빈 SQL Server 2008 데이터베이스 프로젝트에 대한 .deploymanifest 파일을 보여 줍니다.

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <TargetConnectionString>Data Source=stevenpoauth\sql2k8;Integrated Security=True;Pooling=False</TargetConnectionString>
    <TargetDatabase>Empty2008DbProj</TargetDatabase>
    <DeployToDatabase>True</DeployToDatabase>
    <DeployToScript>True</DeployToScript>
    <SourceModel>Empty2008DbProj.dbschema</SourceModel>
    <DeployScriptFileName>Empty2008DbProj.sql</DeployScriptFileName>
    <DeploymentConfigurationFile>Empty2008DbProj_Database.sqldeployment</DeploymentConfigurationFile>
  </PropertyGroup>
  <PropertyGroup>
    <SqlCommandVariablesFile>Empty2008DbProj_Database.sqlcmdvars</SqlCommandVariablesFile>
  </PropertyGroup>
  <ItemGroup>
    <DeploymentExtensionConfiguration Include="Empty2008DbProj_Script.PostDeployment.sql">
      <__PostdeploymentMetadata>
      </__PostdeploymentMetadata>
    </DeploymentExtensionConfiguration>
    <DeploymentExtensionConfiguration Include="Empty2008DbProj_Script.PreDeployment.sql">
      <__PredeploymentMetadata>
      </__PredeploymentMetadata>
    </DeploymentExtensionConfiguration>
  </ItemGroup>
  <ItemGroup>
    <DeploymentExtension Include="Microsoft.Data.Schema.Sql.Build.SqlPlanOrderModifier">
      <Assembly>Microsoft.Data.Schema.Sql</Assembly>
      <Version>10.0.0.0</Version>
      <Token>sD9ffxHVCjo=</Token>
    </DeploymentExtension>
    <DeploymentExtension Include="Microsoft.Data.Schema.Sql.Build.SqlPrePostDeploymentModifier">
      <Assembly>Microsoft.Data.Schema.Sql</Assembly>
      <Version>10.0.0.0</Version>
      <Token>sD9ffxHVCjo=</Token>
    </DeploymentExtension>
    <DeploymentExtension Include="Microsoft.Data.Schema.Sql.Refactoring.SqlRefactoringDeploymentContributor">
      <Assembly>Microsoft.Data.Schema.Sql</Assembly>
      <Version>10.0.0.0</Version>
      <Token>sD9ffxHVCjo=</Token>
    </DeploymentExtension>
  </ItemGroup>
</Project>

배포 매니페스트 파일에는 배포 시 사용되는 기본 구성을 정의하는 PropertyGroup 노드가 하나 이상 포함되어 있습니다. 또한 배포 매니페스트 파일에는 DeploymentExtensionConfiguration 노드와 Reference 노드가 있는 ItemGroup 노드도 포함되어 있습니다.

DeploymentExtensionConfiguration 노드는 배포 시 배포 확장에 전달되는 구성 파일을 정의합니다. 이러한 구성 파일에는 배포 전 및 배포 후 스크립트와 배포 시 의도를 보존하는 데 사용되는 리팩터링 로그가 포함되어 있습니다.

Reference 노드는 프로젝트에서 참조하는 아티팩트와 프로젝트를 빌드할 때 출력 폴더에 복사된 아티팩트를 정의합니다. 참조되는 파일은 배포할 때 처리되어 데이터베이스의 모델이 올바르게 다시 만들어지도록 합니다.

배포 스크립트의 트랜잭션

배포 스크립트에서 대부분의 데이터베이스 변경 작업은 트랜잭션 내에서 이루어지므로 배포에 실패할 경우 변경 작업을 롤백할 수 있습니다. 하지만 배포 트랜잭션 외부에서는 다음 개체가 만들어지거나, 업데이트되거나, 삭제됩니다.

SQL Server 버전

배포 트랜잭션 외부의 개체

SQL Server 2008 

서버 역할 멤버 자격

끝점

전체 텍스트 인덱스

전체 텍스트 카탈로그

연결된 서버

연결된 서버 로그인

이벤트 세션

서버 감사 사양

전체 텍스트 중지 목록

SQL Server 2005

서버 역할 멤버 자격

끝점

전체 텍스트 인덱스

전체 텍스트 카탈로그

연결된 서버

연결된 서버 로그인

일반적으로 이러한 개체는 시스템 저장 프로시저를 사용하여 유지 관리되므로 배포 트랜잭션 외부에 있어야 합니다.

기존 데이터베이스로 변경 내용 배포 시 고려 사항

변경 내용을 기존 데이터베이스로 배포할 때 일부 변경 내용으로 인해 데이터가 손실될 수 있습니다. 변경 내용으로 인해 테이블의 데이터가 손실될 수 있는 경우, 데이터가 손실되면 증분 배포 차단 확인란이 선택되어 있으면 배포가 취소됩니다. 기본적으로 이 확인란은 선택되어 있지만 프로젝트의 속성 창에서 설정을 확인할 수 있습니다. 자세한 내용은 데이터베이스 프로젝트 설정 개요를 참조하십시오.

테이블을 삭제하고 다시 만들거나, 열 크기를 변경(char(100)에서 char(50)로, 또는 nchar(100)에서 char(100)로)하거나, 문자 형식인 열의 데이터 정렬을 변경하는 것과 같은 유형의 변경 작업을 수행하면 데이터가 손실될 수 있습니다.

참고

리팩터링을 사용하여 데이터베이스 개체의 이름을 바꾸거나 데이터베이스 개체를 다른 스키마로 이동하면 리팩터링 로그 파일에 해당 작업이 기록됩니다. 배포 시 이 로그 파일의 정보를 통해 변경 의도를 보존할 수 있습니다. 예를 들어 테이블의 이름을 바꾸면 이 테이블이 삭제되고 새 이름의 테이블이 만들어지기 때문에 데이터가 손실될 수 있습니다. 리팩터링 로그 파일을 사용하면 배포 스크립트에서는 대신 테이블의 이름을 바꾸므로 변경 의도와 현재 데이터가 보존됩니다.

실패한 배포 복구

배포 스크립트의 트랜잭션 섹션 외부에서 배포에 실패할 경우 데이터가 손실될 수 있습니다. 그러므로 공유 데이터베이스는 배포 전에 단일 사용자 모드로 설정하고 백업해 두는 것이 좋습니다.

제외 파일

데이터베이스 프로젝트에서 파일을 제외하면 해당 파일 내에 정의된 데이터베이스 개체가 데이터베이스 프로젝트 빌드 시 생성되는 .dbschema 파일에 포함되지 않습니다. 그러한 개체는 .dbschema 파일에 포함되어 있지 않으므로 배포되지 않습니다. 하나 이상의 개체에 대해 작업하고 있지만 완료된 작업을 배포하려는 경우 준비된 개체만 .dbschema 파일에 포함시켜 대상 데이터베이스에 배포되도록 빌드에서 파일을 제외할 수 있습니다. 나중에 배포할 준비가 될 때 파일을 포함할 수 있으며, 프로젝트에서 변경되지 않은 경우 기존 개체를 수정하지 않고 배포에서 새 개체를 사용하여 데이터베이스를 업데이트합니다. 자세한 내용은 방법: 데이터베이스 프로젝트에서 파일 제외를 참조하십시오.

중요

데이터베이스 프로젝트에서 대상 데이터베이스에 있는 개체를 제외한 다음 이 프로젝트를 배포하면 데이터가 손실될 수 있습니다. 배포 구성에서 데이터베이스 프로젝트에 없지만 대상 데이터베이스에 있는 개체에 대해 DROP 문 생성 확인란을 선택한 경우 이러한 개체는 대상 데이터베이스에서 삭제됩니다.

서버 프로젝트

서버 프로젝트에는 "마스터" 데이터베이스의 개체에 대한 정의가 포함됩니다. 서버 프로젝트의 대상 데이터베이스 이름은 항상 "마스터"입니다. 각 서버 설정에 대해 서버 프로젝트 배포 시 해당 설정 값을 확인할지 여부를 지정할 수 있습니다. 확인하지 않은 설정은 무시됩니다. 서버 설정 값이 확인하려는 설정 값과 일치하지 않으면 배포가 실패하고 오류 메시지가 나타납니다.

명령줄 빌드

Visual Studio 사용자 인터페이스 내에서 빌드, 배포 또는 정리 작업을 수행할 수 있을 뿐 아니라, 명령 프롬프트에서 MSBuild.exe를 사용하여 이러한 작업을 수행할 수도 있습니다. Build, Deploy, Rebuild 및 Clean 대상을 지정할 수 있습니다. 빌드 및 배포 프로세스에서는 기본적으로 데이터베이스 프로젝트(.dbproj 파일 또는 .dbproj.user 파일) 내에 정의된 프로젝트 속성을 사용합니다. 그러나 명령 프롬프트나 지시 파일 내에서 이러한 속성을 재정의할 수 있습니다.

중요

명령줄 빌드를 수행하기 전에 Visual Studio를 닫아야 합니다. Visual Studio가 실행 중일 때 명령줄 빌드를 수행하면 일부 오류가 catch되지 않을 수도 있습니다.

명령 프롬프트에서 VSDBCMD.EXE를 사용하여 .dbschema 파일을 배포할 수도 있습니다. Visual Studio가 설치되어 있지 않은 컴퓨터에서 VSDBCMD를 사용할 수 있습니다. 자세한 내용은 방법: VSDBCMD.EXE를 사용하여 명령 프롬프트에서 데이터베이스 배포 준비를 참조하십시오. 프로덕션 환경에 배포하는 경우에는 VSDBCMD를 사용할 수도 있고, 배포 스크립트를 생성한 다음 Transact-SQL 편집기SQL Server Management Studio 등의 다른 도구를 사용하여 이 스크립트를 수동으로 배포할 수도 있습니다.

명령줄 구문

다음 예제와 같은 구문을 사용하여 명령 프롬프트에서 데이터베이스 프로젝트를 빌드할 수 있습니다.

  • MSBuild /target:Build MySolutionName.sln
    이 예제에서는 솔루션에 있는 프로젝트 파일에 지정된 프로젝트 속성을 사용하여 MySolutionName.sln이라는 솔루션에 대해 빌드 작업을 수행합니다. 솔루션에 데이터베이스 프로젝트가 여러 개 있는 경우 데이터베이스 프로젝트는 솔루션의 다른 모든 항목과 함께 빌드됩니다. 특정 데이터베이스 프로젝트를 빌드할 수도 있습니다. Build 대상에는 생성된 빌드 스크립트에 있는 배포 전 및 배포 후 스크립트가 포함됩니다.

  • MSBuild /target:Deploy /p:UseSandboxSettings=false /p:TargetDatabase=UpdatedTargetDatabase;TargetConnectionString="Data Source=(local)\SQLEXPRESS;Integrated Security=True;Pooling=False" MyProjectName.dbproj
    이 예제에서는 데이터베이스 프로젝트를 배포할 때 대상 데이터베이스 이름과 연결 문자열을 재정의하는 방법을 보여 줍니다.

  • MSBuild /target:Deploy /p:UseSandboxSettings=false /p:DeploymentConfiguration=DeployPath\AlternateDeploymentConfiguration.deploymentconfig /p:SqlCommandVarsFile=VarPath\AlternateVariables.sqlcmdvars /p:TargetDatabase=UpdatedTargetDatabase;TargetConnectionString="Data Source=(local)\SQLEXPRESS;Integrated Security=True;Pooling=False" MyProjectName.dbproj
    이 예제에서는 데이터베이스 프로젝트를 배포할 때 다른 대상 데이터베이스 및 연결 문자열을 지정하고 배포 구성 및 배포 변수를 재정의하는 방법을 보여 줍니다.

  • MSBuild /target:Deploy /p:UseSandboxSettings=false /p:BuildScriptName=MyScriptName.sql /p:outdir=BuildScriptPath /p:TargetDatabase=UpdatedTargetDatabase;TargetConnectionString="Data Source=InstanceName\DatabaseName;Integrated Security=True;Pooling=False" ProjectPath\MyProjectName.dbproj
    이 예제에서는 빌드를 수행하는 컴퓨터와는 다른 컴퓨터에서 데이터베이스를 배포하는 방법을 보여 줍니다. 예를 들어 매일 밤 빌드 스크립트를 만드는 중앙 빌드 컴퓨터가 있는 경우 이 구문을 사용할 수 있습니다. 이 경우 빌드 스크립트의 이름, 빌드 스크립트를 찾을 수 있는 경로(outdir), 대상 데이터베이스, 데이터베이스 프로젝트의 경로와 파일 이름을 지정해야 합니다.

  • MSBuild @dbbuild.arf MyProjectName.dbproj
    이 예제에서는 지시 파일을 사용하여 명령줄 인수를 제공하는 방법을 보여 줍니다. dbbuild.arf 파일에는 프로젝트 속성을 재정의하는 인수를 비롯하여 MSBuild의 유효한 인수가 모두 포함될 수 있습니다.

  • MSBuild /target:Rebuild MyProjectName.dbproj
    이 예제에서는 마지막으로 빌드된 이후 변경되지 않은 경우에도 지정한 프로젝트 또는 솔루션을 다시 빌드합니다.

  • MSBuild /target:Clean MyProjectName.dbproj
    이 예제에서는 기존 빌드 스크립트를 모두 삭제하는 방법을 보여 줍니다. 대부분의 경우 이 작업은 다른 빌드 또는 배포 작업과 함께 수행합니다.

참고

/target:을 /t:로, /property:를 /p:로 줄여서 사용할 수 있습니다.

자세한 내용은 MSBuild 명령줄 참조를 참조하십시오.

지시 파일에 대한 자세한 내용은 Microsoft 웹 사이트의 MSBuild 지시 파일 항목을 참조하십시오.

참고

MSBuild.exe를 실행하려면 Visual Studio 명령 프롬프트를 사용하거나 vsvars32.bat 배치 파일을 실행해야 합니다. 이 배치 파일은 %VS80COMNTOOLS% 환경 변수가 지정하는 폴더에서 찾을 수 있습니다.

빌드 컴퓨터에 필요한 소프트웨어

Visual Studio Team Foundation Server 2010에서는 데이터베이스 프로젝트의 빌드, 배포, 단위 테스트 및 데이터 생성을 기본적으로 지원합니다. 따라서 빌드 컴퓨터에 Visual Studio를 설치하지 않아도 됩니다. 빌드 컴퓨터에서 Visual Studio Team Foundation Server 2010을 사용하지 않는 경우에는 빌드 컴퓨터에 Visual Studio 2010 Professional, Visual Studio 2010 Premium 또는 Visual Studio 2010 Ultimate을 설치해야 합니다.

또한 데이터베이스를 데이터베이스 단위 테스트의 일부로 배포하지 않고 Team Foundation Build에서 배포하려는 경우에는 추가 설치를 수행해야 합니다. Visual Studio 2010이 설치된 컴퓨터에서 %PROGRAM FILES%\Microsoft Visual Studio 10.0\VSTSDB\Deploy 폴더 및 해당 하위 폴더의 내용을 빌드 컴퓨터에 복사해야 합니다. 자세한 내용은 방법: Team Foundation Build를 사용하여 변경 내용 배포연습: 사용자 지정 워크플로를 정의하여 Team Foundation Build에서 데이터베이스 배포를 참조하십시오.

프로젝트 속성

데이터베이스 및 서버 프로젝트의 일부 속성은 프로젝트 빌드 및 배포 방식에 영향을 줍니다. 이러한 속성은 프로젝트 파일과 .user 파일에 저장되지만, 명령 프롬프트나 지시 파일에서 이를 재정의할 수 있습니다. 자세한 내용은 방법: 데이터베이스 및 서버 프로젝트의 빌드 설정 구성방법: 데이터베이스 및 서버 프로젝트의 배포 설정 구성를 참조하십시오.

배포 매니페스트 속성 재정의

명령줄에서 배포할 경우 배포 구성, 연결 문자열, SQLCMD 변수 등의 기본 배포 속성을 재정의할 수 있습니다. .dbschema 파일을 여러 환경에 배포하려는 경우 배포 속성을 재정의할 수 있습니다.

예를 들어 EnterpriseDB.dbproj에 정의된 스키마를 개발, 테스트 및 프로덕션 환경에 배포하려는 경우 다음 명령줄을 사용할 수 있습니다.

배포 환경

MSBuild EnterpriseDB.dbproj /t:Deploy /p:UseSandboxSettings=false /p:DeploymentConfigurationFile=sql\debug\Development.sqldeployment /p:SqlCommandVariablesFile=sql\debug\Development.sqlcmdvars /p:TargetConnectionString="Data Source=DEV\sql2008;Integrated Security=true;Pooling=false"

테스트 환경

MSBuild EnterpriseDB.dbproj /t:Deploy /p:UseSandboxSettings=false /p:DeploymentConfigurationFile=sql\debug\UserTest.sqldeployment /p:SqlCommandVariablesFile=sql\debug\UserTest.sqlcmdvars /p:TargetConnectionString="Data Source=USERTEST\sql2008;Integrated Security=true;Pooling=false"

프로덕션 환경

MSBuild EnterpriseDB.dbproj /t:Deploy /p:UseSandboxSettings=false /p:DeploymentConfigurationFile=sql\debug\Production.sqldeployment /p:SqlCommandVariablesFile=sql\debug\Production.sqlcmdvars /p:TargetConnectionString="Data Source=PRODUCTION\sql2008;Integrated Security=true;Pooling=false"

각 환경에서 배포 구성 파일, SQLCMD 변수 파일 및 연결 문자열을 서로 다르게 제공합니다.

참고 항목

작업

방법: 데이터베이스 프로젝트를 빌드하여 컴파일된 스키마 파일(.dbschema) 생성

방법: 새 데이터베이스 또는 기존 데이터베이스로 변경 내용 배포

연습: 새 버전 제어 데이터베이스 만들기 및 배포

연습: 기존 버전 제어 데이터베이스로 변경 내용 배포

개념

데이터베이스를 빌드하여 격리된 개발 환경에 배포

데이터베이스를 빌드하여 스테이징 환경 또는 프로덕션 환경에 배포

변경 기록

날짜

변경 내용

이유

2010년 7월

MSDN 포럼에 보고된 혼동 문제를 해결하기 위해 빌드 컴퓨터에 필요한 소프트웨어에 대해 이해하기 쉽게 설명했습니다.

고객 의견