Exzilla.net
Contact
Home -> Articles -> How to create a SQL Trace file from another session
 
Features
Forums
Files
Blogs
How to create a SQL Trace file from another session
Dec 10, 1999
Spidix
Author's Bio | E-Mail
Copyright (C) 2001 exzilla.net

ขั้นตอนอย่างง่ายในการสร้าง trace file จาก Session อื่น

PURPOSE
แสดงการสร้าง Trace file จาก session อื่น เพื่อต้องการ สร้าง trace File กับ process ที่กำลังทำงานอยู่

AUDIENCE
สำหรับ Developer และ Database Administrators ซึ่งต้องการตรวจสอบการทำงานของ Application

HOW TO CREATE A SQL TRACE FILE FROM ANOTHER SESSION
เราต้องมีขั้นตอนใดกันบ้างในการสร้าง Trace file โดยที่ผู้ที่ต้องการสร้าง file นั้นอยู่คนละ session กับ Application ที่ทำงานอยู่

1. เริ่มด้วยใช้คำสั่ง Alter system โดย set timed_statistics =true;

$ sqlplus system/manager@viper

SQL> alter system set timed_statistics=true;

System altered.

SQL>

2. แสดงหมายเลขของ Session (Session ids) ในระบบที่เรากำลังทำงานอยู่ ก่อนที่ Application ที่เราสนใจจะทำการ Connect เข้ามา

SQL>

SQL> select sid,serial#,username from v$session;

SID SERIAL# USERNAME

---------- ---------- ------------------------------

1 1

2 1

3 1

4 1

5 1

6 1

7 3 SYSTEM

7 rows selected.

SQL>

3. ให้ Application ที่เราต้องการตรวจจับทำการ Connect กับ Database ที่เราทำงานอยู่ ในตัวอย่างนี้เราของยกตัวอย่างโดยใช้ sql*plus ในการเปิด Connection

$sqlplus scott/tiger@viper

4. Execute คำสั่ง query เพื่อตรวจสอบ session อีกครั้ง

SQL>

SQL> select sid,serial#,username from v$session;

SID SERIAL# USERNAME

---------- ---------- ------------------------------

1 1

2 1

3 1

4 1

5 1

6 1

7 3 SYSTEM

8 14 SCOTT

8 rows selected.

SQL>

ซึ่งจะเห็นได้ว่ามี user SCOTT ทำการ create session โดยที่มี SID=8 และ SERIAL#=14

** นอกจากวิธีเปรียบเทียบค่า ใน v$session ก่อนและหลังนี้แล้ว ก็ยังมีวิธีอื่น ที่ดูสมเหตุสมผล กว่าในกรณีที่เรารู้ชื่อเครื่อง และ login name ของ Operating System อาจลอง "desc v$session " ดูนะครับมีหลาย column ที่มีประโยชน์ ซึ่งก็ทำให้เรารู้ SID,SERIAL# ของ Session ที่เราต้องการเปิด trace file ด้วยเช่นกัน อย่างเช่น

SQL>

SQL> select sid,serial#,username,machine,terminal from v$session

SID SERIAL# USERNAME MACHINE TERMINAL

---------- ---------- ---------- ------------------------------ ----------

1 1 dec4100.exzilla.net UNKNOWN

2 1 dec4100.exzilla.net UNKNOWN

3 1 dec4100.exzilla.net UNKNOWN

4 1 dec4100.exzilla.net UNKNOWN

5 1 dec4100.exzilla.net UNKNOWN

6 1 dec4100.exzilla.net UNKNOWN

8 14 SCOTT SWDG\FUJU FUJU

9 105 SYSTEM dec4100.exzilla.net ttyp1

8 rows selected.

SQL>

เรา Select ชื่อ column ที่เป็น MACHINE และ TERMINAL เพิ่มก็จะทำให้เราหา SID,SERIAL# ของ Session ที่เราต้องการได้ง่ายขึ้น ซึ่งจากตัวอย่าง เราจะรู้ว่า มีการ login ด้วย user ชื่อ SCOTT จากเครื่อง ชื่อ SWDG\FUJU, TERMINAL ชื่อ และมีค่า SID=8,SERIAL#=21

5. และเพื่อต้องการสร้าง Trace File ของ ข้อมูลที่เกิดขึ้นใน session ที่เราต้องการ เราจะใช้ se_sql_trace_in_session procedure ซึ่ง defined อยู่ใน DBMS_SYSTEM package. เป็นตัวจัดการ

SQL> exec sys.dbms_system.set_sql_trace_in_session(8,14,true);

PL/SQL procedure successfully completed.

SQL>

6. เริ่ม Execute คำสั่ง จาก application ที่เราต้องการตรวจจับ

SQL> select ename,job,hiredate,dname from emp e,dept d where e.deptno = d.deptno;

7. ค้นหา Trace file ที่เกิดขึ้นใน USER_DUMP_DEST เราอาจตรวจสอบตำแหน่งที่อยู่ของ Trace file ได้โดย

SQL>

SQL> select value from v$parameter where name = 'user_dump_dest'

VALUE

--------------------------------------------------------------------------------

/oracle/OraHome1/admin/viper/udump

SQL>

8. และเพื่อรู้ว่า File ใดเป็น file ที่เกิดขึ้นจากการ trace นั้น เราก็สามารถค้นหาได้โดย

$ cd /oracle/OraHome1/admin/viper/udump

$ pwd

/oracle/OraHome1/admin/viper/udump

$ grep 8.14 *

ora_855.trc:*** 2001-05-16 23:48:14.768

ora_855.trc:*** SESSION ID:(8.14) 2001-05-16 23:48:14.766

$

9. ยุติการ generation trace file

การยุติการสร้าง trace file สามารถทำได้โดย การ kill session นั้นออกไป หรือ

SQL> exec sys.dbms_system.set_sql_trace_in_session(8,14,false);

PL/SQL procedure successfully completed.

SQL>

10. เพื่อให้ trace file ที่เกิดขึ้นเป็น Format ที่เราอ่านรู้เรื่องและต้องการดู execution plan ก็ควรใช้ tkprof ในการแปลง file

$ tkprof ora_855.trc /tmp/out.txt explain=scott/tiger@viper

ซึ่งก็จะได้ /tmp/out.txt ที่แสดง execution plan ของ instructions ของ application ที่เราสนใจอยู่

Sample output file from tkprof command

select ename,job,hiredate,dname

from

emp e,dept d where e.deptno = d.deptno

call count cpu elapsed disk query current rows

------- ------ -------- ---------- ---------- ---------- ---------- ----------

Parse 1 0.00 0.04 0 0 0 0

Execute 1 0.00 0.00 0 0 0 0

Fetch 2 0.00 0.01 0 2 8 14

------- ------ -------- ---------- ---------- ---------- ---------- ----------

total 4 0.00 0.05 0 2 8 14

Misses in library cache during parse: 1

Optimizer goal: CHOOSE

Parsing user id: 20 (SCOTT)

Rows Execution Plan

------- ---------------------------------------------------

0 SELECT STATEMENT GOAL: CHOOSE

0 MERGE JOIN

0 SORT (JOIN)

0 TABLE ACCESS (FULL) OF 'DEPT'

0 SORT (JOIN)

0 TABLE ACCESS (FULL) OF 'EMP'

Reference:
[1] Michele Cyran. Designing and Tuning for Performance Release 2 (8.1.6), United State: Oracle Corporation,December 1997

 
 
{exzilla.net -- e-development QuickStart --}



Copyright (c) 2001-2005 - Exzilla.net -  All Rights Reserved.
Contact Us | Privacy Policy | Terms & Conditions