You are on page 1of 15

Consultas tiles

Aqu van algunas de esas consultas que nos podran ser tiles en el da a da.
Copien, peguen y guarden bien a mano... Espero les sean de utilidad...
Consulta Oracle SQL sobre la vista que muestra el estado de la base de datos:
select * from v$instance
Consulta Oracle SQL que muestra si la base de datos est abierta
select status from v$instance
Consulta Oracle SQL sobre la vista que muestra los parmetros generales de Oracle
select * from v$system_parameter
Consulta Oracle SQL para conocer la Versin de Oracle
select value from v$system_parameter where name = 'compatible'
Consulta Oracle SQL para conocer la Ubicacin y nombre del fichero spfile
select value from v$system_parameter where name = 'spfile'
Consulta Oracle SQL para conocer la Ubicacin y nmero de ficheros de control
select value from v$system_parameter where name = 'control_files'
Consulta Oracle SQL para conocer el Nombre de la base de datos
select value from v$system_parameter where name = 'db_name'
Consulta Oracle SQL sobre la vista que muestra las conexiones actuales a Oracle.
Para visualizarla es necesario entrar con privilegios de administrador
select osuser, username, machine, program
from v$session
order by osuser
Consulta Oracle SQL que muestra el nmero de conexiones actuales a Oracle agrupado
por aplicacin que realiza la conexin
select program Aplicacion, count(program) Numero_Sesiones
from v$session
group by program
order by Numero_Sesiones desc
Consulta Oracle SQL que muestra los usuarios de Oracle conectados y el nmero
de sesiones por usuario
select username Usuario_Oracle, count(username) Numero_Sesiones
from v$session
group by username
order by Numero_Sesiones desc
Consulta Oracle SQL que muestra propietarios de objetos y nmero de objetos por
propietario
select owner, count(owner) Numero
from dba_objects
group by owner
Consulta Oracle SQL sobre el Diccionario de datos (incluye todas las vistas y
tablas de la Base de Datos)
select * from dictionary
Consulta Oracle SQL que muestra los datos de una tabla especificada (en este caso
todas las tablas que lleven la cadena "XXX"
select * from ALL_ALL_TABLES where upper(table_name) like '%XXX%'
Consulta Oracle SQL para conocer las tablas propiedad del usuario actual
select * from user_tables

Consulta Oracle SQL para conocer todos los objetos propiedad del usuario
conectado a Oracle
select * from user_catalog
Consulta Oracle SQL para el DBA de Oracle que muestra los tablespaces, el espacio
utilizado, el espacio libre y los ficheros de datos de los mismos:
Select t.tablespace_name "Tablespace", t.status "Estado",
ROUND(MAX(d.bytes)/1024/1024,2) "MB Tamao",
ROUND((MAX(d.bytes)/1024/1024) (SUM(decode(f.bytes, NULL,0, f.bytes))/1024/1024),2) "MB Usados",
ROUND(SUM(decode(f.bytes, NULL,0, f.bytes))/1024/1024,2) "MB Libres",
t.pct_increase "% incremento",
SUBSTR(d.file_name,1,80) "Fichero de datos"
FROM DBA_FREE_SPACE f, DBA_DATA_FILES d, DBA_TABLESPACES t
WHERE t.tablespace_name = d.tablespace_name AND
f.tablespace_name(+) = d.tablespace_name
AND f.file_id(+) = d.file_id GROUP BY t.tablespace_name,
d.file_name, t.pct_increase, t.status ORDER BY 1,3 DESC
Consulta Oracle SQL para conocer los productos Oracle instalados y la versin:
select * from product_component_version
Consulta Oracle SQL para conocer los roles y privilegios por roles:
select * from role_sys_privs
Consulta Oracle SQL para conocer las reglas de integridad y columna a la que
afectan:
select constraint_name, column_name from sys.all_cons_columns
Consulta Oracle SQL para conocer las tablas de las que es propietario un usuario,
en este caso "xxx":
SELECT table_owner, table_name from sys.all_synonyms where table_owner like 'xxx'
Consulta Oracle SQL como la anterior, pero de otra forma ms efectiva (tablas de
las que es propietario un usuario):
SELECT DISTINCT TABLE_NAME
FROM ALL_ALL_TABLES
WHERE OWNER LIKE 'HR'
Parmetros de Oracle, valor actual y su descripcin:
SELECT v.name, v.value value, decode(ISSYS_MODIFIABLE, 'DEFERRED',
'TRUE', 'FALSE') ISSYS_MODIFIABLE, decode(v.isDefault, 'TRUE', 'YES',
'FALSE', 'NO') "DEFAULT", DECODE(ISSES_MODIFIABLE, 'IMMEDIATE',
'YES','FALSE', 'NO', 'DEFERRED', 'NO', 'YES') SES_MODIFIABLE,
DECODE(ISSYS_MODIFIABLE, 'IMMEDIATE', 'YES', 'FALSE', 'NO',
'DEFERRED', 'YES','YES') SYS_MODIFIABLE , v.description
FROM V$PARAMETER v
WHERE name not like 'nls%' ORDER BY 1
Consulta Oracle SQL que muestra los usuarios de Oracle y datos suyos (fecha de
creacin, estado, id, nombre, tablespace temporal,...):
Select * FROM dba_users
Consulta Oracle SQL para conocer tablespaces y propietarios de los mismos:
select owner, decode(partition_name, null, segment_name,
segment_name || ':' || partition_name) name,
segment_type, tablespace_name,bytes,initial_extent,
next_extent, PCT_INCREASE, extents, max_extents
from dba_segments
Where 1=1 And extents > 1 order by 9 desc, 3
ltimas consultas SQL ejecutadas en Oracle y usuario que las ejecut:
select distinct vs.sql_text, vs.sharable_mem,

vs.persistent_mem, vs.runtime_mem, vs.sorts,


vs.executions, vs.parse_calls, vs.module,
vs.buffer_gets, vs.disk_reads, vs.version_count,
vs.users_opening, vs.loads,
to_char(to_date(vs.first_load_time,
'YYYY-MM-DD/HH24:MI:SS'),'MM/DD HH24:MI:SS') first_load_time,
rawtohex(vs.address) address, vs.hash_value hash_value ,
rows_processed , vs.command_type, vs.parsing_user_id ,
OPTIMIZER_MODE , au.USERNAME parseuser
from v$sqlarea vs , all_users au
where (parsing_user_id != 0) AND
(au.user_id(+)=vs.parsing_user_id)
and (executions >= 1) order by buffer_gets/executions desc
Consulta Oracle SQL para conocer todos los tablespaces:
select * from V$TABLESPACE
Consulta Oracle SQL para conocer la memoria Share_Pool libre y usada
select name,to_number(value) bytes
from v$parameter where name ='shared_pool_size'
union all
select name,bytes
from v$sgastat where pool = 'shared pool' and name = 'free memory'
Cursores abiertos por usuario
select b.sid, a.username, b.value Cursores_Abiertos
from v$session a,
v$sesstat b,
v$statname c
where c.name in ('opened cursors current')
and b.statistic# = c.statistic#
and a.sid = b.sid
and a.username is not null
and b.value >0
order by 3
Consulta Oracle SQL para conocer los aciertos de la cach (no debera superar el
1 por ciento)
select sum(pins) Ejecuciones, sum(reloads) Fallos_cache,
trunc(sum(reloads)/sum(pins)*100,2) Porcentaje_aciertos
from v$librarycache
where namespace in ('TABLE/PROCEDURE','SQL AREA','BODY','TRIGGER');
Sentencias SQL completas ejecutadas con un texto determinado en el SQL
SELECT c.sid, d.piece, c.serial#, c.username, d.sql_text
FROM v$session c, v$sqltext d
WHERE c.sql_hash_value = d.hash_value
and upper(d.sql_text) like '%WHERE CAMPO LIKE%'
ORDER BY c.sid, d.piece
Una sentencia SQL concreta (filtrado por sid)
SELECT c.sid, d.piece, c.serial#, c.username, d.sql_text
FROM v$session c, v$sqltext d
WHERE c.sql_hash_value = d.hash_value
and sid = 105
ORDER BY c.sid, d.piece
Consulta Oracle SQL para conocer el tamao ocupado por la base de datos
select sum(BYTES)/1024/1024 MB from DBA_EXTENTS
Consulta Oracle SQL para conocer el tamao de los ficheros de datos de la base
de datos
select sum(bytes)/1024/1024 MB from dba_data_files

Consulta Oracle SQL para conocer el tamao ocupado por una tabla concreta sin
incluir los ndices de la misma
select sum(bytes)/1024/1024 MB from user_segments
where segment_type='TABLE' and segment_name='NOMBRETABLA'
Consulta Oracle SQL para conocer el tamao ocupado por una tabla concreta
incluyendo los ndices de la misma
select sum(bytes)/1024/1024 Table_Allocation_MB from user_segments
where segment_type in ('TABLE','INDEX') and
(segment_name='NOMBRETABLA' or segment_name in
(select index_name from user_indexes where table_name='NOMBRETABLA'))
Consulta Oracle SQL para conocer el tamao ocupado por una columna de una tabla
select sum(vsize('NOMBRECOLUMNA'))/1024/1024 MB from NOMBRETABLA
Consulta Oracle SQL para conocer el espacio ocupado por usuario
SELECT owner, SUM(BYTES)/1024/1024 MB FROM DBA_EXTENTS
group by owner
Consulta Oracle SQL para conocer el espacio ocupado por los diferentes segmentos
(tablas, ndices, undo, rollback, cluster, ...)
SELECT SEGMENT_TYPE, SUM(BYTES)/1024/1024 MB FROM DBA_EXTENTS
group by SEGMENT_TYPE
Consulta Oracle SQL para obtener todas las funciones de Oracle: NVL, ABS, LTRIM,...
SELECT distinct object_name
FROM all_arguments
WHERE package_name = 'STANDARD'
order by object_name
Consulta Oracle SQL para conocer el espacio ocupado por todos los objetos de la base de
datos, muestra los objetos que ms ocupan primero
SELECT SEGMENT_NAME, SUM(BYTES)/1024/1024 MB FROM DBA_EXTENTS
group by SEGMENT_NAME
order by 2 desc

Caracter de escape
Como ya bien sabemos % y _ son caracteres de escape que sirven para generar patrones.
% = equivale a O o N caracteres
_= equivale a O o 1 caracter
Nos podemos encontrar en situaciones en las que en el WHERE de una consulta queramos buscar caracteres
que contengan _ o % por lo que necesitaremos un caracter de escape que le diga a Oracle que esos dos
caracteres no son caracteres especiales.
Se hace de esta forma:
SELECT name FROM emp
WHERE id LIKE '%\%%' ESCAPE '\';

Matar sesiones Oracle en Linux

A veces necesitamos matar sesiones de la base de datos Oracle, muchas veces estas sesiones se quedan colgadas e
inactivas incluso por das, otras veces aunque estn en estado activo se nos pide que las eliminemos.
Para matar una sesin contamos con el comando ALTER SYSTEM KILL SESSION 'sid, serial#'
Previamente debemos de conocer el sid y el serial# de la sesin que deseamos eliminar, en este caso queremos "matar" al
usuario USER1:
SQL: select sid, serial#, username, status from v$session;
SID
SERIAL# USERNAME
---------- ---------- ---------370
226
373
557 USER1
381
90 SYS
383
1
385
1
386
7
389
3
390
3
391
4
393
1
394
1
395
1
396
1
397
1
398
1
399
1
400
1

STATUS
-------ACTIVE
INACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE

17 rows selected.
El comando para eliminar el sid 373 es el siguiente:
SQL: alter system kill session '373,557';
System altered.
Sin embargo hay ocasiones en que ALTER SYSTEM KILL SESSION no libera los bloqueos que tena la sesin que
matamos. Esto sucede cuando una sesin no puede ser interrumpida hasta que terminie la operacin que est realizando.
En este caso, la sesin mantiene todos los recursos que obtuvo de nuestro servidor hasta que termina la operacin.
Normalmente, la sesin que ejecut el ALTER SYSTEM KILL SESSION recibe el mensaje: the session has been marked to
be terminated; y la sesin aparece en v$session con status KILLED
SQL> select sid, serial#, username, status from v$session;
SID
SERIAL# USERNA
---------- ---------- -----370
108
373
557 USER1
381
90 SYS
383
1
385
1
386
7
389
3
390
3
391
4
393
1
394
1
395
1
396
1
397
1

STATUS
-------ACTIVE
KILLED
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE

398
399
400

1
1
1

ACTIVE
ACTIVE
ACTIVE

17 rows selected.
Para poder matar el proceso del usuario en Linux, lo hacemos con un kill -9, conociendo previamente el proceso del usuario.
*** EN EL CASO QUE ESTN BAJO CON ORACLE BAJO WINDOWS, SUGIERO REVISAR COMANDO ORAKILL.EXE ***
Primeramente encontramos el thread con el siguiente query (debemos de conocer el thread previamente a ejecutar el
comando ALTER SYSTEM KILL SESSION, de otra manera Oracle perdera la referencia al thread en cuestin):
SQL> select p.spid Thread, s.username Username, s.program
2 from
v$process p, v$session s
3 where p.addr = s.paddr and s.username is not null;
THREAD
USERNAME
PROGRAM
------------ -------- ------------364
SYS
sqlplus.exe
4524
USER1
sqlplus.exe
El comando por lo tanto sera:
kill -9 4524
A continuacin en v$session vemos que ya no existe la sesin del usuario QUICK
SQL> select sid, serial#, username, status from v$session;
SID
SERIAL# USERNAME
---------- ---------- ---------370
226
381
90 SYS
383
1
385
1
386
7
389
3
390
3
391
4
393
1
394
1
395
1
396
1
397
1
398
1
399
1
400
1

STATUS
-------ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE

16 rows selected.
Y con sto, finalmente nos liberamos de esas molestas sesiones en estado KILLED que ocupan recursos en nuestra Base
de Datos Oracle.
Publicado por eSkErNeL en 10:11 Sin comentarios:
VIERNES, 8 DE JULIO DE 2011

Oracle y JBoss...
Oracle y JBoss.

Publicado por eSkErNeL en 14:03 1 comentario:


MIRCOLES, 16 DE MARZO DE 2011

CRS-0223: Resource 'xxx' has placement error


Me encontr con este error luego de instalar DG4ODBC y reiniciar el RAC... y lo peor era un RAC que estaba en
Produccin!!! He aqu el primer consejo, y que est en la tapa del libro... no tocar algo que est funcionando y menos an
hacer pruebas sobre eso... :)
Luego de algunos minutos y con los latidos a 200 por minuto, y viendo que el status de las instancias no era ONLINE... las
mostraba como unknown, y obviamente no poda conectarme...
crs_stat -t
Name Type Target State Host
-----------------------------------------------------------ora.prod.db application ONLINE ONLINE
ora....d1.inst application ONLINE UNKNOWN
ora....d2.inst application ONLINE UNKNOWN
ora....SM1.asm application ONLINE ONLINE racdb1
ora....B1.lsnr application ONLINE ONLINE racdb1
ora.racdb1.gsd application ONLINE ONLINE racdb1
ora.racdb1.ons application ONLINE ONLINE racdb1
ora.racdb1.vip application ONLINE ONLINE racdb1
ora....SM2.asm application ONLINE ONLINE racdb2
ora....B2.lsnr application ONLINE ONLINE racdb2
ora.racdb2.gsd application ONLINE ONLINE racdb2
ora.racdb2.ons application ONLINE ONLINE racdb2
ora.racdb2.vip application ONLINE ONLINE racdb2
Intent levantarlas nuevamente... con crs_start, con srvctl...
y nooo, no haba caso... error!
PRKP-1001 : Error starting instance prod1 on node racdb1
CRS-1028: Dependency analysis failed because of:
CRS-0223: Resource 'ora.prod1.racdb1.inst' has placement error.
Se me complic... dnde est la salida?!?!
Intent levantarlas como si fueran BDs stanalone primero prod1 y luego prod2...
> export ORACLE_SID=prod1
> sqlplus /nolog
>> connect / as sysdba
>> startup;
y levantaron !!! la instancia 1 y la 2...
Bueh... salimos del paso... no se ven una a otra como un RAC pero al menos accedo a los datos... simplemente cambio las
propiedades de las aplicaciones que hacen uso del RAC, y que empiecen a apuntar a una de las instancias, sin necesidad
de FAILOVER ni BALANCEO... por lo menos para empezar...
Luego de un par de das de darle vueltas al asunto, encontr googleando, alguien que recomendaba matar los procesos crsd
y probar levantar las instancias nuevamente... y fue lo que hice, y funcion!

