DB Link 에러가 발생하여 알아보던 중 Idle Time과 연관이 있어 이에 대해 알아봤습니다.
IDLE_TIME 이란?
IDLE_TIME은 오라클 데이터베이스에서 특정 세션이 일정 시간 동안 유효(Idle) 상태일 경우 자동으로 종료되도록 설정하는 값이다.
세션이 일정 시간 동안 아무런 SQL문이 실행하지 않으면 강제종료시킨다.
IDLE_TIME은 오라클 프로파일(Profile) 설정에서 관리된다.
IDLE_TIME의 역할
IDLE_TIME은 오라클 데이터베이스의 세션이 일정 시간 동안 아무런 작업을 수행하지 않을 경우, 해당 세션을 자동으로 종료하는 기능을 제공합니다.
●역할 및 기능
- 세션 관리 최적화
- 사용되지 않는 세션을 자동으로 종료하여 불필요한 리소스 점유를 방지.
- 데이터베이스의 SESSIONS, PROCESSES 등의 제한을 넘지 않도록 제어.
- 보안 강화
- 장시간 사용되지 않는 세션을 자동으로 종료하여 불필요한 보안 취약점을 줄임.
- 예를 들어, 누군가 DB에 로그인한 후 로그아웃하지 않으면, IDLE_TIME이 초과되었을 때 자동으로 세션이 닫힘.
- DB 성능 유지
- 오랜 시간 유지되는 불필요한 연결을 자동 종료하여 데이터베이스 성능을 향상.
- 특히 DB Link를 통한 원격 연결에서, 비활성 세션이 많아지면 원격 DB의 리소스를 소모하므로, IDLE_TIME이 이를 방지.
IDLE_TIME이 적용되는 방식
- 사용자가 데이터베이스에 접속 (로그인)
- SQL 실행 없이 일정 시간 동안 아무런 작업도 하지 않음.
- IDLE_TIME 값(예: 30분)이 초과되면 해당 세션이 자동으로 종료됨.
- 다시 사용하려면 새로운 세션을 생성해야 함.
IDLE_TIME 설정 확인 및 변경
현재 IDLE_TIME 값 확인 (DBA 권한 필요)
SELECT PROFILE, RESOURCE_NAME, LIMIT FROM DBA_PROFILES WHERE RESOURCE_NAME = 'IDLE_TIME';
✔ LIMIT 값이 UNLIMITED이면 IDLE_TIME 제한이 없음.
✔ 30이면 30분 동안 아무 작업도 하지 않으면 세션이 종료됨.
IDLE_TIME 설정 변경 (DBA 권한 필요)
●IDLE_TIME 변경
ALTER PROFILE DEFAULT LIMIT IDLE_TIME 120;
✔ IDLE_TIME을 120분(2시간) 으로 변경
✔ 특정 프로파일을 변경하고 싶다면 DEFAULT 대신 프로파일명을 입력
● 특정 프로파일만 변경
ALTER PROFILE my_profile LIMIT IDLE_TIME 180;
● 사용자별 프로파일 확인
SELECT USERNAME, PROFILE FROM DBA_USERS WHERE USERNAME = 'DB_LINK_USER';
이 값을 기반으로 해당 프로파일을 변경해야 합니다.
IDLE_TIME이 끊어졌을 때 해결 방법
1. IDLE_TIME을 늘리거나 UNLIMITED로 설정
ALTER PROFILE DEFAULT LIMIT IDLE_TIME UNLIMITED;
2. 주기적으로 SQL 실행하여 세션 유지 (SELECT 1 FROM DUAL@DB_LINK)
SELECT 1 FROM DUAL@PEPT;
10분마다 쿼리를 실행하는 스케줄러를 만들면 IDLE_TIME 초과로 인한 세션 종료 방지 가능.
3. SQLNET.EXPIRE_TIME 설정 (sqlnet.ora 파일)
sqlnet.ora 파일에서 SQLNET.EXPIRE_TIME 값을 설정하면 세션이 유효한지 주기적으로 확인할 수 있음.
SQLNET.EXPIRE_TIME = 10 # 10분마다 세션 유지 확인
IDLE_TIME과 DB Link (DB LINK)
DB LINK를 통해 원격 데이터베이스에 연결할 경우, 원격 DB의 IDLE_TIME 설정이 적용됨.
IDLE_TIME이 초과되면 DB LINK 연결이 끊어짐 → ORA-03150 오류 발생 가능.
●DB LINK 유지 방법
SELECT 1 FROM DUAL@PEP;
- 주기적으로 실행하여 DB Link 세션 유지.
결론
1. IDLE_TIME은 유휴(Idle) 상태인 세션을 자동으로 종료하는 설정
2. DB 성능 최적화 및 보안을 위해 사용됨
3. IDLE_TIME이 초과되면 세션이 끊어지므로, 필요하면 값을 늘리거나 UNLIMITED로 설정 가능
4. DB Link를 사용할 경우 원격 DB의 IDLE_TIME 설정을 확인해야 함
'프로그래밍 > SQL' 카테고리의 다른 글
Oracle Database 아키텍처 이해하기: 인스턴스와 데이터베이스의 핵심 개념 (1) | 2025.02.28 |
---|---|
관계형 데이터베이스(RDBMS) vs 일반 DBMS 차이와 개념 정리 (0) | 2025.02.22 |
ORA-03150 : 테이터베이스 링크를 위한 통신 채널의 파일 끝 에러 (0) | 2025.02.20 |
스파르타코딩, SQL 후기 및 SQL 문법 정리(엑셀보다 쉬운 SQL) (0) | 2023.01.15 |
[SQL] WITH 에 대해서 정리해보자. (0) | 2023.01.15 |
댓글