다음을 통해 공유


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

업데이트: 2007년 11월

데이터베이스 프로젝트에서 데이터베이스 서버로 새 데이터베이스 또는 기존 데이터베이스 변경 내용을 배포하려면 데이터베이스 프로젝트를 빌드한 다음 데이터베이스 서버로 배포해야 합니다. 빌드 단계에서는 프로젝트 속성 창에서 설정한 속성을 사용하여 개체 정의 스크립트와 모든 배포 전 또는 배포 후 스크립트를 하나의 빌드 스크립트로 어셈블합니다. 배포 단계에서는 스크립트를 어셈블한 다음 해당 빌드 스크립트를 지정한 대상에 대해 실행합니다. 빌드 정리 작업은 단순히 기존 빌드 스크립트를 모두 삭제합니다. 스테이징 서버 또는 프로덕션 서버를 업데이트하려는 경우 데이터베이스 프로젝트를 빌드한 다음 직접 빌드 스크립트를 수정하는 경우가 많습니다. 조정한 후 결과가 만족스러우면 수정된 빌드 스크립트를 수동으로 프로덕션 환경에 배포할 수 있습니다.

배포 스크립트

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

각각 구성이 다른 여러 대상 데이터베이스를 대상으로 빌드 스크립트를 실행할 수 있습니다. 따라서 빌드 스크립트에는 해당 값이 이미 데이터베이스 프로젝트 속성 값과 일치하는 경우에도 모든 데이터베이스 속성을 설정하는 명령문이 들어 있습니다.

기존 데이터베이스로 배포 시 고려 사항

변경 내용을 기존 데이터베이스로 배포할 때 일부 변경 내용으로 인해 데이터가 손실될 수 있습니다. 이 변경으로 인해 테이블에 포함된 데이터가 손실되면 프로젝트 속성 창에서 데이터가 손실되면 증분 배포 차단 확인란의 선택을 취소하지 않은 경우 배포가 취소됩니다. 자세한 내용은 데이터베이스 프로젝트 설정 개요를 참조하십시오. 데이터가 손실되는 변경의 예로는 테이블을 삭제하고 다시 만든 경우, 열 크기를 변경한 경우(char(100)을 char(50)으로 변경 또는 nchar(100)을 char(100)으로 변경) 또는 문자 형식 열의 데이터 정렬을 변경한 경우 등이 있습니다.

실패한 배포 복구

Team Edition for Database Professionals에서는 배포가 실패하면 되돌릴 수 있도록 트랜잭션 로그에 저장 지점을 만듭니다. 그러나 배포 도중 저장 지점을 만든 시점과 데이터베이스를 되돌리는 시점 사이에 데이터베이스 내의 데이터를 수정하면 데이터가 손실될 수 있습니다. 그러므로 공유 데이터베이스를 배포할 때는 배포 전에 해당 데이터베이스를 단일 사용자 모드로 설정해 두는 것이 좋습니다.

참고:

실패한 복구에서 데이터베이스를 복원하려면 전체 복구 모델을 사용해야 합니다. 트랜잭션 로그가 필요하므로 단순 복구 모델은 적합하지 않습니다. 복구 모델에 대한 자세한 내용은 복구 모델 개요를 참조하십시오.

제외 파일

데이터베이스 프로젝트에서 파일을 제외하면 해당 파일 내에 정의된 데이터베이스 개체가 빌드 또는 배포에 포함되지 않습니다. 하나 이상의 개체에서 작업하고 있지만 완료된 작업을 배포하려는 경우 파일을 제외하여 준비된 항목만 배포할 수 있습니다. 나중에 배포할 준비가 될 때 파일을 포함할 수 있으며, 프로젝트에서 변경되지 않은 경우 기존 개체를 수정하지 않고 배포에서 새 개체를 사용하여 데이터베이스를 업데이트합니다.

명령줄 빌드

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

중요:

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

명령줄 구문

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

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

  • MSBuild /target:SQLBuild MyProjectName.dbproj
    이 예제에서도 빌드 작업만 수행합니다. MyProjectName.dbproj라는 데이터베이스 프로젝트 하나만 빌드합니다. .dbproj 파일 내의 프로젝트 속성이 빌드 스크립트를 어셈블하는 데 사용됩니다. 스크립트는 배포되지 않습니다. SQLBuild 대상에는 생성된 빌드 스크립트에 있는 배포 전 또는 배포 후 스크립트가 포함되지 않습니다.

  • MSBuild /target:Build /p:BuildScriptName=MyScriptName.sql MyProjectName.dbproj
    이 예제에서도 빌드 작업만 수행합니다. MyProjectName.dbproj라는 데이터베이스 프로젝트 하나만 빌드합니다. .dbproj 파일 내의 프로젝트 속성이 빌드 스크립트를 어셈블하는 데 사용됩니다. 이 명령문을 사용하면 BuildScriptName 속성이 무시되고 출력 스크립트에 새 이름이 지정됩니다. 빌드 스크립트를 여러 서버에 배포하려면 이 방법을 사용합니다. 스크립트는 배포되지 않습니다.

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

  • MSBuild /target:rebuild /p:Configuration="Default" /p:DefaultDataPath="Drive:Path\\" MyProjectName.dbproj
    이 예제에서는 데이터베이스 프로젝트를 다시 빌드하고, 구성(Default)을 지정하고, DefaultDataPath 변수를 재정의하는 방법을 보여 줍니다.

중요:

DefaultDataPath 뒤에는 백슬래시("\")를 추가로 지정해야 합니다. 그렇지 않으면 빌드할 때 경고가 나타나며 데이터베이스 프로젝트가 올바르게 빌드되지 않습니다.

  • MSBuild /target:Deploy /property:BuildScriptName= MyScriptName.sql /property:outdir=BuildScriptPath /property: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 지시 파일을 참조하십시오.

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

  • MSBuild /target:Clean MyProjectName.dbproj
    이 예제에서는 기존 빌드 스크립트를 모두 삭제하는 방법을 보여 줍니다. 이 작업을 수행한 후 다른 빌드 또는 배포 작업을 수행하는 것이 더 일반적입니다.

참고:

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

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

지시 파일에 대한 자세한 내용은 MSBuild Response를 참조하십시오.

참고:

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

데이터베이스 프로젝트 속성

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

보안 고려 사항

디자인 타임 유효성 검사 데이터베이스의 인스턴스를 다른 사용자가 수정할 수 있는 경우 다른 사용자가 최종적으로 빌드 스크립트에 포함되는 개체를 추가하거나 변경할 수 있습니다. 빌드 스크립트에서는 DLL 트리거를 비롯한 이러한 개체를 생성하게 되고, 이러한 개체는 데이터베이스를 배포하는 사용자의 컨텍스트에서 실행됩니다. 이러한 개체가 솔루션 탐색기 또는 스키마 뷰에 표시되지 않을 수도 있습니다. 데이터베이스 프로젝트를 배포된 데이터베이스와 비교하면 디자인 타임 유효성 검사 데이터베이스에도 이러한 개체가 들어 있으므로 스키마 비교 기능에서 아무것도 감지되지 않습니다.

데이터베이스에 대한 위험을 최소화하려면

  • 디자인 타임 유효성 검사 데이터베이스의 인스턴스를 다른 사용자와 공유하지 마십시오.

  • 배포 전에 빌드 스크립트를 검토하십시오.

참고 항목

작업

방법: 데이터베이스 빌드 스크립트 준비

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

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

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

개념

Database Edition의 용어 개요