안녕하세요.
다름이 아니라 잡으로 프로시저를 실행 하는데 문제가 발생 되서 질문드립니다.
평상 시에는 정상 동작 하는데, DB 교체 작업을 할 때(신규 서버에 DB 복제했습니다.)
발생 했더라구요. 이런 문제가 발생 되지않게 하려면 어떻게 해야할까요?
- 환경 설명
1. DB서버 2대 입니다. 둘다 오라클 이구요
2. 1번 서버에는 신청 데이터가 쌓입니다. 2번 서버에서는 잡으로 1번 서버 데이터를 하나씩 처리
합니다.
3. 2번 서버에서 1번 서버 참조가 가능하여 처리된 데이터도 처리 했다고 마킹 합니다.
- 문제
2번 서버에서 잡으로 돌리는 프로시저 내에서 데이터로 각기 다른 테이블에 새로이 행을 추가하기도 하고, 업데이트를 하기도 합니다. 그런데! 이 부분이 실행되지 않고, 신청 데이터 처리를 완료 했다고 마킹이 되는 문제가 발생 했습니다.
- 소스 코드 예시 대략적인 내용입니다.
CREATE OR REPLACE PROCEDURE TEST.EXAMPLE_PRC
(
YN_REG IN VARCHAR2
)
AS
BEGIN
1. YN_REG -> N으로 되어있는(등록 안된) 행 중 제일 일찍 들어온 데이터 추출
2. 데이터가 신청/갱신/해지 종류에 따라 신청 내역 INSERT INTO LIST ~~~ // 진행 안된 부분
3. 고객에 대한 마스터 데이터 UPDATE CUST_DATA ~~~~ (신청/갱신/해지) // 진행 안된 부분
4. 1번 서버 신청데이터 등록 처리 UPDATE CUST_REQ@DB2 // 등록 처리 됨
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
RAISE_APPLICATION_ERROR(-20001, 'EXAMPLE_PRC' || SQLERRM);
END EXAMPLE_PRC;
/
음. 죄송합니다. 제가 생각이 좀 짧았네요. 소스코드를 다 올릴 수는 없을거 같아서 예시로만 올렸습니다. ㅠㅠ.. 의견 감사합니다!
저도 디버깅을 마치고 다른 분들이랑 나눠봤는데 들어온 데이터와 분기 나누어지는 부분은 이상이 없는걸 몇번이나 재차 확인했습니다. 특별한 작업이 아니라 1번 디비에 들어온 데이터를 2번 디비에 저장하고, 1번 디비 데이터에 체크 해주는 것이 다인 작업이었습니다.
체크는 되었지만 입력 되지 않은 데이터를 확인하고 다시 체크 해제해서 잡으로 실행되게 만들면 이상없이 데이터 들어가는 것도 확인 했습니다. 그래서 PL/SQL에는 문제가 없다고 생각하여 예시로 올린거였구요.. ㅠ_ㅠㅋ
나중에 질문글을 조금 수정하였습니다. 제 생각으로는 2번 DB서버 교체 작업 시에 들어온 데이터에 문제가 있는 것으로 추정하고 있습니다. 리스너 및 DB 내리는 작업 도중에 문제가 생긴건가 라고 생각만 할 뿐입니다.
그래서 혹시 저와 비슷한 경험을 하신 분이나 프로시저 내 트랜잭션 처리가 마쳤을 때 한번에 할 수 있는 방법이 있나 확인해보고자 질문 드렸습니다. 프로시저 BEGIN-END나 COMMIT이 중요할까 싶어서 코드도 올렸구요.