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'

Reconfigurar el Enterprise manager

Tener que reconfigurar en Enterprise Manager o reconstruir el EM Repository es algo bastante común.

Los comandos para llevarlos a cabo son bastante básicos

emctl stop dbconsole
emca -deconfig dbcontrol db
emca -repos recreate
emca -config dbcontrol db

Sin embargo, hay varios parámetros utiles, como por ejemplo:

-ORACLE_HOSTNAME

-PORT

Nota:Hay que tener cuidado con las regeneraciones en producción ya que en el momento del borrado la base de datos queda en «quiesce mode» con lo que pueden darse casos en los que haya pérdida de servicio  nota  [ID 375946.1]

La forma de ver si esta en quiesce mode es :

SQL> select active_state from v$instance;
ACTIVE_ST
———
QUIESCING

Para mas info genérica  está como siempre el metalink nota   [ID 1099271.1]

 

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