프로시저 잡 실행 질문이요. 0 8 1,132

by ekekekek [PL/SQL] [2019.10.23 16:57:51]


안녕하세요.

하루에 한번씩 데이터를 3달전 데이터를 검색하여 update를 해야될일이 생겨서 프로시저를 사용해서 작업을 진행하려고 하고있습니다.

 

CREATE OR REPLACE PROCEDURE PRO_UPDATE
IS
BEGIN
    UPDATE UP_INFO
    SET 
        UP_NM = A
        , UP_EMAIL = B
    WHERE UP_NM  NOT LIKE '%A%'

     AND TO_CHAR(DT,'yyyy-mm-dd') <= TO_CHAR(ADD_MONTHS(SYSDATE,-3),'yyyy-mm-dd');
    
    COMMIT;
    
END PRO_UPDATE

 

위와같이 프로시저를 만들었는데 일 단위로 실행을 시켜야될꺼 같아 찾아보니 JOB이라는 기능이 있길래 JOB을 활용하여 작업을 하려고

아래와 같이 매일 새벽 1시에 실행되게 JOB을 만들었습니다.

DECLARE
v_jo NUMBER;
BEGIN
DBMS_JOB.SUBMIT(v_jo, 'PRO_UPDATE;', TRUNC(SYSDATE, 'MI')+2/1440, 'TRUNC(SYSDATE)+ 1 + 1/24', FALSE);
COMMIT;
END;

JOB을 테스트 해보려 다음 실행시간을 2분뒤로 바꿔 기다려봤는데 실행이 안되는데 어떤식으로 작업을 해야되나요?

프로시저와 JOB을 처음 써봐서 설명 및 내용이 미흡해서 죄송합니다.

by jkson [2019.10.24 09:00:02]

JOB에 대한 건 뒤로하고. 3달 전 데이터라는 게 DT가 3개월 이전일자보다 과거인 값 맞나요? 오늘 수행되면 2019년 7월 24일 이전 데이터 모두 UPDATE?

UPDATE할 데이터 대상도 많을 것 같은데 대상이 맞는지 다시 생각해보셔야할 것 같고요. DT 값이 과거일자로 발생하는 게 아니라면 굳이 3개월 이전 값 모두 UPDATE할 필요는 없을 것 같습니다.

UPDATE할 대상이 많다면 DT에 TO_CHAR를 사용하여 FULL TABLE SCAN으로 UPDATE하는 것도 괜찮겠지만 그게 아니라면

조회되는 컬럼에 함수를 사용하면 성능 저하가 됩니다.

프로시저만 수행했을 때는 잘 수행 되나요?


by ekekekek [2019.10.24 09:31:05]

업데이트는 3개월 이상 데이터 중 UP_NM에 A라는 값이 없는 데이터를 검색해서 업데이트를 쳐주려는데 프로시저만 실행은 했을때는 정상적으로 업데이트가 되고있는데 저걸 주기적으로 실행시키는 방법을 알고싶습니다.


by jkson [2019.10.24 09:57:38]

문법은 맞는 것 같은데..

잘 등록되어있는지 상태는 어떤지 확인해보세요.

SELECT * FROM USER_JOBS


by ekekekek [2019.10.24 10:20:35]

잡을 삭제 하고 저위의 소스로 재등록을 해보면 2분뒤에 작업예정시간이 잡히는데

작업시간 후에 확인을 해보면 작업이 실행이 안되는거 같은데 

생성후에 따로 작업을 해줘야 되는게 있을까요?  

WHAT = DB계정명.PRO_UPDATE

BROKEN = N 

INTERVAL = TRUNC(SYSDATE)+ 1 + 1/24 로 등록 되어있습니다.


by jkson [2019.10.24 10:51:51]

user_jobs에서 laste_date에 수행된 시간 들어가있나요?

update할 데이터가 많아 계속 수행중인 것은 아닌지..


by ekekekek [2019.10.24 10:54:30]

last_date는 null값으로 들어가있습니다.

테이블 전체데이터 3천건 정도에 업데이트는 한건정도만 되게 만들어놓은 상태라 오래걸리지는 않을꺼 같습니다.


by jkson [2019.10.24 11:06:39]

last_date에 값이 안 들어와있다는 건 수행완료가 안 되었다는 것인데..

this_date는요? 시작은 했나요?

수행되는 다른 job은 있는지요.

job_queue_processes 세팅 확인해보세요. 0이면 수행 안 됩니다.


by ekekekek [2019.10.24 11:57:14]

아 조회 해보니 value가 0이 였네요. 

이건 db 담당자분한테 수정을 해도 되는건가 여쭤보고 수정을 해야될꺼 같네요.

감사합니다!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입