oracle怎么跟踪进程,oracle怎么跟踪sql
windows怎么查看oracle进程
1.右键开始菜单,选择“计算机管理”。
宜君网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、自适应网站建设等网站项目制作,到程序开发,运营维护。创新互联于2013年创立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
2.选择“服务和应用程序”—“服务”。
3.找到oracle的相关进程查看状态即可。
Oracle 数据库如何跟踪SQL语句
没用,只想从后台数据库看对这个数据库执行的sql问题补充:unika_ly12 写道 那你直接查询 v$sqltext 和 v$session 好了 首先,你要以dba身份登陆数据库。 第二,为某个用户开启sql跟踪。那个用户就是你要跟踪的、正在执行sql语句的那个用户。命令如下: execute dbms_system.set_sql_trace_in_session(sid,serial#,true) 其中参数的意义是,sid-会话id,serial#-序列号,这两个参数可以从v$session中得到。 第三,上面的命令执行成功之后数据库就自动对该用户所发出的所有sql语句进行跟踪,并把结果写在用户跟踪文件里。用户跟踪文件存放在数据库服务器上,路径请参考init.ora文件中的udump参数值。文件名为ora_sid_xxxx.trc(for unix)或者oraxxxxx.trc(for NT),其中xxxx文件系统进程编号,这个编号可以从v$process和v$session两个表通过关联的方式查询得到。当然你也可以简单的查看一下哪个trc文件的日期最新,哪个文件就是你要的结果了。 首先,你要以dba身份登陆数据库。 第二,为某个用户开启sql跟踪。那个用户就是你要跟踪的、正在执行sql语句的那个用户。命令如下: execute dbms_system.set_sql_trace_in_session(sid,serial#,true) 其中参数的意义是,sid-会话id,serial#-序列号,这两个参数可以从v$session中得到。 第三,上面的命令执行成功之后数据库就自动对该用户所发出的所有sql语句进行跟踪,并把结果写在用户跟踪文件里。用户跟踪文件存放在数据库服务器上,路径请参考init.ora文件中的udump参数值。文件名为ora_sid_xxxx.trc(for unix)或者oraxxxxx.trc(for NT),其中xxxx文件系统进程编号,这个编号可以从v$process和v$session两个表通过关联的方式查询得到。当然你也可以简单的查看一下哪个trc文件的日期最新,哪个文件就是你要的结果了。
如何监控Oracle数据库中长时间运行的进程
监控Oracle 数据库中长时间运行进程的两种方式,通过这些方 法,我们可以监控单条语句的 长时间操作,监控存储过程的运行进度,甚至自己'生成'进度信息. 关键词:监控进度V$SESSION_LONGOPS 当Oracle 存储过程运行时间较长时,我们希望客 户端能了解到它在后台执行的状况或者进度信息(类 似WINDOWS 安装软件时的进度条信息),这样可以知 道运行在后台的应用进程是否终止或者休眠,更近一 步要求,最好能知道进行到哪一步骤,还有多少时间才 能完成. 简单到一条SQL 语句的情况,如果执行时间较长, 我们如何得到它的运行状况?是否后台还在运行?虽 然可以查看SQL 的执行计划了解它的执行步骤,但如 何知道它运行到哪一个步骤了呢?如何才能估计出它 的合理的较为精确的执行时间呢? Oracle 数据库前端发出执行命令后,进程在后台 执行,普通开发人员一般无法了解到后台在做什么,一 般采用的方法是用DBMSOUTPUT.PUT_LINE 来打印出 来,但DBMS—OUTPUT.PUT—LINE 打印的信息受缓冲区 大小限制,如果信息较多就容易溢出,而且如果存储过 程执行时间较长,只有在其执行完后,这些信息才会打 印出来,这就增加了调试周期,影响了调试效果.有的 开发人员在存储过程中通过写日志表的形式来记录进 度,但需要COMMIT 后其他进程才能看到这些日志信 息,而在某些控制结构中(如游标CURSOR 循环)COM— MIT,则很容易引起ORA 一01555 错误,造成程序出错. 下面介绍两种监控方法. 如何监控单条长语句从ORACLE8 开始,出现一个新的动态视图:V $SESSION_LONGOPS,从这个视图可以获知一些操作 (如全表扫描,并行查询,RMAN,排序等)的执行进度, 我们先来了解一下V$SESSION—LONGOPS 视图的一些 重要字段: 列说明 sID 会话标识 5ERIAL#会话序列号 OPfE 操作的简短描述 TARG 盯操作的对象,如xx TAR~_DESC目标描述 SOFAR 目前已执行单位数目 ToTAIWORK 总单位数目 UNlTS 单位 START_TIME 开始执行时间 LAST_ UPDATE_TIME 统计数据最后更新时间 TIME_ REMAINING 估计剩余时间c ELAPSED_SECONDS 已执行时间(秒) MEsSAGE 统计数据汇总信息 USERA^^E 用户名 ~L_ADDRES5 语句的地址,,用于和V$sql_text 等关联 语句的hash 地址,用于和V$sql_texlSQLHASH VALUE等关联 这个动态视图显示各个运行时间超过6 程.这些进程包含许多备份和恢复功能,统计数据收集,查询等. 执行以下语句就可以得到数据库中各个长时间操 作的进程信息: select'Icfromv$sesslon_ longopswheretime_ re- malnlng0 我们也可以用图形化工具查看,如TOAD,OEM中 均可查看长操作进程进度信息. Oracle 自带的管理工具OracleEnterpriseManager (OEM)提供了图形化查看长操作的功能,如: 计算机系统应用2007 Quest公司的数据库管理工具TOAD 也可以看到 长操作信息,如: 表的统计信息. 长时问运行的SQL 语句可以用V$SESSION—LON? 为了能监控到查询进程执行的进度,必需使用 CBO 优化器并且: 设置TlMED—STATISTICS或者SQL—TRACE 用ANALYZE语句或者DBMS—STAT 包收集相关 108 实践经验P 帕cficalExpen GOPS来监控.实际上,长时间运行的存储过程也可以 监控.那是否任何操作都可以通过这个视图来监控进 度呢?很遗憾,V$SESSION—LONGOPS 只会报告它认为 耗时长的操作.对于NEsTEDLOOP/UNIQUEINDEX READS/INDEXRANGEScANS 等执行速度很快的操作, 2007 期计算机系统应用由于它们执行一般不超过6 秒,因此将不会出现在V $SESSION—LONGOPS 如何监控自定义存储过程单条长语句可以用上面的方法监控,Oracle 动生成V$SE.SSION— LONGOPS 记录.那么存储过程中 有许多小操作,如何监控进度呢?其实,我们也可以手 工生成V$SESSION—LONGOPS 记录,方法是调用DBMS APPLICATION—INFO 包来生成自定义进度信息. 从Oracle7.2 开始,提供了DBMS—APPLICATION— INFo 包,通过调用这个包,应用可以将自己的名字和 动作填写到V$SESSION 和V$SQLAREA 的MODULE ACTION列中.V$SESSION 列出每个会话的用户名,操 作系统机器名,终端名,程序名等. 应用可以在执行模块时设置模块名和动作名,模 块名一般是甩户自定义的.而动作名一般描述模块中 的当前执行的事务的名字. DBMSAPPLICATION_INFO 包包含以下过程 SET_ MODULE 设置当前运行程序的模块名 SET__AEl'ION 设置当前模块的当前动作名 SESSION—LON-在V$SESSIONLONGOPS视图中 GoPS 插入一行进度信息 SETMODULE过程设置模块名和动作名: createorreplaceproceduredel—cust(v_cust—Id varchar2) begindbms—— application—— info.set— module(module—— name="delcust". actlon_name="deletetablecust)i deletefromcustwherecustld=v_ cusLId; dbms_appllcatlon— Info.seLmodule(,); end;以上设置的模块名和动作名可以通过查询V $sqlarea 获取. 如:selectsql—text,module,actionfromv $sqlareawheremodule="del_cust: sql_textmoduleadion Deletefr0mcustdel_ custdeletetableoust 1rowselected. SET_SESSION—LONGOPS 过程用于在V$session— longops 中插入一行,开发人员可以调用此过程设置长 时间操作的状态信息,这样,任何其他其他会话都可以 看到这个进度信息.如下例所示: declare nohlntnumberdefaultdbmsapplicatlon_info.set_ session— Iongops_ nohint; IdndexnumberdefaultInohlnt: slnonumber;begin forlIn1..8888888888 loop update....; dbms_ appllcaflon— Info.setsesslon_ longops (rlndex=l_rlndex, slno=I_slno. op_name="updateahugetable. target=126, target_desc='.msgdescription context=0.sOfar=j. totalwork=8888888888. units=loops endloop;end; 然后,从另一个会话来执行以下语句selectfromv$sesslon_ longopswheretlmere? malnlng0; 也可以用图形化工具TOAD 或OEM来查看. 因此,采用本文说明的方法,Oracle 开发人员可以 比较方便的监控长操作进程的进度信息,也可以自己 设置监控信息,来了解后台存储过程的运行效率.甚 至,可以在存储过程或SQL 语句提交执行后马上观察 其执行进度,如果比较缓慢,则可以中断其执行,进行 调优,从而缩短调试周期,提高开发效率.
如何收集Oracle进程中的sql跟踪信息
用toad 的工具可以进行跟踪。查找toad的路径 右键属性 查找相应文件夹 然后 找寻同级目录下的 sql_monitor 这个工具就可以对 Oracle运行数据进行跟踪。
oracle 如何跟踪全表扫描进程
Maclean教你读Oracle 10046 SQL TRACE
有同学一直向Maclean反应希望做一期10046 SQL trace的教程, 正好这几天有空 我们就理一理。
为什么我们要使用10046 trace?
10046 trace帮助我们解析 一条/多条SQL、PL/SQL语句的运行状态 ,这些状态包括 :Parse/Fetch/Execute三个阶段中遇到的等待事件、消耗的物理和逻辑读、CPU时间、执行计划等等。
即10046 为我们揭示了 一条/多条SQL 的运行情况, 对于 以点入手的 SQL调优是很好的辅助工具,特别是在 10g之前没有ASH的情况下。 但整体系统调优 不是10046 所擅长的, 10046 是 性能调优的起钉器 , AWR是性能调优 的锤子。
10046还能帮助我们分析 一些 DDL维护命令的内部工作原理, RMAN、Data Pump Expdp/Impdp等工具的缓慢问题等, 是研究 oracle 数据库原理的 居家旅行必备良品。
10046 和SQL TRACE的区别?
10046 比 SQL_TRACE参数提供更多的控制选项, 更详细的内容输出, 一般Maclean只用10046 而不用sql_trace
10046 和10053 的区别?
10053 是最常用的Oracle 优化器optimizer 跟踪trace, 10053 可以作为我们解析 优化器为什么选择某个执行计划,其中的理由的辅助工具,但并不告诉我们这个执行计划 到底运行地如何。
而10046 并不解释 optimizer优化器的工作, 但它同样说明了在SQL解析parse阶段所遇到的等待事件和所消耗的CPU等资源,以及Execute执行和Fetch阶段的各项指标。
简而言之10046 告诉我们SQL(执行计划)运行地如何, 10053告诉我们 优化器为什么为这个SQL选择某个执行计划。
10046 TRACE的LEVEL:
不同的Level 对应不同的跟踪级别
1 启用标准的SQL_TRACE功能 ( 默认) 包含了 SQL语句、响应时间、服务时间、处理的行数,物理读和写的数目、执行计划以及其他一些额外信息。 到版本10.2中 执行计划写入到 trace 的条件是仅当相关游标 已经关闭时, 且与之相关的执行统计信息是所有执行次数的总和数据。 到版本11.1中仅在每次游标的第一次执行后将执行计划写入到trace , 执行统计信息仅仅和这第一次执行相关
4 比level 1时多出 绑定变量的 trace
8 比level 1多出等待事件,特别对于9i中指出 latch free等待事件很有用,对于分析全表扫描和索引扫描也很有用
12 比level 1 多出 绑定变量和 等待事件
16 在11g中为每一次执行生成STAT信息,仅在11.1之后可用
32 比level 1少执行计划
64 和level 1 相比 在第一次执行后还可能生成执行计划信息 ; 条件是某个游标在前一次执行的前提下 运行耗时变长了一分钟。仅在 11.2.0.2中可用
Level 28 (4 + 8 + 16) 代表 同时启用 level 4 、level 8、level 16
level 68 ( 64 + 4 ) 代表 同时启用 level 64、level 4
设置的方法如下:
session 级别: alter session set events ’10046 trace name context forever,level X’;
system 级别 : alter system set events ’10046 trace name context forever,level X’;
如何查找oracle进程
Oracle数据库查看一个进程是如何执行相关的实际SQL语句
SELECT b.sql_text, sid, serial#, osuser, machine
FROM v$session a, v$sqlarea b
WHERE a.sql_address = b.address;
查询前台发出的SQL语句.
select user_name,sql_text
from v$open_cursor
where sid in
(select sid from (select sid,serial#,username,program from v$session where status='ACTIVE'));
根据SPID查询session
SELECT * FROM v$session WHERE paddr IN
(SELECT addr FROM v$process WHERE spid=spid);
根据SID查询process
SELECT * FROM v$process WHERE addr IN
(SELECT paddr FROM v$session WHERE sid=sid);
DBA如何查询其他用户所进行的操作
SELECT sql_text
FROM v$sql t1, v$session t2
WHERE t1.address = t2.sql_address
AND t2.sid = sid;
根据process查询sql语句
SELECT sql_text
FROM v$sqltext a
WHERE (a.hash_value, a.address) IN (
SELECT DECODE (sql_hash_value,0, prev_hash_value,sql_hash_value ),
DECODE (sql_hash_value, 0, prev_sql_addr, sql_address)
FROM v$session b
WHERE b.paddr = (SELECT addr
FROM v$process c
WHERE c.spid = '$processID'))
ORDER BY piece ASC;
其他
执行下列命令语句
sqlplus / as sysdba EOF
create tablespace test datafile '/data/test01.dbf' size 10240M;
quit;
EOF
通过ps -ef|grep sqlplus命令得到上面所执行的命令的进程id为:12345
(1)关于v$process
执行下面的SQL是查不到相关的信息:
select * from v$process where spid='12345';
因为这个spid字段对应的并不是我们用ps命令从系统中查询到的进程id,而是这个进程执行的当前SQL的进程id,
也就是上面命令中的“create tablespace test datafile '/data/test01.dbf' size 10240M;”所对应的进程id,如果想
通过用ps命令从系统中查询到的进程id查看对应的信息,那么必须使用下面语句:
select spid,sid,process,sql_address from v$session where process='12345'
上面sql中的process就是通过ps查看的进程id,而spid就是里面的sql语句所对应的进程id。
还可以通过上面的sql_address 查看正在执行的SQL语句内容:
select sql_text from v$sqlarea s,v$session ses where s.address=ses.sql_address and ses.process='12345';
(2)关于v$session
在查询 v$session 视图的时候,我们根据command字段内部表示解码每一个字段,当我们需要快速找出他们的 Oracle 系统的内部情况时非常有用。
select
substr(s.username,1,18) username,substr(s.program,1,15) program,p.spid,s.process,
decode(s.command,
0,'No Command',
1,'Create Table',
2,'Insert',
3,'Select',
6,'Update',
7,'Delete',
9,'Create Index',
15,'Alter Table',
21,'Create View',
23,'Validate Index',
35,'Alter Database',
39,'Create Tablespace',
41,'Drop Tablespace',
40,'Alter Tablespace',
53,'Drop User',
62,'Analyze Table',
63,'Analyze Index',
s.command||': Other') command
from
v$session s,
v$process p,
v$transaction t,
v$rollstat r,
v$rollname n
where s.paddr = p.addr
and s.taddr = t.addr (+)
and t.xidusn = r.usn (+)
and r.usn = n.usn (+)
order by username
(3)几个相关的SQL
--查看系统进程对应的信息
select se.saddr,se.sid,se.serial#,p.pid,se.paddr,s.sql_id,s.sql_text
from v$session se ,v$process p, v$sqlarea s
where se.paddr=p.addr and se.sql_address=s.address and se.process='1'
and se.username is not null
--查看所有的会话
select se.username,se.saddr,se.sid,se.serial#,se.process,s.sql_id
from v$session se,v$sqlarea s
where se.sql_address=s.address
--查看会话对应的sql内容
select se.username,se.process,s.sql_text
from v$session se,v$sqlarea s
where se.sql_address=s.address and s.sql_id='1'
分享名称:oracle怎么跟踪进程,oracle怎么跟踪sql
本文网址:http://pwwzsj.com/article/hdhjeo.html