在Oracle中跟蹤後台所執行的SQL語句

2021-05-23 20:26:20 字數 3972 閱讀 2905

在oracle中可以跟蹤後台所執行的sql,具體有以下兩種設定方法:

在實際排查問題的過程中,尤其是在前端應用已經報出ora錯誤的時候用此方法非常奏效,在前幾章排查問題的過程中我也多次使用了該方法。以下是設定跟蹤的方法。

一.在系統級別上設定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語句

在輸入sid後,即得到後台的跟蹤檔案。

1:  

select d.value

2:         || '/'
3:         || lower (rtrim (i.instance, chr (0)))
4:         || '_ora_'
5:         || p.spid
6:         || '.trc' trace_file_name
7:  

from (select p.spid

8:  

from v$mystat m, v$session s, v$process p

9:  

where m.statistic# = 1 and s.sid = &sid and p.addr = s.paddr) p,

10:         (select t.instance
11:  

from v$thread t, v$parameter v

12:  

where v.name = 'thread'

13:  

and (v.value = 0 or t.thread# = to_number (v.value))) i,

14:         (select

value

15:  

from v$parameter

16:  

where name = 'user_dump_dest') d

二. 在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語句

在輸入sid後,即得到後台的跟蹤檔案。

1:  

select d.value

2:         || '/'
3:         || lower (rtrim (i.instance, chr (0)))
4:         || '_ora_'
5:         || p.spid
6:         || '.trc' trace_file_name
7:  

from (select p.spid

8:  

from v$mystat m, v$session s, v$process p

9:  

where m.statistic# = 1 and s.sid = &sid and p.addr = s.paddr) p,

10:         (select t.instance
11:  

from v$thread t, v$parameter v

12:  

where v.name = 'thread'

13:  

and (v.value = 0 or t.thread# = to_number (v.value))) i,

14:         (select

value

15:  

from v$parameter

16:  

where name = 'user_dump_dest') d

三. 在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 10g中跟蹤SQL

如何在oracle 10g中跟蹤sql 在具有許多活躍使用者的繁忙生產環境中,跟蹤sql會話是費時且十分複雜的,因為在任何使用連線池的多層系統中處理sql語句可能要涉及多個程序,或者甚至是不 同的例項。利用oracle資料庫10g,oralce通過乙個新的內建軟體包dbms monitor合理化了s...

程序在Linux後台執行

在linux中,如果要讓程序在後台執行,一般情況下,我們在命令後面加上 即可,實際上,這樣是將命令放入到乙個作業佇列中了 test.sh 1 17208 jobs l 1 17208 running test.sh 對於已經在前台執行的命令,也可以重新放到後台執行,首先按ctrl z暫停已經執行的程...

springboot 在linux後台執行的方法

首先需要進到自己springboot專案的根目錄,然後執行如下linux命令 nohup j a jar 自己的springboot專案.jar 日誌檔名.log 2 1 命令詳解 nohup 不結束通話地執行命令,退出帳戶之後繼續執行相應的程序。日誌檔名.log 是nohup把comm程式設計客棧...