有没有办法知道我正在通过jdbc执行的说100 DDL和DML语句,是什么东西卡住了。 我需要找出进度条,在db sql语句中正在执行并且没有挂起,以便可以通知用户。 有没有办法找到它。
答案 0 :(得分:1)
根据相对模糊的要求,您可能会使用任意数量的Oracle数据字典视图(例如,您的定义是"例如,挂起")。
我可能会开始使用v$session
假设您可以识别要监控的特定会话的sid
和serial#
(可能需要帮助查看v$session
中的各个列。 STATUS
将告诉您会话是否在该特定时刻正在执行SQL语句。 sql_id
将(通常)允许您加入v$sqlarea
或其他视图,告诉您当前正在执行的语句。 event
列将告诉您会话正在等待什么(即从磁盘读取,在CPU上等待,等待获取锁定等)。
来自sql_id
的{{1}}还允许您加入v$session
,v$sqlstats
会定期更新某些特定SQL语句生成的逻辑I / O数量,以便您查看当前活动的语句正在做某事(无论这些内容是否有用或者它是否会在我们的生命周期中终止将会更加困难)。
根据代码的作用,v$session_longops
中可能有一行或多行可用于跟踪长时间运行的操作的进度 - 但是,有效地使用此行将需要第三行-party代码发出Oracle可以自动监视的那种长时间运行的SQL操作(即对具有合理数据量的表进行表扫描),或者检测代码以使用v$session_longops
来跟踪自己的进度。
根据您使用的Oracle版本,您也可能use the v$sql_monitor
view to monitor SQL in real time。