當前位置:首頁 » 編程語言 » oracle查看sqlid
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

oracle查看sqlid

發布時間: 2022-07-28 03:36:24

『壹』 oracle里怎麼對sql查詢的日誌進行查看

oracle里對sql查詢的日誌進行查看步驟如下:

1、Oracle日誌的路徑的查看。

『貳』 oracle查看執行過哪些存儲過程

selectt.sql_id,
t.sql_text,
s.plan_hash_value,
s.optimizer_cost,
s.executions_total,
s.elapsed_time_total,
s.disk_reads_total,
s.buffer_gets_total
fromDBA_HIST_SQLSTATs,DBA_HIST_SQLTEXTt
wheres.sql_id=t.sql_id
andt.sql_textlike'%存儲過程名稱%';

沒有想到其他好辦法,確實不太好查了,把存儲過程當作SQL來查找吧。

『叄』 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

『肆』 如何查看Oracle SQL綁定變數

查看Oracle SQL綁定變數方法如下:
alter session set nls_date_format = 'yyyy-mm-dd,hh24:mi:ss';
set linesize 400
col sql_Id format a20
col name format a20
col datatype_string format a14
col value_string format a20
--這個sql從內存中讀取綁定變數值信息,若是不在內存中,則使用下一個sql
select
sql_id,name, datatype_string, last_captured,value_string from
v$sql_bind_capture where sql_id='dxfcacn4t4ppw' order by
LAST_CAPTURED,POSITION;
--這個sql從awr中讀取綁定變數值信息
select
instance_number, sql_id,name, datatype_string,
last_captured,value_string from dba_hist_sqlbind where
sql_id='fahv8x6ngrb50'order by LAST_CAPTURED,POSITION;

『伍』 如何查看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如何查詢當前連接用戶的詳細信息

可直接在v$session視圖中查詢。

語句如:

select*fromv$sessionwhereusername='用戶名';

其中用戶名應為英文大寫字母。如圖:

以下為視圖各欄位說明:

SADDR - session address
SID - session identifier 常用於鏈接其他列
SERIAL# - SID有可能會重復,當兩個session的SID重復時,SERIAL#用來區別session(說白了某個session是由sid和serial#這兩個值確定的)
AUDSID - audit session id。可以通過audsid查詢當前session的sid。select sid from v$session where audsid=userenv('sessionid');
PADDR - process address,關聯v$process的addr欄位,通過這個可以查詢到進程對應的session
USER# - 同於dba_users中的user_id,Oracle內部進程user#為0.
USERNAME - session's username。等於dba_users中的username。Oracle內部進程的username為空。
COMMAND - session正在執行的sql id,1代表create table,3代表select。
TADDR - 當前的transaction address。可以用來關聯v$transaction中的addr欄位。
LOCKWAIT - 可以通過這個欄位查詢出當前正在等待的鎖的相關信息。sid + lockwait與v$loc中的sid + kaddr相對應。
STATUS - 用來判斷session狀態。Active:正執行SQL語句。inactive:等待操作。killed:被標注為殺死。
SERVER - 服務類型。
SCHEMA# - schema user id。Oracle內部進程的schema#為0。
SCHEMANAME - schema username。Oracle內部進程的為sys。
OSUSER - 客戶端操作系統用戶名。
PROCESS - 客戶端process id。
MACHINE - 客戶端machine name。
TERMINAL - 客戶端執行的terminal name。
PROGRAM - 客戶端應用程序。比如ORACLE.EXE或sqlplus.exe
TYPE - session類型。
SQL_ADDRESS,SQL_HASH_VALUE,SQL_ID,SQL_CHILD_NUMBER - session正在執行的sql狀態,和v$sql中的address,hash_value,sql_id,child_number對應。
PREV_SQL_ADDR,PREV_HASH_VALUE,PREV_SQL_ID,PREV_CHILD_NUMBER - 上一次執行的sql狀態。
MODULE,MODULE_HASH,ACTION,ACTION_HASH,CLIENT_INFO - 應用通過DBMS_APPLICATION_INFO設置的一些信息。
FIXED_TABLE_SEQUENCE - 當session完成一個user call後就會增加的一個數值,也就是說,如果session掛起,它就不會增加。因此可以根據這個欄位來監控某個時間點以來的session性能情況。例如,一個小時前某個session的此欄位數值為10000,而現在是20000,則表明一個小時內其user call較頻繁,可以重點關注此session的performance statistics。
ROW_WAIT_OBJ# - 被鎖定行所在table的object_id。和dba_object中的object_id關聯可以得到被鎖定的table name。
ROW_WAIT_FILE# - 被鎖定行所在的datafile id。和v$datafile中的file#關聯可以得到datafile name。
ROW_WAIT_BLOCK# - 同上,對應塊。
ROW_WAIT_ROW# - session當前正在等待的被鎖定的行。
LOGON_TIME - session logon time.

『柒』 oracle如何查看當前有哪些用戶連接到資料庫

可直接在 v$session視圖中查詢。
語句如:
select * from v$session where username='用戶名';

其中用戶名應為英文大寫字母。如圖:

