martes, 30 de abril de 2013

Error alert log Checkpoint not complete

Si encontramos permanentemente el mensaje "Checkpoint not complete" en el alert log, es porque la cantidad de redolog's no es suficiente para la cantidad de Modificaciónes que se realizan en la base de datos.

La acción que hay que realizar es agregar mas Grupos de Redo

ALTER DATABASE
ADD LOGFILE GROUP 4 ('/oracle/dbs/log4.rdo')
SIZE 50M;

miércoles, 24 de abril de 2013

Redo log

  • Vista de Archivos Redo logs

select group#,status from v$log;
select * from v$logfile;

  • Vista del historico de Redo logs

select * from V$LOGHIST;


  • Cambiar el Redo log activo

alter system switch logfile;
  • Crear y borrar grupos de Redo log

alter database add logfile group 5 '/oraredo/db2/redo05.log' SIZE 50M;
alter database drop logfile group 4;

miércoles, 17 de abril de 2013

Espacios - Tamaño - Ocupación

  • Tamaño ocupado por la base de datos


select sum(BYTES)/1024/1024 MB from DBA_EXTENTS 

  • Tamaño de los ficheros de datos de la base de datos:

select sum(bytes)/1024/1024 MB from dba_data_files
  • Tamaño 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'
  • Tamaño 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'))
  • Tamaño ocupado por una columna de una tabla:

select sum(vsize('NOMBRECOLUMNA'))/1024/1024 MB from NOMBRETABLA
  • Espacio ocupado por usuario:

SELECT owner, SUM(BYTES)/1024/1024 FROM DBA_EXTENTS MB
GROUP BY owner
  • Espacio ocupado por los diferentes segmentos (tablas, índices, undo, rollback, cluster, ...)

SELECT SEGMENT_TYPE, SUM(BYTES)/1024/1024 FROM DBA_EXTENTS MB
GROUP BY SEGMENT_TYPE
  • Espacio ocupado por todos los objetos de la base de datos, muestra los objetos que más ocupan primero

SELECT SEGMENT_NAME, SUM(BYTES)/1024/1024 FROM DBA_EXTENTS MB
GROUP BY SEGMENT_NAME
ORDER BY 2 DESC

Sentencias Sql

  • 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

