Является ли 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 ^_^

Другие вопросы по тегам