正在執行的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 >"替換為實際的機器名稱。