以下為視圖各欄位說明:
SADDR - session address
SID - session identifier 常用於鏈接其他列
SERIAL# - SID有可能會重復,當兩個session的SID重復時,SERIAL#用來區別session(說白了某個session是由sid和serial#這兩個值確定的)
AUDSID - audit session id。可以通過audsid查詢當前session的sid。select sid from v$session where audsid=userenv('sessionid');
PADDR - process address,關聯v$process的addr欄位,通過這個可以查詢到進程對應的session
USER# - 同於dba_users中的user_id,Oracle內部進程user#為0.
USERNAME - session's username。等於dba_users中的username。Oracle內部進程的username為空。
COMMAND - session正在執行的sql id,1代表create table,3代表select。
TADDR - 當前的transaction address。可以用來關聯v$transaction中的addr欄位。
LOCKWAIT - 可以通過這個欄位查詢出當前正在等待的鎖的相關信息。sid + lockwait與v$loc中的sid + kaddr相對應。
STATUS - 用來判斷session狀態。Active:正執行SQL語句。inactive:等待操作。killed:被標注為殺死。
SERVER - 服務類型。
SCHEMA# - schema user id。Oracle內部進程的schema#為0。
SCHEMANAME - schema username。Oracle內部進程的為sys。
OSUSER - 客戶端操作系統用戶名。
PROCESS - 客戶端process id。
MACHINE - 客戶端machine name。
TERMINAL - 客戶端執行的terminal name。
PROGRAM - 客戶端應用程序。比如ORACLE.EXE或sqlplus.exe
TYPE - session類型。
SQL_ADDRESS,SQL_HASH_VALUE,SQL_ID,SQL_CHILD_NUMBER - session正在執行的sql狀態,和v$sql中的address,hash_value,sql_id,child_number對應。
PREV_SQL_ADDR,PREV_HASH_VALUE,PREV_SQL_ID,PREV_CHILD_NUMBER - 上一次執行的sql狀態。
MODULE,MODULE_HASH,ACTION,ACTION_HASH,CLIENT_INFO - 應用通過DBMS_APPLICATION_INFO設置的一些信息。
FIXED_TABLE_SEQUENCE
- 當session完成一個user
call後就會增加的一個數值,也就是說,如果session掛起,它就不會增加。因此可以根據這個欄位來監控某個時間點以來的session性能情況。例如,一個小時前某個session的此欄位數值為10000,而現在是20000,則表明一個小時內其user
call較頻繁,可以重點關注此session的performance statistics。
ROW_WAIT_OBJ# - 被鎖定行所在table的object_id。和dba_object中的object_id關聯可以得到被鎖定的table name。
ROW_WAIT_FILE# - 被鎖定行所在的datafile id。和v$datafile中的file#關聯可以得到datafile name。
ROW_WAIT_BLOCK# - 同上,對應塊。
ROW_WAIT_ROW# - session當前正在等待的被鎖定的行。
LOGON_TIME - session logon time.

『捌』 oracle 中如何獲得一段SQL的進程ID

執行下列命令語句
sqlplus / as sysdba <<EOF
create tablespace test datafile '/data/test01.dbf' size 10240M;
quit;
EOF

通過ps -ef|grep sqlplus命令得到上面所執行的命令的進程id為:12345
(1)關於v$process
執行下面的SQL是查不到相關的信息:
select * from v$process where spid='12345';
因為這個spid欄位對應的並不是我們用ps命令從系統中查詢到的進程id,而是這個進程執行的當前SQL的進程id,
也就是上面命令中的「create tablespace test datafile '/data/test01.dbf' size 10240M;」所對應的進程id,如果想
通過用ps命令從系統中查詢到的進程id查看對應的信息,那麼必須使用下面語句:
select spid,sid,process,sql_address from v$session where process='12345'
上面sql中的process就是通過ps查看的進程id,而spid就是裡面的sql語句所對應的進程id。
還可以通過上面的sql_address 查看正在執行的SQL語句內容:
select sql_text from v$sqlarea s,v$session ses where s.address=ses.sql_address and ses.process='12345';

『玖』 oracle 在sql中怎麼獲取id

oracle 在sql中怎麼獲取id
1、對於提交(最後一次操作commit了)的話可以查詢那個提交段
SELECT 列名1,列名2……
FROM 表名 VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE where
VERSIONS_STARTTIME IS NOT null ORDER BY VERSIONS_STARTTIME DESC;
查出來的第一條就是最後改變的數據
2、如果表裡面有序列或固定的排序欄位可按倒排序後取第一條
where rownum<2 order by 排序欄位 desc
3、還有另外一種辦法就是利用ORACLE偽列rowid
select * from tbl t1 where t1.rowid=(select max(rowid) from tbl t2)
4、在redo log中找到對應相關的表的插入語句,但是這樣找到的是sql語句,而不是數據。查redo log得使用log miner工具

『拾』 ORACLE 查看有多個執行計劃的SQL語句

--查看資料庫裡面有多個執行計劃的SQL語句的SQL_ID
SELECT SQL_ID, COUNT(1) AS PLAN_NUM FROM V$SQL GROUP BY SQL_ID HAVING COUNT(1) >=2 ORDER BY 2 DESC ;

--根據具體的SQL_ID查看對應的SQL語句
SELECT * FROM V$SQL WHERE SQL_ID=:SQL_ID;

--查詢SQL所有執行計劃
SELECT * FROM TABLE(SYS.DBMS_XPLAN.DISPLAY_CURSOR('9x4fggs2mzu0m',null));

--查詢SQL的CHILD NUMBER為0的執行計劃
SELECT * FROM TABLE(SYS.DBMS_XPLAN.DISPLAY_CURSOR('9x4fggs2mzu0m',0));

--查詢SQL的CHILD NUMBER為1的執行計劃
SELECT * FROM TABLE(SYS.DBMS_XPLAN.DISPLAY_CURSOR('9x4fggs2mzu0m',1));

--如果是PL/sql,直接F5就好; sqlplus的話,登陸成功後,先執行set autotrace on,然後在運行sql就可以看到了