12.27.05

Parámetros ocultos

Posted in oracle at 7:19 pm by fidi

Nunca me acuerdo como consultar los parámetros “ocultos” ( underscore o hidden parameters ) en Oracle. La razón es que no lo hago a menudo. Cuando tengo que hacerlo pierdo un buen rato buscando como lo hice la última vez.
Aquí está el método del maestro Tom Kyte:

all_parameters is a view of my own making, must be run as "sys" (eg: sysdba)

create or replace view all_parameters
as
select x.ksppinm name, y.ksppstvl value
from   x$ksppi  x , x$ksppcv y
where  x.indx = y.indx
order  by x.ksppinm
/
grant select on all_parameters to public;
create public synonym all_parameters for all_parameters;

Esta “vista” contiene todos los parámetros de nuestra instancia. Si te interesaran sólo los parámetros ocultos se puede hacer ( con la descripción y los valores de instancia y sesión , más interesante ):

SELECT
    a.ksppinm Parameter,
    a.ksppdesc Description,
    b.ksppstvl "Session Value",
    c.ksppstvl "Instance Value"
FROM x$ksppi a,
    x$ksppcv b,
    x$ksppsv c
WHERE a.indx = b.indx
    AND a.indx = c.indx
    AND a.ksppinm like '_%' escape ''
ORDER BY 1

El señor DKB usa algo parecido con un giro interesante para indicar el tipo ( el “copy+paste” directamente de su página no funciona pq su comando tiene un error ( por lo menos )

SELECT
    a.ksppinm nombre,
    b.ksppstvl valor,
    b.ksppstdf vdefecto,
    decode (a.ksppity, 1, 'boolean', 2, 'string', 3, 'number', 4, 'file', a.ksppity) tipo,
    a.ksppdesc descripcion
FROM sys.x$ksppi a,
    sys.x$ksppcv b
WHERE a.indx = b.indx
    AND a.ksppinm like '_%' escape ''
ORDER BY nombre;

A mi me parece que la línea

a.ksppinm like '_%' escape ''

la podemos sustituir por

substr(ksppinm,1,1)='_'

Se puede encontrar algún otro script interesante jugando con x$ksppi y x$ksppcv en:
Jonathan Lewis

También hay varias paginas intentando documentar las tablas X$:
http://www.dbaclick.com/ftp/documents/oracle/ioug/docs/The X$ Tables.DOC
http://www.stormloader.com/yonghuang/computer/x$table.html

Ya puestos, para obtener un listado de todas nuestras tablas V$ y X$ podemos usar:

select   type, name
from     v$fixed_table
order by type, name

y para ver la definición de las vistas:

select *
from v$fixed_view_definition
where view_name = 'GV$PARAMETER';

lo que nos da su definición:

SELECT
    x.inst_id,
    x.indx+1,
    ksppinm,
    ksppity,
    ksppstvl,
    ksppstdvl,
    ksppstdf,
    decode (bitand(ksppiflg/256,1),1,'TRUE','FALSE'),
    decode(bitand(ksppiflg/65536,3),1,'I    MMEDIATE',2,'DEFERRED', 3,'IMMEDIATE','FALSE'),
    decode(bitand(ksppiflg,4),4,'FALSE', decod e(bitand(ksppiflg/65536,3), 0, 'FALSE', 'TRUE')),
    decode(bitand(ksppstvf,7), 1,'MODIFIED',4,'SYSTEM_MOD','FALSE'),
    decode(bitand(ksppstvf,2),2,'TRUE','FALSE    '),
    decode(bitand(ksppilrmflg/64, 1), 1, 'TRUE', 'FALSE'),
    ksppdesc,
    ksppstcmn t,
    ksppihash
FROM x$ksppi x,
    x$ksppcv y
WHERE
    (
        x.indx = y.indx
    )
    AND
    (
        (
            translat e(ksppinm,'_','#') not like '##%'
        )
        AND
        (
            (
                translate(ksppinm,'_','#') not like '#%'
            )
            OR
            (
                ksppstdf = 'FALSE'
            )
            OR
            (
                bitand(ksppstvf,5) > 0
            )
        )
    )

Leave a Comment

You must be logged in to post a comment.