【发布时间】:2014-07-01 16:27:50
【问题描述】:
我正在从大型 Oracle 数据库中删除大量数据。我遵循的过程是我删除了一个记录表 A,导致表 B 上的 CASCADE 删除,而表 B 上的 CASCADE 删除在其他一些表上。所以基本上有几个表是通过 CASCADE delete 相互关联的。
目前,此过程在表 A 中的许多记录的迭代中起作用,并且我仅在迭代的最后(当所有数据都被删除时)提交。该过程大约需要 30 小时才能完成。
有人建议我进行常规 COMMIT,即为表 A 的每个记录删除(包括删除子表中的任何后续记录)执行一次 COMMIT。
我知道定期提交会保持较低的撤消日志大小,但是定期提交是否有任何性能改进?我会看到完成脚本所需的时间有所改善吗?
【问题讨论】:
-
撤消日志是一个问题,但在我看来,主要权衡是
DELETE脚本可能失败的可能性与COMMITting 每条记录的开销。我建议在某批记录为DELETEd 之后COMMIT可能是个好主意。如果您的DELETE脚本失败,那么您可以使用失败的批处理重新启动,而不必ROLLBACK整个庞大的事务。 -
建议它的同事如何回答这些问题,为什么?
-
我发现this article 很有趣。它甚至表明常规的
COMMIT会导致更大的重做文件,尽管这与 9i 有关,而我在 10g 上这样做
标签: sql database oracle oracle11g oracle10g