Professional Documents
Culture Documents
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,
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 '\';
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.
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
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
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
'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:
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 --
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