dba_scheduler_job_run_details 和 dbms_output

问题描述

dba_scheduler_job_run_details 能够在 dba_scheduler_job_run_details.output 列中保留 dbms_output.put_line 行。当作业正常流动和退出时也是如此。但是,当我显式调用 dbms_scheduler.stop_job 时 - 所有输出都丢失了。 如何避免这种行为?

解决方法

我认为您无法避免这种情况,就像如果您杀死正在运行过程的 SQL*PLus 会话一样,您也不会看到输出,因为 DBMS_OUTPUT 只是将数据放入一个数组中,然后然后调用环境负责检索该信息并将其放在某处(例如输出到终端)。你杀死/停止调用环境......并且没有什么可以去得到那个输出。

更好的选择是不将 DBMS_OUTPUT 仅用作调试/检测机制。在捕获调试信息方面存在更好的选择,包括从备用会话实时查看它等。

https://github.com/OraOpenSource/Logger 查看 Logger。 Oracle 社区中的许多人都普遍使用它。