2013-10-11 2 views
3

Я подключаюсь к sql databse, используя Rapid SQL или isql, предоставляемые сервером sybase. Когда я выпускаюSybase sp_who усекает имя хоста

sp_who username 

command Я должен получить список подключенных пользователей. Я делаю, но столбец имени хоста усечен, например, когда адрес хоста - host0001, он усекается на host0, это проблема, потому что есть много хостов, имена которых начинаются с того же префикса, например. host001, host002 .... Из-за этого я не знаю, какие процессы блокируют мою базу данных, и я не могу войти в систему и убить эти процессы. У меня нет привилегий, чтобы убить их из консоли isql базы данных. Мне приходится регистрироваться на машине и убивать процесс там (потому что у меня есть привилегии, чтобы остановить эти процессы). Вопрос в том, почему sp_who усекает этот столбец и как его предотвратить.

ответ

4

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 
+0

Спасибо. Это очень исчерпывающий ответ. Вы разработчик Sybase? – Trismegistos

+0

Не разработчик, но я был консультантом Sybase. –

+0

Это питти, но оказалось, что у Sybase 12.5 нет таблицы sysprocesses или, по крайней мере, мой пользователь может выпустить sp_who, но не выбрать * из sysprocesses. В сообщении об ошибке указано, что sysprocesses не найден. – Trismegistos

Смежные вопросы