正在执行的sql语句
Ⅰ 如何查看Oracle正在执行的sql语句
在Oracle数据库中,若要查看当前正在执行的SQL语句,可以使用以下查询语句:
SELECT b.sid oracleID, b.username 登录Oracle用户名, b.serial# 操作系统ID, paddr, sql_text 正在执行的SQL, b.machine 计算机名
FROM v$process a, v$session b, v$sqlarea c
WHERE a.addr = b.paddr AND b.sql_hash_value = c.hash_value
此查询会返回一系列关于当前会话的信息,包括会话ID、用户名、操作系统ID、进程地址、执行的SQL文本以及计算机名。
通过这个查询,数据库管理员能够更好地监控和管理正在进行中的SQL操作,及时发现并解决潜在的问题。例如,可以用来定位长时间运行或资源消耗高的查询,以便进行优化或调整。
此外,查询结果中的SID(会话ID)和SERIAL#(会话序列号)可以用来终止特定会话的SQL执行。例如,使用如下命令可以终止一个会话:
ALTER SYSTEM KILL SESSION 'sid,serial#'
这在需要立即停止一个阻塞或不响应的查询时非常有用。
需要注意的是,执行这些查询需要具有相应的数据库权限。不同的数据库实例和版本可能需要调整查询语句以适应具体环境。
总之,通过上述查询,管理员可以有效地监控和管理Oracle数据库中的SQL执行情况,提高数据库性能和稳定性。
Ⅱ 如何查看oracle服务器上正在执行的SQL语句
首先,你要以dba身份登陆数据库。 第二,为某个用户开启sql跟踪。那个用户就是你要跟踪的、正在执行sql语句的那个用户。命令如下: execute dbms_system.set_sql_trace_in_session(sid,serial#,true) 其中参数的意义是,sid-会话id,serial#-序列号,这两个参数可以从v$session中得到。 第三,上面的命令执行成功之后数据库就自动对该用户所发出的所有sql语句进行跟踪,并把结果写在用户跟踪文件里。用户跟踪文件存放在数据库服务器上,路径请参考init.ora文件中的ump参数值。文件名为ora_sid_xxxx.trc(for unix)或者oraxxxxx.trc(for NT),其中xxxx文件系统进程编号,这个编号可以从v$process和v$session两个表通过关联的方式查询得到。
Ⅲ 查询Oracle性能差的、正在执行或执行过的SQL语句
为了查找性能差的SQL语句,可以使用如下查询:
SELECT * FROM (select PARSING_USER_ID,EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,sql_text FROM v$sqlarea order BY disk_reads DESC )where ROWNUM<10 ;
要查看占用IO较大的正在运行的session,可以执行以下查询:
SELECT se.sid,se.serial#,pr.SPID,se.username,se.status,se.terminal,se.program,se.MODULE,se.sql_address,st.event,st.p1text,si.physical_reads,si.block_changes FROM v$session se,v$session_wait st,v$sess_io si,v$process pr WHERE st.sid=se.sid AND st.sid=si.sid AND se.PADDR=pr.ADDR AND se.sid>6 AND st.wait_time=0 AND st.event NOT LIKE '%SQL%' ORDER BY physical_reads DESC
要获取正在执行的SQL语句,使用以下查询:
select a.username, a.sid,b.SQL_TEXT, b.SQL_FULLTEXT from v$session a, v$sqlarea b where a.sql_address = b.address
要查看执行过的SQL语句,可以使用如下查询:
select b.SQL_TEXT,b.FIRST_LOAD_TIME,b.SQL_FULLTEXT from v$sqlarea b where b.FIRST_LOAD_TIME between '2009-10-15/09:24:47' and '2009-10-15/09:24:47' order by b.FIRST_LOAD_TIME
另一种方法是,使用以下查询来查看某一时间段执行过的SQL语句,并且SQL_FULLTEXT包含了完整的SQL语句:
select OSUSER,PROGRAM,USERNAME,SCHEMANAME,B.Cpu_Time,STATUS,B.SQL_TEXT from V$SESSION A LEFT JOIN V$SQL B ON A.SQL_ADDRESS=B.ADDRESS AND A.SQL_HASH_VALUE=B.HASH_VALUE order by b.cpu_time desc
为了获取所有session的SQL文本和对应的行数,可以使用以下查询:
select address, sql_text, piece from v$session, v$sqltext where address = sql_address
请注意将"< you machine name >"替换为实际的机器名称。