оракул, что представляет session_id в * _scheduler_job_run_details - PullRequest
1 голос
/ 10 июня 2019

Я не могу понять, что означает SESSION_ID в *_scheduler_job_run_details.

Есть два значения, разделенные комой.Первый сильно меняется, второй меньше, например.посмотрите на приведенный ниже пример:

+------+------------+
| sid  | session_id |
+------+------------+
| 6072 | 6072,8980  |
+------+------------+

Это выбирается с помощью запроса ниже:

SELECT s.sid
    , j.SESSION_ID
FROM
   v$session s
LEFT OUTER JOIN
    (select SESSION_ID
        , CAST(SUBSTR(SESSION_ID, 0, INSTR(SESSION_ID, ',')-1) as NUMBER) as ID1
        , CAST(SUBSTR(SESSION_ID, INSTR(SESSION_ID, ',')+1, LENGTH(SESSION_ID) - INSTR(SESSION_ID, ',')) AS NUMBER) as ID2
    from all_scheduler_job_run_details) j
ON j.ID1 = s.sid
    OR j.ID2 = s.sid
;

Кажется, что первое число представляет sid из v$session, что соответствует Oracle docs - это Session identifier, но SESSION_ID из *_scheduler_job_run_details в соответствии с это Oracle docs .Но это, похоже, не коррелирует с sql_text из v$sql - если я возьму sql_id из v$session для этого sid, кажется, что этот сеанс был сеансом пользователя, который сделал некоторые вещи, а не мой job .

== РЕДАКТИРОВАТЬ ==

Я обнаружил, что sid можно использовать повторно, поэтому он правильно соединяется.session_id просто объединяется с более новым запросом, чем запрос, выполняемый заданием.Тем не менее, этот другой «идентификатор» означает что-нибудь еще?Может ли он ссылаться на какой-либо параметр более старого запроса, например, на serial #?

1 Ответ

1 голос
/ 10 июня 2019

Да, session_id равен sid,serial# - комбинация является уникальным идентификатором для сеанса в v $ session (в течение времени жизни экземпляра базы данных).Вы можете увидеть это в других местах, например, если вам нужно запустить ALTER SYSTEM KILL SESSION, вы должны предоставить ему комбинированный sid + serial #.

Так что, если ваша работа выполнялась на прошлой неделе с session_id = '6072,8980', но кто-тов настоящее время подключенный в v $ session с sid = 6072 and serial# = 9504, вы можете сказать, что это другой сеанс, а не тот, с которого выполнялась ваша работа.

sql_id в v $ session просто показывает SQLкоторый этот сеанс в настоящее время выполняется - поэтому он будет нулевым для сеансов INACTIVE, так как они сейчас не работают.Если ваша работа завершена, вы не увидите ее sql_id нигде в v $ session.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...