1. 在oracle中怎麼查看在某一段時間內執行的sql語句所用的時間
dbms_system.SET_SQL_TRACE_IN_SESSION
tkprof trace文件 解析後文件 sys=no
--注意此包應在SYS用戶下執行
2. 查看oracle資料庫最近執行了哪些sql語句
1、修改日期顯襪局示格式
alter session set nls_date_format=』YYYY-MM-DD HH24:MI:SS』;
2、哪個主機最近執行的sql語句:
SELECT b.sql_text,a.machine,a.username, a.mole,c.sofar / totalwork * 100,
c.elapsed_seconds,c.time_remaining
FROM v$session a, v$sqlarea b, v$session_longops c
WHERE a.sql_hash_value = b.hash_value(+) AND a.SID = c.SID(+)
AND a.serial# = c.serial#(+)
--AND a.sid=139
3、最近的sql語句
SELECT sql_text, last_load_time,LAST_ACTIVE_TIME FROM v$sql WHERE LAST_LOAD_TIME > trunc(sysdate) and last_load_time IS NOT NULL ORDER BY last_load_time DESC;
4、正在執告游讓行的磨仿sql
SELECT a.sid, a.serial#, b.sql_text
FROM v$session a, v$sqltext b
WHERE a.sql_address = b.address
--AND a.sid = <...>
ORDER BY b.piece
5、推薦你用lab128監測軟體,一目瞭然。
3. oracle如何查看後台正在運行著的sql語句
用以頃搏下的sql可以查詢出當前session中胡皮正在運行雀做祥的sql信息:x0dx0a SELECT S.MODULE, SQL_TEXT, SN.OSUSER, SN.MACHINE, S.EXECUTIONSx0dx0a FROM SYS.V_$SQL S, SYS.ALL_USERS U, V$SESSION SNx0dx0a WHERE S.PARSING_USER_ID = U.USER_IDx0dx0a AND UPPER(U.USERNAME) IN ('USERNAME')x0dx0a AND (UPPER(S.MODULE) = 'APP.EXE')x0dx0a AND SN.sql_hash_value = S.hash_valuex0dx0a AND SN.sql_address = S.addressx0dx0a ORDER BY S.LAST_LOAD_TIME
4. oracle怎樣查看正在執行的存儲過程
1、在存儲過程中加一個輸出參數,執行完存儲過程後,判斷輸出參數的值;
2、查看存儲過程中沒野處理數據後,你要的效果達到沒有。
5. 查看oracle資料庫最近執行了哪些sql語句
-- 查看oracle資料庫最近執行了哪些sql語句搏戚SELECT b.sql_text, --content of SQL a.machine, --which machine run this code a.username, a.mole, -- the method to run this SQL c.sofar / totalwork * 100, --conplete percent c.elapsed_seconds, --run time c.time_remaining --remain to run time FROM v$session a, v$sqlarea b, v$session_longops c WHERE a.sql_hash_value = b.hash_value(+) AND a.SID = c.SID(+) AND a.serial# = c.serial#(+) --AND a.sid=139-- oracle 最棗棗近執行過的sql語句:SELECT sql_text, last_load_time FROM v$sql WHERE last_load_time IS NOT NULLORDER BY last_load_time DESC----監控基岩陵concurrent 正在執行的sql --SELECT a.sid, a.serial#, b.sql_text FROM v$session a, v$sqltext b WHERE a.sql_address = b.address --AND a.sid = <...> ORDER BY b.piece
6. 如何查看oracle資料庫中執行了哪些sql語句
一、通過PL/SQL Dev工具
1、直接File->New->Explain Plan Window,在窗口中執行sql可以查看計劃結果。其中,Cost表示cpu的消耗,單位為n%,Cardinality表示執行的行數,等價Rows。
2、先執行 EXPLAIN PLAN FOR select * from tableA where paraA=1,再 select * from table(DBMS_XPLAN.DISPLAY)便可以看到oracle的執行計劃了,看到的結果和1中的一樣,所以使用工具的時候推薦使用1方法。
注意:PL/SQL Dev工具的Command window中不支持set autotrance on的命令。還有使用工具方法查看計劃看到的信息不全,有些時候我們需要sqlplus的支持。
二、通過sqlplus
1.最簡單的辦法
Sql> set autotrace on
Sql> select * from al;
執行完語句後,會顯示explain plan 與 統計信息。
這個語句的優點就是它的缺點,這樣在用該方法查看執行時間較長的sql語句時,需要等待該語句執行成功後,才返回執行計劃,使優化的周期大大增長。如果不想執行語句而只是想得到執行計劃可以採用:
Sql> set autotrace traceonly
這樣,就只會列出執行計劃,而不會真正的執行語句,大大減少了優化時間。雖然也列出了統計信息,但是因為沒有執行語句,所以該統計信息沒有用處,如果執行該語句時遇到錯誤,解決方法為:
(1)在要分析的用戶下:
Sqlplus > @ ?
dbmsadminutlxplan.sql
(2) 用sys用戶登陸
Sqlplus > @ ?sqlplusadminplustrce.sql
Sqlplus > grant plustrace to user_name;
- - user_name是上面所說的分析用戶
2.用explain plan命令
(1) sqlplus > explain plan for select * from testdb.myuser
(2) sqlplus > select * from table(dbms_xplan.display);
上面這2種方法只能為在本會話中正在運行的語句產生執行計劃,即我們需要已經知道了哪條語句運行的效率很差,我們是有目的只對這條SQL語句去優化。其實,在很多情況下,我們只會聽一個客戶抱怨說現在系統運行很慢,而我們不知道是哪個SQL引起的。此時有許多現成的語句可以找出耗費資源比較多的語句,如:
SELECT ADDRESS, substr(SQL_TEXT,1,20) Text, buffer_gets, executions,
buffer_gets/executions AVG FROM v$sqlarea
WHERE executions>0 AND buffer_gets > 100000 ORDER BY 5;
ADDRESS TEXT BUFFER_GETS EXECUTIONS AVG
-------- ---------------------------------------- ----------- ---------- ------------------------------------------------------------
66D83D64 select t.name, (sel 421531 60104 7.01336017
66D9E8AC select t.schema, t.n 1141739 2732 417.913250
66B82BCC select s.synonym_nam 441261 6 73543.5
從而對找出的語句進行進一步優化。當然我們還可以為一個正在運行的會話中運行的所有SQL語句生成執行計劃,這需要對該會話進行跟蹤,產生trace文件,然後對該文件用tkprof程序格式化一下,這種得到執行計劃的方式很有用,因為它包含其它額外信息,如SQL語句執行的每個階段(如Parse、Execute、Fetch)分別耗費的各個資源情況(如CPU、DISK、elapsed等)。
3、啟用SQL_TRACE跟蹤所有後台進程活動:
全局參數設置: .OracleHome/admin/SID/pfile中指定: SQL_TRACE = true (10g)
當前session中設置:
SQL> alter session set SQL_TRACE=true;
SQL> select * from al;
SQL> alter session set SQL_TRACE=false;
對其他用戶進行跟蹤設置:
SQL> select sid,serial#,username from v$session where username='XXX';
SID SERIAL# USERNAME
------ ---------- ------------------
127 31923 A
128 54521 B
開啟跟蹤:SQL> exec dbms_system.set_SQL_TRACE_in_session(127,31923,true);
關閉跟蹤:SQL> exec dbms_system.set_SQL_TRACE_in_session(127,31923,false);
然後使用oracle自帶的tkprof命令行工具格式化跟蹤文件。
4、使用10046事件進行查詢:
10046事件級別:
Lv1 - 啟用標準的SQL_TRACE功能,等價於SQL_TRACE
Lv4 - Level 1 + 綁定值(bind values)
Lv8 - Level 1 + 等待事件跟蹤
Lv12 - Level 1 + Level 4 + Level 8
全局設定:
OracleHome/admin/SID/pfile中指定: EVENT="10046 trace name context forever,level 12"
當前session設定:
開啟:SQL> alter session set events '10046 trace name context forever, level 8';
關閉:SQL> alter session set events '10046 trace name context off';
對其他用戶進行設置:
SQL> select sid,serial#,username from v$session where username='XXX';
SID SERIAL# USERNAME
------ ---------- ------------------
127 31923 A
SQL> exec dbms_system.set_ev(127,31923,10046,8,'A');
5、使用tkprof格式化跟蹤文件: (根據下面SQL語句得到的文件都不存在該目錄下,郁悶啊,懵懂啊...)
一般,一次跟蹤可以分為以下幾步:
1、界定需要跟蹤的目標范圍,並使用適當的命令啟用所需跟蹤。
2、經過一段時間後,停止跟蹤。此時應該產生了一個跟蹤結果文件。
3、找到跟蹤文件,並對其進行格式化,然後閱讀或分析。
--使用一下SQL找到當前session的跟蹤文件:
SELECT d.value|| '/' ||lower(rtrim(i.instance, chr( 0 )))|| '_ora_' ||p.spid|| '.trc' trace_file_namefrom( select p.spid from v$mystat m,v$session s, v$process pwhere m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p,( select t.instance from v$thread t,v$parameter vwhere v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i,( select value from v$parameter where name = 'user_mp_dest' ) d;-- 其它用戶的 session SELECT d.value|| '/' ||lower(rtrim(i.instance, chr( 0 )))|| '_ora_' ||p.spid|| '.trc' trace_file_name from ( select p.spid from v$session s, v$process p where s.sid= '27' and s. SERIAL#= '30' and p.addr = s.paddr) p, ( select t.instance from v$thread t,v$parameter v where v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i, ( select value from v$parameter where name = 'user_mp_dest' ) d;
--查找後使用tkprof命令,將TRACE文件格式為到D盤的explain_format.txt文件中
SQL> $tkprof d:/oracle/admin/FZLGFM/ump/fzlgfm_ora_3468.trc d:/explain_format.txt
文件內容大致如下(看不太懂....懵懂啊.....天啊....神啊.....過幾時就懂了/////////////)
TKPROF: Release 9.2.0.1.0 - Proction on 星期二 4月 20 13:59:20 2010
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Trace file: d:/oracle/admin/FZLGFM/ump/fzlgfm_ora_3468.trc
Sort options: default
********************************************************************************
count = number of times OCI procere was executed
cpu = cpu time in seconds executing
elapsed = elapsed time in seconds executing
disk = number of physical reads of buffers from disk
query = number of buffers gotten for consistent read
current = number of buffers gotten in current mode (usually for update)
rows = number of rows processed by the fetch or execute call********************************************************************************
alter session set events '10046 trace name context forever, level 8'
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 0 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 1 0.00 0.00 0 0 0 0
Misses in library cache ring parse: 0
Misses in library cache ring execute: 1
Optimizer goal: CHOOSE
Parsing user id: SYS
7. 有人知道怎麼查看oracle,正在執行的語句嗎
查看資料庫中某用戶冊跡,正在運行什麼SQL 語句?
根據MACHINE、USERNAME 或SID、SERIAL#,連接表V$SESSION 和V$SQLTEXT,州返並可
查出。
SQL*PLUS 語句:
「SELECT SQL_TEXT FROM V$SQL_TEXT T, V$SESSION S WHERE
T.ADDRESS=S.SQL_ADDRESS
AND T.HASH_VALUE=S.SQL_HASH_VALUE
AND S.MACHINE='XXXXX' OR USERNAME='XXXXX' -- 查看某主世肆機名,或用戶名
/」
8. 如何查看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兩個表通過關聯的方式查詢得到。
9. 如何查看oracle某用戶近期執行的SQL
不能查看近期執行的sql,當前執行的可以查看。
10. 求教高手:在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