ORA-00072๋?
ORA-00072 ์๋ฌ๋ "process is not active"๋ผ๋ ๋ฉ์์ง์ ํจ๊ป ๋ฐ์ํ๋ฉฐ, Oracle์ด ํน์ ํ๋ก์ธ์ค์ ์ ๊ทผํ๊ฑฐ๋ ํด๋น ํ๋ก์ธ์ค์ ํต์ ์ ์๋ํ ๋ ๊ทธ ํ๋ก์ธ์ค๊ฐ ์ด๋ฏธ ์ข
๋ฃ๋์๊ฑฐ๋ ๋นํ์ฑ ์ํ์์ ๊ฐ์งํ ๋ ๋ฐ์ํฉ๋๋ค. ์ฃผ๋ก DBA๊ฐ ALTER SYSTEM KILL SESSION ๋ช
๋ น์ ์คํํ๊ฑฐ๋, ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค ์ํ๋ฅผ ์กฐํํ๋ ๊ณผ์ ์์ ๋์ ํ๋ก์ธ์ค๊ฐ ์ด๋ฏธ ์ฌ๋ผ์ง ๊ฒฝ์ฐ์ ์ด ์๋ฌ๋ฅผ ๋ง์ฃผ์น๊ฒ ๋ฉ๋๋ค. ์ค๋ฌด์์๋ ๋น์ ์ ์ข
๋ฃ๋ ์ธ์
์ฒ๋ฆฌ, RAC ํ๊ฒฝ์์์ ๋
ธ๋ ๊ฐ ํ๋ก์ธ์ค ํต์ ์คํจ, ๋๋ ์ฅ์๊ฐ ๋๊ธฐ ์ค์ด๋ ํ๋ก์ธ์ค๊ฐ OS ๋ ๋ฒจ์์ ๊ฐ์ ์ข
๋ฃ๋ ์งํ์ ๋น๋ฒํ ๋ฐ์ํฉ๋๋ค.
์ฃผ์ ๋ฐ์ ์์ธ
1. ์ด๋ฏธ ์ข ๋ฃ๋ ์ธ์ ์ ๋ํ KILL SESSION ์๋
๊ฐ์ฅ ํํ ์์ธ์ผ๋ก, DBA๊ฐ V$SESSION ๋ทฐ๋ฅผ ์กฐํํ์ฌ ์ธ์
์ ๋ณด๋ฅผ ํ์ธํ ํ ALTER SYSTEM KILL SESSION ๋ช
๋ น์ ์คํํ๋ ์ฌ์ด์ ํด๋น ์ธ์
์ด ์์ฐ์ ์ผ๋ก ์ข
๋ฃ๋๋ ๊ฒฝ์ฐ ๋ฐ์ํฉ๋๋ค. ํนํ ์ค๋๋ ์ฟผ๋ฆฌ๋ฅผ ํตํด ์ธ์
์ ๋ณด๋ฅผ ์กฐํํ ๋ค ์๊ฐ์ด ์ง๋ ๋ช
๋ น์ ์คํํ ๋ ์์ฃผ ๋ฐ์ํ๋ฏ๋ก, ๋ช
๋ น ์คํ ์ง์ ์ ์ธ์
์ํ๋ฅผ ๋ฐ๋์ ์ฌํ์ธํด์ผ ํฉ๋๋ค.
2. OS ๋ ๋ฒจ์์ ๊ฐ์ ์ข ๋ฃ๋ Oracle ํ๋ก์ธ์ค
์ด์์ฒด์ ๊ด๋ฆฌ์๊ฐ kill -9 ๋ช
๋ น์ผ๋ก Oracle ์๋ฒ ํ๋ก์ธ์ค(Shadow Process)๋ฅผ ๊ฐ์ ์ข
๋ฃํ์ ๋, Oracle ์ธ์คํด์ค๋ ํด๋น ํ๋ก์ธ์ค๊ฐ ์ฌ๋ผ์ก์์ ์ฆ์ ์ธ์งํ์ง ๋ชปํ๊ณ ๋ด๋ถ์ ์ผ๋ก ํต์ ์ ์๋ํ๋ค๊ฐ ์ด ์๋ฌ๋ฅผ ๋ฐ์์ํต๋๋ค. PMON(Process Monitor) ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค๊ฐ ์ฃฝ์ ํ๋ก์ธ์ค๋ฅผ ์ ๋ฆฌํ๊ธฐ ์ ๊น์ง ์งง์ ์๊ฐ ๋์ V$PROCESS๋ V$SESSION์ ์ข๋น ์ธ์
์ผ๋ก ๋จ์ ์์ด DBA๋ฅผ ํผ๋์ค๋ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
3. RAC(Real Application Clusters) ํ๊ฒฝ์์์ ์ธํฐ-๋ ธ๋ ํต์ ์คํจ
RAC ํ๊ฒฝ์์๋ ์๋ก ๋ค๋ฅธ ๋ ธ๋์ ํ๋ก์ธ์ค ๊ฐ ํต์ ์ด ๋น๋ฒํ๊ฒ ๋ฐ์ํ๋๋ฐ, ํ ๋ ธ๋๊ฐ ๋คํธ์ํฌ ๋จ์ ์ด๋ ๋ ธ๋ ์ฅ์ ๋ก ์ธํด ์๋ตํ์ง ๋ชปํ ๊ฒฝ์ฐ ์๋ ๋ ธ๋์์ ORA-00072 ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ ๋จ์ํ ์ธ์ ์๋ฌ๋ก ๊ทธ์น์ง ์๊ณ ํด๋ฌ์คํฐ ์ ์ฒด์ ์์ ์ฑ์ ์ํฅ์ ์ค ์ ์๊ธฐ ๋๋ฌธ์, RAC ํ๊ฒฝ์์๋ Interconnect ๋คํธ์ํฌ ์ํ ๋ชจ๋ํฐ๋ง์ด ํนํ ์ค์ํฉ๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
์์ธ 1: ์ด๋ฏธ ์ข ๋ฃ๋ ์ธ์ KILL SESSION ์๋
๋จผ์ ์ธ์
์ด ์ค์ ๋ก ํ์ฑ ์ํ์ธ์ง ํ์ธํฉ๋๋ค.
-- ํ์ฌ ํ์ฑ ์ธ์
๋ชฉ๋ก ํ์ธ (STATUS = 'ACTIVE' ๋๋ 'INACTIVE')
SELECT s.sid,
s.serial#,
s.username,
s.status,
s.machine,
s.program,
s.last_call_et AS elapsed_seconds,
p.spid AS os_pid
FROM v$session s
JOIN v$process p ON p.addr = s.paddr
WHERE s.username IS NOT NULL
AND s.type = 'USER'
ORDER BY s.last_call_et DESC;
์ธ์
์ด KILLED ์ํ๋ก ๋จ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ํ์ธํฉ๋๋ค.
-- KILLED ์ํ๋ก ๋จ์์๋ ์ธ์
์กฐํ
SELECT sid,
serial#,
username,
status,
last_call_et
FROM v$session
WHERE status = 'KILLED';
์ธ์
์ด ์กด์ฌํ๊ณ ์์ง ACTIVE/INACTIVE ์ํ๋ผ๋ฉด ์ฆ์ ์ข
๋ฃํฉ๋๋ค.
-- ์ ์์ ์ธ ์ธ์
์ข
๋ฃ (๊ถ์ฅ)
ALTER SYSTEM KILL SESSION '&sid,&serial#' IMMEDIATE;
-- ์ธ์
์ด ์๋ตํ์ง ์์ ๊ฒฝ์ฐ DISCONNECT SESSION ์ฌ์ฉ
ALTER SYSTEM DISCONNECT SESSION '&sid,&serial#' POST_TRANSACTION;
-- ์ฆ์ ๊ฐ์ ์ข
๋ฃ
ALTER SYSTEM DISCONNECT SESSION '&sid,&serial#' IMMEDIATE;
์ธ์
์ข
๋ฃ ํ KILLED ์ํ๊ฐ ์ง์๋๋ค๋ฉด OS ๋ ๋ฒจ์์ ์ง์ ์ฒ๋ฆฌํฉ๋๋ค.
-- OS PID ํ์ธ
SELECT p.spid,
s.sid,
s.serial#,
s.username,
s.status
FROM v$process p
JOIN v$session s ON s.paddr = p.addr
WHERE s.status = 'KILLED';
# Linux/Unix ํ๊ฒฝ์์ OS ํ๋ก์ธ์ค ํ์ธ ๋ฐ ์ข
๋ฃ
ps -ef | grep <spid>
# Oracle ๊ถ์ฅ: kill -9 ๋์ ์ ์ ์ข
๋ฃ ์๋ ํ ํ์ ์ ๊ฐ์ ์ข
๋ฃ
kill -15 <spid>
# ์ ๋ช
๋ น์ด ํจ๊ณผ ์์ ๊ฒฝ์ฐ
kill -9 <spid>
์์ธ 2: PMON ์ ๋ฆฌ ์ ์ข๋น ํ๋ก์ธ์ค ์ฒ๋ฆฌ
PMON์ด ์๋์ผ๋ก ์ ๋ฆฌํ ๋๊น์ง ์ ์ ๋๊ธฐํ๊ฑฐ๋, ์๋ ์ฟผ๋ฆฌ๋ก ์ค์ OS ํ๋ก์ธ์ค ์กด์ฌ ์ฌ๋ถ๋ฅผ ๋จผ์ ํ์ธํฉ๋๋ค.
-- V$PROCESS์ ์ค์ OS PID ๋น๊ต๋ฅผ ์ํ ์์ธ ์กฐํ
SELECT p.pid,
p.spid,
p.program,
p.background,
s.sid,
s.serial#,
s.status AS session_status,
s.username
FROM v$process p
LEFT JOIN v$session s ON s.paddr = p.addr
WHERE p.spid IS NOT NULL
ORDER BY p.pid;
-- PMON ํ๋ก์ธ์ค ์ ์ ๋์ ์ฌ๋ถ ํ์ธ
SELECT name, description
FROM v$bgprocess
WHERE name = 'PMON'
AND paddr <> '00';
-- ์ธ์คํด์ค ์ ์ฒด ํ๋ก์ธ์ค ํํฉ ์์ฝ
SELECT status,
COUNT(*) AS cnt
FROM v$session
GROUP BY status
ORDER BY cnt DESC;
์์ธ 3: RAC ํ๊ฒฝ ์ธํฐ-๋ ธ๋ ํต์ ์ฅ์
-- RAC ํ๊ฒฝ ๋
ธ๋ ์ํ ํ์ธ
SELECT inst_id,
instance_name,
host_name,
status,
active_state
FROM gv$instance
ORDER BY inst_id;
-- ๊ฐ ๋
ธ๋๋ณ ํ์ฑ ์ธ์
์ ๋น๊ต (๋น์ ์ ๋
ธ๋ ํ์ง)
SELECT inst_id,
COUNT(*) AS active_sessions
FROM gv$session
WHERE type = 'USER'
AND status = 'ACTIVE'
GROUP BY inst_id
ORDER BY inst_id;
-- RAC Interconnect ๊ด๋ จ ํต๊ณ ํ์ธ
SELECT name,
value
FROM gv$sysstat
WHERE name LIKE '%gc%'
AND inst_id = 1 -- ์กฐํํ ๋
ธ๋ ๋ฒํธ๋ก ๋ณ๊ฒฝ
ORDER BY name;
-- ๊ธ๋ก๋ฒ ์ธ์
์ ๋ณด์์ KILLED ์ํ ์ธ์
์ ์ฒด ๋
ธ๋ ์กฐํ
SELECT inst_id,
sid,
serial#,
username,
status,
machine
FROM gv$session
WHERE status = 'KILLED'
ORDER BY inst_id, sid;
์๋ฐฉ ๋ฐฉ๋ฒ
1. ์ธ์ ์ข ๋ฃ ์ ์ํ ๊ฒ์ฆ ์๋ํ ์คํฌ๋ฆฝํธ ์ด์
์๋์ผ๋ก ์ธ์
์ ์ข
๋ฃํ ๋ ๋ฐ์ํ๋ ์ค์๋ฅผ ์ค์ด๊ธฐ ์ํด, ์๋์ ๊ฐ์ด ์ธ์
์ํ๋ฅผ ๋จผ์ ํ์ธํ๊ณ ์กฐ๊ฑด๋ถ๋ก ์ข
๋ฃํ๋ ํ์ค ์คํฌ๋ฆฝํธ๋ฅผ ํ ๋ด ๊ณตํต ์ ์ฐจ๋ก ์ ์ฐฉ์ํค๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ํนํ ๋ฐฐ์น ์์
์ด๋ ์ ๊ธฐ ์ ๊ฒ ์ ์คํฌ๋ฆฝํธํ๋ ์ ์ฐจ๋ฅผ ๋ฐ๋ฅด๋ฉด ORA-00072์ ๊ฐ์ ๋ถํ์ํ ์๋ฌ ๋ฐ์์ ์ฌ์ ์ ์ฐจ๋จํ ์ ์์ต๋๋ค.
-- ์์ ํ ์ธ์
์ข
๋ฃ ํ์ค ์คํฌ๋ฆฝํธ (์ธ์
์กด์ฌ ํ์ธ ํ ์ข
๋ฃ)
DECLARE
v_count NUMBER;
v_sid NUMBER := &target_sid;
v_ser NUMBER := &target_serial;
BEGIN
SELECT COUNT(*)
INTO v_count
FROM v$session
WHERE sid = v_sid
AND serial# = v_ser
AND status NOT IN ('KILLED');
IF v_count > 0 THEN
EXECUTE IMMEDIATE
'ALTER SYSTEM KILL SESSION ''' || v_sid || ',' || v_ser || ''' IMMEDIATE';
DBMS_OUTPUT.PUT_LINE('์ธ์
์ข
๋ฃ ์๋ฃ: SID=' || v_sid || ', SERIAL#=' || v_ser);
ELSE
DBMS_OUTPUT.PUT_LINE('๋์ ์ธ์
์ด ์ด๋ฏธ ์ข
๋ฃ๋์๊ฑฐ๋ ์กด์ฌํ์ง ์์ต๋๋ค.');
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('์๋ฌ ๋ฐ์: ' || SQLERRM);
END;
/
2. ์ฅ๊ธฐ ์คํ ์ธ์ ๋ฐ ์ ํด ์ธ์ ์๋ ๊ด๋ฆฌ๋ฅผ ์ํ Profile ์ค์
DBA๊ฐ ์๋์ผ๋ก ์ธ์
์ ์ข
๋ฃํ๋ ์ํฉ ์์ฒด๋ฅผ ์ค์ด๋ ค๋ฉด, Oracle Profile์ ํ์ฉํ์ฌ ์ ํด ์ธ์
๊ณผ ์ฅ๊ธฐ ์คํ ์ธ์
์ ์๋์ผ๋ก ๊ด๋ฆฌํ๋ ์ ์ฑ
์ ์๋ฆฝํด์ผ ํฉ๋๋ค. IDLE_TIME๊ณผ CONNECT_TIME ํ๋ผ๋ฏธํฐ๋ฅผ ์
๋ฌด ํน์ฑ์ ๋ง๊ฒ ์ค์ ํ๋ฉด ์ข๋น ์ธ์
๋์ ์ ์๋ฐฉํ๊ณ , ๊ฒฐ๊ณผ์ ์ผ๋ก ORA-00072 ๋ฐ์ ๋น๋๋ฅผ ํฌ๊ฒ ๋ฎ์ถ ์ ์์ต๋๋ค.
-- ์ ํด ์ธ์
์๋ ๊ด๋ฆฌ๋ฅผ ์ํ Profile ์์ฑ
CREATE PROFILE app_user_profile LIMIT
IDLE_TIME 30 -- 30๋ถ ์ ํด ์ ์๋ ์ข
๋ฃ (๋ถ ๋จ์)
CONNECT_TIME 480 -- ์ต๋ 8์๊ฐ ์ฐ๊ฒฐ ํ์ฉ (๋ถ ๋จ์)
SESSIONS_PER_USER 10 -- ์ฌ์ฉ์๋น ์ต๋ ์ธ์
์ ์ ํ
FAILED_LOGIN_ATTEMPTS 5;
-- ํน์ ์ฌ์ฉ์์๊ฒ Profile ์ ์ฉ
ALTER USER app_user PROFILE app_user_profile;
-- Profile ์ ์ฉ ํํฉ ํ์ธ
SELECT username,
profile,
account_status
FROM dba_users
WHERE username = 'APP_USER';
-- ํ์ฌ Profile ํ๋ผ๋ฏธํฐ ์์ธ ํ์ธ
SELECT profile,
resource_name,
limit
FROM dba_profiles
WHERE profile = 'APP_USER_PROFILE'
AND resource_name IN ('IDLE_TIME', 'CONNECT_TIME', 'SESSIONS_PER_USER')
ORDER BY resource_name;
๊ด๋ จ ์๋ฌ
-
ORA-00031:
session marked for killโALTER SYSTEM KILL SESSION์คํ ํ ์ธ์ ์ด ์ฆ์ ์ข ๋ฃ๋์ง ์๊ณ KILLED ์ํ๋ก ๋งํน๋ ๋ ๋ฐ์ํ๋ฉฐ, ORA-00072์ ํจ๊ป ์ฐ์์ผ๋ก ๋ํ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. -
ORA-00055:
maximum number of DML locks exceededโ ํ๋ก์ธ์ค ๊ด๋ จ ๋ฆฌ์์ค ํ๊ณ ์ด๊ณผ ์๋ฌ๋ก, ๋น์ ์ ํ๋ก์ธ์ค ๋์ ์ ํจ๊ป ๋ฐ์ํ ์ ์์ต๋๋ค. -
ORA-03113:
end-of-file on communication channelโ ์๋ฒ ํ๋ก์ธ์ค๊ฐ ์๊ธฐ์น ์๊ฒ ์ข ๋ฃ๋ ๋ ํด๋ผ์ด์ธํธ ์ธก์์ ๋ฐ์ํ๋ฉฐ, OS ๋ ๋ฒจ ๊ฐ์ ์ข ๋ฃ ์งํ ORA-00072์ ๊ฑฐ์ ๋์์ ๋ํ๋ฉ๋๋ค. -
ORA-03114:
not connected to ORACLEโ ์ธ์ ์ด ๊ฐ์ ์ข ๋ฃ๋ ํ ํด๋ผ์ด์ธํธ๊ฐ ๊ณ์ ํต์ ์ ์๋ํ ๋ ๋ฐ์ํ๋ฉฐ, ORA-00072์ ๋ฐ์ ํ๊ฒ ์ฐ๊ด๋ฉ๋๋ค. -
ORA-00060:
deadlock detected while waiting for resourceโ ๊ต์ฐฉ ์ํ๋ก ์ธํด Oracle์ด ์ธ์ ์ ๊ฐ์ ๋กค๋ฐฑํ ์งํ, ํด๋น ์ธ์ ํ๋ก์ธ์ค ์ํ๊ฐ ๋ถ์์ ํด์ง๋ฉด์ ORA-00072๋ก ์ด์ด์ง๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.