> kill - 9 --> en ambos nodos


> srvctl start instance -i prod1 -d prod --> luego con prod2
y listo!!! todo ONLINE nuevamente...
crs_stat -t
Name Type Target State Host
-----------------------------------------------------------ora.prod.db application ONLINE ONLINE racdb1
ora....d1.inst application ONLINE ONLINE racdb1
ora....d2.inst application ONLINE ONLINE racdb2
ora....SM1.asm application ONLINE ONLINE racdb1
ora....B1.lsnr application ONLINE ONLINE racdb1
ora.racdb1.gsd application ONLINE ONLINE racdb1
ora.racdb1.ons application ONLINE ONLINE racdb1
ora.racdb1.vip application ONLINE ONLINE racdb1
ora....SM2.asm application ONLINE ONLINE racdb2
ora....B2.lsnr application ONLINE ONLINE racdb2
ora.racdb2.gsd application ONLINE ONLINE racdb2
ora.racdb2.ons application ONLINE ONLINE racdb2
ora.racdb2.vip application ONLINE ONLINE racdb2
Publicado por eSkErNeL en 12:33 1 comentario:
JUEVES, 26 DE AGOSTO DE 2010

JOIN eando...
Hace casi un ao que no agregaba ningn post... hoy quizs sea la excepcin... o no...
Estaba pensando de que poda hablar (escribir en realidad). Se me cruz por la mente describir los diferentes tipos de joins
que podemos utilizar en una sentencia sql, y eso es lo que intentar hacer...
Los diferentes tipos de joins y sus aplicaciones:
INNER JOIN
Es el join "mas comn", por decirlo de alguna forma. Se utiliza cuando se quiere matchear dos tablas que tienen valores en
comn en una o ms columnnas.
Se podra utilizar para matchear el id_pais de la tabla CLIENTES, con el id_pais de la tabla PAISES; eso nos traera los
clientes que tengan asociado algn id_pais existente en la tabla PAISES.
OUTER JOIN
Se utiliza si se desea que el resultado no solo contenga los registros que cumplen con la condicin del join, sino tambin
cualquier registro que no cumpla de una tabla o de las dems.
Por ejemplo, se puede usar para obtener todos los clientes de la tabla CLIENES con su pas asociado de la tabla PAISES,
incluyendo aquellos clientes que no tienen un pas asociado.
CROSS JOIN
Utilizado cuando se quiere matchear todos los registros de una tabla con cada registro de otra tabla. Este tipo de join se lo
conoce como producto cartesiano.
SELF JOIN
Se aplica para matchear una tabla consigo misma. Se puede usar self join cuando una columna de una tabla debe

