Belirli bir oturum için trace başlatılması
Bir session başladıktan sonra trace başlatılma ihtiyacı olduğunda , ya da bir oturumda çalıştırılan sorguların belirlenmesi için DBMS_MONITOR.session_trace_enable prosedürü ile kullanılabilir. Prosedürün kullanımı ve aldığı parametreler aşağıdaki gibidir.
DBMS_MONITOR.SESSION_TRACE_ENABLE( session_id IN BINARY_INTEGER DEFAULT NULL, serial_num IN BINARY_INTEGER DEFAULT NULL, waits IN BOOLEAN DEFAULT TRUE, binds IN BOOLEAN DEFAULT FALSE, plan_stat IN VARCHAR2 DEFAULT NULL);
Session id 1153 olan bir oturum için trace başlatmak için aşağıdaki komut kullanılabilir.
SQL> EXEC DBMS_MONITOR.session_trace_enable(session_id =>1153, waits=>TRUE, binds=>TRUE); PL/SQL procedure successfully completed.
binds=>TRUE şekilnde verilmediği takdir , ilgili session boyunca kullanılan değişkenler yazılmayacaktır. Bu yüzden mutlaka binds=>TRUE şeklinde kullanılmalıdır.
Bu oturumdaki bilgileri hangi dosyaya yazdığını ise aşağıdaki sorgu ile öğrenebiliriz.
SQL> SELECT p.tracefile FROM v$session s JOIN v$process p ON s.paddr = p.addr WHERE s.sid = 1153; TRACEFILE -------------------------------------------------------------------------------- /u01/app/oracle/diag/rdbms/testdb/TESTDB2/trace/TESTDB2_ora_11011484.trc
Trace işlemini kapatmak için DBMS_MONITOR.SESSION_TRACE_DISABLE prosedürünü kullanabiliriz.
DBMS_MONITOR.SESSION_TRACE_DISABLE( session_id IN BINARY_INTEGER DEFAULT NULL, serial_num IN BINARY_INTEGER DEFAULT NULL);
Yukarıdaki örnekte başlattığımız trace işlemini aşağıdaki gibi kapatabiliriz.
SQL> exec DBMS_MONITOR.SESSION_TRACE_DISABLE(session_id =>1153); PL/SQL procedure successfully completed.
Trace dosyasının içeriği aşağıdaki gibi olacaktır.
Trace file /u01/app/oracle/diag/rdbms/testdb/TESTDB2/trace/TESTDB2_ora_11011484.trc Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1 System name: AIX Node name: oradb2 Release: 1 Version: 7 Machine: 00F745F54C00 Instance name: TESTDB2 Redo thread mounted by this instance: 2 Oracle process number: 64 Unix process pid: 11011484, image: oracle@oradb2 *** 2018-11-29 17:23:21.648 *** SESSION ID:(1153.50309) 2018-11-29 17:23:21.648 *** CLIENT ID:() 2018-11-29 17:23:21.648 *** SERVICE NAME:(TESTDB) 2018-11-29 17:23:21.648 *** MODULE NAME:(TOAD 13.0.0.80) 2018-11-29 17:23:21.648 *** ACTION NAME:(59930432,284684816,285133360) 2018-11-29 17:23:21.648 CLOSE #4574988368:c=23,e=39,dep=0,type=1,tim=56146470874665 LOBARRTMPFRE: c=9,e=14,p=0,cr=0,cu=0,tim=56146470889817 ===================== PARSING IN CURSOR #4574986224 len=356 dep=0 uid=150 oct=3 lid=150 tim=56146470890334 hv=2159962230 ad='7000104eb336e90' sqlid='dpt20ua0bwu3q' Select schemaname, decode(sql_hash_value, 0, prev_hash_value, sql_hash_value) hash, decode(sql_hash_value, 0, RawToHex(prev_sql_addr), RawToHex(sql_address)) address , decode(sql_id, null, prev_sql_id, sql_id) sql_id , decode(sql_child_number, null, prev_child_number, sql_child_number) sql_child_number from v$session where sid = :sid END OF STMT PARSE #4574986224:c=290,e=475,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=0,tim=56146470890333 ===================== PARSING IN CURSOR #4577893528 len=37 dep=1 uid=0 oct=3 lid=0 tim=56146470891198 hv=1398610540 ad='7000104e38da7b8' sqlid='grwydz59pu6mc' select text from view$ where rowid=:1 END OF STMT PARSE #4577893528:c=315,e=520,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=4,plh=0,tim=56146470891198 BINDS #4577893528: Bind#0 oacdty=11 mxl=16(16) mxlc=00 mal=00 scl=00 pre=00 oacflg=18 fl2=0001 frm=00 csi=00 siz=16 off=0 kxsbbbfp=110dd1858 bln=16 avl=16 flg=05