1、ORA-12518 TNS:监听程序无法分发客户机连接 解决办法(2009-11-20 10:44:23) 转载标签: 杂谈分类: oracle数据库ORA-12518: TNS:listener could not hand off client connection2008-06-23 08:57ORA-12518: TNS:listener could not hand off client connectionCause: The process of handing off a client connection to another process failed.Action: T
2、urn on listener tracing and re-execute the operation. Verify that the listener and database instance are properly configured for direct handoff. If problem persists, call Oracle Support.先试试 connect / as sysdba,看行不行,如果行的话,再试试 connect / as sysdba看看监听配置是否有问题。如果这一步有问题,说明监听这块有问题。1.cmd2.sqlpls /nolog3.con
3、nect sys/test as sysdba没有问题1.cmd2.sqlplus /nolog3.connect sys/testtest as sysdbaORA-12518: TNS:listener could not hand off client connection说明监听有问题查到了相关资料如下:http:/www.dba- reason ORA-12518 is being throw may be because of DEDICATED connections because Oracle 10g has a value of PROCESSES is defaulted
4、 at 150 which can be lower than necessary in a production system. Also, in pre-9i MTS, ORA-12518 may be thrown in SHARED SERVER because the dispatcher may have reached the maximum connection value, so it denies all other.There are two solutions for ORA-12518 depending on which symptom you may be exp
5、eriencing.a.For the DEDICATED occurrence of ORA-12518, you would need to try increasing the PROCESSES parameter so that it can handle the needed number of processes. You can ensure that you have the needed value by monitoring the listener log for ORA-12518. Also, note that because the PROCESSES para
6、meter is static, the database will need to be bounced.b.If you are experiencing ORA-12518 because of a shared server issue, you first would need to use the command below to shutdown the dispatcher:SQL alter system shutdown immediate D001;Then, add on new dispatchers:SQL alter system set DISPATCHERS
7、= (protocol=tcp)(dispatchers=3);通过以上资料分析得出可能出现问题的原因有两种:一是 processes值设的过小,二是需要增加参数 DISPATCHERS。考虑到之前经常遇到 ora-00020超出最大进程数的问题在安装数据库的时候已经把 processes设到 800了,为保险起见再 show parameter processesSQL show parameter process;NAME TYPE VALUE- - -aq_tm_processes integer 0db_writer_processes integer 1gcs_server_proc
8、esses integer 0job_queue_processes integer 10log_archive_max_processes integer 2processes integer 1000再查进程数SQL select count(*) from v$session;COUNT(*)-224所以最后得出结论应该不是 processes的问题,应该用 b方法来解决1.connect sys/test as sysdba2.show parameters dispatchers;NAME TYPE VALUEdispatchers string (protocol=tcp)(service=oracle10xdb)max_dispatchers integer 5.SQLalter system set dispatchers = (protocol=tcp)(dispatchers=3)(service=oracle10xdb);system altered问题解决。当然根据实际情况你也可以用 a方法解决,可以用 show parameters processes;命令查看 processes的值,数据库在安装时默认为 150,对于大型应用,32 位的 oracle一定要注意这个问题