怎么查看用户的SQL执行历史
发布网友
发布时间:2022-04-07 21:20
我来回答
共2个回答
懂视网
时间:2022-04-08 01:42
Rem Copyright (c) 2004, 2005, Oracle. All rights reserved.
Rem
Rem NAME
Rem ashrpt.sql
Rem
Rem DESCRIPTION
Rem This script defaults the dbid and instance number to that of the
Rem current instance connected-to, then calls ashrpti.sql to produce
Rem the ASH report.
Rem
Rem NOTES
Rem Run as select_catalog privileges.
Rem
Rem If you want to use this script in a non-interactive fashion do
Rem something like the following:
Rem
Rem Say for example you want to generate a TEXT ASH Report for the
Rem past 30 minutes in /tmp/ashrpt.txt, use the following SQL*Plus script:
Rem
Rem define report_type = ‘text‘; -- ‘html‘ for HTML
Rem define begin_time = ‘-30‘; -- Can specify both absolute and relative
Rem -- times. Look in ashrpti.sql for syntax.
Rem define duration = ‘‘; -- NULL defaults to ‘till‘ current time
Rem define report_name = ‘/tmp/ashrpt.txt‘;
Rem @?/rdbms/admin/ashrpt
Rem
Rem If you want to generate a HTML ASH Report using AWR snapshots
Rem imported from other databases or AWR snapshots from other instances
Rem in a cluster, use a SQL*Plus script similar to the following:
Rem
Rem define dbid = 1234567890; -- NULL defaults to current database
Rem define inst_num = 2; -- NULL defaults to current instance
Rem define report_type = ‘html‘; -- ‘text‘ for TEXT
Rem define begin_time = ‘-30‘;
Rem define duration = ‘‘; -- NULL defaults to ‘till current time‘
Rem define report_name = ‘/tmp/ashrpt.txt‘;
Rem define slot_width = ‘‘;
Rem define target_session_id = ‘‘;
Rem define target_sql_id = ‘‘;
Rem define target_wait_class = ‘‘;
Rem define target_service_hash = ‘‘;
Rem define target_module_name = ‘‘;
Rem define target_action_name = ‘‘;
Rem define target_client_id = ‘‘;
Rem define target_plsql_entry = ‘‘;
Rem @?/rdbms/admin/ashrpti
Rem
Rem If you want to generate a HTML ASH Report for times between 9am-5pm today
Rem in /tmp/sql_ashrpt.txt and want to target the report on a particular
Rem SQL_ID ‘abcdefghij123‘, use a script similar to the following:
Rem
Rem define dbid = ‘‘; -- NULL defaults to current database
Rem define inst_num = ‘‘; -- NULL defaults to current instance
Rem define report_type = ‘html‘; -- ‘text‘ for TEXT
Rem define begin_time = ‘09:00‘;
Rem define duration = 480; -- 9-5 == 8 hrs or 480 mins
Rem define report_name = ‘/tmp/sql_ashrpt.txt‘;
Rem define slot_width = ‘‘;
Rem define target_session_id = ‘‘;
Rem define target_sql_id = ‘abcdefghij123‘;
Rem define target_wait_class = ‘‘;
Rem define target_service_hash = ‘‘;
Rem define target_module_name = ‘‘;
Rem define target_action_name = ‘‘;
Rem define target_client_id = ‘‘;
Rem define target_plsql_entry = ‘‘;
Rem @?/rdbms/admin/ashrpti
Rem
Rem MODIFIED (MM/DD/YY)
Rem adagarwa 06/24/05 - added plsql_entry target
Rem veeve 05/11/05 - add support for slot_width input
Rem veeve 01/17/05 - add support for report targets
Rem veeve 06/24/04 - added more NOTES
Rem veeve 06/10/04 - veeve_ash_report_r2
Rem veeve 06/04/04 - Created
Rem
--
-- Get the current database/instance information - this will be used
-- later in the report along with bid, eid to lookup snapshots
set echo off heading on underline on;
column inst_num heading "Inst Num" new_value inst_num format 99999;
column inst_name heading "Instance" new_value inst_name format a12;
column db_name heading "DB Name" new_value db_name format a12;
column dbid heading "DB Id" new_value dbid format 9999999999 just c;
prompt
prompt Current Instance
prompt ~~~~~~~~~~~~~~~~
select d.dbid dbid
, d.name db_name
, i.instance_number inst_num
, i.instance_name inst_name
from v$database d,
v$instance i;
Rem
Rem Define slot width and all report targets to be NULL here,
Rem so that ashrpti can be used directly if one or more
Rem report targets need to be specified.
define slot_width = ‘‘;
define target_session_id = ‘‘;
define target_sql_id = ‘‘;
define target_wait_class = ‘‘;
define target_service_hash = ‘‘;
define target_module_name = ‘‘;
define target_action_name = ‘‘;
define target_client_id = ‘‘;
define target_plsql_entry = ‘‘;
Rem ashrpti.sql now
@@ashrpti
-- Undefine all variables declared here
undefine inst_num
undefine inst_name
undefine db_name
undefine dbid
undefine slot_width
undefine target_session_id
undefine target_sql_id
undefine target_wait_class
undefine target_service_hash
undefine target_module_name
undefine target_action_name
undefine target_client_id
undefine target_plsql_entry
--
-- End of file
ashrpt.sql
标签:
热心网友
时间:2022-04-07 22:50
如何知道一个session都执行过哪些SQL语句?(查看当前比较容易,历史的呢?怎么复原sql的执行场景——事务关系、执行序列、单SQL还是存储过程)
【方法一】查询v$sqltext、v$sqlarea、v$sqlstats视图
select * from v$sqlarea t where t.PARSING_SCHEMA_NAME in ('schema') order by t.LAST_ACTIVE_TIME desc;
#对v$sqltext、v$sqlarea查看的是shared pool中的SQL,其时间索引是其解析历史,因为共享的问题这个查询可能并不能完整地反映出执行的历史。
#v$sqlstats信息保留时间比v$sql、v$sqltext、v$sqlarea长,及时SQL已经换出shared pool仍然可查到
【方法二】
联合v$active_session_history和v$sqlarea
#v$active_session_history 这个表只是个取样数据,按秒进行,只有在那一秒采样点处于on cpu或非idle等待的session统计在内。所以可能会不全,有些执行很短的SQL会忽略。这个视图无法还原完整的session历史。
#v$sqlarea中有执行过的SQL语句,但并无到session的关联信息,v$session中只关联了当前的sql,所以也不行。
查看视图:dba_hist_sqlstats、dba_hist_sqltext(历史数据)
【方法三:session trace】
SQL> execute dbms_session.session_trace_enable(true,true);
PL/SQL procere successfully completed.
SQL> select count(*) from dba_hist_sqltext;
COUNT(*)
----------
478
SQL> select * from V$sesstat where rownum=1;
SID STATISTIC# VALUE
---------- ---------- ----------
134 0 1
SQL> execute dbms_session.session_trace_disable();
PL/SQL procere successfully completed.
$ cd $ORACLE_HOME/admin/test/ump
$ ls -lrt
$ tkprof test_ora_2195620.trc report.txt sys=no explain=no aggregate=yes
$ more report.txt --这个文件包括了启停trace之间所有SQL语句的执行信息,执行计划、统计
【方法四:logminer】
只包含DML与DDL语句,不能查询select语句。另外需要开启supplemental logging,默认是没有开启的。
conn / as sysdba
--安装LOGMINER
SQL> @$ORACLE_HOME/rdbms/admin/dbmslmd.sql;
SQL> @$ORACLE_HOME/rdbms/admin/dbmslm.sql;
SQL> @$ORACLE_HOME/rdbms/admin/dbmslms.sql;
SQL> @$ORACLE_HOME/rdbms/admin/prvtlm.plb;
--开启附加日志
alter database add supplemental log data;
--模拟DML操作
conn p_chenming/...
SQL> select * from test2;
SQL> insert into test2 values(7,77);
SQL> commit;
conn / as sysdba
--切归档
SQL> alter system switch logfile;
SQL> select name,dest_id,thread#,sequence# from v$archived_log; --最后一个即为新的归档
--新建LOG MINER
SQL> execute dbms_logmnr.add_logfile(logfilename=>'/oracle/archive_10g/test/test_1_138_786808434.arc',options=>dbms_logmnr.new);
--开始miner
SQL> execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
--查看结果
SQL> col username format a8;
SQL> col sql_redo format a50
SQL> select username,scn,timestamp,sql_redo from v$logmnr_contents where table_name='TEST2';
SQL> select username,scn,timestamp,sql_redo from v$logmnr_contents where username='P_CHENMING';
--关闭MINER
SQL> execute dbms_logmnr.end_logmnr;
--关闭辅助日志
SQL> alter database drop supplemental log data;
【总结】
查看v$sqlarea只能查看粗略的历史,因为很多SQL是共享的。
查看ASH也不全,因为这是采样数据。
查看TRACE应该是最完整的,但需要在执行SQL前开启。
查看logminer不能查看select语句,而且默认的系统没有开启supplementing log,所以能查看的内容有限。
怎么查看用户的SQL执行历史
【方法一】查询v$sqltext、v$sqlarea、v$sqlstats视图 select * from v$sqlarea t where t.PARSING_SCHEMA_NAME in ('schema') order by t.LAST_ACTIVE_TIME desc;对v$sqltext、v$sqlarea查看的是shared pool中的SQL,其时间索引是其解析历史,因为共享的问题这个查询可能并不能完整地反映出执行的历...
在ORACLE中怎么查看SQL执行日志
1.打开SQLDeveloper工具,你可以通过菜单栏找到它,点击进入。接着,进入工具后,找到并使用以下方法查看SQL历史记录:2.在二级菜单中,可以直接选择"SQL历史记录"选项,或者通过快捷键F8快速打开相关窗口。默认情况下,历史记录会在下方的小窗口中显示。不过,这个窗口可以进行调整以提高查询效率。只需在窗口...
怎么查看用户的SQL执行历史
查看用户的SQL执行历史的语句如下:select * from v$sqlarea t where t.PARSING_SCHEMA_NAME in ('用户名') order by t.LAST_ACTIVE_TIME desc select * from v$sqlarea t order by t.LAST_ACTIVE_TIME desc 注意 :执行此语句等等一些相关的语句 必须具有DBA 的权限 虽然这条语句很普通 但是需...
如何查询最近执行的sql怎么查询执行
cat~/.mysql_history即可以看到以前的命令历史。如何查询mysql的执行记录?--打开sql执行记录功能setgloballog_output=TABLE ;--输出到表setgloballog=ON;--打开所有命令执行记录功能general_log,所有语句:成功和未成功的.setgloballog_slow_queries=ON;--打开慢查询sql记录slow_log,执行成功的:慢查询语...
在ORACLE 中怎么查看SQL 执行日志
1、首先打开oracle sql developer工具,没有此工具的可以去百度浏览器下载安装即可,鼠标点击查看菜单。2、在二级菜单中,选择SQL历史记录选项,或者按快捷键F8打开窗口。3、默认打开是会显示在最下方的小窗口,在标题栏双击鼠标左键,即可最大化窗口,再次双击左键还原窗口。4、最大化窗口之后,便于更好...
plsql如何查看计入改变或提交的sql
plsql查看计入改变或提交的sql方法:1、使用PLSQL自带的SQL历史记录功能,可以查看最近执行过的SQL语句,包括修改或提交的语句。2、使用PLSQL自带的会话浏览器功能,可以查看当前会话或其他会话的详细信息,包括执行中或已执行的SQL语句。
oracle执行历史查不到执行sql
1、在Oracle中,如果需要查看SQL执行历史,需要使用SQL跟踪功能。如果没有开启 SQL 跟踪功能,执行SQL的历史记录将无法被记录下来。2、执行SQL的历史记录已经过期,在Oracle中,可以配置历史记录保留时间,如果历史记录保留时间已过,那么执行SQL的历史记录将被删除。您可以检查历史记录保留时间是否已过期。3、...
怎么查看用户的SQL执行历史
用profiler.exe可以对数据库进行实时跟踪,这个是sql server management studio 的工具
如何查找PL/SQL执行过的历史SQL语句呀
如果你的窗口没有关闭的话,右边有个上下的箭头,点一下向上的箭头就ok了 要是关闭了可以查看会话sessions,里边有详细的sql运行记录,但是比较麻烦
如何查看mysql执行的所有以往 sql 语句历史命令
mysql 有这样一个机制,就是,在用户的主目录下会生成一个.mysql_history 的文件,这个文件会记录用户登录mysql后,在mysql中敲过的每条命令。cat ~/.mysql_history 即可以看到以前的命令历史。