SqlPackage - 如何阻止它关闭我的查询存储?
SqlPackage - How do I stop it from turning off my query store?
我在 Visual Studio 2017 年有一个数据库项目。我们的数据库项目的管理方式与任何其他代码库一样,多个开发人员可以根据需要更新项目。为了减轻部署的痛苦,我在我们的 TFS 2018 (vNext) 构建过程中构建了一个自定义部署任务,它是一个调用 sqlPackage.exe 的 powershell 脚本。 SqlPackage 将我们编译的数据库项目(*.dacpac 文件)与我们的目标数据库(在 Dev、QA 等中)进行比较。我配置了自定义步骤,以便它将预期的更改写入磁盘,因此我记录了更改的内容,然后 sqlPackage 运行第二遍以将更改应用到预期的目标数据库。
我的 DBA 在我们的 SQL 2016 数据库中启用了查询存储。在我的 sqlPackage 部署期间,初始步骤之一是关闭查询存储,这让我的 DBA 不高兴。他希望能够比较预部署和 post 部署更改,但如果查询存储被关闭,我们将丢失历史记录。
我已经尝试了文档中的几个开关 (https://msdn.microsoft.com/en-us/library/hh550080(v=vs.103).aspx#Publish%20Parameters,%20Properties,%20and%20SQLCMD%20Variables),但我似乎找不到神奇的参数。
如何阻止 SqlPackage 关闭查询存储?
我当前的脚本:
sqlPackage.exe /Action:Script /SourceFile: myPath\MyDatabaseName.dacpac" /OutputPath:"myPath\TheseAreMyChangesThatWillBeApplied.sql" /TargetConnectionString:"Integrated Security=true;server=MyServer;database=MyDatabase;" /p:DropObjectsNotInSource=false /p:DropPermissionsNotInSource=false /p:DropRoleMembersNotInSource=false /p:BlockOnPossibleDataLoss=True /Variables:"CrossDatabaseRefs=CrossDatabaseRefs
有没有更好的方法?我很惊讶我必须编写自定义 TFS 构建任务来执行此操作。这让我觉得我可能正在以艰难的方式做这件事。 (但这在过去几年对我来说效果很好)。我喜欢数据库项目,我喜欢它们强制引用并确保我们在删除列时不会破坏其他对象(例如)。
如有任何见解,我们将不胜感激。
显然,我们需要做的就是添加一个 post 部署脚本来重新启用查询存储。希望这可以帮助那里的人...
使用大师
改变数据库 [MyDbName] 设置 QUERY_STORE = ON
使用 /p:ScriptDatabaseOptions=false 禁用数据库属性脚本,或者更新项目中的数据库属性以反映所需的查询存储设置。
要在项目中设置查询存储,请在解决方案资源管理器中右键单击数据库项目并打开“属性”。从那里,在“项目设置”选项卡中找到 "Database Settings..." 按钮。在“数据库设置”对话框中,单击“操作”选项卡并向下滚动以找到“查询存储”设置。
我在 Visual Studio 2017 年有一个数据库项目。我们的数据库项目的管理方式与任何其他代码库一样,多个开发人员可以根据需要更新项目。为了减轻部署的痛苦,我在我们的 TFS 2018 (vNext) 构建过程中构建了一个自定义部署任务,它是一个调用 sqlPackage.exe 的 powershell 脚本。 SqlPackage 将我们编译的数据库项目(*.dacpac 文件)与我们的目标数据库(在 Dev、QA 等中)进行比较。我配置了自定义步骤,以便它将预期的更改写入磁盘,因此我记录了更改的内容,然后 sqlPackage 运行第二遍以将更改应用到预期的目标数据库。
我的 DBA 在我们的 SQL 2016 数据库中启用了查询存储。在我的 sqlPackage 部署期间,初始步骤之一是关闭查询存储,这让我的 DBA 不高兴。他希望能够比较预部署和 post 部署更改,但如果查询存储被关闭,我们将丢失历史记录。
我已经尝试了文档中的几个开关 (https://msdn.microsoft.com/en-us/library/hh550080(v=vs.103).aspx#Publish%20Parameters,%20Properties,%20and%20SQLCMD%20Variables),但我似乎找不到神奇的参数。
如何阻止 SqlPackage 关闭查询存储?
我当前的脚本:
sqlPackage.exe /Action:Script /SourceFile: myPath\MyDatabaseName.dacpac" /OutputPath:"myPath\TheseAreMyChangesThatWillBeApplied.sql" /TargetConnectionString:"Integrated Security=true;server=MyServer;database=MyDatabase;" /p:DropObjectsNotInSource=false /p:DropPermissionsNotInSource=false /p:DropRoleMembersNotInSource=false /p:BlockOnPossibleDataLoss=True /Variables:"CrossDatabaseRefs=CrossDatabaseRefs
有没有更好的方法?我很惊讶我必须编写自定义 TFS 构建任务来执行此操作。这让我觉得我可能正在以艰难的方式做这件事。 (但这在过去几年对我来说效果很好)。我喜欢数据库项目,我喜欢它们强制引用并确保我们在删除列时不会破坏其他对象(例如)。
如有任何见解,我们将不胜感激。
显然,我们需要做的就是添加一个 post 部署脚本来重新启用查询存储。希望这可以帮助那里的人...
使用大师 改变数据库 [MyDbName] 设置 QUERY_STORE = ON
使用 /p:ScriptDatabaseOptions=false 禁用数据库属性脚本,或者更新项目中的数据库属性以反映所需的查询存储设置。
要在项目中设置查询存储,请在解决方案资源管理器中右键单击数据库项目并打开“属性”。从那里,在“项目设置”选项卡中找到 "Database Settings..." 按钮。在“数据库设置”对话框中,单击“操作”选项卡并向下滚动以找到“查询存储”设置。