문제

나의 번호를 가지고 pl/sql 수 있는 절차를 몇 분을 실행합니다.을 개발하는 동안,그들을 추가했 print 디버깅을 위해 제공하고 또한 일부 의견하고 진행 표시기.처음에는 나는 이러한 작은 테스트를 설정하고 출력은 거의 즉각적인입니다.이제는 내가 테스트와 크 테스트는 몇 분을 실행하는,내가 찾는 인쇄를 콘솔이 더 이상 적합하지 않기 때문에 아무것도 얻을 인쇄 할 때까지는 절차를 종료됩니다.내가 사용하면 작동하지 않는 환경에서는 버퍼 출력하고 그것을 인쇄하는 즉시 추가하는 간단한 인쇄제표에 대한 간단한 디버깅 및 진단은 일반적입니다.

그것은 가능한 pl/sql 를 인쇄 출력 즉시되지 않는(버퍼)?하지 않을 경우,어떤 대안을 할 사람들이 비슷한 결과는?

도움이 되었습니까?

해결책

자율 트랜잭션을 사용하여 다음과 같은 것과 같은 것들을 사용하여 테이블에 메시지를 작성하는 절차를 가질 수 있습니다.

procedure log (p_message)
is
    pragma autonomous_transaction;
begin
    insert into message_log (user, datetime, message)
    values (user, sysdate, p_message);
    commit;
end;

그런 다음 다른 Oracle 세션에서 테이블을 모니터링하십시오.

다른 팁

우리는 이것에 대한 작은 트릭이 있습니다.

dbms_application_info.set_client_info ( "일부 정보")를 사용할 수 있습니다. 일부 변수를 생성하고 문자열을 내부 ""로 바꿉니다.

V $ 세션에서 Select Client_Info를 사용하여 진행 상황을 모니터링하십시오.

사용 했습니다 dbms_pipe 이 목적에 적합합니다.에 메시지를 보내는 파이프라 및에서 그들을 읽는 또 다른 세션이 있습니다.이 메소드에서 작동하지 않을 수도 있습 RAC 환경 경우 쓰기와 읽기 프로세스를 연결할 수 있는 다른 노드입니다.

할 수 있습니다 또는 삽입 메시지 테이블에 사용하는 절차에서 실행 자신의 세션을 사용하여"pragma autonomous_transaction".할 수 있습 쿼리에서 이러한 메시지를 다른 세션

편집:나는 두 번째 옵션은 이미 언급했다.

일반적으로 두 가지 옵션:

  • 보 출력을 Oracle 테이블 (또는 일시적 테이블)
  • 쓰(데이터베이스트)파일시스템과 함께 UTL_FILE

지 않는 경우가 있 OS 데이터베이스에 액세스할 호스트를 작성할 수는 있습을 dbhost 파일시스템에 바인딩하여 Oracle 외부에서 정의 테이블은 파일 그래서 그것을 쿼리할 수 있으로 선택합니다.

클라이언트 도구에 따라 다를 수 있습니다. 나는 한동안 SQL*Plus를 사용하지 않았지만 PL/SQL 개발자에서 절차를 디버깅 할 때 명령 창을 열고 SET SERVEROUTPUT ON 명령. 그런 다음 절차를 실행할 때 DBMS_OUTPUT.PUT_LINE 바로 나타납니다.

편집 : 당신이 맞아요, 나는 더 많은 양의 출력이나 무언가 만보고 있다고 생각합니다. 어쨌든 나는 온라인으로 검색을했고 이것을 발견했습니다. log4plsql - 유용 할 수 있습니다.

대안은 로깅 정보를 반환하는 파이프 라인 기능을 사용하는 것입니다. 예를 들어 여기를 참조하십시오. http://berxblog.blogspot.com/2009/01/pipelined-function-vs-dbmsoutput.html 파이프 라인 기능을 사용하면 다른 SQLPLUS/TOAD/SQL DEVELOPER 등을 사용할 필요가 없습니다 ... 세션.

PL/SQL 개발자의 DBMS 파이프와 파이프 뷰어를 사용하여 파이프에 넣을 때 모든 정보를 비동기로 잡을 수 있습니다.

읽을 사람이있을 때만 파이프에 물건을 넣도록 조심하십시오. 그렇지 않으면 파이프가 가득 차면 통화가 실패합니다.

PL/SQL 개발자에게는 이벤트를 사용할 가능성도 있습니다. 이벤트 모니터도 있습니다. 그리고 문서는이를 수행하는 방법의 예를 제공해야합니다.

또 다른 옵션은 PL/SQL이 절차를 호출하여 로그 메시지가 포함 된 이메일을 보내는 것입니다. 이를 위해서는 데이터베이스에 이메일 전송 기능이 있어야하며 UTL_SMTP를 사용하여 추가 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top