lunes, 16 de marzo de 2015

jueves, 12 de marzo de 2015

Kilobytes, Megabyetes, Gigabytes,...

Kilobytes, Megabyetes, Gigabytes,...

El kilobyte es la unidad de medida de la capacidad de memoria y de dispositivos de almacenamiento informático (disquete, disco duro, CD-ROM, DVD, etc.). Un KB corresponde a 1.024 bytes. Otras medidas y sus equivalencias: 
AbreviaturaNombreUsualmenteReal
KbKilobyte1.000 b1.024
MbMegabyte1.000 Kb1.048.576
GbGigabyte1.000 Mb1.073.741.824
TbTerabyte1.000 Gb1.099.511.627.776
PbPetabyte1.000 Tb1.125.899.906.842.624
EbExabyte1.000 Pb1.152.921.504.606.846.976

Java 8 Help

http://docs.oracle.com/javase/8/docs/api/

http://docs.oracle.com/javase/tutorial/java/index.html

http://docs.oracle.com/javase/8/javase-books.htm

http://www.sinnexus.com/empresa/index.aspx

Forks

Comparativas entre los forks

CaracterísticaMySQLPerconaMariaDBOurDeltaDrizzle
Mantenido porOracle Corp.PerconaComunidadOpenQueryBrian Aker
LicenciaGPL o propietariaGPLGPL v2GPLBSD, GPL v2
Soporte WindowsSiNoSiNoNo
Soporte Unix/LinuxSiSiSiSiSi
ACIDSi SiSiSiSi
Integridad referencialSiSiSiSiSi
TransaccionesSiSiSiSiSi
UnicodeSiSiSiSiSi
Tamaño máximo DBIlimitadoIlimitado IlimitadoIlimitadoIlimitado
Tamaño máximo tablaMyISAM 256 TB;
InnoDB 64 TB
 MyISAM 256 TB;
InnoDB 64 TB
 MyISAM 256 TB;
InnoDB 64 TB
MyISAM 256 TB;
InnoDB 64 TB
64 TB
Máximo de columnas por filaMyISAM 4096;
InnoDB 1000
 MyISAM 256 TB;
InnoDB 64 TB
MyISAM 256 TB;
InnoDB 64 TB
MyISAM 4096;
InnoDB 1000
1000
Tablas temporalesNo NoNoNoNo
Vistas materializadasNo NoNoNoNo
Índices Árboles R-/R+Si (MyISAM)Si (MyISAM)Si (MyISAM)Si (MyISAM)No
Índices HASHSi (InnoDB)Si (InnoDB – XtraDB)Si (InnoDB – XtraDB)Si (InnoDB – XtraDB)No
Índices FULL TEXTSi (MyISAM)Si (MyISAM) Si (MyISAM – Aria)Si (MyISAM)No
Índices SPATIALSi (MyISAM) Si (MyISAM)Si (MyISAM)Si (MyISAM)No
Triggers y Stored ProceduresSiSiSi (MyISAM)SiCon plugins
ParticionadoSiSi SiSiSi
Certificado de SeguridadNoNoNoNoNo
 http://investigacionit.com.ar/?s=Forks

MariaDB

https://downloads.mariadb.org/

Cluster Control

http://www.severalnines.com/blog/how-manage-and-monitor-your-existing-postgres-servers

sábado, 7 de marzo de 2015

viernes, 6 de marzo de 2015

Administrando Datafiles y Tablespaces de la base de datos Oracle.

Administrando Datafiles y 
Tablespaces de la base de datos Oracle.

A continuación se indican algunos comandos de administración de los espacios 
que alojan los datos de la base de datos. También se agregan algunas 
recomendaciones de cómo mantener los recursos.

Consulta de DATAFILES

/**
SELECT * FROM DBA_DATA_FILES  ORDER BY TABLESPACE_NAME,FILE_ID ;


Consulta de TABLESPACES
SELECT * FROM dba_tablespaces;


Crea un tablespace
CREATE TABLESPACE cbar01
DATAFILE '/oradata/bdcr/data/cbar01.dbf' SIZE 1024M
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
COMMIT;


**/

Aumenta el anterior tablespace

/*
ALTER DATABASE DATAFILE '/oradata/bdcr/data/cbar01.dbf' AUTOEXTEND ON;

Consulta el tamaño de un tablespace
select sum(bytes) from dba_free_space where TABLESPACE_NAME='SYSTEM';


Consulta el espacio libre de la base de datos por tablespace y blocks
SELECT * from dba_free_space

**/


