我无法理解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
的{{1}},与Oracle docs一致的是v$session
,但是Session identifier
的{{1}}也是如此}根据this Oracle docs。但这似乎与SESSION_ID
中的*_scheduler_job_run_details
没有关联-如果我为此sql_text
从v$sql
中提取sql_id
,则似乎该会话是用户的会话执行了一些操作,而不是我的工作。
== EDIT ==
我发现v$session
可以重复使用,因此可以正确连接。 sid
仅与较新的查询(然后是作业运行的查询)结合在一起。不过,这个其他“ id”是否意味着一切……?它可以链接到旧查询的某个参数,例如序列号吗?
答案 0 :(得分:1)
是的,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
仅显示该会话当前正在运行的SQL -因此,对于INACTIVE会话,该字段将为空,因为它们目前尚未运行。如果您的工作完成,则在v $ session中的任何地方都不会看到它的sql_id。