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
- Git
- JSP
- ibatis
- DB 스케쥴러
- PYTHON
- 드라이브 연결
- Oracle
- 파이썬
- directivesTag
- anaconda
- sqlMapConfig
- form태그
- java
- pyqt
- form
- fastapi
- androidstudio
- error
- pl/sql
- spring
- eclipse
- sqlMapClient
- sqldeveloper
- select문
- sql
- pymssql
- javascript
- mybatis
- pagination
- 비교표현식
Archives
- Today
- Total
기록하는 코더
[Oracle] DB스케쥴러 본문
최종 프로젝트를 진행하다 DB스케쥴러를 사용해보았다.
프로젝트에서 DB스케쥴러를 사용할 기능 부분은 설문조사였다.
설문조사 진행 기간이 지나면 자동으로 마감처리를 하고 싶었고,
이를 Oracle 트리거를 이용하여 자동 처리를 하고 싶었지만
UPDATE 해야하는 테이블과 변수 선언할 테이블이 동일한 문제가 있어
mutating error가 발생했다.
그래서 다른 방법을 찾게 되었다.
1. 쿼츠(Quartz)를 이용하는 방법
2. DB 스케쥴러를 이용하는 방법
이 중에서 2번을 선택하여 진행하였다.
스케줄러(배치 작업)
==> 특정한 시간이 되면 자동적으로 질의 명령이 실행되도록 하는 방법
예> 1분에 한번씩 프로시저 실행
스케줄러 작성 권한 얻기
1. 관리자 모드로 간다
conn /as sysdba;
2. 권한을 얻는다.
grant create any job to scott;
3. 복귀
conn scott/tiger
--1) 프로시저 생성
create or replace procedure ex2
as
begin
update blog set blog_total = blog_total + 1
where blog_id = 'a001';
end;
/
exec ex2; --테스트
/
select * from blog;
/
--2) 스케줄 생성
DECLARE
-- v_job 변수는 임의의 숫자로 job 아이디가 됩니다.
v_job NUMBER(5);
BEGIN
DBMS_JOB.submit(
v_job, -- job 아이디
'ex2;', -- 실행할 작업
sysdate, -- 처음 작업을 실행할 시간
'sysdate+(1/1440)', -- 1분마다
FALSE); -- 파싱여부
-- 출력메시지
sys.DBMS_OUTPUT.put_line('DBMS_JOB job number is' || TO_CHAR(v_job));
COMMIT;
END;
/
-- 3. 스케줄러에서 작업 삭제
-- 스케줄러에 등록된 작업을 조회
SELECT * FROM user_jobs;
-- 위 결과에서 확인한 job아이디(job컬럼) 값으로 작업 삭제
BEGIN
DBMS_JOB.remove([job아이디]);
END;
/
/*
-- 4. 기타
-- 시간계산법 분단위 sysdate+(1/1440), 시간단위 sysdate+(1/24), 일단위 sysdate+1
-- 파싱여부란? FALSE 일 경우 JOB과 관련한 프로시저를 파싱, TRUE일 경우 JOB이 처음 실행할때 파싱.
(기본값 FALSE 로 지정)
*/
설문조사용 DB 스케쥴러 생성 코드
-- 프로시져 생성
CREATE OR REPLACE PROCEDURE PROC_update_survey_status
IS
BEGIN
UPDATE SRVY SET SRVY_SSTS = 'SRVY0003' WHERE SRVY_END_YMD < SYSDATE;
END;
/
SELECT * FROM SRVY;
/
--2) 스케줄 생성
DECLARE
-- v_job 변수는 임의의 숫자로 job 아이디가 됩니다.
v_job NUMBER(5);
BEGIN
DBMS_JOB.submit(
v_job, -- job 아이디
'PROC_update_survey_status;', -- 실행할 작업
sysdate, -- 처음 작업을 실행할 시간
'TRUNC(SYSDATE, ''DD'')+1', -- 매일 자정마다
FALSE); -- 파싱여부
-- 출력메시지
sys.DBMS_OUTPUT.put_line('DBMS_JOB job number is' || TO_CHAR(v_job));
COMMIT;
END;
/
스케줄러(배치 작업)
==> 특정한 시간이 되면 자동적으로 질의 명령이 실행되도록
하는 방법
'DataBase > Oracle' 카테고리의 다른 글
[Spring] mybatis - HashMap 형태로 데이터 받아오기 (0) | 2023.01.31 |
---|---|
[Oracle] 조인 Join (0) | 2023.01.31 |
[Oracle] PL/SQL Procedure (0) | 2023.01.25 |
[Oracle] 데이터타입 - 문자열 자료형 (0) | 2023.01.15 |
[Oracle] 데이터베이스 접속 계정 만드는 방법 (0) | 2023.01.07 |