Ada*_*lls 0 sql-server type-conversion sql-server-2014
我有大量的大型数据库(300+!),它们的大小从很小到绝对庞大(120 GB+)不等。我已经确定了一种生成脚本的方法,以决定需要删除哪些索引、外键、主键和默认约束,以便将一组已知的列转换int为bigint数据类型。
我们遇到的问题是在更大的数据库上,我们在这个查询上运行了 2-3 天,这在生产中是不可接受的。是否有一种方法可以比当前的 drop-change-rebuild 过程更快地进行这些转换?
我有一个从 int 到 bigint 的关键列的类似转换,涉及数百个表,有些超过 100GB。我使用了一种类似下面的方法,它在几个小时内完成了对大型客户端数据库的迁移。如果数据库处于完整恢复模式,请确保存在足够的事务日志空间和/或在迁移期间执行日志备份以避免填满日志。
1) 删除要修改的表和模式绑定对象上的外键引用
2) 或者,删除要修改的表上的所有非聚簇索引(包括非聚簇主键和非聚簇唯一约束索引),以减少迁移过程中的磁盘空间需求。
3) 对于每个表,使用 SELECT...INTO 和列的显式 CAST 创建新表 to bigint,并在必要时ISNULL强制NOT NULL列。删除原始表并将新表重命名为原始名称。
4) 重新创建聚集索引/约束、非聚集索引/约束,然后是其他约束和对象。