Memoria - Cursores

  • 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
  • Aciertos de la caché (no debe 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');

Ficheros - Archivos de datos - Ubicación

  • Ficheros de Datos

select * from V$DATAFILE

  • Ficheros temporales

select * from V$TEMPFILE

  • Tablespaces

select * from V$TABLESPACE

  • Otras vistas muy interesantes

select * from V$BACKUP
select * from V$ARCHIVE  
select * from V$LOG  
select * from V$LOGFILE   
select * from V$LOGHIST         
select * from V$ARCHIVED_LOG
select * from V$DATABASE

Tablas - Objetos

  • Propietarios objetos

select owner, count(owner) Numero
from dba_objects
group by owner
order by Numero desc

   

  • Muestra los datos de una tabla especificada

select * from ALL_ALL_TABLES where upper(table_name) like '%EMPLO%'

  • Tablas del usuario

select * from user_tables

  • Todos los objetos propiedad del usuario conectado a Oracle

select * from user_catalog

Sesiones Activas

  • Vista que muestra las conexiones actuales a Oracle:

select osuser, username, machine, program
from v$session
order by osuser
 
  • Vista que muestra el número de conexiones actuales a Oracle agrupado por aplicación

select program Aplicacion, count(program) Numero_Sesiones
from v$session
group by program
order by Numero_Sesiones desc

  • Vista que muestra los usuarios de Oracle conectados y el número de sesiones por usuario


select username Usuario_Oracle, count(username) Numero_Sesiones
from v$session
group by username
order by Numero_Sesiones desc

Consultas SQL útiles Información / Administración de Oracle

  • Estado de la base de datos

select * from v$instance
  • Parámetros generales de Oracle

select * from v$system_parameter
  • Versión de Oracle

select value from v$system_parameter where name = 'compatible'
  • Ubicación y nombre del fichero spfile


select value from v$system_parameter where name = 'spfile'
  • Ubicación y número de ficheros de control  


select value from v$system_parameter where name = 'control_files'
  • Nombre de la base de datos


select value from v$system_parameter where name = 'db_name'
  • Diccionario de datos

select * from dictionary
select table_name from dictionary

martes, 16 de abril de 2013

Tablespace - Espacio - Tablas

  • Ver - Tablespace - Espacios - Ocupación

Select
df.tablespace_name "Tablespace",
df.bytes / (1024 * 1024) "Tamaño (Mb)",
Sum(fs.bytes) / (1024 * 1024) "Libre (Mb)",
Nvl(Round(SUM(fs.bytes) * 100 / df.bytes),1) "% Libre",
Round((df.bytes - SUM(fs.bytes)) * 100 / df.bytes) "% Usado"
From  dba_free_space fs,
(Select tablespace_name,SUM(bytes) bytes From  dba_data_files
Group by  tablespace_name ) df
Where
fs.tablespace_name (+)  = df.tablespace_name
Group by  df.tablespace_name,df.bytes

Union All

Select
df.tablespace_name tspace,
fs.bytes / (1024 * 1024),
Sum(df.bytes_free) / (1024 * 1024),
Nvl(Round((SUM(fs.bytes) - df.bytes_used) * 100 / fs.bytes), 1),
Round((SUM(fs.bytes) - df.bytes_free) * 100 / fs.bytes)
From  dba_temp_files fs,
( Select tablespace_name,bytes_free,bytes_used From v$temp_space_header
Group by tablespace_name,bytes_free,bytes_used) df
Where
 fs.tablespace_name (+)  = df.tablespace_name
 Group by  df.tablespace_name,fs.bytes,df.bytes_free,df.bytes_used
Order by 5 Desc;




  • Ver Ocupación por Tabla (Incluyendo Indices) del usuario conectado

select sum(Table_Allocation_MB), table_name
 from
(
select sum(user_segments.bytes)/1024/1024 Table_Allocation_MB,user_indexes.table_name
 from user_segments, user_indexes
where user_segments.segment_type in ('INDEX') and user_segments.segment_name=user_indexes.index_name
GROUP BY  user_indexes.table_name
union all
select sum(bytes)/1024/1024 Table_Allocation_MB,segment_name from user_segments
where segment_type in ('TABLE')
GROUP BY segment_name
)
group by table_name order by 1 desc


También podemos agregarle a la consulta la ocupación de los tipos de datos LOB.

select sum(Table_Allocation_MB), table_name from (select sum(user_segments.bytes)/1024/1024 Table_Allocation_MB,user_indexes.table_name from user_segments, user_indexes where user_segments.segment_type in ('INDEX') and user_segments.segment_name=user_indexes.index_nameGROUP BY user_indexes.table_name
union all

select
sum
(bytes)/1024/1024 Table_Allocation_MB,segment_name from user_segmentswhere segment_type in ('TABLE')GROUP BY segment_name
UNION ALL

select
sum
(bytes)/1024/1024 Table_Allocation_MB,segment_name from user_segmentswhere segment_type IN ('LOBINDEX','LOBSEGMENT')GROUP BY segment_name) group by table_nameorder by 1 desc

Manejo de Jobs

  • Tablas Relacionadas

select * from user_errors;
select * from user_source;
select * from dba_jobs;
select * from users_jobs;

  • Crear Jobs

variable jobno number;
begin
dbms_job.submit( :jobno,
'owner.storeprocedure;',
sysdate + (1/24/60)*5,
'sysdate + (1/24/60)*30'
);
end;
/
commit;

  • Borrar Jobs

variable jobno number;
begin
dbms_job.remove (24);
end;
/
commit;
-------modifica jobs----
begin
dbms_job.change(<Job number>,
'owner.storeprocedure;',
sysdate + (1/24/60)*5,
'sysdate + (1/24/60)*5'
);
end;
/
commit;

  • Habilta/Deshabilita jobs


begin
dbms_job.broken(<JOBNUMBER>,FALSE);
end;
/
commit;