Oracle如何避免写入撤消/重做日志

Oracle如何避免写入撤消/重做日志,oracle,plsql,undo-redo,Oracle,Plsql,Undo Redo,我有一个Oracle PL/SQL脚本。它处理大约5100万个寄存器,并将结果写入5个不同的表 问题是我昨晚让进程运行,显然撤销日志中出现了溢出 特别是,我们对回滚此脚本不感兴趣,如果它失败,我们可以再次运行它 有没有办法优化撤消/重做日志的使用?避免写它们或尽量减少写 据我所知,除了使用APPEND insert(如上所述)之外,在输出表中设置NOLOGING属性也会有所帮助。您不应该只在一批中处理5100万个寄存器。例如,试着把它分成几千个小块。如果您在每个较小的批处理之后执行提交(您无论如

我有一个Oracle PL/SQL脚本。它处理大约5100万个寄存器,并将结果写入5个不同的表

问题是我昨晚让进程运行,显然撤销日志中出现了溢出


特别是,我们对回滚此脚本不感兴趣,如果它失败,我们可以再次运行它

有没有办法优化撤消/重做日志的使用?避免写它们或尽量减少写


据我所知,除了使用APPEND insert(如上所述)之外,在输出表中设置NOLOGING属性也会有所帮助。

您不应该只在一批中处理5100万个寄存器。例如,试着把它分成几千个小块。如果您在每个较小的批处理之后执行提交(您无论如何都会这样做,因为您说您不打算回滚),那么重做/撤消日志的使用将仅用于未提交的部分,您将避免溢出。

您不应该只在一个批处理5100万个寄存器。例如,试着把它分成几千个小块。如果您在每个较小的批处理之后执行提交(您无论如何都会这样做,因为您说您不会回滚),那么重做/撤消日志的使用将仅用于未提交的部分,您将避免溢出。

这实际上是一个减少您正在做的工作量的问题


直接路径插入上的表撤消总是很小,因为系统只需记录应从段中删除某些范围的块。不过,索引仍然需要大量撤消。不记录直接路径插入可以最大限度地减少表的重做。

这实际上是一个问题,或者可以减少您正在做的工作量


直接路径插入上的表撤消总是很小,因为系统只需记录应从段中删除某些范围的块。不过,索引仍然需要大量撤消。不记录直接路径插入可以最大限度地减少表重做。

此外,禁用约束和索引也可以加快插入速度。您可以使用nologging重建索引

此外,禁用约束和索引也可能加快插入速度。您可以使用nologging重建索引

“尤其是,我们对回滚此脚本不感兴趣,如果它失败,我们可以再次运行它。”

一个问题是,为了再次运行脚本,您是否需要并且准备好返回到以前的备份? 也就是说,如果进程在1000万行之后失败,只需重新运行脚本就会插入6100万行,或者跳过/忽略1000万行,或者更新1000万行,插入4100万行

此外,如果执行NOLOGGING插入,可能需要在作业完成后立即进行新的备份。在脚本运行期间,在一个时间点恢复过程中会遇到问题,因此您还需要考虑脚本运行时数据库上发生的其他活动。

根据您编写PL/SQL脚本的方式,您可能会发现使用大型SQL,而不是逐行处理,可以减少撤消(例如,通过最小化对已处理块的重新访问)

除非您真正理解减少撤销或提交以允许重复使用撤销的影响,否则我的第一个建议只是增加撤销表空间的大小。当然,您确实有一个缺点,即如果生成了撤消的bucket负载,那么失败将需要很长时间才能回滚。

“特别是,我们对回滚此脚本不感兴趣,如果它失败,我们可以再次运行它。”

一个问题是,为了再次运行脚本,您是否需要并且准备好返回到以前的备份? 也就是说,如果进程在1000万行之后失败,只需重新运行脚本就会插入6100万行,或者跳过/忽略1000万行,或者更新1000万行,插入4100万行

此外,如果执行NOLOGGING插入,可能需要在作业完成后立即进行新的备份。在脚本运行期间,在一个时间点恢复过程中会遇到问题,因此您还需要考虑脚本运行时数据库上发生的其他活动。

根据您编写PL/SQL脚本的方式,您可能会发现使用大型SQL,而不是逐行处理,可以减少撤消(例如,通过最小化对已处理块的重新访问)


除非您真正理解减少撤销或提交以允许重复使用撤销的影响,否则我的第一个建议只是增加撤销表空间的大小。当然,您确实有一个缺点,即如果生成了撤消的bucket负载,那么故障将需要很长时间才能回滚。

您还可以使用隐藏参数&u disable\u logging=true来减少重做,但是请注意,结果导入将不可恢复。

您也可以使用隐藏参数_disable_logging=true来减少重做,但请注意结果导入将不可恢复。

这将增加重做日志的使用,但不只是在事务未提交时才使用重做日志吗?当提交发生时,重做日志会再次标记为空闲,并且可以为将来的事务循环使用。因此,是的,它增加了日志的“使用率”,但不太容易“用完”。这将增加重做日志的使用率,但重做日志不是仅在事务未提交时使用吗?当提交发生时,重做日志会再次标记为空闲,并且可以为将来的事务循环使用。因此,是的,它增加了日志的“使用率”,但不太容易“用完”。