oracle - 如何批量更新oracle pl/sql中的大表以避免用完undospace?

标签 oracle plsql

我有一个非常大的表(5mm 记录)。我正在尝试使用表中每条记录的随机字母数字来混淆表的 VARCHAR2 列。我的过程在较小的数据集上成功执行,但它最终将用于我无法控制其设置的远程数据库,因此我想分批执行 UPDATE 语句以避免用完撤消空间。

是否有某种我可以启用的选项,或者有一种标准的方式来进行分 block 更新?

我要补充一点,没有混淆的记录不会有任何显着特征,所以我想在循环中使用 rownum 的想法行不通(我认为) .

最佳答案

如果您要更新表中的每一行,最好执行“创建表作为选择”,然后删除/截断原始表并重新附加新数据。如果您有分区选项,则可以将新表创建为具有单个分区的表,然后只需将其与 EXCHANGE PARTITION 交换即可。

插入需要更少的撤消,并且没有日志记录的直接路径插入(/+APPEND/提示)也不会产生太多重做。

无论使用哪种机制,都可能仍然存在旧值的“取证”证据(例如,保留在撤消中或由于行移动而分配给表的“可用”空间中)。

关于oracle - 如何批量更新oracle pl/sql中的大表以避免用完undospace?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3543105/

相关文章:

sql - 从空表中删除永远

sql - 使用 rowids 将百万行从一个表更新到另一个 Oracle

sql - Oracle SQL : selecting from all_tab_columns does not find existing column

oracle - Node.js 甲骨文 ORM

oracle - 异常 ORA-06530 : Reference to uninitialized composite

c# - 从 Oracle DB 中选择所有表名

sql - 我们如何确定我的 oracle 表中的列正在被另一个表的触发器填充/更新?

sql - 立即执行引用游标

java - 使用 Java 调用 PL/SQL 函数时参数的类型或数量错误。 PLS-00306 错误

sql - 在表格中显示约束