2014-07-15 39 views
0

我正在嘗試向具有超過900萬條記錄的表添加一個新列。將缺省值添加到具有大量數據的oracle數據庫中

此問題是該列需要爲默認值'N'。更新表時,數據庫正在填充臨時數據時出現問題。而且,這需要花費大量的時間。

我想知道是否有人知道無論如何要做到這一點或更好的方式來避免填充臨時數據的問題。

該數據庫是Oracle10g。

回答

0

如果你可以移動到11g,並且列是NOT NULL,Oracle有一個優化,默認值不需要存儲在每一行中,因此你可以非常快速地添加列。不幸的是,這聽起來像是你被困在一個沒有可用的Oracle版本中。

最有可能的是,除了等待之外,你沒有很多非常好的選擇。假設在停機時間段內這樣做,可能會更有效率,用新列創建新表,將舊錶中的所有數據直接路徑插入到新表中,重命名錶,並在新表格中重新指定任何約束條件。這是否比等待更新更有效率取決於您的硬件和桌面,但INSERT可能比UPDATE更有效。另一方面,對於不會創建大量遷移行的新單字符列,您可能更願意等待UPDATE而不是進行此級別的努力 - 有很多可能會出現錯誤的事情,您需要測試和驗證(即確保您正確更新了所有約束)。