Otro ejemplo de creación de tablespace, en que el incremento se define por NEXT 320k.
Es un aumento menor y esta afectando la columna de: INCREMENT_BY
/*
CREATE TABLESPACE cbar04
DATAFILE '/oradata/bdcr/data/cbar04.dbf' SIZE 5120k
AUTOEXTEND ON NEXT 320 K
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
COMMIT;
*/

Ejemplo en cómo se adiciona un datafile a un tablespace existente en este caso al SYSTEM.
En este ejemplo estamos aumentado aproximadamente medio giga.
Dando un incremento INCREMENT_BY, de next 102240K, 
que en el INCREMENT_BY se refleja como 1280

/*
ALTER TABLESPACE SYSTEMxxxx
    ADD DATAFILE '/oradata/bdcr/data/system_02xxxx.dbf' SIZE 488281k
      AUTOEXTEND ON
      NEXT 10240K;
**/

El siguiente es un ejemplo de cómo aumentar el tamaño de un datafile, 
el anterior que hemos creado, y ahora lo estamos aumentando a 1G.

/*
alter database datafile '/oradata/bdcr/data/system_02xx.dbf' RESIZE 1G;
**/

Cuando estamos haciendo cambios en datafiles y tablespaces, debemos de 
manera continúa verificar los cambios con la siguiente consulta a los datafiles.


/*
SELECT * FROM dba_data_files ORDER BY  TABLESPACE_NAME,FILE_ID;

**/


Dentro de la verificación debemos de ir viendo el tamaño que asignamos a los recursos 
de datafiles y tablespace.

Retomemos la consulta de espacios libres de los recursos mencionados, 
para que cualquier implementación sea vigilada y controlada de manera
 diaria y permanente.

/*
  SELECT df.tablespace_name TABLESPACE, df.total_space TOTAL_SPACE,
fs.free_space FREE_SPACE, df.total_space_mb TOTAL_SPACE_MB,
(df.total_space_mb - fs.free_space_mb) USED_SPACE_MB,
fs.free_space_mb FREE_SPACE_MB,
ROUND(100 * (fs.free_space / df.total_space),2) PCT_FREE
FROM (SELECT tablespace_name, SUM (bytes) TOTAL_SPACE,
      ROUND( SUM (bytes) / 1048576) TOTAL_SPACE_MB
      FROM dba_data_files
      GROUP BY tablespace_name) df,
     (SELECT tablespace_name, SUM (bytes) FREE_SPACE,
       ROUND( SUM (bytes) / 1048576) FREE_SPACE_MB
       FROM dba_free_space
       GROUP BY tablespace_name) fs
WHERE df.tablespace_name = fs.tablespace_name(+)
ORDER BY fs.tablespace_name;

**/

RECOMENDACIONES:

1. Todo datafile no debe contar con un crecimiento al máximo permitido, 
ya que su portabilidad, manejo y respaldo, puede verse
 afectada en caso de cualquier posible contingencia.
2. Ejemplo de ellos es en tener archivos muy grandes de 34 gigas por ejemplo.
3. Que los archivos dificulten su paso a otros espacios.
4. Que el respaldo sea muy grande en solo un archivo.
5. Que se dañe con mayor facilidad el archivo y su recuperación sea compleja, 
hasta tener un dato total de todo su contenido.

6. Lo mejor es ir agregando información clasificada, sea por históricos, de proceso, 
de recepciones, de periodos, por fechas.
7. Sea que queden en un esquema o varios esquemas.
8. En el caso del SYSTEM también es lo necesario, acumular en 
archivos datafiles pequeños.
9. Hay un proceso de recuperación de los contenidos de los datafiles 
y sus tablespaces, pero sólo a casos necesarios se debe realizar.
10. Los datafiles no deben tener RESIZE decrementables, 
y menos cuando hay  
contenido de datos, 
ya que puede ser perdida de los datos indiscutiblemente, para ello hay un proceso 
a seguir que se verá en otro documento complementario.
11. Este proceso se relaciona con el incremento que sufren los tablespaces, 
hay que relacionar ese crecimiento para poder ir cuadrando cambios.
12. Los índices deben ir separados por tablespaces de sus respectivas tablas.


Consulta de espacios en datafiles y tablespaces.

Consulta de espacios en datafiles y tablespaces. 

A continuación se indican algunos comandos de administración de los espacios que alojan los datos de la base de datos, en los datafiles.

