.comment-link {margin-left:.6em;}

Friday, April 13, 2007

Mostrar Parametros

Sexta-feira, 13. Vou escrever amenidades, sem pensar muito, então revirei algumas coisas aqui e achei uma procedurizinha, que a época, serviu bem aos propósitos. Seguinte: os analistas que desenvolvem muitas vezes não tem acesso ao "show parameter <...>" e solicitam acesso a v$parameter, então, eu codifiquei um quebra-galho para mostrar os parâmetros mesmo não possuindo acesso a v$parameter.

O código é antigo, feio, todo mundo começa fazendo código feio mesmo, não vou mexer para postar aqui, então sintam-se a vontade para mudar na medida em que necessitem. Acho que esse código eu usei com o 8.1.6, algo assim - é antigão mesmo, mas para uma sexta-feira 13, está de bom tamanho.

O código

create or replace
procedure show_parameter ( p_name in varchar2,
p_debug in boolean default false)
as
l_intval number(7);
l_strval varchar2(512) default 'Not found';
l_return number(7);
l_outval varchar2(512);
l_outtyp varchar2(30);
l_name varchar2(32) default '%' || p_name || '%';

begin
dbms_output.put_line(chr(10));
dbms_output.put_line(rpad('Name', 36, ' ') ||' '||
rpad('Type', 10, ' ') || ' ' || rpad('Value', 36, ' '));
dbms_output.put_line(rpad('-', 36, '-') ||' '||
rpad('-',10,'-') || ' '|| rpad('-', 30, '-'));

for x in (select name, type from my$parameter where name like l_name order by 1 )
loop
if ( p_debug ) then
dbms_output.put_line(chr(10)||'Before DBMS_UTILITY (' || x.name ||', '|| x.type ||')');
end if;

l_return := dbms_utility.get_parameter_value(trim(x.name), l_intval, l_strval);

if ( p_debug ) then
dbms_output.put('After DBMS_UTILITY: ');
dbms_output.put_line(l_return || ', ' || l_intval ||', '|| l_strval);
end if;

select decode(x.type, 1, 'boolean'
, 2, 'string'
, 3, 'integer'
, 4, 'file', to_char(x.type)),
decode(x.type, 1, decode(l_intval,1,'TRUE','FALSE')
, 2, l_strval
, 3, to_char(l_intval), l_strval)
into l_outtyp, l_outval
from dual;

if ( p_debug ) then
dbms_output.put_line('Did decode ');
end if;

dbms_output.put_line(rpad(x.name,36,' ') ||' '|| rpad(l_outtyp, 10, ' ') || ' ' ||
l_outval );

if ( p_debug ) then
dbms_output.put_line(rpad('-', 78, '-'));
end if;

end loop;
end;
/
E os procedimentos para instalação
Instruções
- O usuário dono da procedure deve ter direito de acesso (direto) a v$parameter.
- Criar uma view da v$parameter.
- Criar a procedure e dar privilégio de execução para PUBLIC.
- Criar um sinônimo público da procedure.
- Testar.

ops$marcio:LX10G> connect / as sysdba
Connected.
sys:LX10G> grant select on v_$parameter to ops$marcio;

Grant succeeded.

sys:LX10G> connect /
Connected.
ops$marcio:LX10G> create view my$parameter as select * from sys.v_$parameter;

View created.

ops$marcio:LX10G> alter procedure show_parameter compile;

Procedure altered.

ops$marcio:LX10G> create or replace public synonym show_parameter for show_parameter;

Synonym created.

ops$marcio:LX10G> connect scott/tiger
Connected.
scott:LX10G> show parameter dump
ORA-00942: table or view does not exist


scott:LX10G> exec show_parameter( 'dump' )


Name Type Value
------------------------------------ ---------- ------------------------------
background_core_dump string partial
background_dump_dest string /oracle/admin/lx10g/bdump
core_dump_dest string /oracle/admin/lx10g/cdump
max_dump_file_size string UNLIMITED
shadow_core_dump string partial
user_dump_dest string /oracle/admin/lx10g/udump

PL/SQL procedure successfully completed.

Tem até debug.

scott:LX10G> exec show_parameter( 'dump', true )


Name Type Value
------------------------------------ ---------- ------------------------------

Before DBMS_UTILITY (background_core_dump, 2)
After DBMS_UTILITY: 1, 7, partial
Did decode
background_core_dump string partial
------------------------------------------------------------------------------

Before DBMS_UTILITY (background_dump_dest, 2)
After DBMS_UTILITY: 1, 25, /oracle/admin/lx10g/bdump
Did decode
background_dump_dest string /oracle/admin/lx10g/bdump
------------------------------------------------------------------------------

Before DBMS_UTILITY (core_dump_dest, 2)
After DBMS_UTILITY: 1, 25, /oracle/admin/lx10g/cdump
Did decode
core_dump_dest string /oracle/admin/lx10g/cdump
------------------------------------------------------------------------------

Before DBMS_UTILITY (max_dump_file_size, 2)
After DBMS_UTILITY: 1, 9, UNLIMITED
Did decode
max_dump_file_size string UNLIMITED
------------------------------------------------------------------------------

Before DBMS_UTILITY (shadow_core_dump, 2)
After DBMS_UTILITY: 1, 7, partial
Did decode
shadow_core_dump string partial
------------------------------------------------------------------------------

Before DBMS_UTILITY (user_dump_dest, 2)
After DBMS_UTILITY: 1, 25, /oracle/admin/lx10g/udump
Did decode
user_dump_dest string /oracle/admin/lx10g/udump
------------------------------------------------------------------------------

PL/SQL procedure successfully completed.

Comments: Post a Comment



<< Home

This page is powered by Blogger. Isn't yours?