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

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

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这个包
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值