ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 数据库错误追踪

数据库错误追踪

原创 Linux操作系统 作者:philwood2010 时间:2010-09-03 16:02:23 0 删除 编辑
数据库错误追踪
1、数据库的错误类型
数据库安装时的错误
数据库运行时的错误
网络错误
…
1.1 数据库安装时会产生如下的错误
不能启动安装程序(Oracle Universal Installer)
安装时出现乱码
先决条件检查没有通过
不能写临时目录(/tmp)
安装完成后不能启动数据库
……
1.2 数据库运行时的错误
不能启动数据库
不能关闭数据库
数据库被挂起(死机)
不能扩展表空间
不能往数据库中插入数据
不能删除表空间
…
1.3 网络错误
连接数据库时,提示:TNS-12541 : TNS:no listener(没有监听器)
连接数据库时,报告ORA-12170: TNS:Connect timeout occurred
启动监听器时,提示:TNS-12545 : Connect failed because target host or object does not exist  ?
连接数据库时,报告ORA-12505: TNS:listener does not currently know of SID given in connect descriptor
连接数据库时,报告TNS-03505 Failed to resolve name
协议适配器错误(ORA-12560: TNS:protocol adapter error)
…
2、数据库错误的追踪方法
数据库安装时的错误追踪方法
数据库常规错误的追踪方法
网络错误的追踪方法
…
2.1 数据库安装时的错误追踪方法
数据库安装时,会产生千奇百怪的错误,对于大部分错误来说,解决的过程都很类似。
解决的过程如下:
首先,查看操作系统的日志文件(跟踪文件)
其次,查看Oracle Universal Installer(OUI)生成的日志文件
最后,综合操作系统日志文件和OUI的日志文件,找出问题的所在
查看操作系统的日志文件
每个操作系统都有自己的日志文件和跟踪文件,这些操作系统文件记录了操作系统的系统级改变和错误信息,从这些文件中,我们能够获得一些提示,这些提示能够帮助我们分析和定位数据库安装和运行中出现的问题。
操作系统日志文件的读取方式
大部分日志文件可以直接读取(使用命令more ,cat等)。
有的操作系统日志文件要使用特殊的命令才能读取
      如:AIX , 查看错误日志 ,使用errpt命令  
用more或者其它文本查看命令来查看errlog文件(AIX日志文件)我们看到的将是一堆乱码。
   
操作系统日志文件的位置 (LINUX)
在LINUX中,/etc/syslog.conf记录了日志文件的位置。大部分日志文件都位于目录/var/log/之下。LINUX中存在如下日志文件。
/var/log/messages 将info或更高级别的消息写到该文件
/var/log/maillog  记录电子邮件相关的信息
/var/log/boot.log  记录系统启动相关的信息
/var/log/cron 记录系统中定时执行的任务相关的信息
。。。还有其它日志文件,这里就不一一作介绍
操作系统日志文件的位置 (Solaris)
Solaris的日志文件通常位于目录/var/adm下, Solaris有如下的日志文件:
messags记录来自系统核心的各种运行日志
syslog 记录mail事件
sulog 记录普通用户使用su成为其它用户的记录
utmp 记录当前登录在主机上的用户
查看Oracle Universal Installer生成的日志文件
Step01:
找到文件oraInst.loc。
oraInst.loc文件的位置如下:
  对于AIX, Linux x86, or Linux Itanium:
     文件的位置是/etc/oraInst.loc
  对于其它UNIX操作系统:
    文件的位置是/var/opt/Oracle/oraInst.loc
