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. В сообщении об ошибке говорится, что системные процессы не найдены. - 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