728x90
반응형
특정 세션이 오래걸리면서 뒤따른 세션들이 주루룩 물려 병목현상 발생.. 그래서 해당 세션을 db에서 잘라내야 했다.
1 현재 계속 수행중인 세션의 id를 찾아, 2 해당 세션id를 가지고 있는 세션을 kill 해야 했다.
1. 계속 수행중인 세션 id 찾기
우선, db 접속이 발생하면 세션이 생성되어 고유 id와 serial number을 가진다. 이에 대한 기본적인 정보는 v$session 뷰에 위치한다.
오라클은 데이터베이스 접속이 이루어지면 세션을 시작한다. 세션은 사용자가 데이터베이스에 연결되어 있는 동안 계속 유지된다.
세션이 시작되면 오라클은 해당 세션에 세션 ID(SID)를 할당한다.
v$session에서 각 세션은 고유한 SID(Session identifier)와 SERIAL#(serial number)를 갖는다.
시리얼 번호는 세션이 종료되었으나 다른 세션이 동일한 SID를 갖고 시작되었 때, 세션 명령들이 정확한 세션 객체에 적용될 수 있도록 보장해준다.
출처: https://jangpd007.tistory.com/238 [참 놀라운 세상:티스토리]
SELECT
SID -- 세션 식별자
, SERIAL# -- 세션 일련 번호.
, USERNAME -- 오라클 사용자 이름
, STATUS -- 세션 상태 (ACTIVE- 현재 SQL을 실행 중인 세션)
, SQL_ADDRESS -- 현재 실행 중인 SQL 문의 상세 식별자
, SQL_HASH_VALUE -- 현재 실행 중인 SQL 문의 상세 식별자
FROM V$SESSION
WHERE STATUS = 'ACTIVE'
;
위의 쿼리문을 실행하면, ACTIVE 상태인 세션을 보여준다.
나의 경우에는 저 쿼리문을 여러번 실행하여 계속 진행중인 세션ID 를 수동으로.. 찾았다 ^^;;
V$SESSION 뷰에 대한 정보는 오라클 공식사이트에 잘 나와있다.
SQL 쿼리문 내용까지 보고싶은 경우.
SELECT
A.SID -- 세션 식별자
, A.SERIAL# -- 세션 일련 번호.
, A.USERNAME -- 오라클 사용자 이름
, A.STATUS -- 세션 상태 (ACTIVE- 현재 SQL을 실행 중인 세션)
, A.SQL_ADDRESS -- 현재 실행 중인 SQL 문의 상세 식별자
, A.SQL_HASH_VALUE -- 현재 실행 중인 SQL 문의 상세 식별자
, B.SQL_TEXT --현재 커서에 대한 SQL 텍스트의 처음 1000자
FROM V$SESSION A
INNER JOIN V$SQL B
ON A.SQL_HASH_VALUE = B.HASH_VALUE
AND A.SQL_ADDRESS = B.ADDRESS
WHERE A.STATUS = 'ACTIVE'
;
2. 물려있는 세션 kill하기
KILL 할 세션의 ID와 SERIAL NUMBER 를 찾았다면 KILL 해준다.
ALTER SYSTEM KILL SESSION 'SID, SERIALNUMBER';
728x90
반응형
'study_db' 카테고리의 다른 글
오라클 엑셀 익스포트 시 줄바꿈 오류 (0) | 2023.12.13 |
---|---|
오라클 SELECT 결과 엑셀로 내보내기 ( 엑셀 저장 / 익스포트 기능 ) (0) | 2023.12.13 |
오라클 PRAGMA AUTONOMOUS_TRANSACTION, 자율 트랜잭션 지정하기 (1) | 2023.12.07 |
오라클 함수 생성하기 create or replace FUNCTION (0) | 2023.12.07 |
오라클 랜덤 정수 or 랜덤 문자열 가져오기 (0) | 2023.11.10 |