web-dev-qa-db-ja.com

sqlpackageによるDacpacデプロイメント、「DropObjectsNotInSource = True」が.mdfおよび.ldfをドロップしようとしています

Powershellデプロイメントスクリプト:

Executing: C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\sqlpackage.exe /Action:Publish /SourceFile:********.dacpac /Profile:Release.Publish.xml /TargetConnectionString:server=********;database=********;uid==********;pwd=********;app=********;timeout=900 /p:IgnoreAuthorizer=True /p:IgnorePermissions=True /p:IgnoreRoleMembership=True /p:IgnoreUserSettingsObjects=True /p:BlockOnPossibleDataLoss=False /p:TreatVerificationErrorsAsWarnings=True /p:GenerateSmartDefaults=True 
Error *** The object [********] exists in the target, but it will not be dropped even though you selected the 'Generate drop statements for objects that are in the target database but that are not in the source' check box. 
Error *** The object [********_log] exists in the target, but it will not be dropped even though you selected the 'Generate drop statements for objects that are in the target database but that are not in the source' check box. 
Info Initializing deployment (Complete) 
Info Analyzing deployment plan (Start) 
Info Analyzing deployment plan (Complete) 
Info Updating database (Start) 
Info Starting ********.sql 
Info Update complete. 
Info Updating database (Complete) 
Info Successfully published database.

Release.Publish.xml:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <CreateNewDatabase>False</CreateNewDatabase>
    <BackupDatabaseBeforeChanges>False</BackupDatabaseBeforeChanges>
    <BlockOnPossibleDataLoss>True</BlockOnPossibleDataLoss>
    <NoAlterStatementsToChangeCLRTypes>False</NoAlterStatementsToChangeCLRTypes>
    <DropObjectsNotInSource>True</DropObjectsNotInSource>
    <DeployDatabaseInSingleUserMode>False</DeployDatabaseInSingleUserMode>
    <DeployScriptFileName>Release.sql</DeployScriptFileName>
    <ProfileVersionNumber>1</ProfileVersionNumber>
    <UnmodifiableObjectWarnings>False</UnmodifiableObjectWarnings>
  </PropertyGroup>
</Project>

なぜこれがmdfとldfsを削除しようとしているのですか?

コマンドラインツールを使用したプロジェクト指向のデータベース開発 から:DoNotDropObjectTypeを使用してDropObjectsNotInSourceをより責任を持って動作させることで修正できる可能性があると言えます。

正直なところ、そもそもなぜこれが問題であるのか混乱しています。

3

Mdfファイルとldfファイルがデフォルト以外の場所にある場合(またはデフォルト以外の接頭辞/名前がある場合)、その情報をSSDTプロジェクトに追加する必要があります。これは、スキーマの比較操作(発行を行うときに発生)が、ファイルが適切な場所にあり、ドロップ/再作成する必要がないことを確認するのに役立ちます。

プロジェクトを右クリック->新しいアイテムの追加->ファイルグループファイル

あなたはこのようなものを得るでしょう:

_/*
Do not change the database path or name variables.
Any sqlcmd variables will be properly substituted during 
build and deployment.
*/
ALTER DATABASE [$(DatabaseName)]
    ADD FILE
    (
        NAME = [SqlFile1],
        FILENAME = '$(DefaultDataPath)$(DefaultFilePrefix)_SqlFile1.ndf'
    )
_

プライマリデータファイル(mdf)の目的の場所を指すようにそのスクリプトを変更し、デプロイがよりスムーズに行われるようにします。

$(DefaultDataPath)は、ターゲットインスタンスの設定によって設定されることに注意してください。

enter image description here

また、$(DefaultFilePrefix)は、publish.xmlファイルの「TargetDatabaseName」によって設定されます。

1
Josh Darnell