查詢oracle正在執行的SQL和事務
查詢Oracle正在執行的sql語句及執行該語句的使用者:
SELECT b.sid oracleID,
b.username 登入Oracle使用者名稱,
b.serial#,
spid 作業系統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
檢視正在執行sql的發起者的發放程式:
SELECT OSUSER 電腦登入身份,
PROGRAM 發起請求的程式,
USERNAME 登入系統的使用者名稱,
SCHEMANAME,
B.Cpu_Time 花費cpu的時間,
STATUS,
B.SQL_TEXT 執行的sql
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
查出oracle當前的被鎖物件:
SELECT l.session_id sid,
s.serial#,
l.locked_mode 鎖模式,
l.oracle_username 登入使用者,
l.os_user_name 登入機器使用者名稱,
s.machine 機器名,
s.terminal 終端使用者名稱,
o.object_name 被鎖物件名,
s.logon_time 登入資料庫時間
FROM v$locked_object l, all_objects o, v$session s
WHERE l.object_id = o.object_id
AND l.session_id = s.sid
ORDER BY sid, s.serial#;
kill掉當前的鎖物件:
alter system kill session 'sid, s.serial#‘;
查詢當前正在執行的事務:
SELECT s.sid,
s.serial#,
s.event,
a.sql_text,
a.sql_fulltext,
s.username,
s.status,
s.machine,
s.terminal,
s.program,
a.executions,
s.sql_id,
p.spid,
a.direct_writes
FROM (SELECT * FROM v$session WHERE status = 'ACTIVE') s
LEFT JOIN v$sqlarea a
ON s.sql_id = a.sql_id
INNER JOIN v$process p
ON s.paddr = p.addr
檢視Oracle 資料庫中的長事務:
set linesize 200
set pagesize 5000
col transaction_duration format a45
with transaction_details as
( select inst_id
, ses_addr
, sysdate - start_date as diff
from gv$transaction
)
select s.username
, to_char(trunc(t.diff))
|| ' days, '
|| to_char(trunc(mod(t.diff * 24,24)))
|| ' hours, '
|| to_char(trunc(mod(t.diff * 24 * 60,24)))
|| ' minutes, '
|| to_char(trunc(mod(t.diff * 24 * 60 * 60,60)))
|| ' seconds' as transaction_duration
, s.program
, s.terminal
, s.status
, s.sid
, s.serial#
from gv$session s
, transaction_details t
where s.inst_id = t.inst_id
and s.saddr = t.ses_addr
order by t.diff desc
/
查詢長事務SQL:
下面SQL 查詢資料庫中正在執行大於N秒的事務資訊:
with ltr as (
select to_char(sysdate,'YYYYMMDDHH24MISS') TM,
s.sid,
s.sql_id,
s.sql_child_number,
s.prev_sql_id,
xid,
to_char(t.start_date,'YYYYMMDDHH24MISS') start_time,
e.TYPE,e.block,
e.ctime,
decode(e.CTIME, 0, (sysdate - t.start_date) * 3600*24, e.ctime) el_second
-- q.sql_text
from v$transaction t, v$session s,v$transaction_enqueue e
where t.start_date <= sysdate - interval '100' second /*查詢開始多少秒的事務*/
and t.addr = s.taddr
--and s.sql_child_number = q.CHILD_NUMBER(+)
--and s.sql_id = q.sql_id(+) and s.prev_sql_id = q.sql_id(+)
and t.addr = e.addr(+) )
select ltr.* , (select q1.sql_text from v$sql q1 where ltr.prev_sql_id = q1.sql_id(+)
and rownum = 1) prev_sql_text ,
(select q1.sql_text from v$sql q1 where ltr.sql_id = q1.sql_id(+)
and ltr.sql_child_number = q1.CHILD_NUMBER(+)) sql_text
from ltr ltr;
SELECT b.sid oracleID,
b.username 登入Oracle使用者名稱,
b.serial#,
spid 作業系統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
檢視正在執行sql的發起者的發放程式:
SELECT OSUSER 電腦登入身份,
PROGRAM 發起請求的程式,
USERNAME 登入系統的使用者名稱,
SCHEMANAME,
B.Cpu_Time 花費cpu的時間,
STATUS,
B.SQL_TEXT 執行的sql
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
查出oracle當前的被鎖物件:
SELECT l.session_id sid,
s.serial#,
l.locked_mode 鎖模式,
l.oracle_username 登入使用者,
l.os_user_name 登入機器使用者名稱,
s.machine 機器名,
s.terminal 終端使用者名稱,
o.object_name 被鎖物件名,
s.logon_time 登入資料庫時間
FROM v$locked_object l, all_objects o, v$session s
WHERE l.object_id = o.object_id
AND l.session_id = s.sid
ORDER BY sid, s.serial#;
kill掉當前的鎖物件:
alter system kill session 'sid, s.serial#‘;
查詢當前正在執行的事務:
SELECT s.sid,
s.serial#,
s.event,
a.sql_text,
a.sql_fulltext,
s.username,
s.status,
s.machine,
s.terminal,
s.program,
a.executions,
s.sql_id,
p.spid,
a.direct_writes
FROM (SELECT * FROM v$session WHERE status = 'ACTIVE') s
LEFT JOIN v$sqlarea a
ON s.sql_id = a.sql_id
INNER JOIN v$process p
ON s.paddr = p.addr
檢視Oracle 資料庫中的長事務:
set linesize 200
set pagesize 5000
col transaction_duration format a45
with transaction_details as
( select inst_id
, ses_addr
, sysdate - start_date as diff
from gv$transaction
)
select s.username
, to_char(trunc(t.diff))
|| ' days, '
|| to_char(trunc(mod(t.diff * 24,24)))
|| ' hours, '
|| to_char(trunc(mod(t.diff * 24 * 60,24)))
|| ' minutes, '
|| to_char(trunc(mod(t.diff * 24 * 60 * 60,60)))
|| ' seconds' as transaction_duration
, s.program
, s.terminal
, s.status
, s.sid
, s.serial#
from gv$session s
, transaction_details t
where s.inst_id = t.inst_id
and s.saddr = t.ses_addr
order by t.diff desc
/
查詢長事務SQL:
下面SQL 查詢資料庫中正在執行大於N秒的事務資訊:
with ltr as (
select to_char(sysdate,'YYYYMMDDHH24MISS') TM,
s.sid,
s.sql_id,
s.sql_child_number,
s.prev_sql_id,
xid,
to_char(t.start_date,'YYYYMMDDHH24MISS') start_time,
e.TYPE,e.block,
e.ctime,
decode(e.CTIME, 0, (sysdate - t.start_date) * 3600*24, e.ctime) el_second
-- q.sql_text
from v$transaction t, v$session s,v$transaction_enqueue e
where t.start_date <= sysdate - interval '100' second /*查詢開始多少秒的事務*/
and t.addr = s.taddr
--and s.sql_child_number = q.CHILD_NUMBER(+)
--and s.sql_id = q.sql_id(+) and s.prev_sql_id = q.sql_id(+)
and t.addr = e.addr(+) )
select ltr.* , (select q1.sql_text from v$sql q1 where ltr.prev_sql_id = q1.sql_id(+)
and rownum = 1) prev_sql_text ,
(select q1.sql_text from v$sql q1 where ltr.sql_id = q1.sql_id(+)
and ltr.sql_child_number = q1.CHILD_NUMBER(+)) sql_text
from ltr ltr;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22996654/viewspace-2151533/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 查詢Oracle正在執行的sql語句及執行該語句的使用者OracleSQL
- [轉帖]SQL Server簡潔查詢正在執行的程序SQLServer
- oracle查詢sql執行耗時、執行時間、sql_idOracleSQL
- Oracle - 執行過的SQL、正在執行的SQL、消耗資源最多的SQLOracleSQL
- pgrep查詢正在執行的程式ID
- sql查詢是如何執行的?SQL
- 列舉mysql正在執行中的全部事務MySql
- SQL Server 查詢歷史執行的SQL語句SQLServer
- Laravel 框架查詢執行的 SQL 語句Laravel框架SQL
- SQL查詢的:子查詢和多表查詢SQL
- 查詢SQL Server的歷史執行記錄SQLServer
- SQL 查詢語句的執行順序解析SQL
- SQL查詢語句 (Oracle)SQLOracle
- [ORACLE] SQL執行OracleSQL
- 一條 SQL 查詢語句是如何執行的?SQL
- 自適應查詢執行:在執行時提升Spark SQL執行效能SparkSQL
- 輸入的查詢 SQL 語句,是如何執行的?SQL
- GaussDB SQL查詢語句執行過程解析SQL
- 在MySQL中使用explain查詢SQL的執行計劃MySqlAI
- oracle 精確查詢和模糊查詢Oracle
- 【SQL】Oracle查詢轉換之 OR用法SQLOracle
- 執行SQL查詢導致磁碟耗盡故障演示SQL
- LangChain SQL介紹以及使用Qwen1.5執行SQL查詢教程LangChainSQL
- Oracle sql執行計劃OracleSQL
- oracle表查詢的並行度Oracle並行
- HighgoDB查詢慢SQL和阻塞SQLGoSQL
- 【SQL】Oracle查詢轉換之物化檢視查詢重寫SQLOracle
- mySQL多表查詢與事務MySql
- ORACLE_OCP之SQL_子查詢OracleSQL
- PostgreSQL 查詢當前執行中sql的執行計劃——pg_show_plans模組SQL
- MySQL系列之一條SQL查詢語句的執行過程MySql
- [oracle] 查詢歷史會話、歷史執行計劃Oracle會話
- Oracle總結【SQL細節、多表查詢、分組查詢、分頁】OracleSQL
- MySql/Oracle和SQL Server的分頁查MySqlOracleServer
- 多執行緒查詢執行緒
- 【SQL】Oracle查詢轉換之謂詞推送SQLOracle
- Oracle常用抓取SQL-標量子查詢等OracleSQL
- Oracle 11G 閃回技術 閃回版本查詢和閃回事務查詢Oracle