更改分区表列DataType

时间:2013-05-09 06:35:52

标签: sql-server sql-server-2005 sql-server-2008-r2 partitioning

我现有的数据库位于SQL Server 2005 - 版本9.0.5000上。迁移到SQL Server 2008 R2

我们有一个包含5亿多行数据的庞大表格。列PriceListDate定义为varchar(8),是复合主键的一部分。更糟糕的是,该表在此列上进行了分区。

由于现在有机会重新构建数据库,我正在考虑将此数据类型的数据类型更改为integer。但是,似乎没有简单的方法可以做到这一点,但是要创建另一个具有新数据类型的表,请迁移数据,然后删除旧表和分区方案和函数。

有关使用此方法需要注意什么的任何指示?或者是否有另一种更好的方法?

拉​​吉

1 个答案:

答案 0 :(得分:1)

以下是一些想法:

如果您保持原样,您可以将此旧表作为历史记录表,使用新的layoyut为新数据创建另一个表,并创建一个视图和/或SP来访问它们或所需的一个。

如果决定更改数据类型:   - 由于该过程应该是可控的,因此无论如何都应该分批进行   - 利用现有的分区会很好。

我的解决方法是: 设置3个表:Old_Big_Table,Temp_table(具有旧结构,索引,分区)和New_Table(具有新结构,在不同的分区方案和功能上)

对于每个分区:

  1. 将1分区切换为Temp_table
  2. 删除索引
  3. 更改数据类型
  4. 根据新PS和PF上的新布局创建索引
  5. 将分区切换为New_table
  6. 在Temp_table上删除新索引
  7. 在旧PS和PF
  8. 上的Temp_table上创建旧索引
  9. 可选:将此迭代的结果记录到Log_table
  10. 在步骤7中,不必在任何PS和PF上创建旧索引。因为索引的结构是相同的就足够了。