从文件oraInst.loc中,找到Inventory的位置。
$ cat /var/opt/Oracle/oraInst.loc
inventory_loc=/Oracle/app/Oracle/oraInventory
inst_group=oinstall
这里的Inventory目录是/Oracle/app/Oracle/oraInventory
Step02:进入Inventory目录,找到安装日志
$ cd /Oracle/app/Oracle/oraInventory
$ cd logs
Step03: 查看安装日志文件的内容。
$ more installActions2006-07-19_11-21-21PM。log
2.2 数据库常规错误的追踪方法
数据库常规错误的追踪,主要查看两类文件。
一类是数据库的警报文件(Alert log Files)
另外一类是数据库的跟踪文件(Trace Log Files)
警报文件(Alert log Files)介绍
警报日志文件,本书简称警报文件,它用于记录数据库的重大活动和发生的错误。警报文件按照时间的先后记录发生的事件。特别注意的是,警报文件除了记录数据库中发生的错误外,还记录数据库中发生的重大事件。警报文件记录的内容如下:
每次数据库启动(STARTUP)和关闭(SHUTDOWN)的详细信息。
DBA执行的某些管理操作,如:ALTER SYSTEM , ALTER DATABASE。
某些数据库错误,如Oracle的内部错误(ORA-600),空间错误等。
共享服务器相关的信息和错误。
值是非默认值的初始化参数(Initialization Parameters)信息。
物化视图(materialized view)自动刷新产生的错误。
      通过这些信息,我们可以了解数据库发生的重大事件和错误。警报文件是DBA使用最频繁 的文件,DBA常常参考这个文件进行故障排查。     
警报文件的位置
警报文件的名字的格式是alertSID.log,其中,SID表示实例名(Instance)。警报文件的位置由初始化参数BACKGROUND_DUMP_DEST指定。
跟踪文件(Trace Log Files)介绍
跟踪日志文件,本书叫“跟踪文件“,每个服务器进程和后台进程都写跟踪文件。当一个后台进程检测到错误的时候,Oracle会把错误信息写到跟踪文件中。因此,检查跟踪文件的内容,就可以知道后台进程运行中是否产生错误。
     跟踪信息被写到两个目录,和后台进程(Background Processes)相关的信息被写到初始化参数BACKGROUND_DUMP_DEST指定目录;和服务器进程(Server Processes)相关的信息被写到初始化参数USER_DUMP_DEST指定的目录。跟踪文件的名字在每种操作系统上会有不同,但是,每个跟踪文件的名字都包含进程的名字(如:LGWR)。
    如果数据库长时间运行,跟踪文件会变得越来越大。我们可以手工清除跟踪文件,也可以限制跟踪文件的大小。Oracle的初始化参数MAX_DUMP_FILE_SIZE用于限制跟踪文件的大小。MAX_DUMP_FILE_SIZE的格式如下:
       MAX_DUMP_FILE_SIZE = { integer [K | M] | UNLIMITED
K | M表示单位,可以把跟踪文件的大小设置在多少K,多少M,也可以设置跟踪文件可以无限制(UNLIMITED)增长。
数据库常规错误的追踪方法 (总结)
通常,我们首先查看警报文件和跟踪文件,看看这两个文件是否有异常。如果信息还不足够用于诊断错误的所在,我们可以查看操作系统的日志文件,然后再结合当前数据库的各种状态,相信我们定能解决数据库的故障。
3、网络错误的追踪方法
引起客户端不能访问数据库的原因很多,有软件问题,也有硬件问题。有操作系统本身的问题,也有应用程序的问题,也可能是防火墙的问题。但是,多数情况,都是用户配置不当所致。无论什么网络错误,我们都可以按照下面的原则去侦测网络问题。
第一步: ping目标主机
用操作系统命令ping目标主机 ,看看目标主机是否存在。
C:\Documents and Settings\netshong>ping 192.168.200.38 
Pinging 192.168.200.38 with 32 bytes of data:
Request timed out.
Ping statistics for 192.168.200.38:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss)
一般情况,我们从这里基本就可以断定问题的所在。
如果ping的结果是“Request timed out”,表示客户端到目标主机(192.168.200.38)的网络不通。这时候,需要解决操作系统这一层的网络连接问题。如果不是操作系统的网络问题,我们再查看问题是不是出在Oracle这一层。
      ping不通可能有下面的原因
