1. 특정 오브젝트(테이블, 뷰, 인덱스) 검색 (DBA_OBJECTS)

SELECT OBJECT_NAME, OBJECT_TYPE, OWNER, STATUS, CREATED, LAST_DDL_TIME
FROM DBA_OBJECTS
WHERE OBJECT_NAME LIKE '테이블_이름%'
ORDER BY OBJECT_TYPE;

2. 특정 테이블의 컬럼 정보 확인 (DBA_TAB_COLUMNS)

SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH, NULLABLE, COLUMN_ID
FROM DBA_TAB_COLUMNS
WHERE TABLE_NAME = '테이블_이름'
ORDER BY COLUMN_ID;

3. 특정 인덱스 정보 조회 (DBA_INDEXES)

-- 인덱스 목록 확인
SELECT INDEX_NAME, TABLE_NAME, UNIQUENESS, STATUS
FROM DBA_INDEXES
WHERE TABLE_NAME = '테이블_이름';

4. 캐시에 로드된 오브젝트 확인 (V$DB_OBJECT_CACHE)

SELECT OWNER, NAME, TYPE, SHARABLE_MEM, LOADS, EXECUTIONS
FROM V$DB_OBJECT_CACHE
ORDER BY LOADS DESC;

5. 최근 변경된 오브젝트 확인 (DBA_OBJECTS)

SELECT OBJECT_NAME, OBJECT_TYPE, LAST_DDL_TIME
FROM DBA_OBJECTS
WHERE LAST_DDL_TIME > SYSDATE - 7
ORDER BY LAST_DDL_TIME DESC;

6. 특정 오브젝트 사용 여부 확인 (V$OPEN_CURSOR)

SELECT S.SID, S.SERIAL#, C.USER_NAME, C.SQL_TEXT
FROM V$OPEN_CURSOR C
JOIN V$SESSION S
ON C.SID = S.SID
WHERE C.SQL_TEXT LIKE '%테이블_이름%';

7. 삭제된 오브젝트 복구 (FLASHBACK TABLE)

-- 삭제된 테이블 목록 조회
SELECT OBJECT_NAME, ORIGINAL_NAME, DROPTIME FROM RECYCLEBIN;
-- 특정 테이블 복구
FLASHBACK TABLE 테이블_이름 TO BEFORE DROP;

 

1. 현재 실행 중인 세션 및 SQL 조회 (V$SESSION, V$SQL)

-- 현재 실행 중인 세션 확인
SELECT SID, SERIAL#, USERNAME, STATUS, MACHINE, PROGRAM FROM V$SESSION WHERE STATUS = 'ACTIVE';
-- 실행 중인 SQL 조회
SELECT S.SID, S.SERIAL#, S.USERNAME, SQ.SQL_TEXT
FROM V$SESSION S
JOIN V$SQL SQ
ON S.SQL_ID = SQ.SQL_ID
WHERE S.STATUS = 'ACTIVE';

2. 락 걸린 세션 찾기 (V$LOCK, V$SESSION)

-- 락 걸린 세션 확인
SELECT L.SID, S.SERIAL#, S.USERNAME, L.TYPE, L.MODE_HELD
FROM V$LOCK L
JOIN V$SESSION S
ON L.SID = S.SID
WHERE L.BLOCK = 1;

3. UNDO 테이블스페이스 사용량 (V$UNDOSTAT)

-- 최근 1시간 동안 UNDO 사용량 조회
SELECT BEGIN_TIME, END_TIME, UNDOTSN, UNDOBLKS, TXNCOUNT
FROM V$UNDOSTAT
WHERE BEGIN_TIME > SYSDATE - 1/24
ORDER BY BEGIN_TIME DESC;

4. 실행 계획 및 성능 분석 (V$SQL_PLAN)

-- 특정 SQL 실행 계획 조회
SELECT *
FROM V$SQL_PLAN WHERE SQL_ID = 'SQL_ID_값';

 

1. 오류 메시지를 정확히 확인하자

Oracle 오류는 대부분 ORA-XXXXX 코드와 메시지를 포함하고 있어. 오류 메시지를 무시하지 말고 꼼꼼히 읽어보는 게 중요하다.

  • 테이블 조회 관련 오류: ORA-00942: table or view does not exist → 권한 문제 또는 오타 확인
  • 데이터 타입 오류: ORA-01722: invalid number → 문자 데이터를 숫자로 변환하려고 할 때 발생

2. 가장 기본적인 원인부터 빠르게 점검하기

대부분의 오류는 단순한 실수에서 발생하므로, 아래 체크리스트를 먼저 확인해본다.
✅ 테이블, 컬럼명 오타 (ORA-00904)
✅ 권한 부족 (ORA-01031 → GRANT 필요 여부 확인)
✅ 락 걸린 상태 (ORA-00054 → V$LOCK 조회)
✅ 커넥션 오류 (ORA-12154 → tnsnames.ora 확인)

3. 실시간 세션 및 락 확인하는 명령어 익숙해지기

Oracle을 사용할 때 세션이 락 걸리면 빠르게 확인하고 해제하는 것이 중요하다.

-- 현재 락 걸린 세션 확인
SELECT * FROM V$LOCK;
-- 세션 강제 종료
ALTER SYSTEM KILL SESSION 'SID,SERIAL#' IMMEDIATE;
 

4. 성능 관련 오류 (TEMP, UNDO 부족) 예방하기

  • ORA-01652 → TEMP 테이블스페이스 부족 → 테이블스페이스 확장 필요
  • ORA-01555 → UNDO 테이블스페이스 부족 → 트랜잭션 최적화 & UNDO 크기 조정
 
-- TEMP 테이블스페이스 크기 확인

SELECT
 TABLESPACE_NAME, FILE_NAME, BYTES/1024/1024 AS SIZE_MB 
FROM DBA_TEMP_FILES;

 

5. 커넥션 이슈 빠르게 점검하기

서버 접속 오류가 발생하면 네트워크 문제인지, Oracle 설정 문제인지 먼저 구분하는 것이 중요하다.

 
# TNS 설정 확인 tnsping [TNS_ALIAS]
# 리스너 상태 확인 lsnrctl status
  • ORA-12154: TNS:could not resolve the connect identifier specified → tnsnames.ora 설정 확인
  • ORA-12514: TNS:listener does not currently know of service requested in connect descriptor → lsnrctl status로 서비스 존재 여부 확인

마무리 TIP:

  • 자주 발생하는 오류는 해결법을 노트해두고, 비슷한 문제가 생기면 바로 적용하자!
  • V$SESSION, V$LOCK, DBA_TEMP_FILES 같은 시스템 뷰를 잘 활용하면 빠르게 문제 해결 가능!

+ Recent posts