如何批量更新oracle pl/sql中的大表以避免耗尽undospace?

Ste*_*e M 3 oracle plsql

我有一张非常大的桌子(5毫米的记录).我正在尝试使用随机字母数字对表格的VARCHAR2列进行模糊处理.我的过程在较小的数据集上成功执行,但它最终会在我无法控制的设置的远程数据库上使用,所以我想批量执行UPDATE语句以避免耗尽undospace.

我可以启用某种选项,还是以块的形式进行更新的标准方法?

我要补充一点,也不会有的,该记录什么特色都没有了模糊处理,所以我使用一个循环的rownum是不行的(我认为)的一个想法.

Gar*_*ers 5

如果要更新表中的每一行,最好选择Create Table As Select,然后删除/截断原始表并使用新数据重新附加.如果您有分区选项,则可以将新表创建为具有单个分区的表,并将其与EXCHANGE PARTITION交换.

插入需要少量撤消,带有nologging的直接路径插入(/ + APPEND/hint)也不会产生太多重做.

对于任何一种机制,可能会有旧的值的"法医"证据(例如,由于行移动而在撤消或"可用"空间中保留分配给表).