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實際執行計劃
1、 查看最近執行的SQL語句
select/*recentsql*/s.SQL_ID,s.CHILD_NUMBER,s.HASH_VALUE,s.ADDRESS,s.EXECUTIONS,s.SQL_TEXT
fromv$sqls
wheres.PARSING_USER_ID=(
selectu.user_idfromall_usersu
whereu.username='YH_TEST'
)ands.COMMAND_TYPEin(2,3,6,7,189)
anpper(s.SQL_TEXT)notlikeupper('%recentsql%')
select/*+gather_plan_statistics*//*plan_statistics1*/name,salaryfromtestwherename='t1';
2、使用dbms_xplan.display_cursor查看執行計劃,它的用法見筆記 《dbms_xplan.display_cursor的用法》,
注意了:若dbms_xplan.display_cursor要以ALLSTATS LAST格式輸出的話,/*+gather_plan_statistics*/這個提示信息放到查詢語句中是必須的。
『叄』 如何查看oracle某用戶近期執行的SQL
oracle 查詢最近執行過的 SQL語句
select sql_text,last_load_time from v$sql order by last_load_time desc;SELECT sql_text, last_load_time FROM v$sql WHERE last_load_time IS NOT NULL and sql_text like 'select%' ORDER BY last_load_time DESC;SELECT sql_text, last_load_time FROM v$sql WHERE last_load_time IS NOT NULL and sql_text like 'update%' ORDER BY last_load_time DESC;SELECT sql_text, last_load_time FROM v$sql WHERE last_load_time IS NOT NULL and last_load_time like' 14-06-09%' ORDER BY last_load_time DESC;---正在執行的
select a.username, a.sid,b.SQL_TEXT, b.SQL_FULLTEXTfrom v$session a, v$sqlarea b
where a.sql_address = b.address
---執行過的
select b.SQL_TEXT,b.FIRST_LOAD_TIME,b.SQL_FULLTEXTfrom 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_TEXTfrom 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 descselect address, sql_text, piece
from v$session, v$sqltext
where address = sql_address
-- and machine = < you machine name >
order by address, piece
查找前十條性能差的sql.
SELECT * FROM (select PARSING_USER_ID,EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,sql_text FROM v$sqlareaorder 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
『肆』 oracle執行歷史查不到執行sql
沒有開啟SQL跟蹤功能。
1、在Oracle中,如果需要查看SQL執行歷史,需要使用SQL跟蹤功能。如果沒有開啟 SQL 跟蹤功能,執行SQL的歷史記錄將無法被記錄下來。
2、執行SQL的歷史記錄已經氏洞過期,在Oracle中,可以配置歷史記錄保留時間,如果歷史記錄保留肢消時間已過,那麼執行SQL的歷史記錄將被刪除。您可以檢查歷史記錄保留時間是否已過期。
3、執行SQL的歷核知歷史記錄被清除或刪除,在Oracle中,管理員可以手動清除或刪除執行SQL的歷史記錄,如果執行SQL的歷史記錄被清除或刪除,那麼您將無法查看到相關的歷史記錄。
『伍』 求教高手:在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 cWHERE 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 執行的sqlFROM V$SESSION ALEFT JOIN V$SQL B ON A.SQL_ADDRESS = B.ADDRESS AND A.SQL_HASH_VALUE = B.HASH_VALUEORDER BY b.cpu_time DESC
『陸』 oracle怎麼查看sql執行計劃
一般需要藉助第三方工具來查看執行計劃。
工具:PL/SQL
步驟:
1、打開第三方工具PL/SQL,並登錄到指定資料庫。
『柒』 tail查看oracle執行過的sql
Oracle 最近執⾏頃鋒過逗漏的sql語句:
1. SELECT sql_text, last_load_time
2. FROM v$sql
3. WHERE last_load_time IS NOT NULL
4. ORDER BY last_load_time DESC
其它
SELECT sql_text,last_load_time FROM v$sql order by last_load_time desc;
SELECT sql_text, last_load_time FROM v$sql WHERE last_load_time IS NOT NULL and sql_text like '山乎爛select%' ORDER BY last_load_time DESC;