referenciar una columna diferente en la misma tabla.


...
Publicado por eSkErNeL en 11:14 1 comentario:
MIRCOLES, 23 DE SEPTIEMBRE DE 2009

Transportable Tablespaces
Con esta utilidad, lo que buscamos bsicamente es bajar los tiempos de pasaje de datos, ms especficamente al transferir
un tablespace de una BD a otra, o al recuperarlo de un estado anterior (recover).
Para poder transportar un tablespace, ste debe ser self-contained (auto-contenido), es decir, no debe contener objetos que
referencien a otros objetos en diferentes tablespaces.
Cmo chequeamos si el tablespace es self-contained?
EXEC DBMS_TTS.TRANSPORT_SET_CHECK(ts_list => 'nombre_tablespace', incl_constraints => TRUE);
Luego chequeamos la vista transport_set_violations para ver si existe alguna violacin...
SELECT * FROM transport_set_violations

RESPALDANDO EL TABLESPACE A TRANSPORTAR:


Como primer paso, luego de estos chequeos, debemos crear el "respaldo" del tablespace a transportar.
Seteamos el tablespace en cuestin en modo READ ONLY:
ALTER TABLESPACE nombre_tablespace READ ONLY;
Ejecutamos el siguiente export:
exp parfile=export_parfile.txt
-- contenido archivo export_parfile.txt
userid="sys/pass as sysdba"
transport_tablespace=y
tablespaces=(nombre_tablespace)
file=plug_in_nombre_tablespace_ts.dmp
log=plug_in_nombre_tablespace_ts.log
statistics=NONE
Respaldamos los datafiles que componen el tablespace, sto lo podemos hacer simplemente con el comando de copia del
sistema operativo (xcopy para Win o cp para Linux) o como ms cmodo nos quede.
-- ejemplo respaldo bajo Linux
cp tablespace_datafile*.dbf /Respaldo
Ya con sto tenemos todo lo necesario para poder levantar el mismo tablespace en otra BD o simplemente para utilizarlo
como respaldo.
Ahora deberamos llevar nuevamente el tablespace a modo READ WRITE para retornar a la "normalidad":

