问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何查看oracle数据库中执行了哪些sql语句

发布网友 发布时间:2022-04-07 15:25

我来回答

1个回答

热心网友 时间:2022-04-07 16:54

一、通过PL/SQL Dev工具
1、直接File->New->Explain Plan Window,在窗口中执行sql可以查看计划结果。其中,Cost表示cpu的消耗,单位为n%,Cardinality表示执行的行数,等价Rows。
2、先执行 EXPLAIN PLAN FOR select * from tableA where paraA=1,再 select * from table(DBMS_XPLAN.DISPLAY)便可以看到oracle的执行计划了,看到的结果和1中的一样,所以使用工具的时候推荐使用1方法。
注意:PL/SQL Dev工具的Command window中不支持set autotrance on的命令。还有使用工具方法查看计划看到的信息不全,有些时候我们需要sqlplus的支持。

二、通过sqlplus
1.最简单的办法
Sql> set autotrace on
Sql> select * from al;
  执行完语句后,会显示explain plan 与 统计信息。
  这个语句的优点就是它的缺点,这样在用该方法查看执行时间较长的sql语句时,需要等待该语句执行成功后,才返回执行计划,使优化的周期大大增长。如果不想执行语句而只是想得到执行计划可以采用:
Sql> set autotrace traceonly
这样,就只会列出执行计划,而不会真正的执行语句,大大减少了优化时间。虽然也列出了统计信息,但是因为没有执行语句,所以该统计信息没有用处,如果执行该语句时遇到错误,解决方法为:
(1)在要分析的用户下:
Sqlplus > @ ?
dbmsadminutlxplan.sql
(2) 用sys用户登陆
Sqlplus > @ ?sqlplusadminplustrce.sql
Sqlplus > grant plustrace to user_name;
- - user_name是上面所说的分析用户

 2.用explain plan命令
(1) sqlplus > explain plan for select * from testdb.myuser
(2) sqlplus > select * from table(dbms_xplan.display);
  上面这2种方法只能为在本会话中正在运行的语句产生执行计划,即我们需要已经知道了哪条语句运行的效率很差,我们是有目的只对这条SQL语句去优化。其实,在很多情况下,我们只会听一个客户抱怨说现在系统运行很慢,而我们不知道是哪个SQL引起的。此时有许多现成的语句可以找出耗费资源比较多的语句,如:
