会话历史信息
如何查找Oracle session 1的历史?查看前100 SQL select * from(select parsing _ user _ id executions,sorts,command _ type,disk _ reads,SQL _ text from v$SQL area order by disk _ reads desc)其中rownum
如何查看用户的SQL执行历史?查询v$sqltext、v$sqlarea和v$sqlstats视图。
select * from v$sqlarea t其中t . PARSING _ SCHEMA _ NAME in(' SCHEMA ')order by t . LAST _ ACTIVE _ TIME desc;
#对于v$sqltext和v$sqlarea,查看共享池中的SQL,其时间索引就是其解析历史,因为共享问题导致查询可能无法完全反映执行历史。
#v$sqlstats的信息保持时间比v$sql、v$sqltext和v$sqlarea长。即使SQL已经被换出共享池,仍然可以找到它。
方法2
组合v$active _ session _ history和v$sqlarea。
#v$active_session_history这个表只是采样数据,以秒为单位进行,只包括采样点在cpu上或者在那一秒不空闲的会话统计。所以可能会不完整,会忽略一些执行时间短的SQL。此视图无法还原完整的会话历史。
# v$sql area中有已执行的SQL语句,但是没有与会话相关的信息。v$session只与当前的SQL相关联,所以它不起作用。
视图视图:dba_hist_sqlstats,dba_hist_sqltext(历史数据)
如何查看用户的SQL执行历史?方法1:查询v$sqltext,v$sqlarea,v$sqlstats视图select * from V $ SQL area where t . parsing _ schema _ name in(' schema ')order by t . last _ active _ time desc;#对于v$sqltext和v$sqlarea,查看共享池中的SQL,其时间索引就是其解析历史,因为共享问题导致查询可能无法完全反映执行历史。#v$sqlstats的信息保留时间比v$sql、v$sqltext和v$sqlarea长,即使sql已经被换出共享池,仍然可以找到。方法二:表v$active_session_history和V $ SQLArea # V $ Active _ session _ History只是采样数据,以秒为单位进行,只包括采样点在cpu上或者那一秒不空闲的会话统计。所以可能会不完整,会忽略一些执行时间短的SQL。此视图无法还原完整的会话历史。# v$sql area中有已执行的SQL语句,但是没有与会话相关的信息。v$session只与当前的SQL相关联,所以它不起作用。View view: dba_hist_sqlstats,dba_hist_sqltext(历史数据)方法三:Session trace SQL >;执行DBMS _ session . session _ trace _ enable(true,true);PL/SQL过程已成功完成。SQL & gtselect count(*)from DBA _ hist _ SQL text;COUNT(*)-478 SQL & gt;select * from V$sesstat其中rownum = 1;SID统计#值---134 0 1 SQL & gt;执行DBMS _ session . session _ trace _ disable;PL/SQL过程已成功完成。$ CD $ ORACLE _ HOME/admin/test/Udump $ ls-lrt $ tkprof test _ ora _ 2195620。TRC report . txtsys = no explain = no aggregate = yes$more report . txt-该文件包括跟踪开始和停止之间所有SQL语句的执行信息、执行计划和统计信息。方法四:logminer只包含DML和DDL语句,不能查询select语句。此外,需要打开补充日志记录,默认情况下是不打开的。conn/assys DBA-安装Logminer SQL >;@ $ ORACLE _ HOME/RDBMS/admin/DBMS lmd . SQL;SQL & gt@ $ ORACLE _ HOME/RDBMS/admin/dbmslm . SQL;SQL & gt@ $ ORACLE _ HOME/RDBMS/admin/DBMS LMS . SQL;SQL & gt@ $ ORACLE _ HOME/RDBMS/admin/PRV tlm . plb;-打开附加日志alter database添加补充日志数据;-模拟DML操作连接p _陈明/。SQL & gtselect * from test2SQL & gt插入到test2值(7,77);SQL & gt麻省理工学院;conn/ASSYSDBA-剪切和归档SQL >;更改系统开关日志文件;SQL & gt从v$archived_log中选择名称、目标id、线程号、序列号;-最后一个是新的存档-创建一个新的logminer SQL >;执行DBMS _ log mnr . add _ log file(log filename = & gt;/Oracle/archive _ 10g/test/test _ 1 _ 138 _ 786808434 . arc ',options = & gtDBMS _ log mnr . new);-启动minerSQL & gt执行DBMS _ log mnr . start _ log mnr(options = & gt;DBMS _ logmnr . dict _ from _ online _ catalog);-查看结果SQL & gtcol用户名格式A8;SQL & gt列sql_redo格式a50 SQL & gtselect username,s,timestamp,SQL _ redo from v$log mnr _ contents其中table _ name = ' TEST2SQL & gtselect username,s,timestamp,SQL _ redo from v$logmnr _ contents其中username = ' P _陈明';-关闭MINERSQL & gt执行DBMS _ log mnr . end _ log mnr;-关闭辅助日志SQL & gtalter database删除补充日志数据;
如何查看PL/SQL执行的历史?除了PL/SQL的ctrl+e的视图方法之外,还有以下方法:方法一:从v$sql rea查询V $ SQL、V $ SQLitext、v$sqlarea和V $ SQLASTATS *的视图,其中t . parsing _ schema _ name in(' schema ')order by t . last _ active _ time desc。#对于v$sqltext和v$sqlarea,查看共享池中的SQL,其时间索引就是其解析历史,因为共享问题导致查询可能无法完全反映执行历史。#v$sqlstats反映了实例启动的sql执行统计,sql语句本身比v$sqltext/area更完整,因为后者可能无法换出缓存。方法二:表v$active_session_history和V $ SQLArea # V $ Active _ session _ History只是采样数据,以秒为单位进行,只包括采样点在cpu上或者那一秒不空闲的会话统计。所以可能会不完整,会忽略一些执行时间短的SQL。此视图无法还原完整的会话历史。# v$sql area中有已执行的SQL语句,但是没有与会话相关的信息。v$session只与当前的SQL相关联,所以它不起作用。从v$sqlstat可以查看数据库启动的所有SQL信息,但是没有时间顺序关系,没有用户信息,只有执行次数和资源统计。从dba_hist_sqlstat中,我们可以看到AWR快照之间的SQL统计数据。与v$SQL stats相比,它不受实例重启的影响,因为v$SQL stats中的信息在实例重启后被清除。方法3:会话跟踪& gt执行DBMS _ session . session _ trace _ enable(true,true);PL/SQL过程已成功完成。SQL & gtselect count(*)from DBA _ hist _ SQL text;COUNT(*)-478 SQL & gt;select * from V$sesstat其中rownum = 1;SID统计#值---134 0 1 SQL & gt;执行DBMS _ session . session _ trace _ disable;PL/SQL过程已成功完成。$ CD $ ORACLE _ HOME/admin/test/Udump $ ls-LRT $ tkprof test _ ora _ 2195620。TRC report . txtsys = no explain = no aggregate = yes$more report . txt-该文件包括开始和停止跟踪之间所有SQL语句的执行信息。执行计划和统计方法4: logminer只包含DML和DDL语句,不能。此外,需要打开补充日志记录,默认情况下是不打开的。conn/assys DBA-安装Logminer SQL >;@ $ ORACLE _ HOME/RDBMS/admin/DBMS lmd . SQL;SQL & gt@ $ ORACLE _ HOME/RDBMS/admin/dbmslm . SQL;SQL & gt@ $ ORACLE _ HOME/RDBMS/admin/DBMS LMS . SQL;SQL & gt@ $ ORACLE _ HOME/RDBMS/admin/PRV tlm . plb;-打开附加日志alter database添加补充日志数据;-模拟DML操作连接p _陈明/。SQL & gtselect * from test2SQL & gt插入到test2值(7,77);SQL & gt麻省理工学院;conn/ASSYSDBA-剪切和归档SQL >;更改系统开关日志文件;SQL & gt从v$archived_log中选择名称、目标id、线程号、序列号;-最后一个是新的存档-创建一个新的logminer SQL >;执行DBMS _ log mnr . add _ log file(log filename = & gt;/Oracle/archive _ 10g/test/test _ 1 _ 138 _ 786808434 . arc ',options = & gtDBMS _ log mnr . new);-启动minerSQL & gt执行DBMS _ log mnr . start _ log mnr(options = & gt;DBMS _ logmnr . dict _ from _ online _ catalog);-查看结果SQL & gtcol用户名格式A8;SQL & gt列sql_redo格式a50 SQL & gtselect username,s,timestamp,SQL _ redo from v$log mnr _ contents其中table _ name = ' TEST2SQL & gtselect username,s,timestamp,SQL _ redo from v$logmnr _ contents其中username = ' P _陈明';-关闭MINERSQL & gt执行DBMS _ log mnr . end _ log mnr;-关闭辅助日志SQL & gtalter database删除补充日志数据;总结查看v$sqlarea只能查看一个大概的历史,因为很多SQL都是共享的。检查ASH不完整,因为这是采样数据,测试时基本没有查询SQL。查看V$sqlSTATS,可以看到所有执行的SQL及其执行统计,但是没有时间序列,也没有用户信息。查看TRACE应该是最完整的,但是需要在执行SQL之前打开。查看logminer不能查看select语句,默认系统不打开补充日志,所以可以查看的内容有限。也许有一种审计方法可用。我没有测试它。每种方法都有自己的缺陷,所以似乎很难有一个完整的方法来查看SQL的执行历史。
如何查看PL/SQL执行的历史?除了PL/SQL的ctrl+e的视图方法之外,还有以下方法:方法一:从v$sql rea查询V $ SQL、V $ SQLitext、v$sqlarea和V $ SQLASTATS *的视图,其中t . parsing _ schema _ name in(' schema ')order by t . last _ active _ time desc。#对于v$sqltext和v$sqlarea,查看共享池中的SQL,其时间索引就是其解析历史,因为共享问题导致查询可能无法完全反映执行历史。#v$sqlstats反映了实例启动的sql执行统计,sql语句本身比v$sqltext/area更完整,因为后者可能无法换出缓存。方法二:表v$active_session_history和V $ SQLArea # V $ Active _ session _ History只是采样数据,以秒为单位进行,只包括采样点在cpu上或者那一秒不空闲的会话统计。所以可能会不完整,会忽略一些执行时间短的SQL。此视图无法还原完整的会话历史。# v$sql area中有已执行的SQL语句,但是没有与会话相关的信息。v$session只与当前的SQL相关联,所以它不起作用。从v$sqlstat可以查看数据库启动的所有SQL信息,但是没有时间顺序关系,没有用户信息,只有执行次数和资源统计。从dba_hist_sqlstat中,我们可以看到AWR快照之间的SQL统计数据。与v$SQL stats相比,它不受实例重启的影响,因为v$SQL stats中的信息在实例重启后被清除。方法3:会话跟踪& gt执行DBMS _ session . session _ trace _ enable(true,true);PL/SQL过程已成功完成。SQL & gtselect count(*)from DBA _ hist _ SQL text;COUNT(*)-478 SQL & gt;select * from V$sesstat其中rownum = 1;SID统计#值---134 0 1 SQL & gt;执行DBMS _ session . session _ trace _ disable;PL/SQL过程已成功完成。$ CD $ ORACLE _ HOME/admin/test/Udump $ ls-LRT $ tkprof test _ ora _ 2195620。TRC report . txtsys = no explain = no aggregate = yes$more report . txt-该文件包括开始和停止跟踪之间所有SQL语句的执行信息。执行计划和统计方法4: logminer只包含DML和DDL语句,不能。此外,需要打开补充日志记录,默认情况下是不打开的。conn/assys DBA-安装Logminer SQL >;@ $ ORACLE _ HOME/RDBMS/admin/DBMS lmd . SQL;SQL & gt@ $ ORACLE _ HOME/RDBMS/admin/dbmslm . SQL;SQL & gt@ $ ORACLE _ HOME/RDBMS/admin/DBMS LMS . SQL;SQL & gt@ $ ORACLE _ HOME/RDBMS/admin/PRV tlm . plb;-打开附加日志alter database添加补充日志数据;-模拟DML操作连接p _陈明/。SQL & gtselect * from test2SQL & gt插入到test2值(7,77);SQL & gt麻省理工学院;conn/ASSYSDBA-剪切和归档SQL >;更改系统切换日志文件;SQL & gt从v$archived_log中选择名称、目标id、线程号、序列号;-最后一个是新的存档-创建一个新的logminer SQL >;执行DBMS _ log mnr . add _ log file(log filename = & gt;/Oracle/archive _ 10g/test/test _ 1 _ 138 _ 786808434 . arc ',options = & gtDBMS _ log mnr . new);-启动minerSQL & gt执行DBMS _ log mnr . start _ log mnr(options = & gt;DBMS _ logmnr . dict _ from _ online _ catalog);-查看结果SQL & gtcol用户名格式A8;SQL & gt列sql_redo格式a50 SQL & gtselect username,s,timestamp,SQL _ redo from v$log mnr _ contents其中table _ name = ' TEST2SQL & gtselect username,s,timestamp,SQL _ redo from v$logmnr _ contents其中username = ' P _陈明';-关闭MINERSQL & gt执行DBMS _ log mnr . end _ log mnr;-关闭辅助日志SQL & gtalter database删除补充日志数据;总结查看v$sqlarea只能查看一个大概的历史,因为很多SQL都是共享的。检查ASH不完整,因为这是采样数据,测试时基本没有查询SQL。查看V$sqlSTATS,可以看到所有执行的SQL及其执行统计,但是没有时间序列,也没有用户信息。查看TRACE应该是最完整的,但是需要在执行SQL之前打开。查看logminer不能查看select语句,默认系统不打开补充日志,所以可以查看的内容有限。也许有一种审计方法可用。我没有测试它。每种方法都有自己的缺陷,所以似乎很难有一个完整的方法来查看SQL的执行历史。
甲骨文锁有历史吗?您好,过去的锁信息无法查询。
我已经编写了几个SQL,可以在锁发生时查询占用会话的信息。
(1).这个sql可以找到锁定表的会话信息以及执行了什么SQL。
SELECT /*+ rule */
LPAD('),DECODE (l.xidusn,0,3,0))
|| l.oracle_username用户名,o .所有者,o .对象名,
o .对象类型,s.SID,s .序列号,s.SQL_ID
从v $锁定对象l,dba _对象o,v $会话s
其中,l.object_id = o.object_id,l.session_id = s.SID
ORDER BY o.object_id,xid usn desc;
select * from v$sql其中sql_id='gfggpun2vtkqs '
(2)这个sql可以发现xxxsession正在等待xxxsession释放锁。
select 'SID ' || l1.sid || '被阻止' || l2.sid被阻止
从v$lock l1,v$lock l2
其中l1.block =1,l2.request & gt0
并且l 1 . id 1 = L2 . id 1
l1.id2=l2.id2