3

我正在使用 sybase 服务器提供的 Rapid SQL 或 isql 连接到 sql 数据库。当我发出

sp_who username 

命令我应该得到连接用户的列表。我这样做了,但是主机名列被截断了,例如,当主机地址为 host0001 时,它会被截断为 host0,这是一个问题,因为有许多主机名以相同的前缀开头,例如 host001、host002 .... 因此我不知道哪些进程阻塞了我的数据库,我无法登录机器并杀死这些进程。我没有权限从数据库 isql 控制台杀死它们。我必须登录到机器并杀死那里的进程(因为我有权停止这些进程)。问题是为什么 sp_who 截断此列以及如何防止它。

4

1 回答 1

5

sp_who从几个表中提取和连接信息以提供报告。它的目的不是产生可用于输入其他内容的输出。如果您需要来自 sp_who 的信息,最好只针对sysprocesses. 不幸的是,在这种情况下,进行自己的查询将无济于事,因为主机名不会被sp_who. 在 Sybase 中,主机名是由正在连接的应用程序设置的,而不是由服务器设置的(尝试一下select hostname from master..sysprocesses,您会看到)。

一种解决方案是添加set clientnameorset clienthostname命令作为来自这些其他客户端的连接字符串的一部分。我相信这可以通过 ODBC 完成。否则,您可以使用该sysprocesses.ipaddr列来区分主机:

select fid, spid, status, suser_name(suid), clienthostname, ipaddr
from master..sysprocesses
where suid = suser_id('username')
order by ipaddr, spid
于 2013-10-11T15:19:23.460 回答