oraclesql跟蹤
⑴ oracle sql跟蹤,如何跟蹤某個用戶發出的所有SQL
需要打開oracle審計功能才能記錄,並且消耗一定性能。
簡單打開審計如下
1、設置參數
alter system set audit_trail=db scope=spfile;
2、重啟資料庫
3、打開相應的審計(審計選項很多),如,對用戶test對表操作的審計
audit table by test;
4、以dba查看審計記錄
select * from dba_audit_trail;
⑵ Oracle中有沒有什麼工具 可以像MSSQL的Profiler工具一樣實時跟蹤被執行的SQL語句
trace工具,如果你想在當前session 會話(sqlplus)當中看的換,直接執行 set autotrace on,再執行你的sql就可以看到執行計劃,也可以保存成trc文件,使用tkprof工具轉義後查看。
⑶ oracle怎樣開啟sql跟蹤
一.在系統級別上設置sql跟蹤
該方法優點:可以跟蹤所有的oracle的後台進程所執行的sql,包括系統後台進程和用戶進程,並且可以跟蹤所有的操作
缺點:跟蹤所有的後台進程,跟蹤信息量比較大
1.在sqlplus中以sys/ as sysdba身份登陸到資料庫。
2.打開跟蹤,在sqlplus中輸入alter sysetem set events '10046 trace name context forever,level &level';
(其中&level可以輸入1,4,8,12三個級別,不同的級別含有不同級別的信息)
3.然後到ArcMap或ArcCatalog中進行你想跟蹤的操作
4.關閉跟蹤,在sqlplus中輸入alter systemm set events '10046 trace name context off';
5.查找你所跟蹤的session的ID
A 修改時間格式:alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS';
B.對使用sde服務的輸入:select sid,logon_time from v$session where username=&username and program='gsrvr.exe';
C.對直連這種方式輸入:select sid,logon_time from v$session where username=&username and program='ArcCatalog';
select sid,logon_time from v$session where username=&username and program='ArcMap';
(其中&username是程序登陸到資料庫的用戶名,如果返回多個結果,在根據登陸的時間確定具體的sid值)
6.執行以下的sql語句
SELECT d.VALUE
|| '/'
|| LOWER (RTRIM (i.INSTANCE, CHR (0)))
|| '_ora_'
|| p.spid
|| '.trc' trace_file_name
FROM (SELECT p.spid
FROM v$mystat m, v$session s, v$process p
WHERE m.statistic# = 1 AND s.SID = &SID 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
在輸入sid後,即得到後台的跟蹤文件。
二. 在session級別上設置跟蹤
該方法只適用於跟蹤登陸數據後所進行的一系列的操作,比如跟蹤在ArcCatalog中創建一個Dataset,FeatureClass等的操作
1.在sqlplus中以sys / as sysdba身份登陸到資料庫
2.查找你所要跟蹤的session的sid和serial#
A 修改時間格式:alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS';
B.對使用sde服務的輸入:select sid,serial#,logon_time from v$session where username=&username and program='gsrvr.exe';
C.對直連這種方式輸入:select sid,serial#,logon_time from v$session where username=&username and program='ArcCatalog';
select sid,serial#,logon_time from v$session where username=&username and program='ArcMap';
(其中&username是程序登陸到資料庫的用戶名,如果返回多個結果,在根據登陸的時間確定具體的sid和serial#的值)
3.開始跟蹤,輸入exec dbms_support.start_trace_in_session(&sid,&serial#,true,true).(如果系統沒有安裝dbms_support包,可以執行$ORACLE_HOME\rdbms\admin\dbmssupp.sql進行安裝)
4.然後到ArcMap或ArcCatalog中進行你想跟蹤的操作
5.結束跟蹤exec dbms_support.stop_trace_in_session(&sid,&serial#);
6.執行以下的sql語句
SELECT d.VALUE
|| '/'
|| LOWER (RTRIM (i.INSTANCE, CHR (0)))
|| '_ora_'
|| p.spid
|| '.trc' trace_file_name
FROM (SELECT p.spid
FROM v$mystat m, v$session s, v$process p
WHERE m.statistic# = 1 AND s.SID = &SID 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
在輸入sid後,即得到後台的跟蹤文件。
三. 在Aix系統下跟蹤消耗內存的session的辦法
1.在Aix系統上執行export TERM=vt100
2.執行topas命令,確定最佔cpu資源的process的進程號
3,然後利用select a.sid,b.serial# from v$session a,v$process b where a.paddr=b.addr and b.spid=&spid;
4.確定sid和serial#後利用二方法進行跟蹤。
⑷ 如何實時跟蹤oracle的sql語句
如何實時跟蹤oracle的sql語句
這個要開啟oracle的audit功能。
select * from DBA_AUDIT_OBJECT
⑸ oracle怎樣跟蹤一條sql語句的執行過程
需要建立一張表來記錄
explain plan SET statement_id='name' FOR (這里是你要調試的語句 )
SELECT
A.OPERATION,
OPTIONS,
OBJECT_NAME,
OBJECT_TYPE,
ID,
PARENT_ID
FROM
PLAN_TABLE A
WHERE
STATEMENT_ID='name'
ORDER BY
Id;
ID 'name'是一個標識,你可以自己取,欄位有很多個,以下是各個欄位的解釋(可能格式不對,你可以復制後看):
欄位名 欄位類型 含義
STATEMENT_ID VARCHAR2(30) explain PLAN 語句中所指定的最優STATEMENT_ID 參數值, 如果在EXPLAN PLAN語句中沒有使用SET STATEMENT_ID,那麼此值會被設為NULL。
REMARKS VARCHAR2(80) 與被解釋規劃的各步驟相關聯的注釋最長可達80 位元組
OPERATION VARCHAR2(30) 各步驟所執行內部操作的名稱在某條語句所產生的第一行中該列的可能取值如下DELETE STATEMENT INSERT STATEMENT SELECT STATEMENT UPDATE STATEMENT
OPTIONS VARCHAR2(30) 對OPERATION 列中所描述操作的變種
OBJECT_NODE VARCHAR2(128) 用於訪問對象的資料庫鏈接database link 的名稱對於使用並行執行的本地查詢該列能夠描述操作中輸出的次序
OBJECT_OWNER VARCHAR2(30) 對於包含有表或索引的架構schema 給出其所有者的名稱
OBJECT_NAME VARCHAR2(30) 表或索引的名稱
OBJECT_INSTANCE INTEGER 根據對象出現在原始original 語句中的次序所給出的相應次序編號就原始的語句文本而論其處理順序為自左至右自外向內景象擴張view
OBJECT_TYPE VARCHAR2(30) 用於提供對象描述性信息的修飾符例如索引的NON-UNIQUE
OPTIMIZER VARCHAR2(255) 當前優化程序的模式
ID INTEGER 分配給執行規劃各步驟的編號
PARENT_ID INTEGER 對ID 步驟的輸出進行操作的下一個執行步驟的ID
POSITION INTEGER 對於具有相同PARENT_ID 的步驟其相應的處理次序
COST INTEGER 根據優化程序的基於開銷的方法所估計出的操作開銷值對於使用基於規則方法的語句該列為空該列值沒有特定的測量單位它只是一個用於比較執行規劃開銷大小的權重值
CARDINALITY INTEGER 根據基於開銷的方法對操作所訪問行數的估計值
BYTES INTEGER 根據基於開銷的方法對操作所訪問位元組的估計
=============================================
你按照我說的做,後面用
SELECT
*
FROM
PLAN_TABLE A
WHERE
STATEMENT_ID='name'
結果已經很清楚了,全部滿足你的要求。
各列的具體含義上面已經給出。
⑹ Oracle 資料庫如何跟蹤SQL語句
沒用,只想從後台資料庫看對這個資料庫執行的sql問題補充:unika_ly12 寫道 那你直接查詢 v$sqltext 和 v$session 好了 首先,你要以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兩個表通過關聯的方式查詢得到。當然你也可以簡單的查看一下哪個trc文件的日期最新,哪個文件就是你要的結果了。 首先,你要以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兩個表通過關聯的方式查詢得到。當然你也可以簡單的查看一下哪個trc文件的日期最新,哪個文件就是你要的結果了。
⑺ 請問什麼工具可以跟蹤ORACLE的SQL執行語句
還是自己來回答下吧~~在網上找了一個軟體~TOAD FOR ORACLE~~可以跟蹤SQL~其實sql developer也是可以跟蹤的~ 查看原帖>>
採納哦
⑻ oracle 怎麼跟蹤有問題session 的sql
selectsid,v$session.serial#,v$process.spid,v$session.username,last_call_et,status,LOCKWAIT,machine,logon_time,sql_textfromv$session,v$process,v$sqlareawherepaddr=addrandsql_hash_value=hash_valueandv$session.usernameisnotnullandsql_textnotlike'%session%'andstatus='ACTIVE'orderbylast_call_etdesc;
查詢當前正在執行的sql及執行用時,如果對性能優化查看sql效率要set autotrace on;然後執行sql查看執行計劃。
⑼ 如何跟蹤oracle存儲過程運行了哪些 sql
在sqlplus
下執行
alter
session
set
sql_trace=true;
alter
session
set
tracefile_identifier='AAAA';
call
存儲過程
名;
alter
session
set
sql_trace=false;
然後到oracle伺服器的安裝目錄下去找文件名稱含AAAA的文件,那裡頭有具體調用存儲過程時的執行過程。應該有你要的東西。
⑽ 如何在Oracle資料庫10g中跟蹤SQL
1. 啟用 sql_trace 跟蹤當前 session
開啟會話跟蹤:alter session set sql_trace=true;
關閉會話跟蹤:alter session set sql_trace=false;
2. 啟用 10046 事件跟蹤全局 session
這將會對整個系統的性能產生嚴重的影響,所以一般不建議開啟。
開啟會話跟蹤:alter system set events 『10046 trace name context forever, level 12』;
關閉會話跟蹤:alter system set events 『10046 trace name context off』;
3. 使用 Oracle 系統包 DBMS_SYSTEM.SET_EV 跟蹤指定 session
開啟會話跟蹤:SQL> exec dbms_system.set_ev(143, 112, 10046, 12, '');
關閉會話跟蹤:SQL> exec dbms_system.set_ev(143, 112, 10046, 0, '');