ALTER TABLESPACE nombre_tablespace READ WRITE;

RESTAURANDO EL TRANSPORTABLE TABLESPACE:


Ahora intentaremos describir cmo hacer para levantar el respaldo que realizamos en el captulo anterior.
Si el tablespace que vamos a restaurar ya existe en nuestra BD destino, debemos eliminarlo:
DROP TABLESPACE nombre_tablespace INCLUDING CONTENTS AND DATAFILES;
Restauramos los datafiles del "respaldo", que tan cuidadosamente habamos guardado...
-- ejemplo copia desde respaldo, supongamos orcl es la BD
cp /Respaldo/tablespace_datafile*.dbf $ORACLE_BASE/oradata/orcl
Luego, debemos "enchufar" (no se me ocurri otro trmino para traducir plug-in) el tablespace:
imp parfile=plug_in_nombre_tablespace_ts.txt
-- contenido archivo plug_in_nombre_tablespace_ts.txt
userid="sys/pass as sysdba"
transport_tablespace=y
file=plug_in_nombre_tablespace_ts.dmp
-- dmp generado en el respaldo
log=plug_in_nombre_tablespace_ts.log
tablespaces=(nombre_tablespace)
tts_owners=schema_origen
fromuser=schema_origen
touser=schema_destino
datafiles=(
'$ORACLE_BASE/oradata/orcl/tablespace_datafile1.dbf ',
-- declaramos todos los datafiles del ts
$ORACLE_BASE/oradata/orcl/tablespace_datafile2.dbf '
-- en su ubicacin correspondiente
...
)
Luego de terminado el import, colocamos el tablespace en modo READ WRITE:
ALTER TABLESPACE nombre_tablespace READ WRITE;
Si seguimos los pasos al pie de la letra, deberamos poder realizar los transportes de tablespaces sin mayores problemas.
Espero que haya sido de utilidad!

