目前,我们正在使用Sybase ALTER命令将生产数据库表从INT转换为BIGINT。 其中一个表有1.5亿行我们无法在一个周末时间框架内转换(运行了将近43个小时,然后我们将其杀死并恢复数据库转储)。
将此表快速转换为BIGINT的任何其他建议。该表上有聚簇,唯一和非聚集索引。
我在想下面的解决方案:你能建议最好的方法吗?
答案 0 :(得分:0)
我不知道这是否会有所帮助,但您可以考虑一下。 如果您可以bcp out并对数据进行排序,则bcp返回到新表,然后您可以创建聚合索引WITH SORTED_DATA。这为聚集索引节省了大量时间。使用unix排序可以更快地进行排序(并且您可以通过bcp到管道并从管道中直接排序回到bcp-in。)
如果您的数据库服务器具有多个引擎,则可以同时重新创建非聚集索引。这样可以节省时间(如果之前的重新创建顺序,你希望它大约是时间的三分之一。)
否则可能是分区 - 你可以同时bcp到不同的分区并在不同的分区上编制索引(但我们没有这样做,对不起,我还没有得到有用的建议。)
答案 1 :(得分:0)
在短时间内更改。
创建没有索引和触发器的新表。 将数据从“源表”加载到“目标表”。 使用后缀创建索引。
在时间窗口中: 插入和更新自初始加载以来已更改的记录。 将“源表”重命名为“备份源表”。 将新表重命名为源表的名称。 在新表中创建触发器。 新表的“重命名索引”。 验证两个表具有相同的信息。 准备好了。