今天在学习oracle9i/10g编程艺术--深入数据库体系结构时。学习到了跟踪文件一节。
一:得到跟踪文件名称----跟踪文件名称为:路径+ora_sid_pid.trc
其中路径的值为:udump路径,对应参数:user_dump_dest; 使用语句show parameter user_dump_dest可以得到
SID表示oracle数据库的SID
PID:表示当前连接对应的oracle server process进程在linux上面的进程号
在本书中提到可以使用代码来得到跟踪文件的名称
sqlplus>select c.value || '/' || d.instance_name ||
2 '_ora_' || a.spid || '.trc' trace
3 from v$process a, v$session b, v$parameter c, v$instance d
4 where a.addr = b.paddr
5 and b.audsid = userenv('sessionid')
6 and c.name = 'user_dump_dest'
7 /
发现其使用了函数userenv('sessionid'),对此的audsid不是很理解。
实验验证:
实验环境:服务器端:linux Redhat 5+Oracle10g 64bit
客户端:PL/SQL develop
发现如果使用sys用户来连接oracle10g时。在pl/sql中同时打开一个sql windows,一个command windows
发现。多个session的audsid是相同的。但是对应的process id不同
SQL> select saddr,sid,serial#,audsid,paddr,user#,username from v$session;
SADDR SID SERIAL# AUDSID PADDR USER# USERNAME
---------------- ---------- ---------- ---------- ---------------- ---------- ------------------------------
00000000EE27A8E8 145 14959 4294967295 00000000F11CD448 0 SYS
00000000F124A948 146 13105 4294967295 00000000F11CE418 0 SYS
00000000EE27BD20 147 4227 0 00000000F11CCC60 0
00000000EE27D158 149 1 0 00000000F11CDC30 0
00000000F124E5F0 152 4 0 00000000EE1F6978 0
00000000EE280E00 155 1 0 00000000EE1F6190 0
00000000F1252298 158 11063 4294967295 00000000EE1F7160 0 SYS
而当切换登录帐号为普通用户时,得到的结果显示不同的session使用不同的audsid
SQL> select saddr,sid,serial#,audsid,paddr,user#,username from v$session;
SADDR SID SERIAL# AUDSID PADDR USER# USERNAME
---------------- ---------- ---------- ---------- ---------------- ---------- ------------------------------
00000000EE27A8E8 145 14959 4294967295 00000000F11CD448 0 SYS
00000000F124A948 146 13099 0 00000000F11CE418 0
00000000EE27D158 149 1 0 00000000F11CDC30 0
00000000F124E5F0 152 4 0 00000000EE1F6978 0
00000000EE280E00 155 1 0 00000000EE1F6190 0
00000000F1252298 158 11061 14273 00000000EE1F7160 63 HARVEY
00000000EE283670 159 3789 14275 00000000F11CCC60 63 HARVEY
所以使用audsid来确认session对应的paddr是不完全正确的。正确的还是应该采用egyle所著的深入解析oracle一书中的方法
1:确认session的sid----select * from v$mystat where statistic#=0;
2:根据session的sid得到paddr select paddr from v$session where sid= XX
3:根据第二部得到的paddr确认process的PID, select spid from v$porcess where addr = @paddr
有兴趣的朋友可以自己写一个得到跟踪文件名的语句。或者参考egyle的深入解析oracle一书
二: 对跟踪文件加标记
其实除了以上的方法得到文件名外。还有更简单的方法。直接给跟踪文件夹标识
修改参数tracefile_identifier 语句如下:
sys@SALES>alter session set tracefile_identifier = 'Look_For_Me';
Session altered.
sys@SALES>alter session set sql_trace=true;
Session altered.
sys@SALES>!ls $ORACLE_BASE/admin/sales/udump/*Look_For_Me*
/u1/app/oracle/admin/sales/udump/sales_ora_25114_Look_For_Me.tr
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/180324/viewspace-661977/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/180324/viewspace-661977/