Ubicacin de archivos
Veamos en este post, donde se encuentran por default, algunos archivos y utilitarios que podemos llegar a necesitar:
alert.log ($ORACLE_HOME/admin/orcl/bdump) donde orcl es el nombre de la instancia
orcl_ora_xxxx.trc - archivos trace de usuario - ($ORACLE_HOME/admin/orcl/udump)
sqlplus ($ORACLE_HOME/bin)

dbca ($ORACLE_HOME/bin)
dbua ($ORACLE_HOME/bin)
spfile.ora ($ORACLE_HOME/dbs)
expdp / impdp / exp / imp ($ORACLE_HOME/bin)
Publicado por eSkErNeL en 14:43 Sin comentarios:
MIRCOLES, 2 DE SEPTIEMBRE DE 2009

Mover columna LOB a otro tablespace


Mover una tabla de un tablespace a otro puede resultar tan sencillo como ejecutar la sentencia:
alter table TABLA_SIMPLE move tablespace TS_DESTINO;
Pero... qu sucede si esta tabla contiene un atributo de tipo CLOB?
Cuando se crea una tabla con un atributo de tipo CLOB, Oracle implcitamente crea un segmento LOB y un ndice LOB para
dicha columna. Los nombres que asigna Oracle para estos objetos son, SYS_LOBxxxx para los segmentos y SYS_ILxxxx
para los ndices.
Aqu va la receta para mover la tabla conjuntamente con ese ndice y segmento LOB...
Supongamos que la tabla en cuestin se llama TABLA_LOB.
Ahora, verificamos el segmento, el ndice y la columna asociada al campo lob de dicha dicha tabla:
select segment_name, index_name, column_name from user_lobs where table_name='TABLA_LOB';
SEGMENT_NAME INDEX_NAME COLUMN_NAME
-------------------------- --------------------- -----------------------SYS_LOB0000760032C00019$$ SYS_IL0000760032C00019$$ COLUMN_LOB
Movemos la tabla TABLA_LOB al tablespace que deseamos:
alter table TABLA_LOB move tablespace TS_LOB;
Con sto hemos logrado, como ya sabamos, mover la tabla TABLA_LOB al tablespace requerido, pero el segmento LOB
an permanece en el tablespace de origen.
Para mover el segmento debemos ejecutar el siguiente sql:
alter table TABLA_LOB move lob (COLUMN_NAME) store as (tablespace TS_LOB);
Verificamos:
select index_name, tablespace_name from user_indexes where table_name = TABLA_LOB;
INDEX_NAME TABLESPACE_NAME
--------------------- ------------------------------SYS_IL0000760032C00019$$ TS_LOB

