codememo

PL/SQL 로깅 - 제어 방법

tipmemo 2023. 6. 12. 21:31
반응형

PL/SQL 로깅 - 제어 방법

DBMS_OUTPUT의 사용을 대체하기 위해 기존 Oracle 애플리케이션에 로깅 프레임워크를 도입하고자 합니다.

이 프레임워크는 주로 디버깅을 지원하는 데 사용되며 시작 x 프로시저, 매개 변수의 세부 정보, 종료 프로시저 x 등과 같은 세부 정보를 제공합니다.또한 모든 또는 하나의 프로그램 유닛에 대해 켜지는 기능이 있어야 하며, 실제로 다양한 수준의 추적이 가능해야 합니다. 이것은 거의 표준 로깅 기능입니다.

이러한 요구 사항을 구현하는 것은 비교적 간단하지만, 이 기능을 껐다가 켜는 최선의 방법이 도움이 필요합니다.제가 달성하고자 하는 것은 트레이스가 꺼져 있을 때 가능한 최소의 성능 히트입니다.바라건대 그것은 대부분의 시간이 될 것입니다!

애플리케이션이 10g 릴리스 2를 사용하고 있기 때문에, 저는 처음에는 정상 작동 중에 로깅 프레임워크가 보이지 않도록 조건부 컴파일 내부에 로깅 메커니즘을 감싸는 모습이 마음에 들었습니다.안타깝게도 대부분의 응용 프로그램이 독립적인 절차와 기능을 사용하여 구축되었기 때문에 마지못해 이 아이디어를 포기해야 했습니다. 따라서 로깅 기능을 설정하면 많은 코드가 무효화될 수 있습니다.

저는 영감을 얻기 위해 기존의 오픈 소스와 다른 사람들의 프레임워크\기능을 살펴보았습니다.

log4plsql(http://log4plsql.sourceforge.net/)

특히 수용 가능한 영향 아래에서 APC의 검토는 저에게 우려를 줍니다.

오라로그 프로젝트(http://oralog.sourceforge.net )

2007년 이후 업데이트 없음

PL/VISION(여기)

꽤 오래된 것 같은데, 오라클 8i 이후로 변경 사항이 없습니까?

Tom Instrumentation에게 묻습니다(여기).

2014년 4월 1일 업데이트 Tom Kyte가 Tyler Muth's Logger를 추천합니다.

Oracle 애플리케이션에 로그인하는 방법, 구현 방법, 특히 제어 방법을 도입한 경우의 경험을 들어보고 싶습니다.

당신은 잠재적인 계단식 무효화 때문에 조건부 컴파일의 개념을 버리는 것을 언급했습니다. 활성화하기 위해 재컴파일을 포함하지 않는 로깅/추적이 필요한 PL/SQL 소스를 기꺼이 터치한다면 다소 유사한 접근 방식이 있습니다.

PLSQL_CCFLAGS에 사용자가 선택한 이름/값 쌍을 추가하고 응용 프로그램 코드가 v$ 매개 변수의 비교적 가벼운 쿼리를 수행하여 로깅이 "켜져 있는지" 확인할 수 있습니다.가장 거친 구현은 하나의 이름/값 쌍이지만 모듈별로 다른 쌍으로 확장하여 로깅을 보다 세부적으로 설정할 수 있습니다.

[편집] 다음은 당신의 의견/요청에 대한 매우 간단한 예입니다. PLSQL_CCFLAGS 문자열에 다른 기존 정보가 있을 경우, 함수로 래핑하는 등의 구문 분석을 더 정교하게 하고 싶을 것입니다.

create or replace procedure ianc_cc
is
cc_flag_val varchar2(4000);
begin 
-- need direct select grant on v_$parameter for this...
select value into cc_flag_val 
  from v$parameter where name = 'plsql_ccflags';
if (cc_flag_val = 'custom_logging:true') then
  dbms_output.put_line('custom logging is on'); 
else  
  dbms_output.put_line('custom logging is off'); 
end if;
end;
/

이제 ALTER SYSTEM 발급 권한이 있는 사용자로서:

ALTER SYSTEM set PLSQL_CCFLAGS='custom_logging:true';

다음과 같이 전환합니다.

ALTER SYSTEM set PLSQL_CCFLAGS=';

동일한 문제를 검토한 결과, 여전히 활동 중인 것으로 보이는 다음 프로젝트를 발견했습니다. https://github.com/tmuth/Logger---A-PL-SQL-Logging-Utility

우리의 응용 프로그램에서, 우리는 애스크 톰의 debug.f 계측을 많이 사용합니다.한 가지 빠르게 깨달은 것은 '디버그 탭'이 모든 로그 메시지에 대해 로깅이 켜져 있는지 여부를 확인하기에는 너무 많은 쿼리를 받고 있다는 것입니다.저는 100개의 로그 메시지에 한 번만 표를 확인하기 위해 변경 사항을 해킹했고 지금은 꽤 잘 작동합니다.

제 요점은 각 로그 메시지의 테이블을 확인하여 출력 여부를 확인하는 것을 피하는 것입니다.장시간 실행 중인 프로세스 중에 로그를 설정하려는 경우가 많으므로 이 작업을 수행하는 것이 중요합니다.저의 경우, 저는 100개의 로깅콜이 지나가기를 몇 초만 기다리면 로그가 켜지는 것을 알아차릴 수 있을 것이라고 생각했습니다.

컨텍스트를 설정하고 이름 값 쌍을 추가하는 것이 더 쉽지 않을까요?디버그 탭 테이블의 트리거를 사용하여 컨텍스트의 값을 변경할 수 있습니다.

언급URL : https://stackoverflow.com/questions/1232246/pl-sql-logging-how-to-control

반응형