Esta revisión debe ser continua y permanente, del diario, y se deben de guardar registros del crecimiento a lo largo de los periodos vitales de la empresa, esto debido a que hay que recordar que nos indicará de qué manera hay que ir incrementado los espacios de datafiles y tablespaces en la base de datos.

Conformamos esta información de vital importancia ya que nos indica cómo crece la base de datos, y entonces podremos decidir cómo agregar más espacios para el almacenamiento de datos.

Consulta compacta de espacio libre

 SELECT a.tablespace_name,
       b.size_MB,
       a.free_MB,
       Trunc((a.free_MB/b.size_MB) * 100) "FREE_%"
FROM   (SELECT tablespace_name,
               Trunc(Sum(bytes)/1024/1024) free_MB
        FROM   dba_free_space
        GROUP BY tablespace_name) a,
       (SELECT tablespace_name,
               Trunc(Sum(bytes)/1024/1024) size_MB
        FROM   dba_data_files
        GROUP BY tablespace_name) b
WHERE  a.tablespace_name = b.tablespace_name
order by 4
/
Consulta de los datafiles, es necesaria por si hay cambios.

SELECT * FROM dba_data_files ORDER BY  FILE_ID, TABLESPACE_NAME;


Consulta detallada del espacio libre de almacenamiento

SELECT df.tablespace_name TABLESPACE, df.total_space TOTAL_SPACE,
fs.free_space FREE_SPACE, df.total_space_mb TOTAL_SPACE_MB,
(df.total_space_mb - fs.free_space_mb) USED_SPACE_MB,
fs.free_space_mb FREE_SPACE_MB,
ROUND(100 * (fs.free_space / df.total_space),2) PCT_FREE
FROM (SELECT tablespace_name, SUM (bytes) TOTAL_SPACE,
      ROUND( SUM (bytes) / 1048576) TOTAL_SPACE_MB
      FROM dba_data_files
      GROUP BY tablespace_name) df,
     (SELECT tablespace_name, SUM (bytes) FREE_SPACE,
       ROUND( SUM (bytes) / 1048576) FREE_SPACE_MB
       FROM dba_free_space
       GROUP BY tablespace_name) fs
WHERE df.tablespace_name = fs.tablespace_name(+)
ORDER BY fs.tablespace_name;

Consulta de espacios libres por tablespace y bloques.
SELECT * FROM dba_free_space;


Consulta de espacio libre a un tablespace, en este caso SYSTEM

select (select sum(bytes)/1024/1024  from dba_data_files where tablespace_name = 'SYSTEM') MB,
(select sum(bytes)/1024/1024 from dba_segments where tablespace_name = 'SYSTEM') MB_USED,
(select sum(bytes)/1024/1024 from dba_free_space where tablespace_name = 'SYSTEM') MB_FREE
from dual;
Consulta por segmentos del SYSTEM, por menos de 10 segundos.

with segs as (select owner, segment_type, segment_name, partition_name, ceil(bytes/1024/1024) mb
--SELECT *
from dba_segments where tablespace_name = 'SYSTEM'
order by 5 desc)
select * from segs where rownum <= 10;


Otra consulta de espacio libre


SELECT dd.tablespace_name tablespace_name, dd.file_name file_name, dd.bytes/1024 TABLESPACE_KB, SUM (fs.bytes)/1024 KBYTES_FREE, MAX(fs.bytes)/1024 NEXT_FREE
FROM sys.dba_free_space fs, sys.dba_data_files dd
WHERE dd.tablespace_name = fs.tablespace_name
AND dd.file_id = fs.file_id
GROUP BY dd.tablespace_name, dd.file_name, dd.bytes/1024
ORDER BY dd.tablespace_name, dd.file_name;


Consulta de detallada del espacio libre
SELECT /* + RULE */  df.tablespace_name "Tablespace",
       df.bytes / (1024 * 1024) "Size (MB)",
       SUM(fs.bytes) / (1024 * 1024) "Free (MB)",
       Nvl(Round(SUM(fs.bytes) * 100 / df.bytes),1) "% Free",
       Round((df.bytes - SUM(fs.bytes)) * 100 / df.bytes) "% Used"
  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 /* + RULE */ 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 4 DESC;

Una forma global de ver el espacio de toda la base de datos
SELECT
        TABLESPACE_SIZE/(1024*1024) TABLESPACE_SIZE,
        ALLOCATED_SPACE/(1024*1024) ALLOCATED_SPACE,
        FREE_SPACE/(1024*1024) FREE_SPACE
FROM   dba_temp_free_space
/

Verificar los tablespaces para detalles
SELECT *FROM dba_tablespaces;

