2012-10-30 2 views
1

나는 수백만 개의 행을 처리하는데 몇 시간이 걸리기 때문에 프로세스의 상태에 대한 아이디어를 얻으려는 피드백이 필요합니다. 실행이 완료된 후에 만 ​​출력을 사용할 수 있으므로 저장 프로 시저로부터 실시간 피드백을받을 수 없습니다. 어떤 해결책?저장 프로 시저의 출력을 표시하는 방법은 무엇입니까?

답변

3

두 가지 해결책이 있습니다.

하나는 설명의 로그에 기록하는 것입니다. 파일 (writing out with UTL_FILE) 또는 테이블 (autonomous transactions 사용)을 사용하면 주 트랜잭션에 영향을주지 않고 레코드를 다른 세션에서 볼 수 있습니다.

다른 해결책은 DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS를 사용하여 V $ SESSION_LONGOPS 뷰에 기록하는 것입니다. Find out more

로깅은 항상 장기 실행 백그라운드 절차에서 좋은 생각입니다. 무언가 잘못되면 로그가 정보의 유일한 원천이됩니다.

+0

+1 감사 – tbone

2

다른 테이블 (프로 시저가 실행되는 동안 선택할 수있는 테이블)에 쓰는 ReportStatus 프로 시저를 가질 수 있습니다.

주 프로 시저와 독립적으로 커밋 할 수 있도록 PRAGMA AUTONOMOUS_TRANSACTION이 필요합니다.

예 : longops 링크에 대한

CREATE OR REPLACE PROCEDURE ReportStatus(status NUMBER) 
AS 
    PRAGMA AUTONOMOUS_TRANSACTION; 
BEGIN 
    INSERT INTO StatusTable VALUES(SYSDATE, status); 
    COMMIT; 
END ReportStatus; 
/