Etiqueta: tabla

Como corregir las tablas fragmentadas de Oracle

Como corregir las tablas fragmentadas de Oracle

¿Cómo encontrar la fragmentación de las tablas en la base de datos?

 

¿Qué es la fragmentación de datos?
Si a una tabla únicamente se somete a inserts, no habrá ninguna fragmentación. La fragmentación viene solo cuando hacemos deletes/updates a la tabla.
El espacio que se libera durante las operaciones «no-inserts» no son usadas inmediatamente (algunas veces jamás se usaran). Esto deja huecos en la tabla que resultan en fragmentación.

Como corregir las tablas fragmentadas de Oracle

Para tener esto más claro, necesitaremos saber cómo Oracle maneja los espacios para las tablas.
Los campos de las tablas no se almacenan de forma contigua, o si los campos están divididos en más de un bloque, el performance disminuye debido a que esos campos requieres bloques de acceso adicionales.

 

Nota: la fragmentación de las tablas son diferentes a la fragmentación de archivos, cuando se realizan muchas operaciones DML (Data manipulation language) en una tabla, la tabla se fragmenta, debido a que las DML no liberan el espacio de la tabla debajo de la HWM (High Water Mark)

 

HWM= High water mark, es la última parte de una tabla que le indica al cursor que hasta allí llego la tabla y contiene la cantidad de registros

 

Cada vez que la información crece, elimina el bloque donde está el HWM y recreando otro HWM cuando termina de incrementar el espacio, estos bloques donde estaban los HWM’s no ocupan casi nada de espacio, pero después de muchísimo uso y mucho tiempo ya pueden ser significativos en el tiempo de lectura

Read more

Regresar una tabla en el tiempo en Oracle con Flashback

volvereneltiempoRegresar una tabla en el tiempo en Oracle con Flashback.

Teniendo un tiempo sin actualizar porque he tenido mucho trabajo, dejare un aporte que espero que pueda serle de utilidad por lo menos a uno aqui hablare de como Regresar una tabla en el tiempo en Oracle con Flashback.

 

La función de UNDO de Oracle es algo que cualquier DBA debería de saber, de todas maneras lo explicare aquí por si alguien tiene alguna duda. En caso que dañemos o queramos recuperar una tabla modificada o eliminada siempre podemos recurrir a la función de «Flashback Table» con esto podemos desde hacer selects a una tabla de a como se encontraba en algún punto en el pasado como recuperarla en la misma tabla u otra, por si quisiéramos comparar datos.

 

Para activar el UNDO en nuestra base de datos, existen 2 variables que tienen que estar en el SPFILE o PFILE, que son UNDO_MANAGEMENT que es el que define si está activo el UNDO y la variable UNDO_RETENTION, que marca en segundos cuanto tiempo podemos recuperar nuestras tablas, a mayor cantidad de UNDO_RETENTION mayor tiene que ser el tablespace de UNDO.

 

Alter system set UNDO_MANAGEMENT=AUTO;
Alter system set UNDO_RETENTION=86400;

// 86,400 segundos equivalen a 1,440 minutos o 24 horas en base a esto puedes calcular la retención.

 

Si tenemos la base de datos con una instancia dinámica (SPFILE) podemos modificar los anteriores valores de la siguiente manera:

Para hacer un SELECT a una tabla de cómo se encontraba un día antes de estos momentos, se hace de la siguiente manera («usuario» es el nombre de usuario dueño de la tabla):

select * from usuario.tabla1 AS OF TIMESTAMP SYSDATE – 1;

Así de sencillo.

 

Si tenemos el undo para varios días y quiero hacer el select para una fecha y hora en específico, se hace de la siguiente manera:

select * FROM usuario.tabla1 AS OF TIMESTAMP TO_TIMESTAMP(‘2013-12-04 22:00:00’, ‘YYYY-MM-DD HH24:MI:SS’);
// Con el anterior query hacemos que nos regrese la tabla a como estaba el «4 de diciembre del 2013»

 

Si quisiéramos crear una tabla que sea igual a otra tabla pero en una fecha anterior, se hace casi igual:
create table usuario.tabla_antes as select * FROM usuario.tabla1 AS OF TIMESTAMP TO_TIMESTAMP(‘2013-12-04 22:00:00’, ‘YYYY-MM-DD HH24:MI:SS’);

 

Si queremos crear una vista dinámica que nos muestre como estaba una tabla hace una hora (de forma dinámica) es así:
CREATE VIEW usuario.haceunahora AS SELECT * FROM usuario.tabla AS OF TIMESTAMP (SYSTIMESTAMP – INTERVAL ’60’ MINUTE);

 

Esto es de una gran utilidad para los DBA que están empezando.

 

Si al hacer estas tablas muestra el error
ORA-01555 Snapshot Too Old
Esto significa que la tabla no se encuentra dentro de la retención del UNDO, esto puede ser por el tiempo configurado o por falta de espacio en el UNDO

 

Como correr estadisticas en Oracle

Las estadísticas hacen un escaneo completo de los datos y tipos de datos de una tabla y obtiene las mejores formas de realizar una lectura a algún campo determinado, de esta manera hacer que la velocidad de lectura aumente considerablemente, cuando la tabla sufre de muchos cambios es posible que las estadísticas ya no sirvan tan bien y hay que volverlas a ejecutar, esto es para mejorar el performance;

Para correr estadística de una tabla es con el comando
analyze table NOMBRETABLA compute statistics;

para correr estadísticas completas de un esquema* completo es corriendo el paquete*:
EXEC DBMS_UTILITY.analyze_schema(‘USUARIO’,’COMPUTE’);

la diferencia entre un comando y un paquete es que el paquete es un programa echo a base de comandos para realizar funciones mas complejas
la diferencia entre esquema y usuario es que no hay diferencia, al decir «sobre el esquema» me refiero a todas las tablas que le pertenecen a ese usuario

al ponerle el parámetro COMPUTE recrea todas las estadísticas de TODOS los campos, esto hacé que puede que llegue a tardar mucho, dependiendo del tamaño de la tabla

Si en vez de ponerle COMPUTE, se le puede cambiar por ESTIMATE, esto hacé que saca un estimado de cual seria la mejor forma de hacer una lectura, obteniendo datos de una sola porción de la tabla
se puede sacar estimado por numero de campos (rows) o por un porcentaje total de la tabla (percent)
como en el siguiente ejemplo

EXEC DBMS_UTILITY.analyze_schema(‘USUARIO’,’ESTIMATE’, estimate_rows => 100);
EXEC DBMS_UTILITY.analyze_schema(‘USUARIO’,’ESTIMATE’, estimate_percent => 15);

de esta manera la obtención de estadísticas es considerablemente mas rápida, mas no tan eficiente como la COMPUTE, digamos que con un estimate_percent=>20 es 5 veces mas rápido que el compute y se mejora el 80% del performance contra el COMPUTE que tarda 5 veces mas y mejora el 100%
esto dependiendo del tiempo que se tenga disponible para ejecutar estadísticas.

Configurar replicacion en MySQL

Instalacion de la replicacion de MySQL en ambiente maestro-esclavo para alta disponibilidad

Crear instancia de DataGuard

Nota: la instalacion de Oracle RDBMS se instala en la BD primaria y Standby, en este caso en la standby solo tiene la instalacion. …

Desarrollo de aplicación de reconocimiento de rostros y emociones

Este es uno de los desarrollos hechos por nuestro equipo, tiene como funcionalidad ser un demo de la capacidad de nuestra …