Ian*_*ter 20 oracle instrumentation plsql oracle10g
我希望在我们现有的Oracle应用程序中引入一个日志框架来替换DBMS_OUTPUT的使用.
该框架将主要用于帮助调试,并将详细说明诸如启动x过程,参数细节,结束过程x等等.它还应具有为所有或仅一个程序单元,各种级别的跟踪打开的功能实际上什么是标准的日志记录功能.
实现这些要求应该相对简单,但是我希望您的帮助是如何最好地关闭此功能.我想要实现的是在关闭跟踪时可能遇到的最小性能.希望大多数时候都应该这样!
由于应用程序使用10g版本2,我最初喜欢在条件编译中包装日志记录机制的外观,以便在正常操作期间甚至看不到日志记录框架.不幸的是,我不得不勉强放弃这个想法,因为大多数应用程序是使用独立的程序和函数构建的,因此启用日志记录功能可能会使大量代码无效.
我已经看了几个现有的opensource和其他框架\功能的灵感:
log4plsql(http://log4plsql.sourceforge.net/)
APC 在这里的审查 特别是在可接受的影响下让我关注.
OraLog项目(http://oralog.sourceforge.net)
自2007年以来没有更新
PL/VISION(这里)
看起来很旧,自Oracle 8i以来没有变化?
问汤姆仪器(这里)
更新01/04/2014 Tom Kyte现在推荐Tyler Muth的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;
/
Run Code Online (Sandbox Code Playgroud)
现在,作为特权发出ALTER SYSTEM的用户:
ALTER SYSTEM设置PLSQL_CCFLAGS ='custom_logging:true';
并切换回:
ALTER SYSTEM设置PLSQL_CCFLAGS ='';
归档时间: |
|
查看次数: |
26474 次 |
最近记录: |