一. 关于警报日志和跟踪文件
警报日志中记录关键操作包括:
. 所有启动和关闭命令, 包括中间命令, 如 alter database mount
. 实例的所有内部错误 (ORA-600 错误, 只能报告给 Oracle Support 解决)
. 任何检测到的数据文件块损坏情况
. 任何已经发生的记录锁定死锁.
. 影响数据库物理结构的所有操作, 如创建或重命名数据文件和联机重做日志.
. 调整内部参数值的 alter system 命令
. 所有日志开关和日志归档文件.
跟踪文件由各个后台进程生成, 一般在遇到错误时发生, 在诊断问题时, 生成的跟踪文件非常有用
二. 旧版本中的警报日志和跟踪文件
在 Oracle10g 及以前版本中, 警报日志和跟踪文件的位置由参数 background_dump_dest 确定
select value from v$parameter where name='background_dump_dest';
默认位置: /u01/app/oracle/product/12.1.0/db_1/rdbms/log
警报日志: alert_sid.log (文本格式)
跟踪文件: sid_***.trc
三. 新版本中的警报日志和跟踪文件
在 Oracle11g 以后版本中, 警报日志和跟踪文件的位置有改变.
select * from v$diag_info;
1. 查看警报日志
select value from v$diag_info where name ='Diag Alert';
默认位置: /u01/app/oracle/diag/rdbms/sid/sid/alert
警报日志: log.xml (xml 格式)
2. 查看跟踪文件
select value from v$diag_info where name ='Diag Trace';
默认位置: /u01/app/oracle/diag/rdbms/sid/sid/trace
跟踪文件: sid_***.trc
警报日志: alert_sid.log (文本格式)
参数 background_dump_dest 位置也有一部分跟踪文件
select value from v$parameter where name='background_dump_dest';
默认位置: /u01/app/oracle/product/12.1.0/db_1/rdbms/log
跟踪文件: sid_***.trc
四. SQL 語句跟踪
1. 用户级自我跟踪
alter session set sql_trace=true;
在同一个 session 中执行 SQL 语句, 将会产生跟踪文件 sid_ora_spid.trc(spid 为系统进程 id):
/u01/app/oracle/diag/rdbms/sid/sid/trace/sid_ora_spid.trc
spid: 系统进程 id, 可以通过语句查看:
select s.username,s.sid,s.serial#,p.spid,s.program
from v$session s,v$process p
- where s.paddr = p.addr
- and s.username is not null
- and p.background is null;
- alter session set sql_trace=false;
2. 系统级跟踪
alter system set sql_trace=true scope=memory;
在任何 session 中执行 SQL 语句, 产生跟踪文件 sid_ora_spid.trc(spid 为系统进程 id):
/u01/app/oracle/diag/rdbms/sid/sid/trace/sid_ora_spid.trc
alter system set sql_trace=false scope=memory;
3. 用户级的 DBA 跟踪
使用 Oracle 的 PL/SQL 包 DBMS_SYSTEM
(1) 从 v$session 中查出用户的 sid 和 serial#.
select s.username,s.sid,s.serial#,p.spid,s.program
from v$session s,v$process p
- where s.paddr = p.addr
- and s.username is not null
- and p.background is null;
- USERNAME SID SERIAL# SPID PROGRAM
- ------------------------------ ---------- ---------- ------------------------ -----------------------------
- SYSTEM 13 35114 9172 plsqldev.exe
- SYSTEM 248 32295 9225 plsqldev.exe
SYS 14 36202 9111 sqlplus@gymvm (TNS V1-V3)
(2) 跟踪用户会话
execute sys.dbms_system.set_sql_trace_in_session(248,32295,true);
在任何 id 为 248 的 session 中执行 SQL 语句, 产生跟踪文件 sid_ora_spid.trc(spid 为系统进程 id):
/u01/app/oracle/diag/rdbms/sid/sid/trace/sid_ora_9225.trc
(3) 停止跟踪
execute sys.dbms_system.set_sql_trace_in_session(248,32295,true);
4.SQL_TRACE 跟踪 SQL 语句执行情况的内容
. 解析, 执行, 取数据的计数
.CPU 时间和占用时间
. 物理读和逻辑读
. 处理行数目
. 所解析的用户名
. 每次提交和回滚的情况.
五. 格式化跟踪文件 (tkprof)
使用 tkprof 程序可以将跟踪文件转化成可以阅读的文本文件, tkprof 语法:
tkprof tracefile outputfile [explain=user/password] [table=schema.tablename]
[print=integer] [insert= ] [sys= ] [sort= ] ...
$ tkprof tracefile outputfile
来源: http://www.bubuko.com/infodetail-2580902.html