12.27.05
Parámetros ocultos
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
)
)
)