0

我正在使用 oracle 11g,我有一个带有“spool on”的 sql 文件,它运行至少 7 个多小时,因为它必须假脱机大量数据。但是假脱机输出只有在整个sql完成时才被转储,但我想知道有没有其他方法可以知道我的sql的进度,或者直到那个时间点之前假脱机的数据,所以我放心我的sql是按预期正常运行。请帮助您的输入。

4

1 回答 1

1

听起来您正在使用DBMS_OUTPUT,它总是在程序完成后才开始实际输出结果。

如果您想对进度进行实时/近时间监控,您有 3 个选项:

  1. 用于utl_file写入操作系统文件。为此,您将需要访问 db server OS 文件系统。

  2. 写入表并使用PRAGMA AUTONOMOUS_TRANSACTION,这样您就可以提交日志表条目,而不会影响您的主处理。这很容易实现,并且易于访问。以良好的方式实施,这可以成为您所有程序的事实上的标准。然后,您可能需要实施某种内务管理以避免这变得太大和笨重。

  3. 一个快速而肮脏的临时选项是使用DBMS_APPLICATION.SET_CLIENT_INFO,然后查询v$session.client_info。这很好用,有利于跟踪事物,相当不显眼,而且因为它是一种内存结构,所以速度很快。

DBMS_OUTPUT真的是有限的。

于 2013-02-16T14:02:11.047 回答