我们有一个包含7.7亿行和更改的生产表。我们希望(/需要?)将主ID列从int更改为bigint以允许将来增长(并避免在32位整数空间耗尽时突然停止)
DEV中的实验表明,这并不像改变列那么简单,因为我们需要删除索引然后重新创建它。到目前为止DEV(比PROD稍微谦逊)指数的下降在1个半小时后还没有完成。这个表每周7天,每天24小时播放,让它离线这么长时间不是一种选择。
还有其他人不得不处理类似情况吗?你是怎么做到的?
有替代方案吗?
修改:其他信息:
答案 0 :(得分:12)
你可以尝试一种分阶段的方法。
你最终应该将痛苦分散在这七个步骤上,而不是立即全部击中。
答案 1 :(得分:1)
创建一个并行表,其中包含新行的较长数据类型和UNION结果?
答案 2 :(得分:0)
我必须做的是将数据复制到具有所需结构的新表中(仅限主要/群集密钥,非群集密钥/ FK一旦完成)。如果您没有房间,您可以bcp out数据并重新登录。您可能需要应用程序中断才能实现此目的。
什么不起作用:alter table由于主键,Orderhistory改变了列ID bigint。不要删除密钥和更改列,因为您只需填写日志文件并花费比copy / bcp更长的时间。
永远不要使用SSMS工具设计器来更改列属性,它会将表复制到临时表中,然后在完成后重命名。查找alter table alter column语法并使用它,如果你修改了一个位于表中间的更宽的列,可能会在完成后进行碎片整理。