Archive for the ‘Oracle’ Category

Uso de SQL_TRACE

martes, julio 20th, 2010

Primero hay que alterar la sesion

ALTER SESSION SET SQL_TRACE=TRUE

Luego de esto se generará un archivo extensión *.trc dentro de la carpeta de oracle, en mi caso

%ORACLE_HOME%\admin\%ORACLE_SID%\udump

Luego se debe utilizar la aplicación de oracle TKPROF, una ejecusion básica sería

TKPROF archivo_trc nombre_archivo_output SYS=NO EXPLAIN=USER/PASSWORD

Y luego de eso te genera un archivo (nombre_archivo_output) con las consultas analizadas, tiempo de CPU, cantidad de ejecuciones, lecturas a disco y otros. En mi caso por ejemplo

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute   9758      0.09       0.16          0          0          0           0
Fetch     9758      0.21       0.24          0      39032          0        9758
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total    19517      0.31       0.41          0      39032          0        9758

Moviendo hacia otro tablespace tablas e índices en oracle

miércoles, julio 7th, 2010

Para mover una tabla y/o indice de un tablespace a otro se debe aplicar un ALTER como los siguientes

ALTER TABLE NOMBRE_ESQUEMA.NOMBRE_TABLA MOVE TABLESPACE NOMBRE_TABLESPACE;
ALTER INDEX NOMBRE_ESQUEMA.NOMBRE_INDICE REBUILD TABLESPACE NOMBRE_TABLESPACE;

Se puede utilizar un script (si tienes privilegios sobre las tablas) para poder armar este movimiento de tablas desde un esquema a otro. La primera selecciona toda la lista de tablas pertenecientes a un esquema y construye el SQL que ya fue mostrado. La seguna construye toda la tabla de indices.

select 'ALTER TABLE NOMBRE_ESQUEMA.' || table_name || ' MOVE TABLESPACE NOMBRE_TABLESPACE;' from all_tables where owner = 'NOMBRE_ESQUEMA'
select 'ALTER INDEX NOMBRE_ESQUEMA.' || index_name || ' REBUILD TABLESPACE NOMBRE_TABLESPACE;' from all_indexes where table_owner = 'NOMBRE_ESQUEMA'

Dando permiso a una secuencia en Oracle

lunes, mayo 31st, 2010

En algunos casos muy especificos debemos dar permiso a que otro usuario, por motivos de proceso deba incrementar una secuencia de otro esquema, para ello se debe dar el permiso de SELECT sobre la secuencia, debido a que obviamente se ocupa generalmente de la forma SELECT NOMBRE_DE_LA_SECUANCIA.NEXTVAL FROM DUAL, para ello se tiene:

GRANT SELECT ON NOMBRE_SECUENCIA TO USUARIO;

Ejecutar un script desde SQLPlus de Oracle

jueves, noviembre 26th, 2009

Luego de haberse loeado a SQL Plus de oracle la forma inmediata de ejecutar un script es

SQL >  @{file}

O sea

SQL >  @insertTablaX.sql

por ejemplo. Si recibes error de archivo no encontrado intenta introduciendo la ruta completa

SQL >  @d:/opt/scripts/inserttablaX.sql

Diferencias entre systimestamp y sysdate en Oracle

martes, noviembre 17th, 2009

Tengan cuidado al usar systimestamp y sysdate en Oracle, esto porque existe una pequeña diferencia al momento de tratar de presentar informacion:

SELECT TO_CHAR(systimestamp, 'DD/MM/YYYY HH24:MI:SS.FF3') FROM dual;
SELECT TO_CHAR(sysdate, 'DD/MM/YYYY HH24:MI:SS.FF3') FROM dual;

Estas dos sentencias son diferentes, la primera te entrega la fecha hasta los milisegundos y la segunda da error. Esto porque sysdate solo guarda hasta el segundo, no considera los milisegundos.

Jdbc getMetaData ampliado

lunes, junio 22nd, 2009

El driver de Oracle nos entrega lo que la espcificación obliga, pero internamente los comentarios los configura en null, para poder simular una consulta de forma de poder extraer los comentarios entonces se puede utilizar

SELECT NULL AS table_cat,
o.owner AS table_schem,
o.object_name AS table_name,
o.object_type AS table_type,
C.COMMENTS AS remarks
FROM all_objects o,ALL_TAB_COMMENTS C
WHERE o.owner LIKE 'tu_esquema' ESCAPE '/'
AND o.object_type IN ('xxx', 'TABLE', 'VIEW')
AND o.owner= c.owner
AND o.object_name= c.table_name
ORDER BY table_type, table_schem, table_name