Est listo, conseguimos mover el dichoso segmento!

Publicado por eSkErNeL en 14:09 2 comentarios:


JUEVES, 13 DE AGOSTO DE 2009

Eliminar registros duplicados


Si por algn motivo insertaron registros duplicados de una tabla, ya sea porque han eliminado la clave primaria o ni siquiera
la han creado y ahora la consideran necesaria; por aqu les dejo una sentencia que los puede ayudar a eliminar esos
registros innecesarios:
delete from tabla
where rowid not in
(select min(rowid)
from tabla
group by (col_pk1, col_pk2, col_pk3...);
Donde tabla indica la tabla en cuestin y las col_pkn son las columnas que forman la primary key.
Publicado por eSkErNeL en 18:17 6 comentarios:
MIRCOLES, 12 DE AGOSTO DE 2009

Inicio automtico Oracle en Linux


En este post "intentar" explicar cmo configurar el inicio automtico de Oracle 10 en un S.O. Linux (Red Hat en mi caso
particular).
Luego de instalado Oracle, debemos editar el archivo /etc/oratab, donde dice algo similar a:
$ORACLE_SID:$ORACLE_HOME:N
Cambiamos la "N" por "Y" -- o sea le decimos que s! :) -Quedara:
$ORACLE_SID:$ORACLE_HOME:Y
En mi caso particular qued:
orcl10:/u01/app/oracle/product/10.2.0/db_1:Y
Luego creamos el archivo /etc/init.d/dbora con el usuario root, con el siguiente contenido:
(espero que haya quedado bien el copy & paste!)
#!/bin/bash
#
# chkconfig: 35 99 10
# description: Starts and stops Oracle processes
#
# Set ORA_HOME to be equivalent to the $ORACLE_HOME
# from which you wish to execute dbstart and dbshut;
#
# Set ORA_OWNER to the user id of the owner of the
# Oracle database in ORA_HOME.
#
ORA_HOME=/u01/app/oracle/product/10.2.0/db_1ORA_OWNER=oracle
case "$1" in