Otra forma de consulta

-- ALMACENAMIENTO:
SELECT tablespace_name,
ROUND(sum(bytes)/1024/1024,0)
FROM dba_free_space
WHERE tablespace_name NOT LIKE 'TEMP%'
GROUP BY tablespace_name
UNION
-- MÁXIMO ALMACENAMIENTO:
SELECT tablespace_name,
round(sum(BYTES/1024/1024),0)
FROM dba_data_files b
WHERE tablespace_name NOT LIKE 'TEMP%'
GROUP BY b.tablespace_name ;

-- ESPACIO DISPONIBLE:
(se hace la operación del resultado para el valor de un tablespace((almacenamiento*100)/maximo)

select (1308*100)/ 28990
    from dual ;


Ejecución de Estadísticas en la base de datos Oracle.

Ejecución de Estadísticas en la base de datos Oracle.

A continuación se indica el proceso de ejecución de las estadísticas en las tablas de la base de datos Oracle.
Consultando las tablas para un esquema y contando cuantas se tienen.
SELECT * from all_tables   where owner = 'CS'
SELECT Count(*) from all_tables   where owner = 'CS'

Consultando el último análisis realizado a una tabla y sus índices.
  SELECT table_name, table_name Object_name, num_rows, last_analyzed
  from user_tables
  where table_name = 'S_X'
  union
  select table_name,index_name Object_name, num_rows, last_analyzed
  from user_indexes
  where table_name = 'S_X'


Consultando el ultimo análisis a todas las tablas y los índices.
  SELECT table_name, table_name Object_name, num_rows, last_analyzed
  from user_tables
   union
  select table_name,index_name Object_name, num_rows, last_analyzed
  from user_indexes

Consultando el último análisis a las tablas de ciertos esquemas.

  SELECT owner, table_name, table_name Object_name, num_rows, last_analyzed
  from all_tables
  WHERE owner = 'CS'  OR
owner = 'ADM'  OR
owner = 'CS'  OR
owner = 'CKEP'  OR
owner = 'CB001'  OR
owner = 'CB008'  OR
owner = 'CBN001'  OR
owner = 'ORUS'  OR
owner = 'ORAUS'  OR
owner = 'USRN'
 ORDER BY  LAST_ANALYZED
Una ejemplo de consulta que genera el script de todas las tablas de un esquema, en que nos arroja el comando con el esquema y tabla a ejecutar su análisis.

Lo relevante en este caso es que al ejecutar la estadística por tabla, genera a la par el análisis de los índices que cuenta la tabla.

         select 'EXEC DBMS_STATS.gather_table_stats('''||OWNER ||''', '''||TABLE_NAME||''', estimate_percent => 30);' from all_tables where owner = 'CS'
A continuación vemos la salida de los comandos ya armados con algunas tablas y su esquema respectivo.

EXEC DBMS_STATS.gather_table_stats('CS', 'SSO_LIBRE_B', estimate_percent => 30);
EXEC DBMS_STATS.gather_table_stats('CS', 'SDAS', estimate_percent => 30);
EXEC DBMS_STATS.gather_table_stats('CS', 'SSMOS', estimate_percent => 30);
EXEC DBMS_STATS.gather_table_stats('CS', 'SICTA', estimate_percent => 30);


EXEC DBMS_STATS.gather_table_stats('ORAUS', 'SCH', estimate_percent => 30);

Podemos ejecutar el select para formar el script de las tablas que contienen un número determinado de registros para poder evitar arrojar de golpe las estadísticas.

  select 'EXEC DBMS_STATS.gather_table_stats('''||OWNER ||''', '''||TABLE_NAME||''', estimate_percent => 30);' from all_tables where owner = 'CS'
         AND  NUM_ROWS  < 500000
Recordemos la recomendación por parte de la consultoría, no ejecutar el analyze, y realizarlo mediante estas funciones.
En la versión 11, se debe ejecutar con unos nuevos procedimientos:

GATHER_SCHEMA_STATS 

GATHER_TABLE_STATS 

GATHER_INDEX_STATS

NOTA IMPORTANTE:

1.       NO EJECUTAR por esquema, ni muchas tablas, puede afectar el rendimiento del servicio de bases de datos, debe hacerse en horas que no afecte los procesos en línea que continuamente se viven.

2.       Es mejor realizarlo paulatino por tabla, sobre todo cuidar las tablas de muchos registros.




martes, 3 de marzo de 2015

Frases

http://www.cidwilliam.galeon.com/aficiones1812111.html