Академический Документы
Профессиональный Документы
Культура Документы
INTRODUCCION
BITACORAS
Herramienta que permite registrar, analizar, detectar y notificar eventos que sucedan en
cualquier sistema de informacin utilizado en las organizaciones. La estructura ms ampliamente
usada para grabar las modificaciones de la base de datos.
Funciones
Permite guardar las transacciones realizadas sobre una base de datos en especfico, de tal
manera que estas transacciones puedan ser auditadas y analizadas posteriormente. Pueden
obtenerse datos especficos de la transaccin como son la Operacin que se realiz, el Usuario de
BD y Windows, Fecha, Maquina y Programa.
Como crear una bitacora en MySQL
Estando en el directorio correcto, antes de entrar a MySQL, ponemos la siguiente lnea de cdigo:
mysql -hlocalhost -uroot --tee=F:bitacora.txt
Una bitcora puede registrar mucha informacin acerca de eventos relacionados con el
sistema que la genera los cuales pueden ser:
Fecha y hora.
Host origen.
Usuario.
Actividad realizada
Bitcora PostgreSQL
log_destination (cadena)
PostgreSQL soporta varios mtodos para los mensajes del servidor de registro, incluyendo stderr,
csvlog y syslog. En Windows, registro de eventos tambin es compatible. Establezca este parmetro
en una lista de destinos del registro que desee separadas por comas. El valor predeterminado es
iniciar sesin en stderr solamente. Este parmetro slo se puede configurar en el archivo
postgresql.conf o en la lnea de comandos del servidor.
Si csvlog est incluido en log_destination, las entradas de registro se emiten en "valores separados
por comas" (CSV), que es conveniente para los registros de carga en los programas. Consulte la
Seccin 18.7.4 para ms detalles. logging_collector debe estar activada para generar una salida de
registro en formato CSV.
logging_collector (boolean)
Este parmetro capta los mensajes de registro de civil y en formato CSV enviados a stderr y los
redirige a los archivos de registro. Este enfoque a menudo es ms til que la de acceder a syslog, ya
que algunos tipos de mensajes no aparezcan en la salida de syslog (un ejemplo comn es de
mensajes de error dinmico-enlazador). Este parmetro slo se puede configurar en el arranque del
servidor.
log_directory (cadena)
Cuando logging_collector est habilitado, este parmetro determina el directorio en el que se
crearn los archivos de registro. Se puede especificar como una ruta absoluta o relativa al directorio
de datos de clster. Este parmetro slo se puede configurar en el archivo postgresql.conf o en la
lnea de comandos del servidor.
log_filename (cadena)
Cuando logging_collector est habilitado, este parmetro define los nombres de archivo de los
archivos de registro creados. El valor se trata como un patrn strftime , por lo % se escapa se puede
utilizar para especificar nombres de archivo variables en el tiempo . (Tenga en cuenta que si hay
algn % se escapa de tiempo que dependen de zonas, el clculo se realiza en la zona especificada
por log_timezone . ) Tenga en cuenta que strftime del sistema no se utiliza directamente, por lo
especfico de la plataforma (no estndar) extensiones no funciona.
Si especifica un nombre de archivo sin escapes, usted debe hacer planes para utilizar una utilidad
de rotacin de registro para evitar el tiempo de llenar todo el disco. En versiones anteriores a la 8.4,
si no hay escapes % estaban presentes , PostgreSQL agregara esta poca de la hora de creacin del
nuevo archivo de registro, pero esto ya no es el caso.
Si la salida de formato CSV est activado en log_destination , Csv se anexar al nombre del archivo
de registro de marca de tiempo para crear el nombre de archivo para la salida de formato CSV. (Si
log_filename termina en. Log, el sufijo se sustituye en su lugar. ) En el caso del ejemplo anterior, el
nombre del archivo CSV se server_log.1093827753.csv.
Este parmetro slo se puede configurar en el archivo postgresql.conf o en la lnea de comandos
del servidor.
log_rotation_age (entero)
Cuando logging_collector est habilitado, este parmetro determina el tiempo de vida mximo de
un archivo de registro individual. Una vez transcurridos estos minutos, se crear un nuevo archivo
de registro. Ajuste a cero para desactivar la creacin basada en el tiempo de los nuevos archivos de
registro. Este parmetro slo se puede configurar en el archivo postgresql.conf o en la lnea de
comandos del servidor.
log_rotation_size (entero)
Cuando logging_collector est habilitado, este parmetro determina el tamao mximo de un
archivo de registro individual. Despus de esto muchos kilobytes se han emitido a un archivo de
registro, se crear un nuevo archivo de registro. Ajuste a cero para deshabilitar el tamao basado
en la creacin de nuevos archivos de registro. Este parmetro slo se puede configurar en el archivo
postgresql.conf o en la lnea de comandos del servidor.
log_truncate_on_rotation (boolean )
Cuando logging_collector est habilitado, este parmetro har que PostgreSQL para truncar
(sobrescribir), en lugar de anexar a, cualquier archivo de registro existente con el mismo nombre.
Sin embargo, el truncamiento se producir slo cuando un nuevo archivo se abre debido a la
rotacin basada en el tiempo, no durante el inicio del servidor o de rotacin basada en el tamao.
Cuando est apagado, los archivos ya existentes se aadirn a en todos los casos. Por ejemplo , el
uso de esta opcin en combinacin con un log_filename como postgresql- % H.log se traducira en
la generacin de veinticuatro archivos de registro cada hora y despus cclicamente sobrescribirlos.
Este parmetro slo se puede configurar en el archivo postgresql.conf o en la lnea de comandos
del servidor.
log_min_messages (enum )
Controla qu niveles de mensajes se escriben en el registro del servidor. Los valores vlidos son
DEBUG5 , DEBUG4 , DEBUG3 , DEBUG2 , debug1 , INFO, AVISO , WARNING, ERROR LOG, FATAL , y el
pnico. Cada nivel incluye todos los niveles que le siguen. Cuanto ms tarde el nivel, menos
mensajes se envan al registro. El valor predeterminado es WARNING . Tenga en cuenta que LOG
tiene un rango diferente aqu que en client_min_messages . Los superusuarios pueden cambiar esta
configuracin.
log_min_error_statement (enum )
Controla qu sentencias SQL que causan una condicin de error se registran en el registro del
servidor. La instruccin SQL actual est incluido en la entrada de registro para cualquier mensaje de
la gravedad especificado o superior. Los valores vlidos son DEBUG5, DEBUG4 , DEBUG3 , DEBUG2
, debug1 , INFO, AVISO , WARNING, ERROR LOG, FATAL , y el pnico. El valor predeterminado es
ERROR, lo que significa que las declaraciones que causan errores, mensajes , errores fatales , o
pnicos registro se registrarn. Para activar eficazmente fuera de registro de las declaraciones en su
defecto, establezca este parmetro en PANICO. Los superusuarios pueden cambiar esta
configuracin.
log_min_duration_statement (entero)
Hace que la duracin de cada declaracin completa que estar conectado si la sentencia se ejecut
por lo menos durante el nmero especificado de milisegundos. Al establecer esta a cero imprime
todas las duraciones de los estados. Menos-uno ( el predeterminado) desactiva duraciones
declaracin de registro. Por ejemplo, si lo establece en 250 ms luego todas las sentencias SQL que
se ejecutan 250ms o ms se registrarn. La activacin de este parmetro puede ser til en la
bsqueda de consultas no optimizadas en las aplicaciones. Los superusuarios pueden cambiar esta
configuracin.
Para los clientes que usan el protocolo prolongado consulta, duraciones del Parse , Bind, y ejecutar
los pasos se registran de forma independiente.
PARTICIONES en Mysql
Particionar tablas en MySQL nos permite rotar la informacin de nuestras tablas en diferentes
particiones, consiguiendo as realizar consultas ms rpidas y recuperar espacio en disco al borrar
los registros. El uso ms comn de particionado es segn fecha (date).
Para ver si nuestra base de datos soporta particionado simplemente ejecutamos:
SHOW VARIABLES LIKE '%partition%';
Crear particiones
1.- Creamos la tabla reports:
CREATE TABLE reports (
id int(10) NOT NULL AUTO_INCREMENT,
date datetime NOT NULL,
report TEXT,
PRIMARY KEY (id,date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Como se puede ver hemos aadido como ndice de tabla el campo date, esto es necesario si luego
queremos particionar por fecha.
2.- Ahora que tenemos la tabla creada vamos a particionar por mes:
ALTER TABLE reports PARTITION BY RANGE(TO_DAYS(date))(
La ltima particin (pDefault) tendr todos los registros que no entren en las particiones
anteriores. De esta manera nos aseguramos que la informacin nunca dejar de insertarse en la
tabla.
Borrar particiones
Lo bueno de trabajar con particiones es que podemos borrar rpidamente registros sin tener que
recorrer toda la tabla e inmediatamente recuperar el espacio en disco utilizado por la tabla.
Por ejemplo si queremos borrar la particin ms antigua simplemente ejecutamos:
ALTER TABLE reports DROP PARTITION p201111;
Aadir particiones
En el ejemplo anterior las 2 ltimas particiones creadas han sido:
PARTITION p201205 VALUES LESS THAN (TO_DAYS("2012-06-01")),
PARTITION pDefault VALUES LESS THAN MAXVALUE
El problema es que todos los INSERTs que se hagan despus de mayo de 2012 se insertarn
en pDefault. La solucin sera aadir particiones nuevas para cubrir los prximos meses:
ALTER TABLE reports REORGANIZE PARTITION pDefault INTO (
PARTITION p201206 VALUES LESS THAN (TO_DAYS("2012-07-01")),
PARTITION pDefault VALUES LESS THAN MAXVALUE);
En el caso que no tuvieramos una particin del tipo pDefault simplemente ejecutamos:
ALTER TABLE reports ADD PARTITION (PARTITION p201206 VALUES LESS THAN (TO_DAYS("2012-0701")));
Consultar particiones
Para consultar informacin de particiones creadas en una tabla as como tambin los registros que
contiene cada una ejecutamos:
information_schema.PARTITIONS
WHERE
Particiones postgreSQL
Para qu sirve?
En que consiste?
Por rangos.
Y las Ventajas?
En conclusin, la particin de tablas es una forma de organizar los datos clasificandolas segn criterios de
agrupacin, de manera que cada transaccin realizada en una tabla padre se redirija automticamente a un
menor grupo de datos que estn agrupados en las tablas hijas, el inters radica a la hora de realizar las consultas
con un ahorro significativo en el tiempo de respuesta.
Segn el esquema mostrado, si quisiramos realizar una consulta en la tabla Transporte y sta no estara
particionada, se tendra que barrer todos los registros al realizar la bsqueda, pero al tener particionada la tabla
la consulta se reducira a aplicarse nicamente en alguna de las particiones, por consecuencia, sobre un menor
nmero de datos.
Postgresql maneja los particionamientos de tablas basndose en la teoria de herencias, por lo cual debemos
crear tablas el nmero de veces segn particiones queramos realizar.
CASO PRCTICO:
1) Realizar el Particionamiento de la tabla Postulante por IDPerAcad:
Para mantener organizado nuestras particiones crearemos un nuevo esquema y dentro de ste las particiones
que vayamos creando.
ELIMINAR TODOS LOS DATOS DE LA TABLA Persona.Postulante
TRUNCATE TABLE Persona.Postulante;
10
--
--
END IF;
--
RETURN NULL;
-- END;
-- $$
-- LANGUAGE plpgsql;
-- ;;
--
;;
MTODO 2:
CREACIN DE REGLAS
CREATE OR REPLACE RULE Insert_PerAcad_Ruler_2005_1 AS
ON INSERT TO Persona.Postulante
WHERE (IDPerAcad='2005-1')
DO INSTEAD INSERT INTO Particion.Postulante_2005_1 VALUES(NEW.*);
;;
CREATE OR REPLACE RULE Insert_PerAcad_Ruler_2005_2 AS
11
ON INSERT TO Persona.Postulante
WHERE (IDPerAcad='2005-2')
DO INSTEAD INSERT INTO Particion.Postulante_2005_2 VALUES(NEW.*);
;;
CREATE OR REPLACE RULE Insert_PerAcad_Ruler_2006_1 AS
ON INSERT TO Persona.Postulante
WHERE (IDPerAcad='2006-1')
DO INSTEAD INSERT INTO Particion.Postulante_2006_1 VALUES(NEW.*);
;;
CREATE OR REPLACE RULE Insert_PerAcad_Ruler_2006_2 AS
ON INSERT TO Persona.Postulante
WHERE (IDPerAcad='2006-2')
DO INSTEAD INSERT INTO Particion.Postulante_2006_2 VALUES(NEW.*);
;;
CREATE OR REPLACE RULE Insert_PerAcad_Ruler_2007_1 AS
ON INSERT TO Persona.Postulante
WHERE (IDPerAcad='2007-1')
DO INSTEAD INSERT INTO Particion.Postulante_2007_1 VALUES(NEW.*);
;;
CREATE OR REPLACE RULE Insert_PerAcad_Ruler_0000_0
AS ON INSERT TO Persona.Postulante
WHERE (IDPerAcad NOT IN ('2005-1','2005-2','2006-1','2006-2','2007-1'))
DO INSTEAD INSERT INTO Particion.Postulante_0000_0 VALUES(NEW.*);
12
COMPROBANDO PARTICIONES:
Ejecutar Script: Insertar Postulantes.sql
COMPROBANDO HERENCIA:
Insertando
Insertamos un contacto nuevo:
INSERT INTO Persona.contacto(
Nombres
,Paterno
,Materno
,Genero
,DNI
,FechaNac
,FechaCreacion)
VALUES (
'Anonymous'
,'Anonymous'
,'Anonymous'
,'0'
,'12345678'
,'Nov 14 1987 12:00AM'
,'Dec 18 2005
5:05PM');
;;
13
IDPostulante
,IDContacto
,IDCarrera
,IDPerAcad
,IDModalidad
,Puntaje
,AsistioExamen
,Ingreso)
VALUES ('0000000000',176,'310','2009-2',5,75,'1','1');
SELECT * FROM Persona.Postulante WHERE IDContacto=176;
SELECT * FROM Particion.Postulante_0000_0 WHERE IDContacto=176;
Actualizando
SELECT * FROM Persona.Postulante WHERE IDContacto=176;
SELECT * FROM Particion.Postulante_0000_0 WHERE IDContacto=176;
UPDATE Persona.Postulante SET IDContacto=666 WHERE IDContacto=176;
SELECT * FROM Persona.Postulante WHERE IDContacto=666;
SELECT * FROM Particion.Postulante_0000_0 WHERE IDContacto=666;
Eliminando
SELECT * FROM Persona.Postulante WHERE IDContacto=666;
SELECT * FROM Particion.Postulante_0000_0 WHERE IDContacto=666;
DELETE FROM Persona.Postulante WHERE IDContacto=666;
SELECT * FROM Persona.Postulante WHERE IDContacto=666;
14
Deshabilitando Herencia
ALTER TABLE Particion.Postulante_2005_1 NO INHERIT Persona.Postulante;
SELECT * FROM Persona.Postulante WHERE IDContacto=1; --Deshabilitado
SELECT * FROM Particion.Postulante_2005_1 WHERE IDContacto=1; --Habilitado
Habilitando Herencia
ALTER TABLE Particion.Postulante_2005_1 INHERIT Persona.Postulante;
SELECT * FROM Persona.Postulante WHERE IDContacto=1; --Habilitado
SELECT * FROM Particion.Postulante_2005_1 WHERE IDContacto=1; --Habilitado
COMPROBANDO
PERFORMANCE
15
LIMITACIONES
1)NO
FUNCIONA
EL
UPDATE
EN
CAMPOS
CON
RESTRICCIONES:
El error se produce por las ltimas restricciones asignadas al momento de crear cada particin:
16
Quitarle las restricciones a la tablas hijas hizo que las distribuciones de idperacads no sean correctas
Esto
permitir
que
en
en
una
tabla
hija
existan
ipderacads
que
no
corresponden.
Posible solucin:
SELECT * FROM Particion.Postulante_2005_1;
UPDATE Persona.Postulante SET IDPeracad='2009-2' WHERE IDPeracad='2005-1';
SELECT * FROM Particion.Postulante_2005_1;
INSERT INTO Particion.Postulante_0000_0
(SELECT * FROM Persona.Postulante WHERE IDPeracad='2009-2');
SELECT * FROM Particion.Postulante_0000_0;
DELETE FROM Particion.Postulante_2005_1 WHERE IDPeracad='2009-2';
SELECT * FROM Particion.Postulante_2005_1;
17
18
Conclusin
La estructura es ampliamente usada para grabar las modificaciones de la base de datos es
la Bitcora, herramienta que permite registrar, analizar detectar y notificar eventos que
suceden en cualquier sistemas de informacin utilizado en las organizaciones. La estructura
ms ampliamente usada para grabar las modificaciones de la BD.
Bibliografa
http://chavez-atienzo-2013.blogspot.in/2013/03/bitacora.html
http://dan1456bd.blogspot.in/p/la-diferencia-entre-un-disco-o.html
http://dan1456bd.blogspot.in/p/particiones-en-mysql-y-oracle.html
https://prezi.com/jgbmph6gircw/bitacoras-y-particiones/
http://chavez-atienzo-2013.blogspot.in/2013/03/particiones-en-mysql.html
http://tavoberry.com/blog/crear-una-bitacora-en-mysql/
https://www.scribd.com/doc/217317964/Bitacoras-PostgreSQL
https://saforas.wordpress.com/2009/11/27/postgresql-particionamiento-de-tablas/
http://chavez-atienzo-2013.blogspot.mx/2013/03/bitacora.html
19