'start')
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start"
if [ -f $ORA_HOME/bin/oemctl ]; then
su - $ORA_OWNER -c "$ORA_HOME/bin/emctl start dbconsole"
fi
su - $ORA_OWNER -c $ORA_HOME/bin/dbstart
# Start the Intelligent Agent
#if [ -f $ORA_HOME/bin/agentctl ]; then
# su - $ORA_OWNER -c "$ORA_HOME/bin/agentctl start"
#else
# su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl dbsnmp_start"
#fi
# Start Enterprise Management Console
#if [ -f $ORA_HOME/bin/oemctl ]; then
# su - $ORA_OWNER -c "$ORA_HOME/bin/emctl start dbconsole"
#fi
# Start HTTP Server
#if [ -f $ORA_HOME/Apache/Apache/bin/apachectl ]; then
# su - $ORA_OWNER -c "$ORA_HOME/Apache/Apache/bin/apachectl start"
#fi
touch /var/lock/subsys/dbora
;;
'stop')
# Stop HTTP Server
#if [ -f $ORA_HOME/Apache/Apache/bin/apachectl ]; then
# su - $ORA_OWNER -c "$ORA_HOME/Apache/Apache/bin/apachectl stop"
#fi
# Stop Enterprise Management Console
if [ -f $ORA_HOME/bin/oemctl ]; then
su - $ORA_OWNER -c "$ORA_HOME/bin/emctl stop dbconsole"
fi
# Stop the Intelligent Agent
#if [ -f $ORA_HOME/bin/agentctl ]; then
# su - $ORA_OWNER -c "$ORA_HOME/bin/agentctl stop"
#else
# su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl dbsnmp_stop"
#fi
# Stop the TNS Listener su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop"
# Stop the Oracle databases:
# The following command assumes that the oracle login
# will not prompt the user for any values
su - $ORA_OWNER -c $ORA_HOME/bin/dbshut
rm -f /var/lock/subsys/dbora
;;
esac
# End of script dbora

A continuacin (seguimos con root) seteamos los privilegios sobre el archivo dbora:
chmod 750 /etc/init.d/dbora
Y asociamos al servicio con los runlevels apropiados:
chkconfig --level 345 dbora on
La instancia ahora debera iniciarse automticamente al reinicio de nuestro servidor Oracle. Hay un bug conocido que nos
puede complicar al reinicio, pero no preocuparse, porque por suerte "es conocido" y tiene solucin!
Si nos encontramos con este error:

