一、跟踪文件是干什么用的?
跟踪文件中包含了大量而详细的诊断和调试信息。通过对跟踪文件的解读和分析,我们可以定位问题、分析问题和解决问题。从跟踪文件的产生的来源来看,跟踪文件又可以分为两类:一类是数据库的操作人员有意生成的;另一类则是由于出现了异常错误,由数据库自动生成的。对于后一类,只对Oracle内部的技术支持人员是有用的,但对于我们,则多半看不懂。前一类,则是我们经常用到的,帮助我们分析、调整和优化应用性能,处理并解决问题。
二、跟踪文件是如何命名的?
一个跟踪文件的名字一般由以下几部分组成:
ORACLE_SID
固定字符"ora"
服务器的进程ID号
文件后缀名 .trc
前三个部分之间以下划线连接。
如下例:
orcl_ora_6210.trc
其中“orcl" 是本环境下数据库的SID,"6210"为产生该跟踪文件会话所使用的服务器进程ID号。如何知道我的ORACLE_SID和会话所使用的服务器进程ID呢?后面会详细讲到。
上面说到的跟踪文件的命名规则适用于我们前面说的第一类跟踪文件,即数据库操作人员有意生成的跟踪文件。如果是第二类跟踪文件,则命名上稍有变化。这类跟踪文件将固定字符"ora"改为了ORACLE后台进程名的缩写。如下例所示:
orcl_lgwr_30019.trc
orcl_dbw0_2664.trc
三、跟踪文件存放在哪里?
跟踪文件存放的位置根据数据库版本的不同,位置也是不同的。下面以10g 和11g分别说明。
10g
通常,我们在安装数据库时,会设定一个环境变量$ORACLE_BASE(注意,是BASE,不是HOME),该变量中指定了ORACLE软件安装的主目录。假设我们设定的目录为”/oracle/app/oracle“,那么跟踪文件会放到以下这几个目录中:
/oracle/app/oracle/admin/orcl/bdump 该目录用来存储ORACLE后台进程生成的输出文件。数据库自动生成的跟踪文件默认是存储在这里,另外,我们经常提到的报警日志,也是放在这里的。
/oracle/app/oracle/admin/orcl/cdump 该目录用来存储内核进程产生的输出文件
/oracle/app/oracle/admin/orcl/udump 该目录用来存储用户生成的输出文件。我们有意生成的跟踪文件默认就是存储在这里。
以上是说的是默认情况下,如果数据库的管理员改变了这个设置的话,我们更保险的方法是查询相关参数来确定,查询方法如下:
通过SQLPLUS以管理员身份登录,输入 show parameter dump_dest 并回车。例如:
SQL> show parameter dump_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
background_dump_dest string /oracle/app/oracle/admin/orcl/ bdump
core_dump_dest string /oracle/app/oracle/admin/orcl/cdump
user_dump_dest string /oracle/app/oracle/admin/orcl/ udump
此外,这些设置,在参数文件中也有记录。通过查询参数文件亦可获得。
11g
11g中引入了一个新的功能,称为自动诊断知识库(Automatic Diagnostic Repository 缩写为ADR)。它是所有诊断信息的的中心存储点,它包括各种转储文件、跟踪文件、日志和健康状况监视报表。所有实例(RDBMS实例和ASM实例)都在ADR中创建有自己的目录结构。
ADR的位置是由参数DIAGNOSTIC_DEST来指定,默认位置同$ORACLE_BASE。其结构如下:
ORACLE_BASE/diag/database_name/instance_name
假设我们设定的$ORACLE_BASE仍为”/oracle/app/oracle“,数据库名称和实例名称均为”orcl",则实际的目录结构如下:
/oracle/app/oracle/diag/orcl/orcl
这个位置,也被称为本例中数据库实例ORCL的ADR_HOME。
在这个目录下,还会发现有一个子目录,名为trace,其下集中存储了数据库后台进程和用户主动生成的跟踪文件以及报警日志。
但这也是默认情况下,我们通过查询v$diag_info视图,就可以获得实际的位置。如下所示:
SELECT * FROM V$DIAG_INFO;
INST_ID NAME VALUE
------- --------------------- -------------------------------------------------------------
1 Diag Enabled TRUE
1 ADR Base /u01/oracle
1 ADR Home /u01/oracle/diag/rdbms/orclbi/orclbi
1 Diag Trace /u01/oracle/diag/rdbms/orclbi/orclbi/trace
1 Diag Alert /u01/oracle/diag/rdbms/orclbi/orclbi/alert
1 Diag Incident /u01/oracle/diag/rdbms/orclbi/orclbi/incident
1 Diag Cdump /u01/oracle/diag/rdbms/orclbi/orclbi/cdump
1 Health Monitor /u01/oracle/diag/rdbms/orclbi/orclbi/hm
四、如何找到特定的跟踪文件?
通过上面的介绍,我们已经知道了跟踪文件是如何命名的,存储到了什么地方。但对于一个繁忙的系统,在同一个目录下,可能会在相近的时间内生成多个跟踪文件,那么如何才能找到我们想要的那个跟踪文件呢。核心就是要确定我们所使用的服务器进程ID号。有了这个ID号,我们就可以确定地知道哪个跟踪文件才是我们想要的。下面介绍一下如何查询服务器进程ID号。
当前正在运行的服务器进程ID号,都存储在v$process视图中。但由于该视图中提供的信息有限,大多数的时候,我们很难定位到底哪个服务器进程ID(SPID)才是我们要找的。 比如下面的这个输出,基本是一样的。
SQL> select addr,spid,username,terminal,program from v$process;
ADDR SPID USERNAME TERMINAL PROGRAM
----------------------- ------------ --------------- ------------------------------ ------------------------------------------------
000000007FE6D7A8 2447 oracle UNKNOWN oracle@localhost.localdomain (MMNL)
000000007FE6DFA0 2449 oracle UNKNOWN oracle@localhost.localdomain (D000)
000000007FE6E798 2451 oracle UNKNOWN oracle@localhost.localdomain (S000)
000000007FE6EF90 2453 oracle pts/1 oracle@localhost.localdomain (TNS V1-V3)
000000007FE6F788 2455 oracle UNKNOWN oracle@localhost.localdomain (ARC0)
000000007FE6FF80 2457 oracle UNKNOWN oracle@localhost.localdomain (ARC1)
000000007FE70778 2459 oracle UNKNOWN oracle@localhost.localdomain (CTWR)
000000007FE70F70 2461 oracle UNKNOWN oracle@localhost.localdomain (QMNC)
000000007FE71768 5703 oracle pts/2 oracle@localhost.localdomain (TNS V1-V3)
000000007FE71F60 5839 oracle UNKNOWN oracle@localhost.localdomain
000000007FE73F40 2475 oracle UNKNOWN oracle@localhost.localdomain (q000)
这时,我们就借助v$session视图,即通过会话找服务器进程(一个进程可以有多个会话,但一个会话,只能属于一个进程)。前面说过,跟踪文件分为两类,我们需要的是我们主动生成的跟踪文件。即然是我们主动生成的,那一定是在我们当前的会话中产生。因此,我们可以利用以下语句找到我们当前会话所属的服务器进程ID(SPID)。
SQL> select a.spid from v$process a,v$session b where b.sid=sys_context('userenv','sid') and a.addr=b.paddr;
SPID
------------
5922
上面语句中的 sys_context('userenv','sid') 是利用系统内置的函数来取当前的会话ID(SID),这个函数也可以用 userenv('sid') 来代替,结果是一样的。只不过ORACLE建议使用前者。因为后面这个函数只是出于保持版本的兼容性而保留下来的,但说不定什么时候,这个函数就会在更新的版本中取消了。
有了这个SPID,我们就可以去相应的跟踪文件的存放位置,去查找在当前时间产生的,文件名中含有”5922“的跟踪文件了。
另外,我们也可以使用下面这个SQL语句,在当前会话中直接查询而获得跟踪文件的绝对路径和名字。
select c.value || '/' || d.instance_name || '_ora_' || a.spid || '.trc' trace
from v$process a, v$session b, v$parameter c, v$instance d
where a.ADDR = b.PADDR
and b.SID = sys_context('userenv','sid')
and c.NAME = 'user_dump_dest' ;
- 在ORACLE中移动数据库文件
转载: 在ORACLE中移动数据库文件 --ORACLE数据库由数据文件,控制文件和联机日志文件三种文件组成. --由于磁盘空间的变化,或者基于数据库磁盘I/O性能的调整等, --我們可能会考虑移动数 ...
- 获取Oracle EBS数据库跟踪文件方法
http://www.orapub.cn/posts/1624.html 一.以下在Oracle APP中执行: 1) Set the Profile Option: ‘Initialization ...
- Oracle警告、跟踪文件(10046、死锁等跟踪)
跟踪文件由各个后台进程生成,警报日志中记录关键操作包括: ·所有启动和关闭命令,包括中间命令,如alter database mount ·实例的所有内部错误(ORA-600错误,只能 ...
- 浅谈Oracle中物理结构(数据文件等。。。)与逻辑结构(表空间等。。。。。)
初始Oracle时很难理解其中的物理结构和逻辑结构,不明白内存中和硬盘中文件的区别和联系,我也是初学Oracle,这里就简单的谈谈我我看法. 首先,你需要明白的一点是:数据库的物理结构是由数据库的操作 ...
- 如何在Oracle中导入dmp文件
Oracle数据导入导出imp/exp就相当于oracle数据还原与备份.exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中. 利 ...
- Oracle中从控制文件读取的视图
Oracle中有一些数据字典视图需从控制文件中读取信息,如下所示.用户在数据库打开之前就可以访问这些视图,因为这些视图的内容存储在控制文件中. v$archived_log:归档日志信息,如大小,SC ...
- 用PLSQL DEVELOPER工具简单查找ORACLE中的死锁和死锁排除
用DBA身份登录后 查找死锁: select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ...
- Oracle pfile与spfile文件参数(转载)
一.pfile与spfile Oracle中的参数文件是一个包含一系列参数以及参数对应值的操作系统文件.它们是在数据库实例启动时候加载的,决定了数据库的物理 结构.内存.数据库的限制及系统大量的默认值 ...
- oracle 删除旧的归档文件或跟踪文件
2016-02-16 可以使用两种方法完成删除旧文件的操作: 一.是使用find命令结合-exec rm; 二.是使用find命令结合使用xargs rm. 例如: 把5天之前的归档文件删除: [or ...
随机推荐
- Ubuntu14.04上安装tftpd服务
首先sudo apt-get install tftpd-hpa, tftp-hpa 然后sudo vim /etc/default/tftpd-hpa 配置文件如下 TFTP_USERNAME=& ...
- JavaScript中的原型继承原理
在JavaScript当中,对象A如果要继承对象B的属性和方法,那么只要将对象B放到对象A的原型链上即可.而某个对象的原型链,就是由该对象开始,通过__proto__属性连接起来的一串对象.__pro ...
- maven使用笔记一 下载json-lib引发的问题
一.问题描述(IDEA中): 1,在pom.xml中配置了 <dependency> <groupId>net.sf.json-lib</groupId> < ...
- JQuery easyui (2)Droppable(放置)组件
所谓放置,就是将一个物体放入一个物体内,当然对于easyui来说触发各种效果是必不可少的,同时这个组件也不会依赖于其他组件. Droppable的加载方式 1,class 加载 一直不太喜欢cl ...
- postgresql创建用户
(1)内部命令create user 用户名 with superuser password '密码'; 先进入数据库后用命令\h create user 查看帮助 ...
- information_schema.routines 学习
information_schema.routines 用户查看mysql中的routine信息 1.information_schema.routines 表中的常用列: 1.
- js 属性类型
1.访问器属性 var book = { _year: 2004, edition: 1 }; Object.defineProperty(book, "year", { get: ...
- SD/MMC卡初始化及读写流程
二.MMC/SD卡的模型和工作原理 PIN脚.SD卡总线.SD卡结构.SD卡寄存器.上电过程 SD卡寄存器: OCR:操作电压寄存器: 只读,32位 第31位: 表示卡上电的状态位 CID: 卡 ...
- C语言必背18个经典程序
C语言必背18个经典程序 1./*输出9*9口诀.共9行9列,i控制行,j控制列.*/ #include "stdio.h" main() {int i,j,result; for ...
- VS2008生成的程序无法在其它电脑上运行,提示系统无法执行指定的程序
经过一番查找,最给力的参考是 http://www.cnblogs.com/visoeclipse/archive/2010/02/27/1674866.html ------------------ ...