我需要将两个DATE列添加到现有表中。但这需要很长时间,我必须杀死这个过程。奇怪的是我能够暂时将这些列添加到同一数据库中的其他表中。这些表中的大多数都大于我在数据和列数方面遇到问题的表。我需要做些什么才能添加这些新列?
答案 0 :(得分:9)
这就是我如何解决问题的方法。以前,我在添加它们时正在为列指定默认值。但后来我首先添加了没有默认值的列。添加列后,我指定了默认值,并立即执行,不再等待。非常感谢@Justin Cave提供有关默认值的提示。这是关键点。
我毫不怀疑这与以下事实有关:在添加列时指定默认值时,默认值将写入先前插入的所有记录。如果表中有500万条记录,那么该表将更新为所有行的新添加列设置默认值。有人猜测,更新500万条记录的费用很高。但是,如果在添加列之后设置了默认值,那么之前插入的行中新列的值将为NULL,因此不会进行更新。
答案 1 :(得分:3)
在Oracle 11g中添加varchar2(4000)列且没有默认值一个61K行表时,我也遇到了这个问题。 30分钟后,仍未添加色谱柱。
我试图中止操作,然后重试,但它仍然没有完成。
什么有效:
我尝试添加一个数字列,这需要一瞬间。放下它。
然后我尝试添加varchar2(1)列,这需要一瞬间。放下它。
然后我再次尝试添加一个varchar2(4000)列,它只需要一瞬间。
愚蠢"解决方法",但也许这适用于遇到此问题的任何其他人。