ORA-00022 invalid session ID λ?
ORA-00022 μλ¬λ Oracle λ°μ΄ν°λ² μ΄μ€μμ μΈμ
IDκ° μ ν¨νμ§ μμ λ λ°μνλ μ€λ₯μ
λλ€. μ£Όλ‘ DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION, ALTER SYSTEM KILL SESSION, DBMS_SESSION ν¨ν€μ§ λ±μ μ¬μ©ν λ μ‘΄μ¬νμ§ μκ±°λ μ΄λ―Έ μ’
λ£λ μΈμ
IDλ₯Ό μ°Έμ‘°νλ©΄ λ°μν©λλ€. μ€λ¬΄μμλ DBAκ° νΉμ μΈμ
μ κ°μ μ’
λ£νκ±°λ νΈλ μ΄μ€λ₯Ό νμ±ννλ κ³Όμ μμ μΈμ
μ λ³΄κ° λ³κ²½λμμμλ λΆκ΅¬νκ³ μ€λλ SID κ°μ κ·Έλλ‘ μ¬μ©ν κ²½μ° λΉλ²νκ² λ°μν©λλ€.
μ£Όμ λ°μ μμΈ
1. μ΄λ―Έ μ’ λ£λ μΈμ μ λν KILL SESSION μλ
κ°μ₯ νν μμΈμΌλ‘, DBAκ° V$SESSIONμ μ‘°ννμ¬ SIDμ SERIAL# κ°μ νμΈν ν μΈμ
μ μ’
λ£νλ €λ μ¬μ΄μ ν΄λΉ μΈμ
μ΄ μ΄λ―Έ μ€μ€λ‘ μ’
λ£λ κ²½μ°μ
λλ€. νΉν 쿼리 μ‘°ν μμ κ³Ό ALTER SYSTEM KILL SESSION λͺ
λ Ή μ€ν μμ μ¬μ΄μ μκ° μ°¨μ΄κ° λ°μνλ©΄ μΈμ
μ λ³΄κ° λ¬΄ν¨νλμ΄ μ΄ μλ¬κ° νΈλ¦¬κ±°λ©λλ€. λ°°μΉ μμ
μ΄λ μ§§μ μλͺ
μ 컀λ₯μ
ν μΈμ
μμ νΉν μμ£Ό λ°μν©λλ€.
2. μλͺ»λ SID λλ SERIAL# μ‘°ν© μ λ ₯
ALTER SYSTEM KILL SESSION λͺ
λ Ήμ SIDμ SERIAL# λ κ°μ μ‘°ν©νμ¬ μΈμ
μ κ³ μ νκ² μλ³ν©λλ€. SIDλ§ λ§κ³ SERIAL#μ΄ ν리거λ, λ κ° λͺ¨λ μλͺ» μ
λ ₯ν κ²½μ° Oracleμ ν΄λΉ μΈμ
μ μ°Ύμ§ λͺ»ν΄ ORA-00022λ₯Ό λ°νν©λλ€. νΉν RAC νκ²½μμλ INST_ID(μΈμ€ν΄μ€ ID)κΉμ§ ν¨κ» μ§μ ν΄μΌ νλ―λ‘, λ¨μΌ μΈμ€ν΄μ€ κΈ°μ€μ λͺ
λ Ήμ RACμ κ·Έλλ‘ μ¬μ©ν κ²½μ° μ΄ μ€λ₯κ° λ°μν μ μμ΅λλ€.
3. DBMS_SYSTEM λλ DBMS_SESSION ν¨ν€μ§ μ¬μ© μ μΈμ μ 보 λΆμΌμΉ
DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION λλ DBMS_SESSION κ΄λ ¨ νλ‘μμ λ₯Ό νΈμΆν λ μ ν¨νμ§ μμ μΈμ
IDλ₯Ό λκΈ°λ©΄ ORA-00022κ° λ°μν©λλ€. νΉν μλν μ€ν¬λ¦½νΈλ λͺ¨λν°λ§ ν΄μμ μ£ΌκΈ°μ μΌλ‘ μΈμ
λͺ©λ‘μ μΊμ±νμ¬ μ¬μ©ν κ²½μ°, μΊμκ° κ°±μ λκΈ° μ μ μΈμ
μ΄ μ’
λ£λλ©΄ μ΄ μ€λ₯κ° λ°λ³΅μ μΌλ‘ λ°μν μ μμ΅λλ€.
ν΄κ²° λ°©λ²
μμΈ 1: μ΄λ―Έ μ’ λ£λ μΈμ KILL μλ ν΄κ²°
μΈμ
μ μ’
λ£νκΈ° μ λ°λμ μ€μκ°μΌλ‘ μΈμ
μ‘΄μ¬ μ¬λΆλ₯Ό νμΈνκ³ , νμΈ μ¦μ λͺ
λ Ήμ μ€ννλ μ΅κ΄μ΄ νμν©λλ€.
-- 1λ¨κ³: νμ¬ νμ± μΈμ
λͺ©λ‘ μ€μκ° μ‘°ν
SELECT sid, serial#, username, status, machine, program, sql_id
FROM v$session
WHERE status = 'ACTIVE'
AND username IS NOT NULL
ORDER BY sid;
-- 2λ¨κ³: νΉμ μΈμ
μ‘΄μ¬ μ¬λΆ νμΈ ν KILL
DECLARE
v_sid NUMBER := 123; -- μ’
λ£νλ €λ SID
v_serial NUMBER := 4567; -- ν΄λΉ SERIAL#
v_count NUMBER;
BEGIN
-- μΈμ
μ΄ μ¬μ ν μ‘΄μ¬νλμ§ νμΈ
SELECT COUNT(*)
INTO v_count
FROM v$session
WHERE sid = v_sid
AND serial# = v_serial;
IF v_count > 0 THEN
EXECUTE IMMEDIATE
'ALTER SYSTEM KILL SESSION ''' || v_sid || ',' || v_serial || ''' IMMEDIATE';
DBMS_OUTPUT.PUT_LINE('μΈμ
μ’
λ£ μλ£: SID=' || v_sid || ', SERIAL#=' || v_serial);
ELSE
DBMS_OUTPUT.PUT_LINE('μΈμ
μ΄ μ΄λ―Έ μ’
λ£λμμ΅λλ€. SID=' || v_sid);
END IF;
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -22 THEN
DBMS_OUTPUT.PUT_LINE('ORA-00022: μΈμ
μ΄ μ΄λ―Έ μ’
λ£λμκ±°λ μ ν¨νμ§ μμ΅λλ€.');
ELSE
RAISE;
END IF;
END;
/
μμΈ 2: μλͺ»λ SID/SERIAL# μ‘°ν© ν΄κ²°
SIDμ SERIAL#μ ν¨κ» μ νν μ‘°ννμ¬ μ¬μ©νκ³ , RAC νκ²½μμλ INST_IDλ λ°λμ ν¬ν¨ν©λλ€.
-- λ¨μΌ μΈμ€ν΄μ€: μ νν SIDμ SERIAL# μ‘°ν
SELECT sid,
serial#,
username,
status,
osuser,
machine,
TO_CHAR(logon_time, 'YYYY-MM-DD HH24:MI:SS') AS logon_time
FROM v$session
WHERE username = 'APPUSER' -- νΉμ μ¬μ©μ μΈμ
νν°λ§
AND status != 'KILLED';
-- λ¨μΌ μΈμ€ν΄μ€ μΈμ
μ’
λ£
ALTER SYSTEM KILL SESSION '123,4567' IMMEDIATE;
-- RAC νκ²½: INST_ID ν¬ν¨νμ¬ μΈμ
μ‘°ν
SELECT inst_id, sid, serial#, username, status, machine
FROM gv$session
WHERE username IS NOT NULL
AND status != 'KILLED'
ORDER BY inst_id, sid;
-- RAC νκ²½ μΈμ
μ’
λ£ (INST_ID ν¬ν¨)
ALTER SYSTEM KILL SESSION '123,4567,@2' IMMEDIATE;
-- νμ: 'SID, SERIAL#, @INST_ID'
-- νΉμ SQLμ μ€ν μ€μΈ μΈμ
μ°Ύμμ μ’
λ£ μ€λΉ
SELECT s.inst_id,
s.sid,
s.serial#,
s.username,
s.status,
q.sql_text
FROM gv$session s
JOIN gv$sql q ON s.sql_id = q.sql_id
AND s.inst_id = q.inst_id
WHERE q.sql_text LIKE '%νΉμ ν€μλ%';
μμΈ 3: DBMS_SYSTEM ν¨ν€μ§ μ¬μ© μ ν΄κ²°
-- SQL Trace νμ±ν μ μΈμ
μ ν¨μ± κ²μ¦ ν¬ν¨ νλ‘μμ
CREATE OR REPLACE PROCEDURE safe_enable_trace (
p_sid IN NUMBER,
p_serial IN NUMBER
)
AS
v_count NUMBER;
BEGIN
-- μΈμ
μ‘΄μ¬ μ¬λΆ μ¬μ νμΈ
SELECT COUNT(*)
INTO v_count
FROM v$session
WHERE sid = p_sid
AND serial# = p_serial
AND status != 'KILLED';
IF v_count = 0 THEN
RAISE_APPLICATION_ERROR(-20001,
'SID=' || p_sid || ', SERIAL#=' || p_serial || ' μΈμ
μ΄ μ‘΄μ¬νμ§ μμ΅λλ€.');
END IF;
-- SQL Trace νμ±ν
DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(
sid => p_sid,
serial => p_serial,
sql_trace => TRUE
);
DBMS_OUTPUT.PUT_LINE('SQL Trace νμ±ν μλ£: SID=' || p_sid);
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -22 THEN
DBMS_OUTPUT.PUT_LINE('ORA-00022: μΈμ
μΆμ μ€ μΈμ
μ΄ μ’
λ£λμμ΅λλ€.');
ELSE
DBMS_OUTPUT.PUT_LINE('μλ¬ λ°μ: ' || SQLERRM);
RAISE;
END IF;
END safe_enable_trace;
/
-- μ¬μ© μμ
EXEC safe_enable_trace(123, 4567);
μλ°© λ°©λ²
1. μΈμ μ‘°νμ μμ μ¬μ΄μ μκ° κ°κ²© μ΅μν λ° λμ SQL νμ©
μΈμ
μ 보λ₯Ό μ‘°ννλ μμ κ³Ό μ€μ μμ
μ μννλ μμ μ¬μ΄μ μκ° κ°κ²©μ μ΅μνν΄μΌ ν©λλ€. νΉν λ°λ³΅μ μΌλ‘ μΈμ
μ κ΄λ¦¬νλ μλν μ€ν¬λ¦½νΈλ₯Ό μμ±ν λλ μλμ κ°μ΄ μΈμ
μ‘°νμ μ’
λ£λ₯Ό λ¨μΌ νΈλμμ
λ΄μμ λμ μΌλ‘ μ²λ¦¬νκ³ , WHEN OTHERSμμ ORA-00022λ₯Ό λͺ
μμ μΌλ‘ νΈλ€λ§νμ¬ μ€ν¬λ¦½νΈκ° λΉμ μ μ’
λ£λμ§ μλλ‘ μ€κ³νλ κ²μ΄ Best Practiceμ
λλ€.
-- μ₯μκ° μ€ν μΈμ
μλ μ 리 μ€ν¬λ¦½νΈ μμ (μ¬λ° λ°©μ§μ©)
BEGIN
FOR r IN (
SELECT sid, serial#
FROM v$session
WHERE status = 'ACTIVE'
AND username IS NOT NULL
AND last_call_et > 3600 -- 1μκ° μ΄μ μ€ν μ€μΈ μΈμ
) LOOP
BEGIN
EXECUTE IMMEDIATE
'ALTER SYSTEM KILL SESSION '''
|| r.sid || ',' || r.serial# || ''' IMMEDIATE';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE IN (-22, -30) THEN
-- ORA-00022 λλ ORA-00030: μ΄λ―Έ μ’
λ£λ μΈμ
, 무μνκ³ μ§ν
NULL;
ELSE
RAISE;
END IF;
END;
END LOOP;
END;
/
2. λͺ¨λν°λ§ λ° μΈμ κ΄λ¦¬ ν΄μμ μΈμ μΊμ μ¬μ© κΈμ§
μ체 κ°λ°ν λͺ¨λν°λ§ μ€ν¬λ¦½νΈλ μΈμ
κ΄λ¦¬ ν΄μμ V$SESSION λλ GV$SESSION κ²°κ³Όλ₯Ό μΊμ±νμ¬ μ¬μ¬μ©νμ§ μλλ‘ ν©λλ€. μΈμ
μ 보λ λ§€λ² μ€μκ°μΌλ‘ μ‘°νν΄μΌ νλ©°, νΉν RAC νκ²½μμλ λ°λμ GV$SESSIONμ μ¬μ©νκ³ INST_IDλ₯Ό ν¬ν¨ν μμ ν μΈμ
μλ³μλ₯Ό μ¬μ©νλ μ μ±
μ ν μ 체μ 곡μ νκ³ λ¬Έμνν΄μΌ ν©λλ€. Oracle Enterprise Manager(OEM) λλ κ²μ¦λ μλνν° ν΄μ μ¬μ©νλ©΄ μ΄λ¬ν μΈμ
κ΄λ¦¬ μ€λ₯λ₯Ό λ΄λΆμ μΌλ‘ μ²λ¦¬ν΄μ£Όλ―λ‘ μ€λ¬΄μμ μ κ·Ή κΆμ₯λ©λλ€.
κ΄λ ¨ μλ¬
-
ORA-00030:
ALTER SYSTEM KILL SESSIONλͺ λ Ήμμ μΈμ μ΄ μ΄λ―Έ μ’ λ£λμκ±°λ μ‘΄μ¬νμ§ μμ λ λ°μνλ©°, ORA-00022μ μ μ¬ν λ§₯λ½μμ ν¨κ» λνλλ κ²½μ°κ° λ§μ΅λλ€. -
ORA-00031: μΈμ
μ KILL λ§ν¬κ° μ΄λ―Έ μ€μ λμ΄ μμ λ λ°μν©λλ€. μΈμ
μ΄ KILLED μνλ‘ λκΈ° μ€μΈ κ²½μ°
IMMEDIATEμ΅μ μ μ¬μ©νκ±°λ OS λ 벨μμ νλ‘μΈμ€λ₯Ό μ§μ μ’ λ£ν΄μΌ ν©λλ€. - ORA-02049: λΆμ° νΈλμμ κ΄λ ¨ μΈμ μ κΈ λκΈ° μκ° μ΄κ³Ό μλ¬λ‘, μΈμ κ°μ μ’ λ£ μλμ μ°κ΄λμ΄ λνλ μ μμ΅λλ€.
- ORA-00028: νμ¬ μΈμ μ΄ DBAμ μν΄ κ°μ μ’ λ£λμμ λ ν΄λΉ μΈμ μ ν΄λΌμ΄μΈνΈ μΈ‘μμ μμ νλ μλ¬ μ½λμ λλ€.












