龙空技术网

ORA-12560 问题的分析

杨建荣的学习笔记 126

前言:

现在兄弟们对“plsql协议适配器错误 12560”可能比较着重,小伙伴们都需要知道一些“plsql协议适配器错误 12560”的相关知识。那么小编同时在网络上网罗了一些对于“plsql协议适配器错误 12560””的相关内容,希望小伙伴们能喜欢,兄弟们一起来学习一下吧!

来自路勇同学投稿,在此感谢。

作者:路勇 南京恩瑞特有限公司

近日公司软件应用客户端连接数据库时不时出现ORA-12560错误,通过PL/SQL工具、NetManager工具测试连接数据服务器都正常,上网查找ORA-12560方法解决尝试以后都没有成功,自己以前从来不会写记录,但是希望遇到类似问题的朋友不要像我一样很茫然。

应用客户端系统Win7,数据库版本Oracle(11.2.0),应用开发语言C,以下是分析步骤:

1. 在sqlnet.ora文件中开启日志记录功能

文件位置,”D:\app\lenovo\product\11.2.0\client_1\network\admin”,根据自己按照路径获取修改。

在文件中加入以下内容:

Trace_level_client=16

Trace_directory_client=D:\OracleLog

Trace_unique_client=on

Trace_timestamp_client=on

Diag_adr_enabled=off

tnsping.trace_directory=D:\OracleLog

tnsping.trace_level=admin

日志会在OracleLog文件中产生。

2. 分析OracleLog日志

产生ORA-12560日志如下:

connection refused - trying again in 16 seconds.

TCP连接拒绝,查找了相关资料,刚开始怀疑系统端口不够或者过多的TIME_WAIT连接造成的,修改了TCP注册表参数以后还是没有解决。

nserror: nsres: id=0, op=65, ns=12560, ns2=0; nt[0]=530, nt[1]=55, nt[2]=0; ora[0]=0, ora[1]=0, ora[2]=0

这句日志分析,查找了Oracle文档,没有找到nserror: nsres参数字段意思,自己只有慢慢异想天开,突然间nt[1]=55,这个字段55让我摇摆不定,55难道是系统错误码或者TCP错误码,自己查阅了系统错误码或者TCP错误码。

只有找到TCP错误码有点类似,ENOBUFS (10055):无缓冲区空间可用。难道是应用进程内存泄漏或者内存资源不足引起的吗?

3. 提交大小

通过任务管理器查看应用进程内存才14.7M,也不大啊,摸索了一天,打开性能监视器查看进程发现进程提交大小很大,是不是发现问题了,自己很兴奋。

提交大小:1059kb

查阅资料提交大小=内存(专用工作集)+页面缓存 ,但是进程显示提交大小怎么大,肯定是程序问题。

4. 如何解决

内存资源问题,肯定是代码或者软件架构问题,自己把整个工程中的变量声明、宏定义、文件引用都重新规范化,把工程重新新建在添加,最后编译通过运行,主要有:

1)开发工程规范化,合理使用.h和.c文件,编写代码不冗余,每个文件代码量合理控制。

2).变量声明合理化,.c文件声明变量,.h文件extern变量并加入宏控制头文件多次引用,其它文件如果使用变量包含头文件即可。

3).宏合理化使用,将工程中经常使用的数据定义成宏,可以提高程序效率。

进程提交大小变成46kb左右,在反反复复测试连接数据库竟然没有问题了,有的时候解决问题就是凭感觉。

5. 学习

通过今日分析问题,让我知道了,里面有大量的文档,自己以后多学习。

标签: #plsql协议适配器错误 12560 #oracle用户解锁 12560