我正在使用oracle 11g,并且我有一个带有'spool on'的sql文件,它运行至少7个多小时,因为它必须假脱机大数据。但是只有当整个sql完成时才会转储假脱机输出,但是我想知道是否还有其他方法可以知道我的sql的进度,或者数据假脱机直到那个时间点,所以我放心,我的sql是按预期正常运行。请帮助您提供意见。
答案 0 :(得分:1)
听起来你正在使用DBMS_OUTPUT
,它总是在程序完成后才开始实际输出结果。
如果您想要实时/接近时间监控进度,您有3个选项:
使用utl_file
写入OS文件。您需要访问db server OS文件系统。
写入表并使用PRAGMA AUTONOMOUS_TRANSACTION
,这样您就可以提交日志表条目而不会影响主要处理。这很容易实现,并且易于访问。以良好的方式实施,这可以成为所有程序的事实标准。然后,您可能需要实施某种管家服务,以避免这种情况变得过于庞大和笨拙。
快速而肮脏的选项是暂时的,是使用DBMS_APPLICATION.SET_CLIENT_INFO
,然后查询v$session.client_info
。这很好用,可以很好地跟踪事物,相当不引人注意,因为它的内存结构很快。
DBMS_OUTPUT
确实有限。