简体   繁体   English

如何查看针对 Oracle 执行的查询?

[英]How can I see queries that are executed against Oracle?

I need to see the queries that are being sent to Oracle to execute them.我需要查看发送到 Oracle 的查询以执行它们。 Can someone give me specific detailed instructions on how to do this?有人可以给我有关如何执行此操作的具体详细说明吗?

If you want to see the queries from a specific user, you can use this (assuming you have privileges to query v$session and v$sqlarea (usually through SELECT_CATALOG_ROLE ) 如果要查看来自特定用户的查询,可以使用此(假设您有权查询v$sessionv$sqlarea (通常通过SELECT_CATALOG_ROLE

SELECT sess.sid,
       sess.username,
       sqla.optimizer_mode,
       sqla.hash_value,
       sqla.address,
       sqla.cpu_time,
       sqla.elapsed_time,
       sqla.sql_text
  FROM v$sqlarea sqla, v$session sess
 WHERE sess.sql_hash_value = sqla.hash_value
   AND sess.sql_address = sqla.address
   AND sess.username = 'SCOTT'

Replace SCOTT with the appropriate username in your system 用您系统中的相应用户名替换SCOTT

Output: 输出:

 544 SCOTT      ALL_ROWS   2004330732 07000001064088E8         89391       131836 SELECT sess.sid,        sess.username,
                                                                                        sqla.optimizer_mode,        sqla.h
                                                                                  ash_value,        sqla.address,        s
                                                                                  qla.cpu_time,        sqla.elapsed_time,
                                                                                         sqla.sql_text   FROM v$sqlarea sq
                                                                                  la, v$session sess  WHERE sess.sql_hash_
                                                                                  value = sqla.hash_value    AND sess.sql_
                                                                                  address = sqla.address    AND sess.usern
                                                                                  ame = 'SCOTT'

This query will show queries that are currently running: 此查询将显示当前正在运行的查询:

select sql_text from v$sqlarea where users_executing > 0;

See documentation of V$SQLAREA 请参阅V $ SQLAREA的文档

You can check and get the data if you have access to these two oracle tables/views (v$sqlarea & v$sqltext) , Also accoridng to your need you can also modify the query and add A.cpu_time, A.elapsed_time if required.如果您可以访问这两个 oracle 表/视图(v$sqlarea & v$sqltext) ,您可以检查并获取数据,也可以根据需要修改查询并添加A.cpu_time,A.elapsed_time如果需要.

Query -询问 -

 SELECT A.SQL_ID,
         A.FIRST_LOAD_TIME,
         A.SQL_TEXT,
         A.SQL_FULLTEXT
    FROM v$sqlarea A, v$sqltext B
   WHERE     A.PARSING_SCHEMA_NAME = 'TESTUSER'  --YOUR USERNAME
         AND A.SQL_ID = B.SQL_ID
         AND A.HASH_VALUE = B.HASH_VALUE
ORDER BY A.FIRST_LOAD_TIME DESC

Output - Output -

在此处输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM