SQL Server数据工具和分区功能


16

我正在创建一个滑动窗口加载方案,并且分区功能将随着时间改变其边界。

我已经在SQL Server数据工具(SSDT)数据库项目中创建了一些分区功能,并使用一些硬编码的初始边界。

但是,随着时间的流逝以及分区功能的边界发生变化,未来的SSDT数据库发布会将边界恢复为原始边界。

是否有某种方法可以通过禁用分区功能的发布来优雅地处理此情况?

我尝试将SSDT中分区功能的Build Action属性从default更改BuildNone,但是由于依赖对象中缺少引用,因此项目无法构建。


4
我总是说基于差异的部署从根本上被破坏了。迁移是如此出色的部署隐喻
Remus Rusanu 2012年

“忽略指数期权”也应设置为避免SSDT每个部署触发时重建你的分区索引。

Answers:


16

我能够找到解决问题的方法,希望这对其他人有所帮助。

为了避免每个数据库发布重新创建分区功能,可以在“ 高级发布设置”对话框(“数据库发布”对话框中的“ 高级...”按钮)上选中“ 忽略分区方案”选项。

从选项的描述(强调我的):

指定在发布到数据库时是应该忽略还是更新分区方案和功能上的差异。

但是,如果您已经定义了使用页面或行压缩的分区对象(表或索引),尽管“ 忽略分区方案”选项不再重新创建分区功能,但是无论如何都会重新创建该分区对象。

发生这种情况的原因是,已分区的对象使用每个分区定义的压缩来编写脚本,并且由于该对象的分区数量与最初定义的分区数量不同,因此SSDT在发布时会重新创建该对象。例如(格式化的):

WITH ( DATA_COMPRESSION = PAGE ON PARTITIONS (1)
     , DATA_COMPRESSION = PAGE ON PARTITIONS (2)
     , ...

为了避免这种情况的发生,您还可以在同一“ 高级发布设置”对话框中选中“ 忽略表选项”选项-请记住,您将忽略其他选项,例如和(表选项的引用)。ALLOW_ROW_LOCKSALLOW_PAGE_LOCKS

高级发布设置对话框


1
Google只是带领我进入了这里。很棒的信息,谢谢您的分享。
jamiet 2013年

请注意,如果在项目属性->调试页面中使用类似的对话框,则更改将保存到.sqlproj.user文件,但仅在项目卸载时保存。
Taran

3

哎呀,那不是一个好情况。据我所知,SSDT不支持此功能。我能想到的最好的解决方法是使用部署前脚本将边界存储在表中,然后使用部署后脚本中的值更改分区功能。


忽略我的答复,从上面我对贡萨鲁的答复来看,我显然是错的。
jamiet 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.