在数据字典方面,您可以使用很多工具,例如Schema Spy
要查看正在运行的查询,请查看视图 sys.v_$sql 和 sys.v_$sqltext。您还需要访问 sys.all_users
需要注意的一件事是,使用参数的查询将显示一次,并带有类似的条目
and TABLETYPE=’:b16’
而其他不会出现多次的,例如:
and TABLETYPE=’MT’
这些表的一个实际示例是以下 SQL,用于查找前 20 个磁盘读取消耗量最大的问题。您可以通过删除WHERE rownum <= 20并添加ORDER BY 模块来更改此设置。您经常会发现该模块会给您提供有关正在运行查询的软件的错误线索(例如:“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
;