오라클 세션과 프로세스의 차이점 및 분석
접속, 세션 및 프로세스를 연결합니다.
각 SQL 로그인을 연결이라고 하며 각 연결은 하나 이상의 세션을 생성할 수 있습니다. 데이터베이스가 전용 서버 모드에서 실행 중인 경우
세션당 하나의 서버 프로세스에 해당합니다. 데이터베이스가 서버 공유 모드에서 실행 중인 경우 하나의 서버 프로세스가 여러 세션에 서비스를 제공할 수 있습니다.
회화와 과정의 관계, 톰은 책에서 아주 분명하게 썼다.
한 프로세스에 0,/kloc-0 개 이상의 세션이 있을 수 있습니다.
세션은 이 프로세스나 그 프로세스에도 존재할 수 있습니다.
오라클 세션 및 프로세스 연구
사용 방법:
먼저 v$session 및 v$process 의 주요 필드 속성을 살펴봅니다.
V$session(sid, 일련 번호, paddr, 사용자 이름, 상태, 시스템, 터미널, sql_hash_value, sql_address,,,)
V$process (주소, spid,,,)
V$session 의 paddr 은 v$process 의 addr 에 해당합니다. 즉, session 은 데이터베이스 호스트의 프로세스 주소에 해당합니다.
여기서 세션에서 실행 중인 SQL 문을 찾아야 합니다. 이 시점에서 다음 명령문을 질의할 수 있습니다.
Sql_text 를 선택합니다
시작 v $ sqltext _ with _ newlines
Where (hash_value, address) in (select SQL _ hash _ value, SQL _ address from v $ session where sid Sid) 주소, 항목 수를 기준으로 정렬합니다.
세션을 수동으로 죽여야 하는 경우 다음 질의와 같이' alter system kill session”SID, serial #' immediate' 를 사용할 수 있으며 세션 상태는 killed 로 표시되고 세션의 해당 프로세스 주소는 동일한 가상 주소를 가리킵니다
SQL & gtselect sid, serial#, paddr, status from v$session 여기서 username =' SHIYIHAI
SID 일련 번호 PADDR 상태
----
23414409 c000000b2b ADB 28 비활성
24514374 c00000b2 bab748 비활성
SQL> 즉시 시스템 종료 세션 변경' 234, 14409';
시스템이 바뀌었다
SQL & gtselect sid, serial#, paddr, status from v$session 여기서 username =' SHIYIHAI
SID 일련 번호 PADDR 상태
----
23414409 c00000b 2c750b8 이 사망했다
24514374 c00000b2 bab748 비활성
SQL> 즉시 시스템 종료 세션 변경' 245, 14374';
시스템이 바뀌었다
SQL & gtselect sid, serial#, paddr, status from v$session 여기서 username =' SHIYIHAI
SID 일련 번호 PADDR 상태
----
23414409 c00000b 2c750b8 이 사망했다
24514374 c00000b 2c750b8 이 사망했다
SQL>
우리는 이미 살해된 세션이 즉시 자원을 확보할 수 없는 경우가 많다는 것을 알고 있다. 우리는 OS 에서 상응하는 과정을 죽여야 한다. 그러나 세션의 paddr 이 가상 주소로 변경되었기 때문에 v $ 프로세스를 연결할 수 없으며 프로세스의 spid 프로세스 번호를 찾을 수 없습니다. 이 시점에서 다음 질의를 실행할 수 있습니다.
SQL> 사용자 이름, 상태 선택,
2 x.ADDR, x.KSLLAPSC, x.KSLLAPSN, x.KSLLASPO, x.KSLLID 1R, x.KSLLRTYP
3 디코딩 (bitand(x. ksupflg, 2), 0, null, 1)
4 x$ksupr x, v$session s 에서
5 여기서 s.paddr(+)=x.addr 입니다
6 과 bitand(ksspaflg, 1)! =0
7 과 s.status 가 비어 있습니다.
사용자 이름 상태 addr ksllapsc ksllapsn ksllaspo ksl lid1r ksllrtyp decode (bitand (X. ksupflg, 2), 0,
-------
C0000000B2B58D08 0 0 0 0
C000000b2b a4688 298 9 46690
C000000b2 bab748116 4675197ev
C000000b2 badb28116 4675197ev
SQL>
또는 다음 명령문을 질의합니다.
SQL> v$process p 에서 p.addr 을 선택합니다. 여기서 PID<& gt 1
2 빼기
3 v$session s 에서 s.paddr 을 선택합니다
주소
--
C0000000B2BA4688
C0000000B2BAB748
C0000000B2BADB28
SQL>
질의 결과에서 종료된 세션에 해당하는 프로세스 주소를 찾을 수 있습니다. 그런 다음 다음 질의와 같이 프로세스 주소를 통해 해당 프로세스 번호를 질의할 수 있습니다.
Sql> select spid from v $ process where addrin ('c000000b2 bab748',' c00000b2 badb28');
SPID
--
130 13
130 15
마지막으로 운영 체제에서' kill -9 130 13' 과' kill-9130/kloc-'를 실행합니다