原来是它(Oracle.ManagedDataAccess.Client)——再说ORA-12516故障解决(二)

2015-07-16 12:07:53 · 作者: · 浏览: 7
在监听配置文件Listener.ora中添加了静态监听,其中黄色部分为新添加内容。
但是,效果不大。


SID_LIST_LISTENER =
?
? (SID_LIST =


? (SID_DESC =


? ? (SID_NAME = PLSExtProc)


? ? (ORACLE_HOME = c:\\oracle\\product\\10.2.0\\db_1)


? ? (PROGRAM = extproc)


? )


? (SID_DESC =


? ? (SID_NAME = hoegh)


? ? (ORACLE_HOME = c:\\oracle\\product\\10.2.0\\db_1)


? )
? )


LISTENER =


(DESCRIPTION_LIST =


? (DESCRIPTION =


? ? (ADDRESS = (PROTOCOL = TCP)(HOST = DBSERVER)(PORT = 1521))


? ? (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))


? )


)


增大processes初始化参数
黔驴技穷,我又使了这招,可是丝毫不起作用,不同的是以往连接总数是一百三四十,现在增加到了二百七八十,问题依旧。
?结合上面的静态监听,我再次查看listener.log,发现大量TNS-12518和TNS-12560报错,以及少量的TNS-12514报错:


15-6月 -2015 15:39:13 * 12502
?
TNS-12502: TNS: 监听程序没有从客户机收到 CONNECT_DATA


15-6月 -2015 15:39:13 * (CONNECT_DATA=(SERVICE_NAME=hoegh)(CID=(PROGRAM=D:\\HOEGHATS\\HOEGH.exe)(HOST=CLIENT5)(USER=work))) * (ADDRESS=(PROTOCOL=tcp)(HOST=3.16.210.94)(PORT=55359)) * establish * hoegh * 12518


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


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


15-6月 -2015 15:39:13 * (CONNECT_DATA=(SERVICE_NAME=hoegh)(CID=(PROGRAM=D:\\HOEGHATS\\HOEGH.exe)(HOST=)(USER=JDWL))) * (ADDRESS=(PROTOCOL=tcp)(HOST=3.20.16.50)(PORT=2200)) * establish * hoegh * 12518


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


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


15-6月 -2015 15:39:13 * (CONNECT_DATA=(SERVICE_NAME=hoegh)(CID=(PROGRAM=D:\\HOEGHATS\\HOEGH.exe)(HOST=DISPATCHER1)(USER=work))) * (ADDRESS=(PROTOCOL=tcp)(HOST=3.16.210.92)(PORT=50761)) * establish * hoegh * 12518


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


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


15-6月 -2015 15:39:13 * 12502


TNS-12502: TNS: 监听程序没有从客户机收到 CONNECT_DATA


15-6月 -2015 15:39:13 * (CONNECT_DATA=(SERVICE_NAME=hoegh)(CID=(PROGRAM=D:\\HOEGHATS\\HOEGH.exe)(HOST=WINOW-BWMCG6U3V)(USER=JDWL))) * (ADDRESS=(PROTOCOL=tcp)(HOST=3.20.1.52)(PORT=3487)) * establish * hoegh * 12518


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


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


15-6月 -2015 15:39:13 * (CONNECT_DATA=(SERVICE_NAME=hoegh)(CID=(PROGRAM=D:\\HOEGHATS\\HOEGH.exe)(HOST=ATSSERVER1)(USER=Administrator))) * (ADDRESS=(PROTOCOL=tcp)(HOST=3.16.210.74)(PORT=3404)) * establish * hoegh * 12518


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


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


15-6月 -2015 15:39:13 * (CONNECT_DATA=(SERVICE_NAME=hoegh)(CID=(PROGRAM=D:\\HOEGHATS\\HOEGH.exe)(HOST=CLIENT2)(USER=Administrator))) * (ADDRESS=(PROTOCOL=tcp)(HOST=3.16.210.66)(PORT=2229)) * establish * hoegh * 12518


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


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


重建监听器
重启设备是一个“大招”,以前碰到“疑难杂症”重启往往能够收到奇效。最后,我甚至都想着重建数据库了,不过考虑着动静有点大,可能会影响其他人工作,只好作罢;那我重建一下监听试一下吧。


于是,我通过netca删除原有监听,重建监听程序listener,都采用默认配置。


可是,问题依旧。


更换微软驱动System.Data.OracleClient
真是没招了,最后和部门的架构师一起讨论这个问题,会不会和数据库驱动有关系呢。
?我们的应用程序是用C#开发的,连接数据库需要数据驱动支持,以前我们采用的是微软的数据库驱动System.Data.OracleClient,最近这个项目换成了Oracle官方驱动Oracle.ManagedDataAccess.Client。至于为什么要换,最主要是考虑Oracle官方驱动部署方便,无需安装Oracle数据库客户端。


说干就干,把实验室的所有客户端设备的驱??都更换为System.Data.OracleClient,我再去查看session连接状况,看到输出结果哭了都快,session数真的好少啊!!!


SQL> set pagesize 150
?
SQL> set linesize 200


SQL> col username for a10


SQL> col terminal for a20


SQL> col program for a20


SQL> select username,program,terminal,count(*) from v$session group by rollup(username,program,terminal);


USERNAME PROGRAM TERMINAL COUNT(*)


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


......此处省略内容


? ? ? ? ? ORACLE.EXE (q000) 1


? ? ? ? ? ORACLE.EXE (q001) DBSERVER 1


? ? ? ? ? ORACLE.EXE (q001) 1


? ? ? ? ? ? ?