如何在oracle中查找在表上运行的查询

时间:2010-08-02 11:06:51

标签: oracle

我从SQL Developer会话中运行了SQL Delete,并且由于存在大量记录,因此删除运行了很长时间。由于SQL Developer客户端存在一些无响应问题,我在SQL Developer窗口关闭时丢失了会话。

我没有DBA访问权限,我无法查询v $ session,v $ sqlarea等视图。但SQL仍在数据库上运行。一旦我插入一些记录,它就会删除它们。 在要求DBA终止此查询之前,如何查找/确认此查询仍在运行。

2 个答案:

答案 0 :(得分:3)

  

“但SQL仍然在运行   数据库。我一插入一些   记录,删除它们。“

有点难以相信这一点。如果您的“SQL删除”是一个简单的DELETE FROM your_table,那么它就不能删除您的新记录。 Oracle的读一致性模型不允许这样做。所以,要么你错了,要么你做了更复杂的事情。

如果您已发出长时间运行的DELETE,它可能会在视图V $ SESSION_LONGOPS中显示长时间操作。并非一切都包括在内。 Find out more

select sid
        , serial#
        , opname
        , sofar
        , totalwork
        , start_time
        , last_update_time
        , time_remaining
        , elapsed_seconds
        , sql_address
        , sql_hash_value
        , sql_id    
from v$session_longops
where username = &your_username
and time_remaining != 0 ;

如果没有DBA访问权限,您将无法使用SQL_ADDRESS等信息来查找在V $ SQL中运行的精确SQL。但希望你不会有太多的点击。

答案 1 :(得分:2)

你应该去你的DBA,解释你的想法,并一起分析问题。

这部分问题让我感到困惑:

只要我插入一些记录,它就会删除它们。

您启动的删除事务无法删除在启动删除事务后插入的记录,这称为读取一致性。