gpt4 book ai didi

sql - 如何查看正在执行的实际 Oracle SQL 语句

转载 作者:行者123 更新时间:2023-12-03 10:25:43 25 4
gpt4 key购买 nike

我正在使用一个定制的内部应用程序,它每周生成一组标准报告。我无法访问应用程序的源代码,每个人都告诉我没有可用于 Oracle 数据库模式的文档。 (啊!)

我被要求为现有报告的变体定义规范(例如,应用额外的过滤器来约束数据集,并稍微修改布局)。这在原则上听起来很简单,但是如果没有任何现有的文档就很难。

我的理解是日志不能帮助我,因为报告只查询数据库;它实际上并没有插入、删除或更新数据库值,所以没有什么要记录的(这是正确的吗?)。

所以我的问题是:是否有一个工具或实用程序(Oracle 或其他)可以用来查看在报告生成作业仍在运行时正在执行的实际 SQL 语句?我想,如果我能看到实际访问了哪些表来生成现有报告,我将有一个很好的起点来探索架构并确定用于我自己的报告的正确 SQL。

最佳答案

在数据字典方面,您可以使用很多工具,例如 Schema Spy

要查看正在运行的查询,请查看 View sys.v_$sql 和 sys.v_$sqltext。您还需要访问 sys.all_users

需要注意的一件事是,使用参数的查询将显示一次,并带有类似的条目

and TABLETYPE=’:b16’

而其他不会出现多次的,例如:
and TABLETYPE=’MT’

这些表的一个实际示例是以下 SQL,用于查找前 20 个磁盘读取消耗量最大的问题。您可以通过删除 来更改它。 WHERE rownum <= 20 并且可能添加 按模块订购 .您经常会发现该模块会给您提供有关正在运行查询的软件的错误线索(例如:“TOAD 9.0.1.8”、“JDBC 瘦客户端”、“runcbl@somebox (TNS V1-V3)”等)
SELECT 
module,
sql_text,
username,
disk_reads_per_exec,
buffer_gets,
disk_reads,
parse_calls,
sorts,
executions,
rows_processed,
hit_ratio,
first_load_time,
sharable_mem,
persistent_mem,
runtime_mem,
cpu_time,
elapsed_time,
address,
hash_value
FROM
(SELECT
module,
sql_text ,
u.username ,
round((s.disk_reads/decode(s.executions,0,1, s.executions)),2) disk_reads_per_exec,
s.disk_reads ,
s.buffer_gets ,
s.parse_calls ,
s.sorts ,
s.executions ,
s.rows_processed ,
100 - round(100 * s.disk_reads/greatest(s.buffer_gets,1),2) hit_ratio,
s.first_load_time ,
sharable_mem ,
persistent_mem ,
runtime_mem,
cpu_time,
elapsed_time,
address,
hash_value
FROM
sys.v_$sql s,
sys.all_users u
WHERE
s.parsing_user_id=u.user_id
and UPPER(u.username) not in ('SYS','SYSTEM')
ORDER BY
4 desc)
WHERE
rownum <= 20;

请注意,如果查询很长.. 您将不得不查询 v_$sqltext。这将存储整个查询。您将不得不查找 ADDRESS 和 HASH_VALUE 并拾取所有部分。例如:
SELECT
*
FROM
sys.v_$sqltext
WHERE
address = 'C0000000372B3C28'
and hash_value = '1272580459'
ORDER BY
address, hash_value, command_type, piece
;

关于sql - 如何查看正在执行的实际 Oracle SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com