Является ли KPID глобально уникальным в Sybase?
Может KPID (как select kpid from master..sysprocesses
) быть глобальным и всегда уникальным? (Я обнаружил, что для моего небольшого набора образцов KPID(n+1) ~= KPID(n) + 65536
(2^16), но я хочу знать, могу ли я предположить, что предыдущие подключения к БД kpid уникальны, даже если его предыдущее имя пользователя и spid соответствуют новому loginame
а также spid
)
Приветствия.
BLT.
(Уже ответили) *B) Имя пользователя: как я могу получить имя пользователя из текущего спида? loginame
не столбец в sysprocesses
и я не могу найти никакой таблицы, кроме sysobjects
который имеет столбец с loginame
и я не могу программно получить loginame
из sp_who. Может быть, SQL используется для генерации sp_who
помог бы..
3 ответа
На основании этих документов KPID является уникальным в пределах машины. Он может быть уникальным в кластере, но это кажется маловероятным, поскольку он относится к идентификатору в базовой операционной системе.
Так как это только 32-битное значение, нет никакого способа быть глобально уникальным.
На основании этого глоссария
Версия идентификатора процесса ядра: 11.0 и выше
Идентификатор процесса Adaptive Server, который остается уникальным в течение длительных периодов времени.
"Уникальность" значения имеет временные рамки, но это не гарантируется.
Вы можете перевести suid на имя пользователя, используя SUSER_NAME()
функция например
SELECT spid,
SUSER_NAME(suid) AS login_name
FROM master..sysprocesses
ORDER
BY login_name ASC
Ответ на часть Б)
master..syslogins.suid <-> master..sysprocesses.suid
Например, вы можете получить имя соединения в виде sp_who, перейдя
select p.spid, l.name, p.loggedindatetime
from master..syslogins l, master..sysprocesses p
where l.suid = p.suid
Отвечая на мои собственные вопросы, я помогаю наращивать stackru ^_^