51Testing软件测试论坛

标题: 原创数据库错误追踪专题 [打印本页]

作者: 丰卉者    时间: 2014-7-17 16:20
标题: 原创数据库错误追踪专题
1.知识要点:
oracle常见错误类型
oracle 错误解决思路
2.数据库的错误类型
数据库安装时的错误
数据库运行时的错误
网络错误

3.数据库安装时会产生如下的错误
不能启动安装程序(Oracle Universal Installer)
安装时出现乱码
先决条件检查没有通过
不能写临时目录(/tmp)
安装完成后不能启动数据库
……
4.数据库运行时的错误
不能启动数据库
不能关闭数据库
数据库被挂起(死机)
不能扩展表空间
不能往数据库中插入数据
不能删除表空间

5.网络错误
连接数据库时,提示: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)

6.数据库错误的追踪方法
6.1数据库安装时的错误追踪方法
6.2数据库常规错误的追踪方法
6.3网络错误的追踪方法

数据库安装时,会产生千奇百怪的错误,对于大部分错误来说,解决的过程都很类似。
(1)解决的过程如下:
首先,查看操作系统的日志文件(跟踪文件)
其次,查看Oracle Universal Installer(OUI)生成的日志文件
最后,综合操作系统日志文件和OUI的日志文件,找出问题的所在
(2)查看操作系统的日志文件
       每个操作系统都有自己的日志文件和跟踪文件,这些操作系统文件记录了操作系统的系统级改变和错误信息,从这些文件中,我们能够获得一些提示,这些提示能够帮助我们分析和定位数据库安装和运行中出现的问题
(3)操作系统日志文件的读取方式
大部分日志文件可以直接读取(使用命令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:找到文件Inventory的位置。
这个位置,一般从环境变量中查找获得。

Step02:进入Inventory目录,找到安装日志
$ cd /opt/oracle/oraInventory
$ cd logs

Step03: 查看安装日志文件的内容。
$ more installActions2013-05-15_12-22-15PM.log

数据库常规错误的追踪方法
数据库常规错误的追踪,主要查看两类文件:
一类是数据库的警报文件(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)增长。

数据库常规错误的追踪方法(总结)
通常,我们首先查看警报文件和跟踪文件,看看这两个文件是否有异常。如果信息还不足够用于诊断错误的所在,我们可以查看操作系统的日志文件,然后再结合当前数据库的各种状态,相信我们定能解决数据库的故障。

网络错误的追踪方法
引起客户端不能访问数据库的原因很多,有软件问题,也有硬件问题。有操作系统本身的问题,也有应用程序的问题,也可能是防火墙的问题。但是,多数情况,都是用户配置不当所致。无论什么网络错误,我们都可以按照下面的原则去侦测网络问题。
第一步: ping目标主机
用操作系统命令ping目标主机 ,看看目标主机是否存在。
C:\Users\>ping 10.137.83.18
正在 Ping 10.137.83.18 具有 32 字节的数据:
来自 10.137.83.18 的回复: 字节=32 时间<1ms TTL=252
来自 10.137.83.18 的回复: 字节=32 时间=1ms TTL=252
来自 10.137.83.18 的回复: 字节=32 时间<1ms TTL=252
来自 10.137.83.18 的回复: 字节=32 时间<1ms TTL=252
10.137.83.18 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 0ms,最长 = 1ms,平均 = 0ms
一般情况,我们从这里基本就可以断定问题的所在。
如果ping的结果是“Request timed out”,表示客户端到目标主机(10.137.83.18)的网络不通。这时候,需要解决操作系统这一层的网络连接问题。如果不是操作系统的网络问题,我们再查看问题是不是出在Oracle这一层。
  ping不通可能有下面的原因
客户端的网卡物理故障
客户端的网卡设置不当
客户端的防火墙限制
网线断裂
服务器的网卡物理故障
服务器的网卡设置不当
服务器的防火墙限制

第二步: 执行tnsping命令
C:\Users\>tnsping mmsgdb18

TNS Ping Utility for 32-bit Windows: Version 11.1.0.6.0 - Production on 20-8月 -
2013 13:46:00

Copyright (c) 1997, 2007, Oracle.  All rights reserved.

已使用的参数文件:
C:\app\product\11g\network\admin\sqlnet.ora


已使用 TNSNAMES 适配器来解析别名
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.137.8
3.18)(PORT = 1526)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = mmsgdb)
))
OK (170 毫秒)

