Sybase sp_who съкращава името на хоста

Свързвам се към sql база данни с помощта на Rapid SQL или isql, предоставен от сървъра на sybase. Когато издавам

sp_who username 

команда Трябва да получа списък със свързани потребители. Аз го правя, но колоната за име на хост е съкратена, така че например, когато адресът на хост е host0001, той се съкращава до host0, това е проблем, защото има много хостове, чиито имена започват с един и същ префикс, напр. host001, host002... Поради това не знам кои процеси блокират моята база данни и не мога да вляза в машината и да убия тези процеси. Нямам права да ги убивам от isql конзолата на базата данни. Трябва да вляза в машината и да убия процеса там (защото имам привилегии да спирам тези процеси). Въпросът е защо sp_who съкращава тази колона и как да го предотвратим.


person Trismegistos    schedule 11.10.2013    source източник


Отговори (1)


sp_who извлича и обединява информация от няколко таблици, за да даде своя отчет. Не е предназначен да произвежда изход, който може да се използва за въвеждане на нещо друго. Ако имате нужда от информация от sp_who, по-добре е просто да стартирате собствена заявка срещу sysprocesses. За съжаление, в този случай извършването на ваша собствена заявка няма да помогне, тъй като името на хоста не се променя от sp_who. В Sybase името на хоста се задава от приложението, което се свързва, а не от сървъра (опитайте select hostname from master..sysprocesses и ще видите).

Едно решение би било да добавите команда set clientname или set 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
person Michael Gardner    schedule 11.10.2013
comment
Благодаря. Това е много изчерпателен отговор. Вие сте разработчик на Sybase? - person Trismegistos; 14.10.2013
comment
Не съм разработчик, но съм бил консултант на Sybase. - person Michael Gardner; 15.10.2013
comment
Жалко е, но се оказва, че Sybase 12.5 няма sysprocesses таблица или поне моят потребител може да издаде sp_who, но не и да избере * от sysprocesses. Съобщението за грешка казва, че sysprocesses не е намерен. - person Trismegistos; 24.10.2013
comment
Опитайте да посочите master..sysdatabases - person Michael Gardner; 24.10.2013
comment
Добре, сега разбирам, че имате предвид select * from master..sysprocesses и това работи. Благодаря отново, че направи живота ми по-лесен. - person Trismegistos; 24.10.2013
comment
Да, това е правилно.. Актуализирах и кода в отговора. - person Michael Gardner; 25.10.2013