1

我现有的数据库是SQL Server 2005上 - 版本9.0.5000。迁移到SQL Server 2008 R2改变分区表列数据类型

我们有超过500万行数据的一个巨大的表。列PriceListDate被定义为varchar(8)并且是复合主键的一部分。更糟糕的是,该表在此列上进行了分区。

既然现在有机会重塑DB,我考虑上改变了数据类型为integer此列。但是,似乎没有这样做的简单方法,但要用新数据类型创建另一个表,迁移数据,然后删除旧表和分区方案和函数。

什么用这种方法来观看任何指针?或者有更好的方法吗?

拉吉

+0

为什么不将日期转换为日期类型?对于日期计算有很多支持,例如datediff函数,当列是日期,日期时间等时。当前设置有什么问题?这个数据库是一个数据仓库(日期表示为整数更常见)? – 2013-05-09 13:43:53

+0

@MichaelHarmon更改主数据的类型(我的猜测是clistered索引)将需要tempdb大小为1-2个表大小+它将被记录:即使最少的日志记录也会占用大量的空间。 – Stoleg 2013-05-29 15:27:34

+0

表格大小是多少?此表格是否有其他更改? – Stoleg 2013-05-29 15:28:28

回答

1

这里有一些想法:

如果你离开,因为它是你可以有这样的旧表为历史表,创建新数据新layoyut另一个表,并创建一个视图和/或SP来访问它们或需要的一个。

如果决定更改数据类型: - 由于这个过程应该是可控的,应该分批进行反正 - 这将是很好的利用现有的分区。

我的solultion是: 设置3个表:Old_Big_Table,Temp_table(旧结构,索引,分区)和NEW_TABLE(用新的结构,在不同的分区方案和功能)

为每个分区:

  1. 开关1分区来Temp_table
  2. 删除索引
  3. 变化数据类型
  4. 创建索引ES按照新的PS和PF新的布局
  5. 交换机分区NEW_TABLE上Temp_table
  6. 删除新的索引
  7. 旧PS和PF上Temp_table创建旧索引
  8. 可选:登录本次迭代到Log_table的结果

在步骤7中不是严格需要在任何PS和PF上创建旧索引。像索引结构一样,它就足够了。