Salida básica en el sqlplus

A la hora del uso del sqlplus el formateo de  la salida es muy importante, tanto en el uso diario como para poder hacer pequeños scripts.

Algunos comandos básicos son:

Tamaño de la página
set pagesize 50000
Tamaño de la línea
set linesize 200
Para ver el comando que ejecutas
set echo off
suppresses the display of output from a command file
set termout off
Quitar las cabeceras
set heading off
Quitar la linea «x rows selected»
set feedback off;
Formateo de longitud de una columna
column XX format a20 (20 catarcetres)
column XX format 999.999 (decimales)
column XX format €999.999 (ponemos moneda)
Dejar un log con el nombre del SID siempre y cuando sea una variable global definida
spool /path/salida_${ORACLE_SID}.log

Algunos enlaces útiles:
http://www.adp-gmbh.ch/ora/sqlplus/
http://docs.oracle.com/cd/B19306_01/server.102/b14357/toc.htm

Sqlplus para dummies II (sesiones en la BBDD)

Encontrar quien hay en la base de datos y que está haciendo cada uno es uno de los primeros pasos a la hora de determinar un problema en la base de datos, las consultas básicas para encontrar el quien es quien son:

 

Numero de sesiones de usuario por maquina
select machine,count(*) numero from
v$session where
type != ‘BACKGROUND’
group by machine
order by numero desc;

Numero de sesiones de usuario Activas por maquina
select machine,count(*) numero
from v$session where type != ‘BACKGROUND’
and status=’ACTIVE’
group by machine order by numero desc;

Numero de sesiones por maquina
select machine,count(*) numero from
v$session group by machine
order by numero desc;

Numero de sesiones Activas por maquina
select machine,count(*) numero from v$session
where status=’ACTIVE’ group by machine order by numero desc;

Texto sql de las v$session
select s.sid,s.serial#,s.username,s.machine,s.program,s.osuser,s.status,x.sql_fulltext
from v$session s ,v$sqlarea x
where s.sql_address=x.address;

 Consulta para enlazar un proceso del sistema con una sesión
select s.sid, s.serial# , q.sql_text, s.username, s.machine, s.logon_time, s.program, s.status
from v$session s, v$process p, v$sql q
where p.spid=4038 and p.addr=s.paddr
and q.address=s.sql_address
and s.sql_hash_value=q.hash_value;

Sqlplus para dummies I ( Consultas sobre tablespaces )

Sin duda alguna el pegarse con los tablespaces es la tarea más básica y la mas habitual de un DBA.

Para los que siguen teniendo los tablespaces en modo «manual» aqui hay varias consultas útiles
Tamaño y porcentaje de ocupación

select
 t.tablespace_name,
 round(t.kbtotal/1024,2) "Total MB",
 round(l.kblibre/1024,2) "MB Libres",
 100-(round(l.kblibre/t.kbtotal,2)*100)||'%' Ocupado
  from
  (select tablespace_name, sum(bytes)/1024 kbtotal
  from dba_data_files group by tablespace_name) t ,
  (select tablespace_name, sum(bytes)/1024 kblibre
  from dba_free_space group by tablespace_name) l
  where  t.tablespace_name=l.tablespace_name
 order by "OCUPADO" desc;

Uso de tablespaces temporal

select
 t2."TempTotal" "TempTotal (Mb)",
 t1."TempUsed" "TempUsed (Mb)",
 t2."TempTotal" - t1."TempUsed" "TempFree (Mb)"
 from (select nvl(
         round(sum(tu.blocks * tf.block_size)
                  / 1024 / 1024, 2), 0) "TempUsed"
      from v$tempseg_usage tu, dba_tablespaces tf
          where tu.TABLESPACE = tf.tablespace_name) t1,
          (select round(sum(bytes)
                     / 1024 / 1024, 2) "TempTotal"
           from dba_temp_files) t2
 

Tablespaces a mas del 80%  o con menos de 2 Gb libres no extensibles ni UNDOS

select  *  
  from
 (select 100-(round(l.kblibre/t.kbtotal,2)*100) Ocupado ,
         to_char(round(l.kblibre/1024,0)) Mb ,
           l.tablespace_name
      from 
   (select tablespace_name, sum(bytes)/1024 kbtotal 
             from dba_data_files
               group by tablespace_name) t ,
   (select tablespace_name, sum(bytes)/1024 kblibre
          from dba_free_space 
          group by tablespace_name) l where 
          (t.tablespace_name=l.tablespace_name
           and l.tablespace_name not in 
               (select distinct(tablespace_NAME)
                   from dba_data_files
                     where autoextensible='YES')
   and l.tablespace_name not like 'UNDOT%'
   and to_char(round(l.kblibre/1024,0))< 2000 )
  )
     where  ocupado > 80
    order by ocupado desc

Datafiles de los que consta cada Tablespace  (he incluido los gestionados localmente)

select 
tablespace_name,
file_name,
round(bytes/1024/1024,2) "Total MB",
 status
  from dba_data_files
union
      select 
           p.name tablespace,
           t.name fichero,
           t.bytes/1024/1024 Mb,
           t.status
          from v$tempfile t, v$tablespace p 
                where t.ts#=p.ts#
order by tablespace_name;

Datafiles autoextensibles

select
   file_name,
   tablespace_name,
   bytes/1024/1024  Mb,
   FILE_ID  
from dba_data_files 
where AUTOEXTENSIBLE='YES'

Datafiles temporales autoextensibles

select 
   file_name,
   tablespace_name,
   bytes/1024/1024  Mb  
from dba_temp_files 
  where AUTOEXTENSIBLE='YES'

Contraseñas case sensitive y Oracle 11g

Hoy vamos a abordar una de las cosas mas sencillas y desesperantes de la 11g, las nuevas medidas de seguridad y las contraseñas CASE SENSITIVE.

Si. En la 11g Oracle ya distingue entre mayusculas y minusculas, lo que puede hacer que  algún software de conexión antiguo envíe las contraseñas y usuarios en mayusculas y todo deje de funcinar sin que encuentres el motivo.

¿Como deshabilitar esta feature?

Si el equipo de desarrollo/soporte de la aplicacion no es capaz de actualizar el cliente, no te quedará mas remedio que :

 ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;

Pero eso no es todo, entre las directivas de seguridad, tambien está la de cambio de contraseña.

Desafortunadamente, muchos  desarrollos no están preparados para algo tan sencillo como un cambio de contraseñas, y no nos pueden asegurar que el password no esté hardcoreado «por ahi», o indicarnos al 100% donde están las cadenas de conexion, así que,  es posible que tengamos  que deshabilitar tambien esta medida de seguridad, esto lo haremos mediante

  ALTER PROFILE DEFAULT limit PASSWORD_LIFE_TIME UNLIMITED;
  ALTER PROFILE DEFAULT limit  PASSWORD_GRACE_TIME UNLIMITED;

 

Como recordatorio final, si decidimos poner a CASE INSENSITIVE las contraseñas de usuario, tambien podemos hacerlo con las del fichero de passwd rehaciendolo con el comando

 orapwd file=orapwSID  entries=5 force=y nosysdba=n ignorecase=y

 

 
English version in case sensitive passwords and Oracle 11g