질문관련 게시판이 안보여서 이쪽에서 문의합니다.
EAI 관련하여, 뭔가 막히는 것이 있는데, 어떻게 풀어야 할지 궁금해서 이렇게 글을 올려봅니다.
EAI로 저희 DB서버에 데이터를 INSERT를 하고, 관련 프로시저를 호출하는 로직인 것 같습니다.
문제는 프로시저의 로직자체가 많이 복잡해서, 처리할 데이터가 많다면, 그만큼 시간이 오래걸립니다.
처음 INSERT 데이터를 저희 서버에 보내주고, 프로시저를 호출하고 나서, 다음날 insert 데이터를 저희서버로 보내고, 다시 프로시저를 호출할때, 기존의 프로시저가 처리가 아직 완료되지 않았다면, 다음으로 들어온 프로시저는 처리를 안하는 것인가요? 아니면, 끝날때까지 기다린다음에 처리를 해주나요?
전문가의 의견을 듣고 싶습니다.
-- PL/SQL은 인터프린터 방식 언어입니다. 인터프린터 방식(절차적)은 하나씩 순서대로 실행하는 특징이 있습니다. -- 보통 언어가 비동기 방식을 별도 기술하는 것이 아니면 다 실행은 절차적으로 되는 것 같네요. -- 이하 테스트 구문 CREATE OR REPLACE PROCEDURE PROC_TEST3 AS BEGIN DBMS_OUTPUT.PUT_LINE('======================>> START'); PROC_TEST3_2(); DBMS_OUTPUT.PUT_LINE('======================>> END'); END PROC_TEST3; CREATE OR REPLACE PROCEDURE PROC_TEST3_2 AS BEGIN DBMS_LOCK.SLEEP(3); DBMS_OUTPUT.PUT_LINE('======================>> 3'); END PROC_TEST3_2; EXEC PROC_TEST3(); >> START >> 3 >> END
프로시저가 정말 오래 걸리는 상황이라면,
차라리 프로시저 관리 테이블을 하나 만들고 구분 값을 통해 실행 종료를 확인하여 다음 프로시저를 실행되도록 싱글톤 테이블을 하나 두는 것이 명확할 것 같습니다.
아니면 프로시저 작업 대기열 테이블을 만들고, JOB를 생성하여 쌓여있는 것들을 처리하는 것도 방법이 될 것 같습니다. 근데 동시에 실행되면 문제가 되는 것이 오히려 이상한 상황이네요, 이렇게 오래 걸리는 것은 새벽에 배치로 돌리면 됩니다. 새벽 시간에 해결이 안되 실시간 부하가 발생하는 시간에도 돌아야 한다면 이건 분리하여 실행해야 하는 성격인 것 같습니다.