小编All*_*hty的帖子

更改分区表主键列的数据类型

我目前很幸运有以下情况:

  • 我们有一个分区并使用主键类型的生产数据库 int
  • 多个 (~20) 表,每个表包含 > 100.000.000 行,其中 2 个接近 2.000.000.000 行
  • 这些表都有一个类型int为主键的列,每行增加一
  • 这些表被分配,使用类型的分区的功能int,使用RIGHT(0),所以有效的所有数据是在所述一个和唯一的分区

由于某些表接近int32最大值,我们必须将这些列类型更改为bigint。这是问题开始的地方:

  • 不能修改主键列的类型(这个我可以通过删除主键,修改类型,然后重新创建主键来避免),但是,我在删除主键约束后仍然无法修改列类型,得到以下异常:

    {“对象‘XXX_XXX’依赖于‘ABCD’列。ALTER TABLE ALTER COLUMN ABCD 失败,因为一个或多个对象访问了这一列。”}

据我所知,分区方案(和函数)对表的模式绑定依赖关系阻止了数据类型修改。没有引用这些主键的外键。

我没有看到更新此数据库上的列类型的解决方案,更不用说生产数据库了。我们可以承受一些维护停机时间,比如 +- 60 分钟,但现在不能了。我有哪些选择?

附加信息

  • 我开始相信我唯一的选择是创建具有正确结构的新表并将现有表数据泵入新表中......

  • 表已经根据它们的主键值进行了分区(目前只有 1 个分区(RIGHT(0),未来的分区应该可以用于新值 ( RIGHT(x)),边界x尚未确定)

  • 这些是数据记录表,只有插入,没有更新或删除

  • 除了维护时段外,总是在这些表上执行 DML,每 6-8 周一次,最多持续 90 分钟。

  • 基于主键的索引都是聚集的

  • 这些表上没有非聚集索引

sql-server ddl sql-server-2012

8
推荐指数
1
解决办法
1348
查看次数

标签 统计

ddl ×1

sql-server ×1

sql-server-2012 ×1