oracle 外部表 查,通过Oracle的外部表访问跟踪文件并获取完整内容

n年前,看过,知道了在客户端获取跟踪日志文件的方法。

取得文件后,该文件却无法正常通过tkprof解析出格式化后的文件,估计是缺少一些内容,当时也没有深究原因,还是只好从服务器上去获取。

但是,经常有用户不方便从服务器上去取跟踪文件,例如:linux或unix系统中,一般通过ftp去获取,可能当前操作人员不知道ftp的密码。

今天,经过一番分析,终于发现了原因,并找到了解决办法。

1.通过前文所述的方法查询出文件内容,存为文本文件,跟原trace文件进行比较

2.结果发现,凡是有逗号的行,逗号及后面的内容没有查询出来。

例如:10G环境中第6行(11G中第3行):With the Partitioning

完整的内容是:With the Partitioning, OLAP, Data Mining and Real Application Testing options

3.外部表的定义中,并没有加字段的格式化:FIELDS TERMINATED BY ','

4.说明不加FIELDS关键字时,缺省按逗号作为了字段分隔符,验证了10.2.0.3和11.2.0.4都是这样的。

5.既然是这样,就加上一个字段分隔符(6个空格):FIELDS TERMINATED BY '      '

或者指定字段的长度:FIELDS (text (1:4000) CHAR)

6.这样重新定义外部表之后,就可以查询出完整的内容了。

获取跟踪日志的主要脚本:

1.获取当前会话产生的跟踪日志文件名

Select d.Value || '\' || Lower(RTrim(i.Instance, Chr(0))) || '_ora_' || p.Spid || '.trc' Trace_File_Name

From (Select p.Spid

From Sys.V$mystat M, Sys.V$session S, Sys.V$process P

Where m.Statistic# = 1 And s.Sid = m.Sid And p.Addr = s.Paddr) P,

(Select t.Instance

From Sys.V$thread T, Sys.V$parameter V

Where v.Name = 'thread' And (v.Value = 0 Or t.Thread# = To_Number(v.Value))) I,

(Select Value From Sys.V$parameter Where Name = 'user_dump_dest') D

2.按跟踪日志位置创建目录对象

Select Value From V$parameter Where Name = 'user_dump_dest'

create directory zltracefile as 'C:\ORACLE\PRODUCT\10.2.0\DB_1\ADMIN\DYYY\UDUMP';

3.根据1的文件名和2的目录对象名,创建外部表

create table tracefile

(TEXT varchar2(4000))

organization external (

type oracle_loader

default directory zltracefile

access parameters (

records delimited by newline

nobadfile

nodiscardfile

nologfile

FIELDS (text (1:4000) CHAR)

)

location('dyyy_ora_4732.trc')

) reject limit Unlimited;

4.查询跟踪日志的内容,可拷贝出来存为文本文件,然后用tkprof来格式化和排序

select * from tracefile;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/117319/viewspace-2138312/,如需转载,请注明出处,否则将追究法律责任。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值