Sybase ASE 16.0数据库无法连接报错There is a protocol packet error. An illegal length was received

1、问题现象:

使用isql无法连接Sybase ASE 16.0数据库服务器,报错:

CT-LIBRARY error:
        ct_connect(): network packet layer: external error: There is a protocol packet error. An illegal length was received

查看Sybase ASE 16.0的错误日志文件,发现除了Cannot send, host process disconnected: XXXXXX-PC 29464 suid: 1外无任何错误信息。

数据库服务器版本:Adaptive Server Enterprise/16.0/EBF 22383 SMP/P/x86_64/Enterprise Linux/asecepheus/3530/64-bit/FBO/Sun Feb 16 06:09:40 2014

2、问题分析:
当前Sybase ASE 16.0服务器上已有连接919个。

在Sybase ASE 16.0数据库服务器所在操作系统平台上使用tcpdump抓包:
tcpdump  -i ens33 port 5000 -s0 -X -vvvv

再次使用isql尝试登录ASE 16.0数据库服务器,依然无法登录报错There is a protocol packet error. An illegal length was received。

tcpdump抓包显示,从Sybase ASE服务器返回给客户端的数据包中包含错误信息:

There is in sufficient heap memory to allocate 3064 bytes . Please increase configuration parameter 'heap memory per user' or try again when there is less activity on the system.
Invalid role string '' entered

查看ASE 16.0的参数文件发现heap memory per user为默认值4096。

参数heap memory per user配置每个用户的堆内存量。堆内存池是启动时创建的内部内存,任务根据需要用它来动态分配内存。
如果运行使用宽列的任务,它需要使用堆栈中的大量内存,此时内存池就显得非常重要。堆内存分配临时缓冲区,以使这些宽列任务顺利完成。任务结束后,任务所用的堆内存返回堆内存池中。内存池的大小取决于用户的连接数。SAP 建议将 heap memory per user 设置为逻辑页大小的三倍。

3、问题处理:

当前使用isql无法连接Sybase ASE 16.0数据库服务器无法在线增加参数heap memory per user的值。

等待一段时间,其它数据库连接退出了释放了heap memory per user;

或者在Sybase ASE 16.0数据库服务器所在操作系统平台上终止客户端进程(如果有):

netstat -anp | grep 5000 | grep -v '/dataserver'

如果使用isql能够连接Sybase ASE 16.0数据库服务器,在线修改参数:heap memory per user

sp_configure "heap memory per user", 32768

如果仍然无法连接Sybase ASE 16.0数据库服务器,那么修改参数文件:

heap memory per user = 32768

然后重启Sybase ASE 16.0数据库服务器。

4、CR 815501:

CR 815501

Insufficient heap memory message generated without a 712 error reported in the ASE error log. User with sa_role is then unable to log in to ASE to configure an increase in heap memory, attempting to do so gets unhelpful error message "network packet layer: external error: There is a protocol packet error. An illegal length was received.

This CR reserves some heap memory for the emergency login reserved for users with sa_role.

CR 815501 截止2020-08暂时没有补丁修复。只能通过增加参数heap memory per user来防止该问题。

  • 本文链接地址:http://www.sybrepair.com/ase-16-0-can-not-connect-an-illegal-length-was-received.htm
  • 本文为dbainfo个人原创,请在尊重作者劳动成果的前提下进行转载;
  • 转载务必注明原始出处 : Sybase数据库技术,数据库恢复专家
  • 对《Sybase ASE 16.0数据库无法连接报错There is a protocol packet error. An illegal length was received》有何疑问或见解,请在本文下方发表;
  • 对网站还有其他问题或建议,请提交在留言板,谢谢!
  • 目前还没有任何评论.
    :wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)