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
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.
Tem até debug.
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
E os procedimentos para instalação
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;
/
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.