【问题标题】:How to find queries running on a table in oracleoracle如何查询表中的查询
【发布时间】:2010-08-02 20:12:14
【问题描述】:

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

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

【问题讨论】:

    标签: oracle


    【解决方案1】:

    "但是 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。但希望你不会有太多的点击量。

    【讨论】:

      【解决方案2】:

      您应该去找您的 DBA,解释您认为正在发生的事情并一起分析问题。

      你的这部分问题让我很困惑:

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

      你启动的delete事务不能删除你启动delete事务后插入的记录,这叫读一致性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-21
        • 1970-01-01
        相关资源
        最近更新 更多