【问题标题】:Alter A Partitioned Table Column DataType更改分区表列数据类型
【发布时间】:2013-05-09 06:35:52
【问题描述】:

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

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

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

关于使用这种方法要注意什么的任何指示?还是有其他更好的方法?

拉吉

【问题讨论】:

  • 为什么不将日期转换为日期类型?做日期计算有很多支持,比如datediff函数,当列是日期,日期时间等。目前的设置有什么问题?这个数据库是数据仓库吗(其中以整数表示的日期更常见)?
  • @MichaelHarmon 更改主数据库的数据类型(我猜是聚集索引)将需要 tempdb 大小为 1-2 个表大小 + 它将被记录:即使是最小的日志记录也会花费很多时间空间。
  • 这张桌子的尺寸是多少,这张桌子还有其他改动计划吗?

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


【解决方案1】:

以下是一些想法:

如果您保持原样,您可以将这个旧表作为历史表,为新数据创建另一个带有新布局的表,并创建一个视图和/或 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 上的 Temp_table 上创建旧索引
  8. 可选:将本次迭代的结果记录到 Log_table 中

在第 7 步中创建旧索引并非绝对必要的任何 PS 和 PF。只要索引的结构相同就足够了。

【讨论】:

    猜你喜欢
    • 2021-08-18
    • 2018-07-10
    • 2013-09-12
    • 2014-03-05
    • 2014-01-20
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 2014-07-20
    相关资源
    最近更新 更多