SQL

ORACLE 프로시저 / 잡 스케쥴러 등록

민톨이 2025. 10. 28. 09:35
728x90
CREATE OR REPLACE PROCEDURE NEXENDBA.PR_CM_USER_LOGIN_HIST
/******************************************************************************
   NAME:       PR_CM_USER_LOGIN_HIST
   PURPOSE:    로그인 이력 테이블을 일정 기간이 지나면 삭제한다.

   REVISIONS:
   VER              DATE        AUTHOR       DESCRIPTION
   --------------------------------------------------------------------------------------------------------------------------
   1.0        2025-10-20        민토리        로그인 이력 테이블을 90일 지나면 삭제한다.
   
******************************************************************************/
IS
BEGIN
    -- 현재 날짜 기준 90일 이전 로그인 기록 삭제
	DELETE FROM CM_USER_LOGIN_HIST
	WHERE 1=1
	AND TO_DATE(LOGIN_DT, 'YYYYMMDDHH24MISS') < SYSDATE - 90;

	COMMIT;
	
	DBMS_OUTPUT.PUT_LINE('90일 이전 로그인 이력 삭제 완료');
END PR_CM_USER_LOGIN_HIST;

 

회사에서 로그인/로그아웃 이력 남기는 기능을 개발하였다.

후처리를 위해 90일이 지나면 DB에 쌓여있는 로그인 이력들이 자동으로 삭제되는 프로시저를 생성했다.  

 

또한 이 프로시저가 자동으로 돌아가기 위해서 잡스케쥴러 등록까지 해주었다 

데이터를 건드는 부분은 보통 사용자가 활동하지 않는 시간에 하면 좋겠다 싶어서 오전 2시로 정했고

인터넷을 찾아보니 보통은 새벽 시간대에 설정을 해둔다고 하여 매일 오전 2시에 돌아가도록 설정해두었다.

 

BEGIN
	DBMS_SCHEDULER.CREATE_JOB (
		job_name          =>  'DBMS_JOB$_784',
		job_type          =>  'STORED_PROCEDURE',
		job_action        =>  'PR_CM_USER_LOGIN_HIST',
		start_date        =>   SYSTIMESTAMP,
		repeat_interval   =>  'FREQ=DAILY; BYHOUR=2; BYMINUTE=0; BYSECOND=0', 
		enabled           =>   TRUE,
		comments          =>  '로그인 이력 삭제 - 매일 새벽 2시 PR_CM_USER_LOGIN_HIST 실행'
	);
END;

 

SQL편집기에서 스케쥴러 코드를 짜 등록해주었다

job_name의 경우에는 각 회사에서 사용하는 공통 이름이 있을 것이니 잘 지켜야한다.

(우리회사의 경우에는 이렇게 통일하고 있어서 저렇게 설정했다)

 

▼ 각 파라미터에 대한 설명 

job_name 등록할 잡 이름
job_type 실행할 대상 유형 (PLSQL_BLOCK, STORED_PROCEDURE, EXECUTABLE)
job_action 실제 실행할 내용 (프로시저 호출 구문)
start_date 최초 실행 시간
repeat_interval 반복 주기 (Scheduler 캘린더 표현식 사용)
enabled TRUE로 설정 시 즉시 활성화
comments 잡 설명

 

 

▼ job_type에 대해 좀 더 자세히 보면 이렇다.

'PLSQL_BLOCK' BEGIN ... END; 형태의 익명 블록 'BEGIN P_MY_PROC; END;' 여러 문장 가능
'STORED_PROCEDURE' CALL 프로시저명 또는 프로시저명 'MY_SCHEMA.P_MY_PROC' 저장된 프로시저 1개 호출
'EXECUTABLE' OS 명령 / Shell Script 실행 '/usr/bin/python /home/run.py' DB 밖 프로그램 실행

 

 

요즘 회사에서 PL/SQL을 다룰 일이 좀 있는데 좋은 경험인 것 같아 기록해두었다 !!