免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2031 | 回复: 2
打印 上一主题 下一主题

[转贴]关于1608错误 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-07-10 09:21 |只看该作者 |倒序浏览
无言独上西楼 发表于 2005-5-30 7:54:37

 1608错误是ASE常见的错误之一,通常是网络原因,正如手册上所说:
This error occurs when a client process stops without informing Adaptive
Server and a subsequent attempt by Adaptive Server to send results to this
client fails.
Error 1608 is usually not serious and may be viewed as notification that a client
process no longer exists. Some of the possible reasons a client process can
disappear are:
• The client application was killed or ended abnormally
• The client machine was powered off or was restarted
• There is excessive network traffic
• The network has been shut down
 然而,事非绝对。
 我曾经碰到过一个应用总是产生1608错误。许多人认为是网络状况不佳。我并不认同,但这个1608似乎并没有其它影响,于是便没有管它。直到数据库升级到12.5.2+ESD2后,这个1608导致的问题就大了--无法连接数据库,因为listener消失,这个时候我才专门来分析。根据以前 TCP/IP应用开发的经验,我可以断定TDS协议在关闭时的交互应该是这样的:
 客户端应用         ASE数据库
 TDS层请求关闭会话 --> 确认关闭
           <--
 关闭TCP连接    --> 关闭TCP
 显然在特定情况下,客户端会导致数据库产生1608错误,即客户端在请求关闭TDS层会话后,在未得到数据库的确认信息之前,就直接关闭了TCP连接。
 自12.5.1开始,ASE引入了动态Listener,这显然是为ASE 15作准备。ASE在引入动态Listener的同时,也引入了不少 BUG。可以相信ASE在处理这种特定情况时,考虑不周全,或者说压根就没有想到会有人(应用)不遵从TDS协议,因而存在BUG。既然是ASE的 BUG,但是也不能等SYBASE出补丁,我们也无从向SYBASE提交这个BUG,那么就要找出源头了。这期间受应用的实际行为与开发人员描述的行为完全不一不样的影响,走了不少弯路,最后目光锁定在OLEDB上。
 查看OLEDB的readme,有一个CR引起了我的注意,如下:
Version 02.70.0010  (12.5.0/P-EBF10719/02.70.0010)
......
CR 294297: Oledb Provider would close the network socket after TDS_LOGOUT, without waiting for the TDS_DONE acknowledgement from the ASE.
 呵呵,果然如此。这让我想起了我以前做的网络应用。我写的服务端应用在数据包检查的一个分支(按照通讯协议,客户端传送过来的数据包是不应该进入这个分支的)上一时疏漏,没有释放信号量。同事在写客户端(C/C++)时,都是按照我们的通讯协议来做的,一直没有问题。直到后来我用VB全部重写客户端时,由于VB的字符串处理与C/C++不一样,而导致进入了那个通常不可能进入的分支,结果就不用说了。
 闲话少说,回到正题。通知开发人员更新OLEDB及MDAC版本后,1608错误消失,数据库也恢复正常。

 后记:后来在网上查到了开源的TDS协议的JAVA实现。它在处理这个问题上也是直接关闭连接。

后记:SYBASE的网站下载SDK的最新的PATCH或完整包,上MS的网站下载MDAC 2.7,安装即可。SP1无关
是客户端的。OLEDB这个BUG很早就FIX掉了,但估计很多开发人员都没有及时更新OLEDB DRIVER。
-==================-
原文地址:http://www.sybasebbs.com/blog/more.asp?name=flybean&id=17

论坛徽章:
4
2015年亚洲杯之阿联酋
日期:2015-03-10 10:32:022015年亚洲杯之阿曼
日期:2015-03-10 14:53:222015亚冠之水原三星
日期:2015-07-18 15:40:262015亚冠之塔什干棉农
日期:2015-07-27 20:52:05
2 [报告]
发表于 2005-07-12 09:24 |只看该作者

[转贴]关于1608错误

产生1608的原因有很多,可能是网络原因,也有可能是驱动或应用程序原因。我们这里曾经遇到过有人写脚本bcp out,但bcp的目标目录属主不正确,所以每次执行此脚本都会报一个1608,当然数据也没有了。

论坛徽章:
0
3 [报告]
发表于 2005-07-12 16:29 |只看该作者

[转贴]关于1608错误

分析得不错,但对于某些网络情况不佳的用户来说确实是这样的问题,通常客户会直接丢失TCP链接,我们采用的办法是加长延时(美国老笑我们回到了他们的六、七十年代),有什么办法,随着现在通道状态的改善,我们又调回来了!哈哈(这下美国老反过来说我们在威胁他了)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP