查詢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
- 查詢Oracle正在執行的SQL語句OracleSQL
- 查詢某個會話正在執行的事務會話
- oracle 正在執行的物件查詢Oracle物件
- 查詢正在執行的SQL語句SQL
- Oracle 查詢某個session正在執行的sql語句OracleSessionSQL
- SQL Server簡潔查詢正在執行SQL(等待事件)SQLServer事件
- 查詢Oracle正在執行的sql語句及執行該語句的使用者OracleSQL
- 查詢當前正在執行的SQL語句並KILLSQL
- [轉帖]SQL Server簡潔查詢正在執行的程序SQLServer
- 查詢正在執行的sql語句及該語句執行的時間SQL
- pgrep查詢正在執行的程式ID
- Oracle 查詢事務數Oracle
- oracle查詢sql執行耗時、執行時間、sql_idOracleSQL
- Oracle - 執行過的SQL、正在執行的SQL、消耗資源最多的SQLOracleSQL
- 列舉mysql正在執行中的全部事務MySql
- sql查詢是如何執行的?SQL
- 查詢當前正在執行的job的情況
- EBS(ERP)根據請求號(request ID)查詢正在執行的sqlSQL
- Oracle檢視正在執行的SQL以及執行計劃分析OracleSQL
- 統計Oracle 查詢事務數的方法Oracle
- 查詢執行慢的SQL語句SQL
- 一條查詢sql的執行之路SQL
- Oracle 優化器與sql查詢執行順序Oracle優化SQL
- DB常用指令碼 - 查詢正在執行的active session及對應sql ,等待事件指令碼SessionSQL事件
- MySQL 查詢處理 SQL查詢執行順序MySql
- 檢視正在執行的SQLSQL
- SQL Server 查詢歷史執行的SQL語句SQLServer
- Laravel 框架查詢執行的 SQL 語句Laravel框架SQL
- 查詢SQLSERVER執行過的SQL記錄SQLServer
- Oracle 最佳化器與sql查詢執行順序OracleSQL
- 查詢有多少JOB正在執行,程式被hang住
- Oracle中SQL語句執行效率的查詢與解決 (3)OracleSQL
- Oracle中SQL語句執行效率的查詢與解決 (2)OracleSQL
- Oracle中SQL語句執行效率的查詢與解決 (1)OracleSQL
- SQL查詢的:子查詢和多表查詢SQL
- Phoenix:在HBase上執行SQL查詢SQL
- 查詢sql語句執行次數SQL