Failed to auto-start Oracle Net Listener


using /ade/vikrkuma_new/bin/tnslsnr
Se debe a un path hard-coded en el script dbstart. Para solucionarlo editamos el archivo $ORACLE_HOME/bin/dbstart y
reemplazamos la siguiente lnea (lnea 78 aprox.):
ORACLE_HOME_LISTENER=/ade/vikrkuma_new/oracle
Con sto:
ORACLE_HOME_LISTENER=$ORACLE_HOME
Ahora s, con esta modificacin el listener debera iniciar automticamente sin problema alguno.
Espero que este post les sea de utilidad!
Publicado por eSkErNeL en 13:23 Sin comentarios:
LUNES, 10 DE AGOSTO DE 2009

Habilitar ARCHIVELOG
La mayora de las caractersticas de Alta Disponibilidad de Oracle requieren el modo ARCHIVELOG activado. Una vez
habilitada esta caracterstica, los archivos redo logs, sern guardados antes de ser sobreescritos.
Habilitar ARCHIVELOG a partir de la versin 10, resulta ms sencillo que en versiones anteriores, debido a que no debemos
especificar siquiera parmetro de inicio en el spfile (como el "LOG_ARCHIVE_START=true" en la versin 9).
Como chequeamos si est habilitado el modo ARCHIVELOG?
SQL> archive log list;
Database log mode No Archive Mode
Automatica archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DES
Oldest online log sequence 42541
Current log sequence 42543
El "No Archive Mode" evidentemente nos indica que esta base no esta guardando los online archive logs, es decir, no est
en modo ARCHIVELOG.
Cmo hacemos para habilitarlo?
sqlplus sys/pass as sysdba -- nos conectamos a la consola de SQLPlus -SQL> shutdown immediate; -- si la BD est levantada, la bajamos; de lo contrario obviamos este paso -SQL> startup mount; -- montamos la BD --

SQL> alter database archivelog; -- activamos ARCHIVELOG -SQL> alter database open; -- levantamos la BD --

Nuestra BD finalmente qued en modo ARCHIVELOG!


Los archivos generados por el archivado de logs, por default, quedarn ubicados en la FRA (Flash Recovery Area).
Esta sentencia nos indicar la ubicacin de los archive logs y el tamao asignado para esta rea:
select * from v$parameter where name in ('db_recovery_file_dest','db_recovery_file_dest_size');

Hasta aqu este artculo sobre ARCHIVELOG!


Publicado por eSkErNeL en 12:39 Sin comentarios:
MARTES, 4 DE AGOSTO DE 2009

ORA-12518
Cuando me encontr con este ORA error, que rezaba un lindo mensaje "TNS:listener could not hand off client connection",
me quera volver loco!!! No saba por donde empezar...
Las caractersticas del Server con el que estaba piloteando eran:
Intel Quad Core
4Gb RAM
Windows 2003 (32 bits)
Oracle 10.2.0.3
SGA >1.6Gb
320Mb PGA
...
Googleando en la vuelta, no encontr nada preciso que me ayudara rpidamente a solucionar el error, hasta que en metalink
(metalink.oracle.com) hall el DOC ID 556428.1 que me di algunas sugerencias interesantes.
Un primer intento, aumentar el nro. de processes, pero los resultados no fueron los esperados; en realidad tampoco
esperaba que diera resultado, pero... en fin... fue un intento no ms!
Luego, viendo que la memoria que tena asignada la SGA+PGA estaban "CASI" en los 2Gb y que mi S.O. era de 32 bits...
Ups! se supone que un sistema de 32bits. no puede redireccionar ms de 2Gb a un solo proceso, y yo estaba caminando
por la corniza... mxime que ese da la carga de usuarios en el sistema se vea algo incrementada comparada con los
dems das. Ah lo que me quedaba era disminuir la memoria asignada a la SGA o probar con el parmetro /3GB en el
boot.ini; sto ltimo fue lo que termin configurando y por suerte salimos a flote.
Configurando el parmetro /3GB logramos que un sistema Win 32 bits redireccione arriba de los 2Gb de memoria por
proceso.
Cmo setear este parmetro?
Contenido archivo boot.ini
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Standard" /3Gb /fastdetect /NoExecute=OptOut

You might also like