诊断文件 帮助数据库管理员排忧解难

来源:岁月联盟 编辑:zhuzhu 时间:2009-02-10
 随着医学技术的进步,现在医生看病已经少不了血液检验书、X片等诊断材料。有了这些诊断材料的辅助,医生的水平有了长足的进步。其实对于数据库维护也是如此。若Oracle数据库能够提供一些诊断文件,那么无疑可以帮助数据库管理员排忧解难。

  值得庆幸的是,Oracle数据库就提供了类似血液检验书等诊断材料。在Oracle数据库,中有一个专业名词叫作诊断文件。诊断文件用于捕捉数据库的活动信息。一共包括预警文件、后台进程跟踪文件、以及用户跟踪文件三种类型。这些诊断文件是数据库管理员管理数据库进程非常有用的工具。下面笔者就跟大家分享一些这些诊断文件的使用与管理经验。

  诊断文件之一:预警文件。

  预警文件由连续的消息与错误组成。当例程在运行的过程中,若出现错误,则数据库系统会把这些错误信息记录到这个预警文件中。通常情况下,这些消息与错误是按照时间顺序保存的。越后面的信息时间越迟。为此,当数据库管理员查看这个预警文件时往往需要从文件的结尾开始看起。

  当数据库管理员想要知道数据库每天运行错误信息时,这个预警文件是数据库管理员的首选工具。通过使用预警文件,数据库管理员可以检测到Oracle数据库的内部错误;可以监视数据库操作,如用户启动或者关闭数据库、改变数据库的物理结构等等操作;也可以查看非默认的初始化参数等等。在预警文件管理时,数据库管理员需要注意如下几个问题。

  一是随着时间的推移,预警文件的体积会越来越大。当其达到一定的容量时,不仅数据库管理员查看起来比较麻烦,而且也会影响数据库运行的效率。所以数据库管理员应该养成一个习惯,就是定期对预警文件进行清理。如可以定期截断预警文件,或者也可以定期进行删除。不过在删除之前,最好能够预先进行备份。以防后期发现问题需要用到这个诊断文件。

  二是这个预警文件的存储位置。预警文件的存储位置数据库管理员可以根据自己的需要进行设置。默认情况下,其存储位置是有BACKGROUND_DUMP_DEST参数决定。按照笔者的习惯,笔者往往不会把它放在Oracle数据库的安装目录。而是放在另外一个磁盘的下。如此的话,即方便数据库管理员查看,也有利于这预警文件的安全。另外,其文件名字也有其固定的规则。预警文件的命名规则为Alert_SID.log。其中SID表示数据库服务的例程名字。

  三是数据库管理员要定期去查看这个预警文件。笔者是每个工作日上班的第一件事情就是去查看这个预警文件。有时候,预警文件显示的错误信息,可以帮助我们数据库管理员提前发现数据库出现崩溃的征兆。从而可以减少由此带来的损失。也就是说,预警文件可以帮助数据库管理员起到防范于未然的作用。

  诊断文件之二:后台进程跟踪文件。

  后台进程跟踪文件主要用来诊断后台进程的警告或者错误信息。后台进程跟踪文件主要记录两类信息。一是警告信息。在数据库后台进程运行的过程中,数据库会对进程进行实时跟踪。警告信息就是指那些对于当前例程不会有不利影响,但是数据库会认为不怎么合适或者可能会对其他进程产生不利影响的一些信息。二是错误信息。错误信息就是指当前配置给后台进程造成的阻碍甚至无法顺利运行某个进程的一些信息。如假设某个数据文件出现了损坏无法读取,那么当数据库服务器发出检查点时,数据库系统会将后台进程所检测的错误信息写入到该进程的跟踪文件中去。当数据库管理员怀疑某个进程出现了问题,则只要查看这个后台进程跟踪文件,或多或少可以发现一些进程错误的蛛丝马迹,如造成进程错误的原因等等。从而为数据库管理员消除故障原因提供帮助。在后台进程跟踪文件中,若是错误信息,则往往是以Error开头。从而跟一些警告信息进行区别。

  在Oracle数据库中,每个后台进程都有相应的跟踪文件。而每个用户连接到数据库服务器都会产生一个独立的后台进程(若数据库是这么配置的)。也就是说,每个用户都对应一个独立的后台进程跟踪文件。当用户一多,后台跟踪文件也会比较多,其管理起来就会有一定的难度。

  为了管理的方便,笔者建议数据库管理员把这些后台进程文件存放在一个独立的文件夹中。另外,还必须了解这个后台进程追踪文件的命名规则。只有如此,才能够在有需要的时候,迅速的找到用户所对应的后台进程追踪文件。

  通常情况下,后台进程追踪文件的位置由初始化参数BACKGROUND_DUMP_DEST确定。数据库管理员可以根据自己的需要,为其指定一个合适的位置。当企业并发性访问的用户比较多时,要注意这个存放位置的容量问题。后台进程跟踪文件跟预警文件一样,也有其固定的命名规则。其命名规则为SID_PROCESSNAME _spid.trc。这里SID表示例程名,而SPID表示后台进程对应的OS进程号。如Oracle数据库若是部署在Linux系统上,则就可以通过TOP命令,显示当前Oralce数据库所开启的进程,并且也会显示其所对应的进程号。

  另外,若数据库管理员不知道当前后台进程跟踪文件的存储路径,也可以通过Show Paramater命令来显示当前参数的值。无论是后台进程跟踪文件,还是预警文件,都可以利用这个命令来显示诊断文件当前的存储位置。

  诊断文件,帮助数据库管理员排忧解难

  如上图,Value处显示的就是当前后台进程跟踪文件的存储位置。细心的用户也许会发现,预警文件与后台进程跟踪文件的存储位置是一样的。他们主要是命名规则不同。同时,他们的后缀名也是不同的。如后台进程跟踪文件的扩展名为TRC。而预警文件的扩展名则为Log。

  诊断文件之三:用户跟踪文件。

  如果数据库管理员需要了解用户平时主要采用哪些SQL语句,则可以查看用户跟踪文件。用户跟踪文件主要用来收集客户应用SQL语句的统计信息。不过用户跟踪文件跟其他两个诊断文件有所不同。

  一是其他两个诊断文件主要是用来记录一些异常信息,如错误信息与警告信息等等。但是,用户追踪文件则不同。他主要是用来收集一些客户应用SQL语句的统计信息。所以其纪录的侧重点有所不同。

  二是其保存的位置不同。像上面所讲的预警文件与后台进程追踪文件主要是通过BACKGROUND_DUMP_DEST来确定。但是,用户追踪文件则不同。它的位置是由初始化参数USER_DUMP_DEST确定的。而且默认情况下,他们的存储位置也不同。不同相同的是,数据库管理员都可以根据实际的需要,更改这些初始化参数,从而根据用户的需要在特定的位置保存这些诊断文件。

  三是这个用户跟踪文件还依赖与其它的进程。而其他两个诊断文件则不需要依赖其他的进程。如用户要利用进程追踪文件跟踪SQL语句时,则必须首先激活SQL跟踪功能。在Oracle数据库中,主要可以通过三种方式激活SQL跟踪程序。分别为激活当前会话的SQL跟踪、激活特定会话的SQL跟踪、激活所有会话的SQL跟踪等等。数据库管理员需要根据自己的使用情况,来选择合适的激活方式。

  用户追踪文件最常用的地方就是可以利用这个文件来改善数据库的性能。因为用户追踪文件收集了用户应用SQL语句的统计信息,从而数据库管理员可以利用这个文件分析SQL语句的执行性能,并做出相应的 SQL语句性能调整规划。通过对SQL语句的调整,如调整其排序规则、SQL语句优化等等,可以在很大程度上改善数据库的性能,特别是可以很明显的缩短用户查询的等待时间。由此可见,诊断文件不但是数据库管理员解决数据库故障的好帮手,而且也可以为数据库管理员进行数据库优化提供数据上的支持。

  总之,根据笔者的数据库维护经验来说,诊断文件确实是一个少不了的工具。作为Oracle的数据库管理员来说,要学会利用这些诊断文件来了解数据库的运行状态。数据库若有什么不好的症状,基本上都可以在这些诊断文件中反映出来。所以,笔者认为,诊断文件可以帮助数据库管理员排忧解难,这一点都没有夸张。笔者相信,只要大家用心去了解一下诊断文件,他会成为我们日常工作的好伙伴。