tnsping命令主要用于测试客户端是否能够连接到**器

第三步: 查看**器状态
oracle@MMSG:~> lsnrctl status

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 20-8月 -2013 21:45:14

Copyright (c) 1991, 2011, Oracle.  All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.3.0 - Production
Start Date                25-7月 -2013 21:53:04
Uptime                    25 days 23 hr. 52 min. 9 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /opt/oracrs/product/11gR2/grid/network/admin/listener.ora
Listener Log File         /opt/oracrs/base/diag/tnslsnr/MMSG/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.137.83.18)(PORT=1521)))
Services Summary...
Service "mmsgdb" has 1 instance(s).
  Instance "mmsgdb", status READY, has 1 handler(s) for this service...
The command completed successfully

第四步: 查看**器配置文件
**器启动的时候,会读取一个叫listener.ora的文件,这个文件叫“**器配置文件”,这个文件指定**器所在的主机,**器**的实例名,**的端口号,**的协议等信息。这个文件的内容类似于下:
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = mmsgdb)
      (ORACLE_HOME = /opt/oracle/product/db)
      (SID_NAME = mmsgdb)
    )
  )
LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.137.83.18)(PORT = 1521))
  )
LISTENER是**器的名字,我们也可以使用别的名字;
ORACLE_HOME 是oracle的主目录;
SID_NAME **器**的数据库的实例名。本例中的实例是mmsgdb;
PROTOCOL **器**的协议。本例中使用的是TCP/IP协议;
HOST 指定数据库服务器的主机名或者IP地址。本例中的数据库服务器的IP地址是10.137.83.18;
PORT 指定**器使用的端口号,默认的端口号是1521。
第五步: 查看客户端网络配置文件tnsnames.ora
客户端网络配置文件tnsnames.ora的样例如下,这个文件定义了网络服务名MMSGDB。
MMSGDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.137.83.18)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = mmsgdb)
    )
  )
PROTOCOL 用于指定使用的协议。本例中使用的是TCP/IP。
HOST 指定数据库服务器的主机名或者IP地址。本例中的数据库服务器的IP地址是10.137.83.18)
PORT 指定**器使用的端口号,默认的端口号是1521。
SERVICE_NAME 指定请求的数据库的实例名。本例中请求的实例是mmsgdb。
第六步: 查看Oracle网络的日志文件

如果完成前面的步骤,还是不能诊断出网络故障,我们可以查看Oracle网络的日志文件,从这些文件,我们能够获得更多的信息,这些文件如下:
listener.log                         Listener
sqlnet.log                         Client or Database Server
instance-name_pid.log          Oracle Connection Manager listener


“数据库错误追踪专题”总结
有时候我们会碰到一些疑难问题,按照上面的方法难以解决,我们可以到国外的网站进行搜索,一般情况下,国外的同行也会遇到类似的问题。有时候,从国外的网站不能够直接搜索到答案,但是我们还是要去搜索,因为从国外同行的帖子中,我们能够获得一些启示。
     如果从网上不能解决我们的疑难问题,我们只好耐心拜读ORACLE公司的大作(官方文档),你要知道,这是一切ORACLE知识的源泉。以ORACLE的官方文档为工具,开动我们的大脑,相信我们一定能够找出解决问题的办法。
作者: lsekfe    时间: 2014-7-17 16:46
1.知识要点:
oracle常见错误类型
oracle 错误解决思路
2.数据库的错误类型
数据库安装时的错误
数据库 ...
丰卉者 发表于 2014-7-17 16:20


不错的分享,支持下~
作者: gaha    时间: 2014-7-17 16:52
这是数据库产品方面的测试功能点吗?




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2