SELECT ADDRESS, substr(SQL_TEXT,1,20) Text, buffer_gets, executions,
buffer_gets/executions AVG FROM v$sqlarea
WHERE executions>0 AND buffer_gets > 100000 ORDER BY 5;
ADDRESS TEXT BUFFER_GETS EXECUTIONS AVG
-------- ---------------------------------------- ----------- ---------- ------------------------------------------------------------
66D83D64 select t.name, (sel 421531 60104 7.01336017
66D9E8AC select t.schema, t.n 1141739 2732 417.913250
66B82BCC select s.synonym_nam 441261 6 73543.5
  从而对找出的语句进行进一步优化。当然我们还可以为一个正在运行的会话中运行的所有SQL语句生成执行计划,这需要对该会话进行跟踪,产生trace文件,然后对该文件用tkprof程序格式化一下,这种得到执行计划的方式很有用,因为它包含其它额外信息,如SQL语句执行的每个阶段(如Parse、Execute、Fetch)分别耗费的各个资源情况(如CPU、DISK、elapsed等)。

3、启用SQL_TRACE跟踪所有后台进程活动:
全局参数设置: .OracleHome/admin/SID/pfile中指定: SQL_TRACE = true (10g)
当前session中设置:
SQL> alter session set SQL_TRACE=true;
SQL> select * from al;
SQL> alter session set SQL_TRACE=false;
对其他用户进行跟踪设置:
SQL> select sid,serial#,username from v$session where username='XXX';
SID SERIAL# USERNAME
------ ---------- ------------------
127 31923 A
128 54521 B
开启跟踪:SQL> exec dbms_system.set_SQL_TRACE_in_session(127,31923,true);
关闭跟踪:SQL> exec dbms_system.set_SQL_TRACE_in_session(127,31923,false);
然后使用oracle自带的tkprof命令行工具格式化跟踪文件。

4、使用10046事件进行查询:
10046事件级别:
Lv1 - 启用标准的SQL_TRACE功能,等价于SQL_TRACE
Lv4 - Level 1 + 绑定值(bind values)
Lv8 - Level 1 + 等待事件跟踪
Lv12 - Level 1 + Level 4 + Level 8
全局设定:
OracleHome/admin/SID/pfile中指定: EVENT="10046 trace name context forever,level 12"
当前session设定:
开启:SQL> alter session set events '10046 trace name context forever, level 8';
关闭:SQL> alter session set events '10046 trace name context off';
对其他用户进行设置:
SQL> select sid,serial#,username from v$session where username='XXX';
SID SERIAL# USERNAME
------ ---------- ------------------
127 31923 A

SQL> exec dbms_system.set_ev(127,31923,10046,8,'A');

5、使用tkprof格式化跟踪文件: (根据下面SQL语句得到的文件都不存在该目录下,郁闷啊,懵懂啊...)

一般,一次跟踪可以分为以下几步:
1、界定需要跟踪的目标范围,并使用适当的命令启用所需跟踪。
2、经过一段时间后,停止跟踪。此时应该产生了一个跟踪结果文件。
3、找到跟踪文件,并对其进行格式化,然后阅读或分析。
--使用一下SQL找到当前session的跟踪文件:
SELECT d.value|| '/' ||lower(rtrim(i.instance, chr( 0 )))|| '_ora_' ||p.spid|| '.trc' trace_file_namefrom( select p.spid from v$mystat m,v$session s, v$process pwhere m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p,( select t.instance from v$thread t,v$parameter vwhere v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i,( select value from v$parameter where name = 'user_mp_dest' ) d;-- 其它用户的 session SELECT d.value|| '/' ||lower(rtrim(i.instance, chr( 0 )))|| '_ora_' ||p.spid|| '.trc' trace_file_name from ( select p.spid from v$session s, v$process p where s.sid= '27' and s. SERIAL#= '30' and p.addr = s.paddr) p, ( select t.instance from v$thread t,v$parameter v where v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i, ( select value from v$parameter where name = 'user_mp_dest' ) d;

--查找后使用tkprof命令,将TRACE文件格式为到D盘的explain_format.txt文件中
SQL> $tkprof d:/oracle/admin/FZLGFM/ump/fzlgfm_ora_3468.trc d:/explain_format.txt

文件内容大致如下(看不太懂....懵懂啊.....天啊....神啊.....过几时就懂了/////////////)
TKPROF: Release 9.2.0.1.0 - Proction on 星期二 4月 20 13:59:20 2010
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Trace file: d:/oracle/admin/FZLGFM/ump/fzlgfm_ora_3468.trc
Sort options: default
********************************************************************************
count = number of times OCI procere was executed
cpu = cpu time in seconds executing
elapsed = elapsed time in seconds executing
disk = number of physical reads of buffers from disk
query = number of buffers gotten for consistent read
current = number of buffers gotten in current mode (usually for update)
rows = number of rows processed by the fetch or execute call********************************************************************************
alter session set events '10046 trace name context forever, level 8'

call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 0 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 1 0.00 0.00 0 0 0 0

Misses in library cache ring parse: 0
Misses in library cache ring execute: 1
Optimizer goal: CHOOSE
Parsing user id: SYS
如何查看oracle数据库中执行了哪些sql语句

1、直接File->New->Explain Plan Window,在窗口中执行sql可以查看计划结果。其中,Cost表示cpu的消耗,单位为n%,Cardinality表示执行的行数,等价Rows。2、先执行 EXPLAIN PLAN FOR select * from tableA where paraA=1,再 select * from table(DBMS_XPLAN.DISPLAY)便可以看到oracle的执行计划了...

查看oracle数据库最近执行了哪些sql语句

oracle 最近执行过的sql语句:last_load_time last_load_time ---监控concurrent 正在执行的sql -- SELECT a.sid, a.serial#, b.sql_text FROM v$session a, v$sqltext b WHERE a.sql_address = b.address --AND a.sid = <...> ORDER BY b.piece ...

查看oracle数据库最近执行了哪些sql语句

SELECT sql_text, last_load_time FROM v$sql WHERE last_load_time IS NOT NULL and last_load_time like' 14-06-09%' ORDER BY last_load_time DESC;

如何查看oracle服务器上正在执行的SQL语句

首先,你要以dba身份登陆数据库。第二,为某个用户开启sql跟踪。那个用户就是你要跟踪的、正在执行sql语句的那个用户。命令如下:execute dbms_system.set_sql_trace_in_session(sid,serial#,true)其中参数的意义是,sid-会话id,serial#-序列号,这两个参数可以从v$session中得到。第三,上面的命令...

如何查询oracle数据库的操作记录?

select * from v$sql 即可。如果报错找不到v$sql,一般是权限问题,换sysdba就肯定能查到。但要注意的是“隐式sql”,很多sql语句是调用执行的,(比如,存储过程中对dbms包的调用,再如执行create 语句所触发的对系统表空间、数据字典的修改等等。),这些语句同样会展现在v$sql中。还有其它与sql历史...

如何查询oracle操作记录的sql

用户名需要大写 select * from v$sqlarea t order by t.LAST_ACTIVE_TIME desc 注意 :执行此语句等等一些相关的语句 必须具有DBA 的权限 虽然这条语句很普通 但是需要的时候很管用 能够及时查出一个人执行sql语句情况 ---oracle 查看已经执行过的sql 这些是存在共享池中的 ---> select * from v$...

oracle sql_trace ,如何查看oracle刚刚执行了哪些sql?

可以在V$Sqlarea视图下进行查看。sql:SELECT T.LAST_LOAD_TIME ,T.* FROM V$SQLAREA T WHERE UPPER(T.SQL_TEXT) LIKE '%表名%' AND T.SQL_TEXT LIKE '%SELECT%' ORDER BY T.LAST_LOAD_TIME DESC 解释:后面的where语句根据实际需要修改即可,如执行的表、是查询还是修改等等,...

如何查看sql数据库操作日志?

查看SQL数据库操作日志的方法:1. 利用数据库自带的日志功能:大多数数据库系统都提供了日志记录功能,可以记录数据库的所有操作。这些日志通常包括执行的SQL语句、操作时间、执行结果等信息。例如,MySQL可以通过配置general log来记录所有服务器的操作;Oracle有审计追踪和日志挖掘功能;SQL Server有SQL Server...

oracle数据库操作记录怎么查看

sysdba archive log list 如果数据库为归档模式的话,可以通过logmnr来进行挖掘日志文件查看这些信息的。如果是非归档模式。对不起无法查看了 开启后台进程跟踪,设置参数(initsid.ora).backgroudn_dump_dest=目录名 -- 指定根踪文件存放的路径 .user_dmup_test=目录名 --指定用户信息跟踪文件的存放路径 ...

在ORACLE 中怎么查看SQL 执行日志

1、首先打开oracle sql developer工具,没有此工具的可以去百度浏览器下载安装即可,鼠标点击查看菜单。2、在二级菜单中,选择SQL历史记录选项,或者按快捷键F8打开窗口。3、默认打开是会显示在最下方的小窗口,在标题栏双击鼠标左键,即可最大化窗口,再次双击左键还原窗口。4、最大化窗口之后,便于更好...

oracle数据库sql语句 oracle数据库常用sql语句 oracle数据库查询语句 oracle 如何优化sql语句 oracle怎么执行sql语句 oracle数据库sql oracle查询sql语句 oracle常用sql查询语句 oracle数据库提交sql
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怎么养好四季海棠? 西安财神庙攻略,西安旅游攻略财神庙路线 漯河食品职业学院是几本 漯河食品职业学院是985还是211 做无痛人流的危害 地暖水压能保持多久 地暖水压维持时间有多长 海棠花开完花后该怎么处理 漯河食品职业学院为什么能升本 漯河食品职业学院质量检验系培养目标 漯河食品职业学院是谁建的 农业银行信用卡在哪里制卡? 患有多囊卵巢综合征是一种怎样的体验? 王者荣耀如何将视角放大(辅助工具)? 关于多囊卵巢综合症的!急~ 王者荣耀怎么转视角 王者荣耀怎么看视野,感觉手用不过来 王者荣耀怎么拉近视角 王者荣耀怎么调第二人称视角 苹果手机王者荣耀视野调节方法 王者荣耀如何边走边拉视角? 王者荣耀怎么切换视角? 手机..怎样通过USB连接电脑后查看电脑硬盘的文件,有什么软件可以实现这个功能吗? 手机QQ语音变声怎么用 手机QQ语音消息变声方法 王者荣耀怎么移动视角 安卓手机连三星移动固态硬盘t3下什么app?? 毫米波雷达的特点是? 手机怎么连录像机硬盘 希捷移动无线硬盘和手机链接手机该下载什么软件 WPS打开PPT提示访问路径时出错 我问一下安卓手机 读取 无线硬盘需要安装什么软件? 我的农业信用卡为什么从上海邮来啊 农行信用卡邮寄时间 农行信用卡怎么查寄到哪里了 农行信用卡邮寄分行要多久才能寄到 零钱通存一千每天可或10额度是什么回事? 微信零钱通存入600元一天有多少收益? 用C/C++ 去重写hadoop/spark有没有现实意义 在hadoop 开发过程中使用过哪些算法 个人能使用hadoop处理5张excel大表吗 hadoop pig apache join之后会去重吗 利用JAVA+API向HDFS文件系统上的文件写入数据一共有哪三种方法,请... [hadoop]怎么把两个mapreduce工程合起来 2020年浙江省高校计算机三级数据管理与分析技术考试大纲 contrib/streaming/hadoop-0.19.1-streaming.jar 哪个目录 一个身份证最多可以买多少个手机号 一个身份证能买两个移动吗手机号 海尔滚筒洗衣机除尘袋在哪 高中助学金申请书怎么写1000字 电脑怎么开双通道啊? 怎么组建内存双通道?