非常大的分区表的奇怪情况

0 sql-server partitioning

我这里有一个非常奇怪的情况......

在我的 SQL Box 上有一个大表,这个表是分区的,一切都很好,直到我忘记创建新的分区范围。在第一张图片中,最后一个分区的边界为 201205110000。

201205120000 之后的所有数据都在最后一个边界 201205110000 之前,现在我想我可以创建新的边界范围,但是 fi 的情况是,如果我创建下一个边界 201205120000 sql server 将所有数据从 201205110000 复制到边界 2005,2001 年我感觉,但我不能这样做,因为我的事务日志已满。此外,特定文件(在本例中为 file_20120512)也在增长。

如果认为我可以创建最后一个边界 201206040000,然后是 201206030000,但是如果我这样做,SQL Servers tran 日志运行已满但特定数据文件 file_20120604 没有增长但 tran 日志......

我能做什么?

Rem*_*anu 6

所以最后你有一个巨大的分区,因为你忘记创建新的空分区。您可以这样做(将是离线操作):

  • 删除所有未对齐的索引
  • 创建一个空的临时表,其结构与您的数据表(包括所有对齐的索引)相同,并具有接受最后一个分区的适当约束
  • 将最后一个分区切换到临时表中。现在数据已经移动到临时表中,真实表的最后一个分区是空的
  • 根据需要拆分分区功能,因为最后一个分区是空的,操作将是即时的。记得留下一个空的最后一个分区
  • 为与真实表尾部的分区对齐的临时表创建临时分区方案
  • 在上面创建的临时分区方案上重建临时表。现在临时表与真实表尾部的空分区对齐。如果重建有日志空间问题,请使用在线重建并进行频繁的日志备份。还考虑启用bulk_logged 模式。
  • 将每个分区从暂存表一一切换到真实表中。
  • 添加您需要的任何未对齐的索引(如果您问我,您不应该从未对齐的索引开始......)
  • 删除临时表和临时分区功能/方案
  • 开始维护分区,以便您下次不必重复此操作。