我正在使用 oracle 11g,我有一个带有“spool on”的 sql 文件,它运行至少 7 个多小时,因为它必须假脱机大量数据。但是假脱机输出只有在整个sql完成时才被转储,但我想知道有没有其他方法可以知道我的sql的进度,或者直到那个时间点之前假脱机的数据,所以我放心我的sql是按预期正常运行。请帮助您的输入。
问问题
524 次
1 回答
1
听起来您正在使用DBMS_OUTPUT
,它总是在程序完成后才开始实际输出结果。
如果您想对进度进行实时/近时间监控,您有 3 个选项:
用于
utl_file
写入操作系统文件。为此,您将需要访问 db server OS 文件系统。写入表并使用
PRAGMA AUTONOMOUS_TRANSACTION
,这样您就可以提交日志表条目,而不会影响您的主处理。这很容易实现,并且易于访问。以良好的方式实施,这可以成为您所有程序的事实上的标准。然后,您可能需要实施某种内务管理以避免这变得太大和笨重。一个快速而肮脏的临时选项是使用
DBMS_APPLICATION.SET_CLIENT_INFO
,然后查询v$session.client_info
。这很好用,有利于跟踪事物,相当不显眼,而且因为它是一种内存结构,所以速度很快。
DBMS_OUTPUT
真的是有限的。
于 2013-02-16T14:02:11.047 回答