ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 应用系统出现tns-12518 ora-7445 ora-600错误

应用系统出现tns-12518 ora-7445 ora-600错误

原创 Linux操作系统 作者:lucy_lxy 时间:2010-09-27 15:18:35 0 删除 编辑

源库为10.1.153.231  orcl  oracle版本:10g

             目标库为10.1.153.138  cnpclz1  oracle版本:817

程序使用数据链路反复从源库里面查询数据,插入到目标库里面,调用另一个exe文件进行执行。 

项目人员说监听总是停止,查询监听的日志文件,发现大量错误:

08-9月 -2009 22:06:03 * (CONNECT_DATA=(SID=orcl)(CID=(PROGRAM=C:\oracle\product\10.2.0\db_1\bin\emagent.exe)(HOST=GSWTUSJFBJ83QM2)(USER=SYSTEM))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.1.16.211)(PORT=1276)) * establish * orcl * 0

08-9月 -2009 22:06:31 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=__jdbc__)(USER=))(SERVICE_NAME=orcl)) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.1.16.211)(PORT=1279)) * establish * orcl * 12518

TNS-12518: TNS: 监听程序无法分发客户机连接

 TNS-12560: TNS: 协议适配器错误

 

查询网上错误ORA-12518: TNS: 监听程序无法分发客户机连接,可能是如下的原因:客户连接到监听器后,监听器把客户重定向到调度程序端口(很可能不是1521端口),由于操作系统问题,这些连接会被拒绝。如果是java连接oracle的问题,连接出现ora-12518 的问题,查询了服务器仍然是dedicated的连接方式,说是在oracle的监听器LISTENER.ORA头加上

direct_handoff_ttc_LISTENER=off 这么一句话就OK了 

 

DIRECT_HANDOFF_TTC_LISTENER = OFF命令 回收关闭掉长久不用连接

 

设置监听的跟踪文件

TRACE_LEVEL_LISTENER = USER

TRACE_DIRECTORY_LISTENER = C:\oracle\product\10.2.0\db_1\NETWORK\trace

TRACE_FILE_LISTENER = LISTENER1.trc 

 

 同时查看目标库的alert文件,发现出现大量600  7445:

Fri Sep 10 21:16:17 2010

Errors in file c:\oracle\product\10.2.0\admin\cnpclz1\udump\cnpclz1_ora_3116.trc:

ORA-00600: 内部错误代码, 参数: [kksfbc-reparse-infinite-loop], [0x74E7664], [], [], [], [], [], []

 

Fri Sep 10 22:29:03 2010

Thread 1 advanced to log sequence 178

  Current log# 3 seq# 178 mem# 0: C:\ORACLE\PRODUCT\10.2.0\ORADATA\CNPCLZ1\REDO03.LOG

Sat Sep 11 01:00:38 2010

Errors in file c:\oracle\product\10.2.0\admin\cnpclz1\udump\cnpclz1_ora_1576.trc:

ORA-00600: 内部错误代码, 参数: [kksfbc-reparse-infinite-loop], [0x9489F38], [], [], [], [], [], []

 

Sat Sep 11 01:06:16 2010

Errors in file c:\oracle\product\10.2.0\admin\cnpclz1\udump\cnpclz1_ora_3436.trc:

ORA-07445: 出现异常错误: 核心转储 [ACCESS_VIOLATION] [_kksfbc+12153] [PC:0x832B49] [ADDR:0x28] [UNABLE_TO_READ] []

 

还有大量类似信息:

Wed Sep 15 11:56:45 2010

Thread 1 cannot allocate new log, sequence 221

Checkpoint not complete

 

 检查监听,确实不再出现12518的错误了

 

第二步:同时调整应用,修改程序使用绑定变量,同时减少提交的次数:

在pb里面使用绑定变量的方式:

PREPARE SQLSA  FROM " insert into t1(rq,xtlb,idlb,id,xh,lxml) VALUES (?,?,?,?,?,?)" using sqlca;

 EXECUTE SQLSA   using :ist_owc.czrq,:gs_xtlb,:gs_idlb,:ls_code,:li_xh,:ls_data;

 

在java程序里面要用prepareStatement 进行变量绑定

 

(但是修改后的程序在对2个表抽取时候出现cpu 100%的情况,后来只能又改回原来的方式,本想跟踪下没继续)        

第三步、处理Checkpoint not complete问题

Thread 1 cannot allocate new log, sequence 221

Checkpoint not complete

checkpoint not complete, cannot allocate new log(2007-07-27 14:42:13)

 

当oracle重用一个日志文件的时候,该日志文件所保护的处于Buffer cache中的脏块(dirty buffer),必须写回磁盘,且必须纪录checkpoint的位置在控制文件和数据文件头。这个过程叫做检查点checkpoint.

发生checkpoint not complete, cannot allocate new log ,表示要重用的日志文件的检查点还没有完成,被日志文件保护的脏块还没有完全被写回磁盘。必须等待该日志文件的checkpoint完成,才可以重新使用该日志文件。

      V$LOG中STATUS为Active的,表示日志文件checkpoint未完成,Inactive表示checkpoint完成,current表示为当前LGWR写的日志文件。在实例恢复的时候,oracle需要使用到处于Active和Current状态的日志文件。

当因为检查点没有完成而不能重用日志文件的时候,从v$session_wait中可以看到很多session等待log file switch (checkpoint incomplete)事件,系统基本处于hang的状态。

查询了日志文件,都是1兆的大小,3个日志组: 

增加日志组然后增大日志文件:

alter database add logfile group 4 size 25m;

alter database add logfile group 5 size 25m;

 

alter system switch logfile;

alter database drop logfile group 1;

alter database drop logfile group 2;

alter database drop logfile group 3;

alter database add logfile thread 1 group 1 size 25m;

 

alter database add logfile group 1 ('d:\oracle\oradata\orcllz\redo01.log') size 25m reuse;

alter database add logfile group 2 ('d:\oracle\oradata\orcllz\redo02.log') size 25m reuse;

alter database add logfile group 3 ('d:\oracle\oradata\orcllz\redo03.log') size 25m reuse;

alter database add logfile group 4 ('d:\oracle\oradata\orcllz\redo04.log') size 25m reuse;

alter database add logfile group 5 ('d:\oracle\oradata\orcllz\redo05.log') size 25m reuse;

四、查看内存的设置,感觉太大,怀疑应用耗尽了内存才会出现ora-7445 ora-600的错误,故缩小内存的应用reparse-infinite-loop:

 Data_buffer  1g    缩为  800m

 Sga        350m     缩为   300m

 

五、查询网上,10g有个bug,需要在10.2.0.4版本fixed

内存泄露显示遇到Bug 6494146了,下载了p6810189_10204_Win32.zip这个包

 

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

下一篇: 杨廷昆的空间
请登录后发表评论 登录
全部评论

注册时间:2010-09-27

  • 博文量
    124
  • 访问量
    391599