BIGINT转换练习Sybase ASE 15 7

时间:2015-09-07 11:49:24

标签: sybase bigint

目前,我们正在使用Sybase ALTER命令将生产数据库表从INT转换为BIGINT。 其中一个表有1.5亿行我们无法在一个周末时间框架内转换(运行了将近43个小时,然后我们将其杀死并恢复数据库转储)。

将此表快速转换为BIGINT的任何其他建议。该表上有聚簇,唯一和非聚集索引。

我在想下面的解决方案:你能建议最好的方法吗?

  1. 创建一个新列&使用旧值更新它,然后删除旧列,然后重命名新列。
  2. BCP输出数据,截断表格,用新数据类型改变表格结构,然后用数据中的BCP改变
  3. 将表格分成小表,然后改变表格和表格。再次合并。

2 个答案:

答案 0 :(得分:0)

我不知道这是否会有所帮助,但您可以考虑一下。 如果您可以bcp out并对数据进行排序,则bcp返回到新表,然后您可以创建聚合索引WITH SORTED_DATA。这为聚集索引节省了大量时间。使用unix排序可以更快地进行排序(并且您可以通过bcp到管道并从管道中直接排序回到bcp-in。)

如果您的数据库服务器具有多个引擎,则可以同时重新创建非聚集索引。这样可以节省时间(如果之前的重新创建顺序,你希望它大约是时间的三分之一。)

否则可能是分区 - 你可以同时bcp到不同的分区并在不同的分区上编制索引(但我们没有这样做,对不起,我还没有得到有用的建议。)

答案 1 :(得分:0)

在短时间内更改。

创建没有索引和触发器的新表。 将数据从“源表”加载到“目标表”。 使用后缀创建索引。

在时间窗口中: 插入和更新自初始加载以来已更改的记录。 将“源表”重命名为“备份源表”。 将新表重命名为源表的名称。 在新表中创建触发器。 新表的“重命名索引”。 验证两个表具有相同的信息。 准备好了。