我们正在升级到Oracle 12c,我需要跟踪应用程序正在执行的查询。换句话说,如果应用程序执行像select' foobar'来自双重;我希望看到文字"选择' foobar'来自双重"在输出文件中。
如果我按照此处的说明操作:https://docs.oracle.com/database/121/TGSQL/tgsql_trace.htm#TGSQL809我得到的文件包含以下统计信息,但不包含实际的sql查询。
WAIT #0: nam='rdbms ipc message' ela= 2999770 timeout=300 p2=0 p3=0 obj#=-1 tim=1103506389
WAIT #0: nam='rdbms ipc message' ela= 9854 timeout=1 p2=0 p3=0 obj#=-1 tim=1103522400
*** 2016-04-07 15:07:20.715
WAIT #0: nam='rdbms ipc message' ela= 2999585 timeout=300 p2=0 p3=0 obj#=-1 tim=1106522506
WAIT #0: nam='rdbms ipc message' ela= 9690 timeout=1 p2=0 p3=0 obj#=-1 tim=1106532500
如果我查找这样的查询,我得到0结果:grep -rnw" foobar" --include = * .trc ./
答案 0 :(得分:0)
一个选项是查找AWR存储库。它将保留几天的SQL。系统视图中有大量的附加信息,因此这是严格的文本,但随时可以探索。
SELECT DISTINCT u.username, to_char(substr(h.sql_text, 1, 4000)) sqltxt
FROM dba_hist_sqltext h
JOIN dba_hist_active_sess_history a ON a.sql_id = h.sql_id
JOIN dba_users u ON u.user_id = a.user_id
WHERE username = 'SYS';
我过滤了SYS的结果作为示例,但您可以根据需要进行更改。
答案 1 :(得分:0)
如果您希望看到所有活动,那么您应该做的最好的事情就是为您设置EM(企业管理器)。
如果你不这样做,gv $ activity_session_history将是一个很好的电话,在使用分组功能时会更好看。根据应用程序推送的呼叫数量,只需选择它就会很麻烦。
另一种方式,你可以平均看到它:
`
select s.parsing_schema_name,
inst_id,
sql_id,
plan_hash_value,
child_number,
round(nullif(s.ELAPSED_TIME, 0) / nullif(s.EXECUTIONS, 0) / 1000000, 4) elap_per_exec,
round(s.USER_IO_WAIT_TIME / nullif(s.ELAPSED_TIME, 0) * 100, 2) io_wait_pct,
round(s.CLUSTER_WAIT_TIME / nullif(s.ELAPSED_TIME, 0) * 100, 2) cluster_wait_pct,
round(s.application_wait_time / nullif(s.ELAPSED_TIME, 0) * 100, 2) app_wait_pct,
round(s.CPU_TIME / nullif(s.ELAPSED_TIME, 0) * 100, 2) cpu_time_pct,
round(s.PHYSICAL_READ_BYTES / nullif(s.EXECUTIONS, 0) / 1024 / 1024, 2) pio_per_exec_mb,
round(s.PHYSICAL_READ_BYTES / nullif(s.PHYSICAL_READ_REQUESTS, 0), 2) / 1024 read_per_request_kbytes,
round(s.buffer_gets / nullif(s.executions, 0), 4) BufferGets_per_Exec
s.executions,
to_char(s.last_active_time,'dd/mm/yyyy hh24:mi:ss') last_act_time,
s.first_load_time,
s.sql_fulltext,
s.sql_profile,
s.sql_patch,
s.sql_plan_baseline
FROM gv$sql s
WHERE 1=1
and s.parsing_schema_name in ('LIST OF DATABASE USERS YOU WANT TO MONITOR')
order by s.last_active_time desc;
`
它可以很好地反映出你的平均门槛值。