2015-09-07 145 views
1

目前我們正在使用Sybase ALTER命令將生產數據庫表從INT轉換爲BIGINT。 其中一個表格有15億行,我們無法在一個週末時間範圍內轉換(跑了將近43小時,然後我們殺死了它&恢復了數據庫轉儲)。BIGINT轉換練習Sybase ASE 15 7

任何其他建議將此錶快速轉換爲BIGINT。此表上有聚集的,唯一的和非聚集的索引。

我在考慮下面的解決方案:你可以建議最好的方法來做到這一點?

  1. 創建一個新列&用舊值更新,然後刪除舊列,然後重命名新列。
  2. BCP出來的數據,截斷表,改變與新的數據類型的表結構,然後BCP數據
  3. 分區表到小表,然後修改表&再次合併。
+0

我的選擇是:BCP輸出數據,截斷表格,用新的數據類型改變表格結構,然後改變數據中的BCP,加載速度應該快一些,然後對一百五十億行進行一些更新,並且只需要做是改變表的結構。 – theweeknd

+0

有人可以證實ASE中的加載速度比更新速度快,我在考慮智商,現在我看到他使用的是ASE,ASE中的DML與智商相比相當快,所以也許我錯了? – theweeknd

+0

謝謝,但我在該表上有索引(1個集羣和3個非集羣),所以我們需要重建索引,如果我去BCP - 這又需要很多時間。 – NaguG

回答

0

我不知道這是否會有所幫助,但您可以考慮。 如果您可以對數據進行排序並對數據進行排序,則可以使用新的表格創建聚合索引WITH SORTED_DATA。這爲聚簇索引節省了大量時間。排序可以更快地使用unix排序(你可以bcp到管道並從管道直接排序回到bcp-in)。

如果你有一個帶有多個引擎的db服務器,你可以重新創建非併發索引。這樣可以節省時間(如果先前的重新創建是按順序的話,你希望它的時間可以縮短三分之一左右)。

否則可能是分區 - 你可以同時對不同的分區和不同的分區上的不同分區和索引進行bcp我沒有得到有用的建議。)

0

改變了一個很短的時間窗口。

創建沒有索引和觸發器的新表。 將數據從「源表」加載到「目標表」。 用後綴創建索引。

在時間窗口中: 插入並更新自初始加載以來已更改的記錄。 將「源表」重命名爲「備份源表」。 將新表重命名爲源表的名稱。 在新表中創建觸發器。 「重命名索引」的新表。 驗證兩個表具有相同的信息。 準備好了。