我有一个超过10密耳记录的表,我必须从我从其他几个表中获得的数据更新此表的多个列,这些表再次具有大量记录。所有表都已编入索引
我尝试分批进行并在并发会话中进行更新,但这需要很长时间。有没有替代方法来解决这个问题?
答案 0 :(得分:0)
解决方案是构建一个全新的表(带有nologging)并进行并行化。
1)首先创建虚拟保持表(没有行):
create table xyz_HOLD as select * from xyz where rownum<1避免记录所有这些操作* ...
Alter table xyz_HOLD nologging
*使用nologging
,如果系统中止,您只需重新运行“更新”,因为您在主表中有原始数据
2)
insert /*+ append parallel (xyzhold,12) */ into xyz_hold xyzhold (field1, field2, field3) select /*+ parallel (x,12) */ xyz.field1, my_new_value_for_field2, xyz.field3 from xyz x where blah blah blah
3)完成后,重命名表,或者如果原始表被分区则交换分区,并且您只更新了一个分区。
+)显然,您还需要根据需要重建等等。