Oracle - 向表中添加列需要永远

Mik*_*yev 8 oracle alter-table

我需要将两个DATE列添加到现有表中.但这需要很长时间,我必须杀死这个过程.奇怪的是我能够暂时将这些列添加到同一数据库中的其他表中.这些表中的大多数都大于我在数据和列数方面遇到问题的表.我需要做些什么才能添加这些新列?

Mik*_*yev 9

这是我如何解决问题.以前,我在添加它们时正在为列指定默认值.但后来我首先添加了没有默认值的列.添加列后,我指定了默认值,并立即执行,不再等待.非常感谢@Justin Cave提供有关默认值的提示.这是关键点.

我毫不怀疑这与以下事实有关:在添加列时指定默认值时,默认值将写入先前插入的所有记录.如果表中有500万条记录,该表将更新为为所有行的新添加列设置默认值.有人猜测,更新500万条记录的费用很高.但是,如果在添加列之后设置了默认值,则之前插入的行中新列的值将为NULL,因此不会进行更新.

  • 应该注意的是,在Oracle 11g中,添加具有默认值的列不再存在此问题(Oracle不会更新所有现有行,而只是更新元数据). (4认同)
  • @Jens - 因为稍后添加默认值不会影响现有行,而添加新列时,必须在每一行上设置默认值 - 除非默认值为NULL,在这种情况下Oracle不必访问现有的行. (2认同)