客户端的网卡物理故障
客户端的网卡设置不当
客户端的防火墙限制
网线断裂
服务器的网卡物理故障
服务器的网卡设置不当
服务器的防火墙限制
第二步: 执行tnsping命令
C:\Documents and Settings\Administrator>tnsping NNC 
TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 08-2月 -2007 16:12:10
Copyright (c) 1997, 2005, Oracle.  All rights reserved.
已使用的参数文件:
D:\oracle_client\network\admin\sqlnet.ora
已使用 TNSNAMES 适配器来解析别名
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = XXXX)(PORT =
OK (60 毫秒)
    tnsping命令主要用于测试客户端是否能够连接到监听器 
第三步: 查看监听器状态
登陆监听器控件
C:\Documents and Settings\Administrator>lsnrctl
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 07-2月 -2007 20:34:07
Copyright (c) 1991, 2005, Oracle.  All rights reserved.
欢迎来到LSNRCTL, 请键入"help"以获得信息。
LSNRCTL>
显示监听器的状态
LSNRCTL> status
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxx)(PORT=1521)))
LISTENER 的 STATUS
------------------------
别名                      LISTENER
版本                      TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production
启动日期                  08-2月 -2007  09:56:52
正常运行时间              0 天 0 小时 20 分 27 秒
跟踪级别                  off
。。。。。
服务 "nbo" 包含 2 个例程。
  例程 "nbo", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
  例程 "nbo", 状态 READY, 包含此服务的 1 个处理程序...
服务 "nboXDB" 包含 1 个例程。
  例程 "nbo", 状态 READY, 包含此服务的 1 个处理程序...
服务 "nbo_XPT" 包含 1 个例程。
  例程 "nbo", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功
第四步: 查看监听器配置文件
监听器启动的时候,会读取一个叫listener.ora的文件,这个文件叫“监听器配置文件”,这个文件指定监听器所在的主机,监听器监听的实例名,监听的端口号,监听的协议等信息。这个文件的内容类似于下:
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = nbo)
      (ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
      (SID_NAME = nbo)
    )
  )
LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.123.6)(PORT = 1521))
  )
LISTENER是监听器的名字,我们也可以使用别的名字。
ORACLE_HOME 是Oracle的主目录。
SID_NAME 监听器监听的数据库的实例名。本例中的实例是nbo。
PROTOCOL 监听器监听的协议。本例中使用的是T C P / I P协议。
HOST 指定数据库服务器的主机名或者IP地址。本例中的数据库服务器的IP地址是192.168.123.6
PORT 指定监听器使用的端口号,默认的端口号是1521。
第五步: 查看客户端网络配置文件tnsnames.ora
客户端网络配置文件tnsnames.ora的样例如下,这个文件定义了网络服务名TONBO。
TONBO =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = xxxx)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = nbo)
    )
  )
PROTOCOL 用于指定使用的协议。本例中使用的是T C P / I P。
HOST 指定数据库服务器的主机名或者IP地址。本例中的数据库服务器的IP地址是192.168.123.6)
PORT 指定监听器使用的端口号,默认的端口号是1521。
SERVICE_NAME 指定请求的数据库的实例名。本例中请求的实例是nbo。
第六步: 查看Oracle网络的日志文件
如果完成前面的步骤,还是不能诊断出网络故障,我们可以查看Oracle网络的日志文件,从这些文件,我们能够获得更多的信息,这些文件如下:
listener.log    Listener
sqlnet.log    Client or Database Server
instance-name_pid.log   Oracle Connection Manager listener
…
“数据库错误追踪专题”总结
有时候我们会碰到一些疑难问题,按照上面的方法难以解决,我们可以到国外的网站进行搜索,一般情况下,国外的同行也会遇到类似的问题。有时候,从国外的网站不能够直接搜索到答案,但是我们还是要去搜索,因为从国外同行的帖子中,我们能够获得一些启示。
     如果从网上不能解决我们的疑难问题,我们只好耐心拜读ORACLE公司的大作(官方文档),你要知道,这是一切ORACLE知识的源泉。以ORACLE的官方文档为工具,开动我们的大脑,相信我们一定能够找出解决问题的办法。

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

下一篇: Oracle日志文件
请登录后发表评论 登录
全部评论

注册时间:2010-09-03

  • 博文量
    22
  • 访问量
    31326