这是在使用 dblib 和 PDO 连接到远程 Sybase 数据库(Sybase 版本 11.0.1.2596)的 PHP 脚本中的 AWS AMI EC2 Linux 实例上运行的。服务器具有具有以下设置的 freetds:
Compile-time settings (established with the "configure" script)
Version: freetds v0.91
freetds.conf directory: /etc
MS db-lib source compatibility: yes
Sybase binary compatibility: yes
Thread safety: yes
iconv library: yes
TDS version: 4.2
iODBC: no
unixodbc: yes
SSPI "trusted" logins: no
Kerberos: yes
有时当我们在 sybase 计算机上运行查询时,我们会收到这样的错误(令牌可能会有所不同):
TDS: unexpected token 95 [0] (severity 0) [(null)]
查询有时甚至会在出现此错误后运行,有时会失败。我在网上搜索过,但找不到此错误的含义或修复方法。这是其中一个查询的示例:
-- 999 | Hammil | 2017-04-05 08:23:29
SELECT
999 as 'site_id',
(select rest_name from micros.rest_def) as 'location',
now() as 'dt_run',
emp_seq,
employee_number as 'obj_num',
last_name,
first_name,
check_number,
xfer_from_check,
xfer_from_type,
xfer_to_check,
xfer_to_type,
check_id,
table_number,
table_name,
group_number,
cover_count,
order_type,
order_type_name,
business_date,
check_open_date_time,
check_closed_date_time,
table_open_date_time,
printed_count,
sub_ttl,
tax_ttl,
auto_svc_ttl,
other_svc_ttl,
paymnt_ttl,
amount_due_ttl,
sp_error
FROM
micros.micros.v_R_guest_checks x
where
x.check_closed_date_time is null;
有时我们会收到此错误:
SQLSTATE[HY000]: General error: 20047 DBPROCESS is dead or not enabled [20047] (severity 1) [(null)]
发生这种情况时,我可以运行
nc -v -w 4 xxx.xxx.xxx.xxx 2638
它返回
Connection to xxx.xxx.xxx.xxx 2638 port [tcp/sybaseanywhere] succeeded!
但我会继续收到错误几分钟,然后它就会消失。
TDS 中的意外标记表示错误的网络数据包已发送到 Sybase 正在侦听的 TCP 端口。
这表明以下两件事之一:
我已经看到 #2 发生在寻找开放端口的安全扫描进程中。
从您的症状来看,这听起来像是网络连接问题。由于 Sybase Anywhere 服务器与您的客户端计算机不在同一网段,因此我倾向于认为客户端需要优雅地处理连接问题。