TA的每日心情 | 擦汗 2019-7-20 17:20 |
---|
签到天数: 143 天 连续签到: 1 天 [LV.7]测试师长
|
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的官方文档为工具,开动我们的大脑,相信我们一定能够找出解决问题的办法。 |
|