태그 보관물: oracle

오라클 LOCK 걸린 개체 확인 및 LOCK 해제

1. LOCK 걸린 개체 확인

SELECT OBJECT_ID
     , SESSION_ID
     , ORACLE_USERNAME
     , OS_USER_NAME
FROM V$LOCKED_OBJECT;

2. 해당 SESSION_ID와 SERIAL 번호로 락걸린 개체 확인

SELECT A.SID 
     , A.SERIAL#
     , OBJECT_NAME
     , A.SID || ', ' || A.SERIAL# AS KILL_TASK
FROM V$SESSION A
INNER JOIN V$LOCK B ON A.SID = B.SID
INNER JOIN DBA_OBJECTS C ON B.ID1 = C.OBJECT_ID
WHERE B.TYPE  = 'TM'

3. 락 발생 사용자 및 OBJECT 조회 + 어떤 SQL를 실행중인지 확인

Lock을 해제하기전에 Lock을 유발시킨 SQL이 어떤것인지를 확인하여 실행되고 있는지 아니면 정말로 Lock 인지를 확인해야 함.

SELECT DISTINCT T1.SESSION_ID
     , T2.SERIAL#
     , T4.OBJECT_NAME
     , T2.MACHINE
     , T2.TERMINAL
     , T2.PROGRAM
     , T3.ADDRESS
     , T3.PIECE
     , T3.SQL_TEXT
FROM V$LOCKED_OBJECT T1
     , V$SESSION T2
     , V$SQLTEXT T3
     , DBA_OBJECTS T4
WHERE T1.SESSION_ID = T2.SID
  AND T1.OBJECT_ID = T4.OBJECT_ID
  AND T2.SQL_ADDRESS = T3.ADDRESS
ORDER BY T3.ADDRESS, T3.PIECE;

4. SID와 시리얼 번호로 세션 해제

ALTER SYSTEM KILL SESSION ${2번에서 KILL_TASK로 조회한 결과값};

참고사이트

오라클 LOCK 걸린 개체 확인 및 LOCK 해제

오라클 데이타 확인시에 공백이 있어서 TRIM(RTRIM, LTRIM)을 통해서 공백을 제거하고 검색을 해도 되지 않는다. 이때 해결하는 방법!!!

오라클 데이타 확인시에 공백이 있어서 TRIM(RTRIM, LTRIM)을 통해서 공백을 제거하고 검색을 해도 되지 않는다. 이때 해결하는 방법!!!

문제의 원인은 마지막 글자가 깨진 특수 문자일 때 공백이 제거되지 않는다.
확인 방법은 해당 결과를 노트패드로 복사해서 해당 공백이 어떤 타입인지(빈칸, 탭, 엔터…)를 확인하고 해당되는 특수 문자를 CHR()을 통해서 제거한다.

SELECT REPLACE(COLUMN_NAME, CHR(9),'') FROM TABLE_NAME

자주 오류가 발생하는 캐릭터 문자 코드

캐랙터 코드 특수문자
CHR(38) &
CHR(9) 탭문자
CHR(13) 라인피드
CHR(10) 캐리지리턴

오라클 메소드

  • ASCII() : 캐릭터를 아스키 코드로 변환
  • CHR() : 아스키 코드를 캐릭터 코드로 변환