SELECT L.OBJECT_ID, L.SESSION_ID, L.ORACLE_USERNAME, L.OS_USER_NAME, L.LOCKED_MODE, D.OBJECT_NAME FROM V$LOCKED_OBJECT L, DBA_OBJECTS D WHERE 1=1 AND D.OBJECT_ID = L.OBJECT_ID ;
오라클에서 SESSION_ID외에 고유 구분자로 SERIAL#가 있는 이유는, session은 재활용되기 때문이라고 볼수 있습니다. 예를 들어, 하나의 특정 세션을 닫고 새로운 세션을 열 경우, 최악의 경우 동일한 세션이 다음에 오는 세션에 할당될 가능성이 있습니다. 특정 사용자를 구분하거나, 연결 kill 등을 하기위해 session id외에 값이 필요하여 serial number가 필요하게 되었습니다.
case의 예)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
SQL> select sid, serial# from v$session where program like '%Pl%'; SID SERIAL# ---------- ---------- 139 37758 142 41671 SQL> select sid, serial# from v$session where program like '%Pl%'; select sid, serial# from v$session where program like '%Pl%' Not logged on <---------- 여기서 로그 오프 SQL> select sid, serial# from v$session where program like '%Pl%'; SID SERIAL# ---------- ---------- 139 37768 142 41683 <----------- 오라클에서 동일한 sid를 부여했지만, SERIAL# 은 달라짐