0

CI 서버에서 데이터베이스 배포를 자동화하고 싶습니다. dacpac 파일을 SQL 서버의 데이터베이스에 배포하기 위해 powershell 스크립트를 작성했습니다. 하지만 이제는 두 개의 분리 된 dacpac 파일이 있고 단일 데이터베이스에 배포하려고하는 이상한 위치에 있습니다 (소프트웨어 설계로 인해 단일 dacpac을 사용할 수 없습니다). 하나씩 배포하면 첫 번째 dacpac에서 만든 개체가 제거됩니다. 그래서 여기에 어떤 도움을 주시면 감사하겠습니다.단일 데이터베이스에 여러 dacpac 파일 배포

두 개의 dacpac 파일을 결합하고 명령이나 스크립트를 사용하여 배포하는 다른 방법이있는 경우 제안 사항을 회신 해주십시오.

아래의 powershell 스크립트를 사용하여 단일 dacpac을 데이터베이스에 배포합니다.

$sqlPackagePath = "C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\Microsoft.SqlServer.Dac.dll"; 
$sqlServer = "localhost"; 
$dacpacPath = "mydatabase.dacpac" 
$database = "TestDatabase" 

add-type -path $sqlPackagePath 
$dacService = new-object Microsoft.SqlServer.Dac.DacServices "server=$sqlServer" 
$dp = [Microsoft.SqlServer.Dac.DacPackage]::Load($dacpacPath) 
$dacService.deploy($dp, $database, "True") 
+0

첫 번째 배포하고 두 번째 배포하는 경우 어떻게됩니까? 그것을 덮어 씁니까 ?? 또는 당신의 필요를 성취하는 것입니다. –

+0

예를 들어, 첫 번째 dacpac에 의해 생성 된 객체를 제거하고 두 번째 dacpapc에만 객체를 유지하는 로직을 생각할 수 있습니다. 하지만 둘 다 유지하고 싶습니다. 나는 새로운 데이터베이스를 매번 생성하는 것이 좋으며 통합 테스팅에만 사용되며 매번 새로운 인스턴스로 시작해야합니다. – user1856918

+0

그러면 두 개의 개별 오브젝트를 작성하고 단일 db에 배치하지 마십시오. 두 dacpac으로 foreach를 실행하고 방금 배포하십시오. –

답변

1

기본적으로 dacpac 게시는 추가 개체를 삭제하지 않습니다. 이 동작을 활성화하기 위해 명시 적으로 선택해야하는 설정이 있습니다.이 설정은 "소스에 있지 않은 객체 삭제"라고하며 기본적으로 false입니다.

그러나 이전 버전 (Microsoft SQL Server 2012)의 Microsoft.SqlServer.Dac을 사용하여이 작업을 수행하므로 해당 버전의 동작이 새 버전과 다를 수 있습니다.

데이터 계층 응용 프로그램 프레임 워크 (Microsoft.SqlServer.Dac)의 최신 버전은 여기에 있습니다 : https://www.microsoft.com/en-us/download/details.aspx?id=55088

설치 후 Microsoft.SqlServer.Dac의 새 버전 \ 마이크로 소프트 SQL 서버에서 (140)가 될 것 \ DAC \ bin