2017-03-09 5 views
0

빌드하는 동안 SSDT .sqlproject를 기반으로 데이터베이스의 dacpac 파일을 생성합니다. 이 dacpac은 나중에 sqlpackage를 사용하여 프로덕션에 배포됩니다. /p : DropStatisticsNotInSource = False 스위치를 사용하더라도 sqlpackage는 프로덕션 데이터베이스와의 마지막 동기화 후 추가 된 모든 통계를 삭제합니다.SSDT/SqlPackage가 통계를 삭제합니다.

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <IncludeCompositeObjects>True</IncludeCompositeObjects> 
    <TargetDatabaseName>hotel</TargetDatabaseName> 
    <DeployScriptFileName>Database.sql</DeployScriptFileName> 
    <TargetConnectionString>connectionstring</TargetConnectionString> 
    <BlockOnPossibleDataLoss>False</BlockOnPossibleDataLoss> 
    <DropObjectsNotInSource>True</DropObjectsNotInSource> 
    <DoNotDropDatabaseRoles>True</DoNotDropDatabaseRoles> 
    <DoNotDropDatabaseScopedCredentials>True</DoNotDropDatabaseScopedCredentials> 
    <DoNotDropUsers>True</DoNotDropUsers> 
    <DoNotDropServerRoles>True</DoNotDropServerRoles> 
    <DoNotDropSecurityPolicies>True</DoNotDropSecurityPolicies> 
    <DoNotDropSearchPropertyLists>True</DoNotDropSearchPropertyLists>  
    <DoNotDropPermissions>True</DoNotDropPermissions> 
    <DoNotDropPartitionSchemes>True</DoNotDropPartitionSchemes> 
    <DoNotDropPartitionFunctions>True</DoNotDropPartitionFunctions> 
    <DoNotDropExternalFileFormats>True</DoNotDropExternalFileFormats> 
    <DoNotDropExternalTables>True</DoNotDropExternalTables> 
    <DoNotDropErrorMessages>True</DoNotDropErrorMessages> 
    <DoNotDropDefaults>False</DoNotDropDefaults> 
    <ProfileVersionNumber>1</ProfileVersionNumber> 
    <DropStatisticsNotInSource>False</DropStatisticsNotInSource> 
    <ScriptRefreshModule>False</ScriptRefreshModule> 
    </PropertyGroup> 
</Project> 

우리가 어떻게 통계를 떨어 뜨리지 않도록 sqlpackage을 강제 할 수

우리는이이 프로필을 게시하고 SSDT의 스크립트 생성 옵션을 사용하여 재현 할 수 ?

+0

실제 검증은 생성 된 스크립트가 아니라 전달 된 매개 변수를 확인하는 것입니다. 스크립트는 무엇을합니까? 'DropObjectsNotInSource'는 의도적으로'True'로 설정되어 있습니까? –

+1

배포 서버에서 최신 버전의 sqlpackage.exe (dacfx)를 실행하고 있습니까? – ErikEJ

+0

@PanagiotisKanavos 예 우리는 실제로 데이터베이스에 테이블, 열 및 저장 프로 시저를 추가하려고합니다. 저는 최신 SSDT가 설치된 VS2015를 실행 중이며 VS2017도 시도했습니다. 두 스크립트 모두 동일한 마이그레이션 스크립트 (DROP STATISTICS xyz.abc 포함) –

답변

2

문제는 DropObjectsNotInSource=True을 사용하므로 DropStatisticsNotInSource=False 옵션을 덮어 씁니다. 이것은 버그이거나 sqlpackage.exe 설명서에 지정되어 있지 않습니다.

한 가지 가능한 해결 방법은 this blog에서 설명한대로 Elliott의 AgileSqlClub SSDT 필터를 사용하는 것입니다. 이 경우 옵션 다음에 AgileSqlClub.SqlPackageFilter.dll을 사용하고 추가해야합니다 :

/p:AdditionalDeploymentContributors=AgileSqlClub.DeploymentFilterContributor /p:AdditionalDeploymentContributorArguments="SqlPackageFilter=IgnoreType(Statistics)"