oracle – 加载时添加具有默认值的列的最佳方式 - 代码日志

oracle – 加载时添加具有默认值的列的最佳方式

将列添加到具有默认值且约束不为空的表时。在数据库处于负载状态时,最好以单个语句运行或将其分解为步骤。

ALTER TABLE user ADD country VARCHAR2(4) DEFAULT 'GB' NOT NULL

ALTER TABLE user ADD country VARCHAR2(2)
UPDATE user SET country = 'GB'
COMMIT
ALTER TABLE user MODIFY country DEFAULT 'GB' NOT NULL
性能取决于您使用的Oracle版本。无论如何都会生成锁。

如果版本<= Oracle 11.1,则#1与#2相同。反正慢了
从Oracle 11.2开始,Oracle为第一个语句(一个命令全部执行)引入了一个很好的优化。您不需要更改命令 – Oracle的行为不同。它仅将默认值存储在数据字典中,而不是更新每个物理行。

但我也不得不说,我以前遇到过一些与此功能有关的错误(在Oracle 11.2.0.1中)

>传统导入失败,如果导出完成直接= Y
> merge语句可以抛出一个ORA-600 [13013](内部的oracle错误)
>使用这种表的查询中的性能问题

我认为这个问题在当前版本11.2.0.3中是固定的,所以我可以推荐使用这个功能。

http://stackoverflow.com/questions/10633960/best-way-to-add-column-with-default-value-while-under-load

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:oracle – 加载时添加具有默认值的列的最佳方式