Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 프로세스 종료
- HashMap
- 정렬
- Servlet
- web
- RAM
- queue
- trunc()
- 오라클 버림 함수
- 스레드
- 이진탐색트리
- maven
- 오라클 trunc()
- Git
- 스케줄 삭제
- MAP
- 멀티스레드
- trunc(date)
- netstat
- url
- heap
- trunc(sysdate)
- ArrayList
- ssd
- desc
- git push
- cpu
- null
- stack
- HDD
Archives
- Today
- Total
無테고리 인생살이
오라클 자동 스케줄러 등록하기(feat. 프로시저, 잡, 스케줄 등록/삭제) 본문
어떻게 구현..?
- 푸시 발송 실패 건수가 3만건 이상일 경우, DEVICE_INFO 테이블에서 발송 실패한 토큰 전부 삭제
- 매주 금요일 밤 11시 45분 스케줄러 실행
DB 자동 스케줄러 등록하기
- 프로시저 생성
-- (프로시저 삭제)
DROP PROCEDURE delete_failed_push_tokens;
-- 프로시저 생성
CREATE OR REPLACE PROCEDURE delete_failed_push_tokens
IS
v_failed_token_cnt NUMBER; -- 실패 토큰 개수 저장할 변수
BEGIN
-- 1. 실패 토큰 개수 가져와 변수에 저장
SELECT COUNT(*) INTO v_failed_token_cnt
FROM 사용자계정.push_history
WHERE send_status = '0';
-- 2. 실패한 토큰 3만개 이상이면, 실패한 토큰 모두 삭제
IF v_failed_token_cnt >= 30000 THEN
DELETE FROM device_info@db_link_name
WHERE device_token IN (
SELECT device_token
FROM 사용자계정.push_history
WHERE send_status = '0'
);
COMMIT;
END IF;
END delete_failed_push_tokens;
- 필자는 푸시 보낼 디바이스 token이 쌓이는 DB와 푸시 발송 후 성공/실패 history가 담기는 DB가 다르므로, 2번에서와 같이 오라클 db link를 사용했습니다.
- 프로시저 내용 확인
SELECT * FROM user_source
WHERE type = ‘PROCEDURE’
AND name = ‘DELETE_FAILED_PUSH_TOKENS’;
2. 스케줄 생성
-- (스케줄 삭제)
BEGIN
dbms_scheduler.drop_schedule('DELETE_FAILED_TOKENS_SCHEDULE');
END;
/
-- 스케줄 등록
BEGIN
DBMS_SCHEDULER.CREATE_SCHEDULE (
schedule_name => 'DELETE_FAILED_TOKENS_SCHEDULE',
repeat_interval => 'FREQ=WEEKLY; BYDAY=FRI; BYHOUR=23; BYMINUTE=45');
END;
/
- 매주 금요일 밤 11시 45분 실행
3. 잡 생성 및 속성 추가
-- (잡 삭제)
BEGIN
dbms_scheduler.drop_job('DELETE_FAILED_TOKENS_JOB');
END;
/
-- 잡 등록
BEGIN
dbms_scheduler.create_job(
job_name => 'DELETE_FAILED_TOKENS_JOB',
job_type => 'STORED_PROCEDURE',
job_action => 'SYS.DELETE_FAILED_PUSH_TOKENS',
schedule_name => 'DELETE_FAILED_TOKENS_SCHEDULE', -- 해당 잡을 스케줄에 연결
auto_drop => FALSE,
enabled => TRUE
);
END;
/
-- 잡 속성 추가
BEGIN
DBMS_SCHEDULER.set_attribute (
name => 'DELETE_FAILED_TOKENS_JOB',
attribute => 'restartable',
value => TRUE
);
DBMS_SCHEDULER.set_attribute (
name => 'DELETE_FAILED_TOKENS_JOB',
attribute => 'logging_level',
value => SYS.DBMS_SCHEDULER.LOGGING_RUNS
);
END;
/
주의
- 잡 생성하더라도 job_queue_processes 가 0이면, 실행되지 않음
# 조회
show parameter processes;
# 수정 (0이 아닌 값. 최대 1000)
alter system set job_queue_processes = 1000;
- 잡 - 스케줄 둘 연결되어 있을 경우, 삭제 순서
- 잡 → 스케줄
스케줄 → 잡: 해당 경우는 종속성 문제로 스케줄이 삭제되지 않음.
'Database' 카테고리의 다른 글
오라클 TRUNC(SYSDATE) (0) | 2024.12.03 |
---|---|
오라클 DB간 데이터 주고받기, 데이터 연결 (feat. DB 링크) (0) | 2024.11.18 |