所以这就是我所面对的.
问题
- 一张大桌子,行数约230,000,000.
- 我们希望将此表的聚类索引和主键更改为简单的bigint标识字段.表中还添加了另一个空字段供将来使用.
- 现有表具有复合键.为了争论,让我们说它是2个bigint.第一个可能在密钥的第二部分有1或10,000个'孩子'.
要求
- 最短的停机时间,最好是运行SP_Rename所需的时间长度.
- 在我们复制数据时,现有行可能会发生变化.更新必须反映在新表中.
思路
- 在现有表上放置一个触发器,以更新新表中的行(如果已存在).
- 遍历原始表,一次将数据复制到新表~10000.可能是旧密钥的第一部分中的2,000个.
- 复制完成后,将旧表重命名为"ExistingTableOld",将新表重命名为"NewTable"至"ExistingTable".这应该允许存储过程继续运行而无需干预
计划中是否有任何明显的遗漏,或者我忽略的最佳实践?