数据库:Oracle 10.2.0.1

平台:HP-UX B.11.23 ia64

 

 

故障描述客户反映在2009-01-19上午7点左右,应用无法连接到数据库,之后将数据库重启,并增大了PROCESSES参数。客户希望查找问题原因。

 

 

原因分析:
ALERT LOG分析:

从ALERT LOG中的信息可以看到:

Tue Jan 19 06:11:22 2010

Process J000 died, see its trace file

Tue Jan 19 06:11:22 2010

kkjcre1p: unable to spawn jobq slave process

Tue Jan 19 06:11:22 2010

Errors in file /oracle/admin/vc/bdump/vc_cjq0_16001.trc:

Tue Jan 19 06:12:33 2010

Process J000 died, see its trace file

Tue Jan 19 06:12:33 2010

kkjcre1p: unable to spawn jobq slave process

Tue Jan 19 06:12:33 2010

Errors in file /oracle/admin/vc/bdump/vc_cjq0_16001.trc:

在19号的06:11:22时出现错误:

原因是由于无法分配jobq slave process进程导致J000进程died。

从/oracle/admin/vc/bdump/vc_cjq0_16001.trc看到:

*** 2010-01-19 06:11:22.293

Process J000 is dead (pid=15748, state=3):

*** 2010-01-19 06:12:33.315

Process J000 is dead (pid=15947, state=3):

该问题出现过两次,都是由调度进程CJQ0产生的。

从同时间点的后台trace文件看到出现该问题的主要原因是达到了最大进程数限制

/oracle/admin/vc/bdump/vc_ora_15748.trc内容:

error 20 in job queue process

ORA-00020: maximum number of processes (1000) exceeded

尽管无法分配进程给job队列使用,但是并不会导致数据库宕机或挂起。数据库仅是由于达到了最大进程数限制,而导致应用无法连接。

此时数据库的状态仍然是OPEN状态,仍能通过管理员用户登入到数据库。

客户在数据库出现问题之后对数据库的操作:

06:53:41开始,使用管理员用户重启数据库实例:

Tue Jan 19 06:53:41 2010

Starting ORACLE instance (normal)

第一次启动不成功,于07:12:36将数据库shutdown abort:

Tue Jan 19 07:12:36 2010

Shutting down instance (abort)

License high water mark = 980

Instance terminated by USER, pid = 25808

之后在07:12:46时正常重启数据库,并启动成功:

Tue Jan 19 07:12:46 2010

Starting ORACLE instance (normal)

 

分析listener.log:分析大量连接的客户端:

通过统计分析listener.log日志,2.log为最后100000行的listener.log,统计结果如下:


统计2010年1月19日,1-7点之间的192.168.1.6的连接信息:

cat 2.log | grep "19-JAN-2010 01" | grep "establish" | grep "192.168.1.6" | wc -l       result:217

cat 2.log | grep "19-JAN-2010 02" | grep "establish" | grep "192.168.1.6" | wc -l       result:283

cat 2.log | grep "19-JAN-2010 03" | grep "establish" | grep "192.168.1.6" | wc -l       result:275

cat 2.log | grep "19-JAN-2010 04" | grep "establish" | grep "192.168.1.6" | wc -l       result:282

cat 2.log | grep "19-JAN-2010 05" | gre

p "establish" | grep "192.168.1.6" | wc -l       result:290

cat 2.log | grep "19-JAN-2010 06" | grep "establish" | grep "192.168.1.6" | wc -l       result:397

统计2010年1月19日,1-7点之间的132.96.63.75的连接信息:                                 

cat 2.log | grep "19-JAN-2010 01" | grep "establish" | grep "132.96.63.75" | wc -l      result:132

cat 2.log | grep "19-JAN-2010 02" | grep "establish" | grep "132.96.63.75" | wc -l      result:132

cat 2.log | grep "19-JAN-2010 03" | grep "establish" | grep "132.96.63.75" | wc -l      result:132

cat 2.log | grep "19-JAN-2010 04" | grep "establish" | grep "132.96.63.75" | wc -l      result:132

cat 2.log | grep "19-JAN-2010 05" | grep "establish" | grep "132.96.63.75" | wc -l      result:132

cat 2.log | grep "19-JAN-2010 06" | grep "establish" | grep "132.96.63.75" | wc -l      result:85 

统计2010年1月18日,1-7点之间的192.168.1.6的连接信息:                                  

cat 2.log | grep "18-JAN-2010 01" | grep "establish" | grep "192.168.1.6" | wc -l       result:68

cat 2.log | grep "18-JAN-2010 02" | grep "establish" | grep "192.168.1.6" | wc -l       result:20

cat 2.log | grep "18-JAN-2010 03" | grep "establish" | grep "192.168.1.6" | wc -l       result:26

cat 2.log | grep "18-JAN-2010 04" | grep "establish" | grep "192.168.1.6" | wc -l       result:21

cat 2.log | grep "18-JAN-2010 05" | grep "establish" | grep "192.168.1.6" | wc -l       result:69

cat 2.log | grep "18-JAN-2010 06" | grep "establish" | grep "192.168.1.6" | wc -l       result:20

统计2010年1月18日,1-7点之间的132.96.63.75的连接信息: ; 

cat 2.log | grep "18-JAN-2010 01" | grep "establish" | grep "132.96.63.75" | wc -l      result:132

cat 2.log | grep "18-JAN-2010 02" | grep "establish" | grep "132.96.63.75" | wc -l      result:132

cat 2.log | grep "18-JAN-2010 03" | grep "establish" | grep "132.96.63.75" | wc -l      result:132

cat 2.log | grep "18-JAN-2010 04" | grep "establish" | grep "132.96.63.75" | wc -l      result:132

cat 2.log | grep "18-JAN-2010 05" | grep "establish" | grep "132.96.63.75" | wc -l      result:132

cat 2.log | grep "18-JAN-2010 06" | grep "establish" | grep "132.96.63.75" | wc -l      result:132

由统计可见192.168.1.6出现了比平时更多的连接。


Listener.log报错信息:

19-JAN-2010 06:07:33 * (CONNECT_DATA=(SID=vc)(CID=(PROGRAM=)(HOST=__jdbc__)(USER=oracle))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.

6)(PORT=62396)) * establish * vc * 12518

TNS-12518: TNS:listener could not hand off client connection

 TNS-12547: TNS:lost contact

  TNS-12560: TNS:protocol adapter error

   TNS-00517: Lost contact

    HPUX Error: 32: Broken pipe

2010-01-19第一次出现连接失败的时间为06:07:33,客户端为192.168.1.6,该时间点与数据库的alert log报错的时间点极为接近。

TNS-12518: TNS:listener could not hand off client connection

该错误通常表明是由于资源问题导致的连接失败。



AWR报告分析:19号5点-6点AWR报告/tmp/awrrpt_1_15639_15640.html中同样也出现了关于资源限制的警告信息。

Resource Limit Stats

only rows with Current or Maximum Utilization > 80% of Limit are shown

ordered by resource name

                   Current        Maximum        Initial      

Resource Name      Utilization    Utilization    Allocation     Limit

-------------     -------------   ------------   -----------    ------

processes           991           999            1000            1000

sessions&n bsp;           997           1,003          1105            1105

 

 

问题的主要原因是客户端192.168.1.6的大量连接使数据库达到了最大processes限制导致用户无法连接,数据库并没有出现宕机。管理员用户仍然能正常登入数据库对数据库进行重启。