martes, 19 de marzo de 2013

ACTIVIDAD #19

Crear espacios de trabajo para tres usuarios de niveles distintos, con restricciones de almacenamiento acordes a cada perfil de usuario.

  • Usuario administrador: (todos los privilegios)
  • Usuario: médico veterinario: (con privilegios para  borrar, agregar y modificar  datos pero no para modificar estructuras de las tablas)
  • Usuario Asistente: solo tiene privilegios de consulta

ACTIVIDAD #18


Implementar el esquema de base de datos de la clínica veterinaria (incluir todas las tablas  y  datos de 5 pacientes con 2  registros de  visita a la clínica cada  uno) 



Microsoft Windows [Versión 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. Reservados todos los derechos.
C:\Users\Chiquita>cd..
C:\Users>cd..
C:\>cd xampp
C:\xampp>cd mysql
C:\xampp\mysql>cd bin
C:\xampp\mysql\bin>mysql -hlocalhost -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.16 MySQL Community Server (GPL)
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> USE VETERINARIA;
Database changed
mysql> CREATE TABLE PROPIETARIO(Id_PROPIETARIO INT NULL PRIMARY KEY,
NOMBRE VARCHAR(20),
DIRECCION VARCHAR(20),
TELEFONO VARCHAR(10),
PROFECCION VARCHAR(20));
Query OK, 0 rows affected (1.16 sec)
mysql> INSERT INTO PROPIETARIO (Id_PROPIETARIO,NOMBRE,DIRECCION,TELEFONO,PROFECCION) VALUES (1234,'LEONARDO PEREZ','MEJIA 2030','6566305622','ING. INDUSTRIAL');
Query OK, 1 rowaffected (0.25 sec)
mysql> INSERT INTO PROPIETARIO Id_PROPIETARIO,NOMBRE,DIRECCION,TELEFONO,PROFECCION) VALUES (1235,'ANTONIO LOPEZ','LA TULE 270','6566302980','ING. CIVIL'),
-> (1236,'MARCO BARRAZA','ROSALES 483','6566920343','DENTISTA'),
-> (1237,'DANIEL DELGADO','DE LEON 3920-20','6562391038','CIRUJANO');
Query OK, 3 rows affected (0.71 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> INSERT PROPIETARIO VALUES(1238,'MARIO NAVA','PORTAL TRIUNFO','6561709602'
,'ING. INDUSTRIAL');
Query OK, 1 row affected (0.29 sec)



mysql> INSERT INTO CONSULTA VALUES(0001,'VACUNA','23/09/2011',NULL,NULL);
Query OK, 1 row affected, 1 warning (0.21 sec)

mysql> INSERT INTO CONSULTA VALUES(0002,'ANTIRIAVICO','23/10/2012',NULL,NULL);
Query OK, 1 row affected, 1 warning (0.04 sec)

mysql> INSERT INTO CONSULTA VALUES(0003,'ANTIRIAVICO','30/10/2012',NULL,NULL);
Query OK, 1 row affected, 1 warning (0.08 sec)

mysql> INSERT INTO CONSULTA VALUES(0004,'ANTIRIAVICO','30/12/2012',NULL,NULL);
Query OK, 1 row affected, 1 warning (0.07 sec)

mysql> INSERT INTO CONSULTA VALUES(0005,'CHEQUEO','30/12/2012',NULL,NULL);
Query OK, 1 row affected, 1 warning (0.09 sec)





ACTIVIDAD #17

Planear y definir la estructura lógica de la base de datos de acuerdo a los recursos disponibles

  • Memoria y Disco
Calcular el número de bytes por registro (de acuerdo al tipo de datos) y cuantos bytes aproximados se requiere para almacenar los datos de  100 pacientes con un promedio de  6 consultas al año) deben contener todos los campos  incluidos en la hoja clínica en el diseño

TABLA #1


TABLA #2


TABLA DE LOS TOTALES DE BYTES




martes, 12 de marzo de 2013

PARTICION EN MYSQL Y ORACLE

PARTICION UTILIZANDO DE PLATAFORMA ORACLE

Tipos de Particionado en Oracle

El particionado fue introducido por primera vez en la versión 8 de Oracle, como una nueva característica DW para la gestión de grandes cantidades de información, y para facilitar la tarea de los administradores de bases de datos. Dependiendo de la versión de Oracle en la que estemos, tenemos diferentes tipos de particionado disponibles:
  • Oracle 8.0: particionado Range
  • Oracle 8i: además del particionado Range se añaden los tipos Hash y Composite.
  • Oracle 9iR2/10g: se amplian con el tipo List y se permiten nuevas combinaciones de tipos en el particionado Composite.
  • Oracle 11g: se introducen las columnas virtuales para particionar(que no existen fisicamente en la tabla), así como el particionado de Sistema (donde podemos gestionar directamente en que partición de la tabla se insertan los registros) y el particionado por Intervalos.

Particionado de Tablas en Oracle

Basicamente, el particionado se realiza utilizando una clave de particionado (partitioning key), que determina en que partición de las existentes en la tabla van a residir los datos que se insertan. Oracle también permite realizar el particionado de indices y de tablas organizadas por indices. Cada partición ademas puede tener sus propias propiedades de almacenamiento. Las tablas particionadas aparecen en el sistema como una única tabla, realizando el sistema la gestión automatica de lectura y escritura en cada una de las particiones (excepto  para el caso de la partición de Sistema introducida en la versión 11g). La definición de las particiones se indica en la sentencia de creación de las tablas, con la sintaxis oportuna para cada uno de los tipos.
  • Particionado Range: la clave de particionado viene determinada por un rango de valores, que determina la partición donde se almacenara un valor.
  • Particionado Hash: la clave de particionado es una función hash, aplicada sobre una columna, que tiene como objetivo realizar una distribución equitativa de los registros sobre las diferentes particiones. Es útil para particionar tablas donde no hay unos criterios de particionado claros, pero en la que se quiere mejor el rendimiento.
  • Particionado List: la clave de particionado es una lista de valores, que determina cada una de las particiones.
  • Particionado Composite: los particionados anteriores eran del tipo simples (single o one-level), pues utilizamos un unico método de  particionado sobre una o mas columnas. Oracle nos permite utilizar metodos de particionado compuestos, utilizando un primer particionado de un tipo determinado, y luego para cada particion, realizar un segundo nivel de particionado utilizando otro metodo. Las combinaciones son las siguientes (se han ido ampliando conforme han ido avanzando las versiones): range-hash, range-list, range-range, list-range, list-list, list-hash y hash-hash (introducido en la versión 11g).
  • Particionado Interval: tipo de particionado introducido igualmente en la versión 11g. En lugar de indicar los rangos de valores que van a determinar como se realiza el particionado, el sistema automáticamente creara las particiones cuando se inserte un nuevo registro en la b.d. Las técnicas de este tipo disponible son Interval, Interval List, Interval Range e Interval Hash (por lo que el particionado Interval es complementario a las técnicas de particionado vistas anteriormente).
  • Particionado System: se define la tabla particionada indicando las particiones deseadas, pero no se indica una clave de particionamiento. En este tipo de particionado, se delega la gestión del particionado a las aplicaciones que utilicen la base de datos (por ejemplo, en las sentencias sql de inserción deberemos de indicar en que partición insertamos los datos).
Referente al particionado, y como característica interesante, Oracle nos permite definir sentencias SQL del tipo DML haciendo referencia a las particiones. Es lo que llaman nombres de tabla con extension de partición (partition-extended table names). Por ejemplo, podremos hacer un select sobre una tabla particionada indicando en la sintaxis la partición de la queremos que se haga lectura. Por ejemplo:

SELECT * FROM schema.table PARTITION(part_name);
 

Esto es igualmente válido para las sentencias INSERT, UPDATE, DELETE, LOCK TABLE. Esta sintaxis nos proporciona una forma simple de acceder a las particiones individuales como si fueran tablas, y utilizarlas, por ejemplo, para la creación de vistas (utilizando la vista en lugar de la tabla), lo que nos puede ser util en muchas situaciones.
Vamos a ver un ejemplo de construcción de cada uno de los tipos de particionado.

Particionado Range

Esta forma de particionamiento requiere que los registros estén identificado por un “partition key”  relacionado por un predefinido rango de valores. El valor de las columnas “partition key” determina la partición a la cual pertenecerá el registro.
CREATE TABLE sales
  ( prod_id       NUMBER(6)
  , cust_id       NUMBER
  , time_id       DATE
  , channel_id    CHAR(1)
  , promo_id      NUMBER(6)
  , quantity_sold NUMBER(3)
  , amount_sold   NUMBER(10,2)
  )
 PARTITION BY RANGE (time_id)
 ( PARTITION sales_q1_2006 VALUES LESS THAN (TO_DATE('01-APR-2006','dd-MON-yyyy'))
 TABLESPACE tsa
 , PARTITION sales_q2_2006 VALUES LESS THAN (TO_DATE('01-JUL-2006','dd-MON-yyyy'))
 TABLESPACE tsb
 , PARTITION sales_q3_2006 VALUES LESS THAN (TO_DATE('01-OCT-2006','dd-MON-yyyy'))
 TABLESPACE tsc
 , PARTITION sales_q4_2006 VALUES LESS THAN (TO_DATE('01-JAN-2007','dd-MON-yyyy'))
 TABLESPACE tsd
 );
 Este tipo de particionamiento esta mejor situado cuando se tiene datos que tienen rango lógicos y que pueden ser distribuidos por este. Ej. Mes del Año o un valor numérico.

Particionado Hash

Los registros de la tabla tienen su localización física determinada aplicando un valor hash a la columna del partition key. La funcion hash devuelve un valor automatico que determina a que partición irá el registro. Es una forma automática de balancear el particionado. Hay varias formas de construir este particionado. En el ejemplo siguiente vemos una definición sin indicar los nombres de las particiones (solo el número de particiones):

CREATE TABLE dept (deptno NUMBER, deptname VARCHAR(32))
     PARTITION BY HASH(deptno) PARTITIONS 16;
 
Igualmente, se pueden indicar los nombres de cada particion individual o los tablespaces donde se localizaran cada una de ellas:

CREATE TABLE dept (deptno NUMBER, deptname VARCHAR(32))
     STORAGE (INITIAL 10K)
     PARTITION BY HASH(deptno)
       (PARTITION p1 TABLESPACE ts1, PARTITION p2 TABLESPACE ts2,
        PARTITION p3 TABLESPACE ts1, PARTITION p4 TABLESPACE ts3);

Particionado List

Este tipo de particionado fue añadido por Oracle en la versión 9, permitiendo determinar el particionado según una lista de valores definidos sobre el valor de una columna especifica.
 
CREATE TABLE sales_list (salesman_id NUMBER(5), salesman_name VARCHAR2(30),
sales_state VARCHAR2(20),
sales_amount NUMBER(10),
sales_date DATE)
PARTITION BY LIST(sales_state)
(
PARTITION sales_west VALUES('California', 'Hawaii'),
PARTITION sales_east VALUES ('New York', 'Virginia', 'Florida'),
PARTITION sales_central VALUES('Texas', 'Illinois')
PARTITION sales_other VALUES(DEFAULT)
);
Este particionado tiene algunas limitaciones, como que no soporta múltiples columnas en la clave de particionado (como en los otros tipos), los valores literales deben ser únicos en la lista, permitiendo el uso del valor NULL (aunque no el valor MAXVALUE, que si puede ser utilizado en particiones del tipo Range). El valor DEFAULT sirve para definir la partición donde iran el resto de registros que no cumplen ninguna condición de las diferentes particiones.

Particionado Composite

Este tipo de particionado es compuesto, pues se conjuga el uso de dos particionados a la vez. Veamos un ejemplo utilizando el tipo RANGE y el HASH. En primer lugar, hace un particionado del tipo RANGE utilizando rangos de años. En segundo lugar, para cada partición definida por cada año, hacemos un segundo particionado (subparticion) del tipo aleatorio (HASH) por el valor de otra columna:
 

CREATE TABLE TAB2 (ord_id     NUMBER(10),
     ord_day    NUMBER(2),
     ord_month  NUMBER(2),
     ord_year   NUMBER(4)
     )
  PARTITION BY RANGE(ord_year)
  SUBPARTITION BY HASH(ord_id)
  SUBPARTITIONS 8
   ( PARTITION q1 VALUES LESS THAN(2001)
     ( SUBPARTITION q1_h1 TABLESPACE TBS1,
       SUBPARTITION q1_h2 TABLESPACE TBS2,
       SUBPARTITION q1_h3 TABLESPACE TBS3,
       SUBPARTITION q1_h4 TABLESPACE TBS4
     ),
     PARTITION q2 VALUES LESS THAN(2002) 
     ( SUBPARTITION q2_h5 TABLESPACE TBS5,
       SUBPARTITION q2_h6 TABLESPACE TBS6,
       SUBPARTITION q2_h7 TABLESPACE TBS7,
       SUBPARTITION q2_h8 TABLESPACE TBS8
     ),
     PARTITION q3 VALUES LESS THAN(2003) 
     ( SUBPARTITION q3_h1 TABLESPACE TBS1,
       SUBPARTITION q3_h2 TABLESPACE TBS2,
       SUBPARTITION q3_h3 TABLESPACE TBS3,
       SUBPARTITION q3_h4 TABLESPACE TBS4
     ),
     PARTITION q4 VALUES LESS THAN(2004)
     ( SUBPARTITION q4_h5 TABLESPACE TBS5,
       SUBPARTITION q4_h6 TABLESPACE TBS6,
       SUBPARTITION q4_h7 TABLESPACE TBS7,
       SUBPARTITION q4_h8 TABLESPACE TBS8
     )
   )
Las combinaciones permitidas son las siguientes (se han ido ampliando conforme han ido avanzando las versiones de Oracle): range-hash, range-list, range-range, list-range, list-list, list-hash y hash-hash (introducido en la versión 11g).

 

Particionado Composite en Oracle

Particionado Interval

El particionado Interval ha sido introducido en la versión 11g para habilitar un mantenimiento de particiones desasistido. Normalmente, cuando realizamos un particionado sobre una tabla, indicamos una lista de valores o rangos para crear de antemano las particiones.  Posteriormente, ajustamos la definición de las particiones para incluir nuevas para nuevos rangos o valores. Con las particiones Interval, preparamos  para que Oracle cree las particiones de forma automática cuando lo necesite. Básicamente, se define un intervalo y una directiva para decirle a Oracle como se tiene que comportar. Veamos un ejemplo:
 
CREATE TABLE T_11G(C1 NUMBER(38,0),
 C2 VARCHAR2(10),
 C3 DATE)
 PARTITION BY RANGE (C3) INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))
 (PARTITION P0902 VALUES LESS THAN (TO_DATE('2009-03-01 00:00:00','YYYY-MM-DD HH24:MI:SS')));

Hemos creado una partición base, y con lo especificado en Interval definimos como gestionar la creación automática de nuevas particiones. La posibilidad de definir un intevalo y que Oracle se encargue de crear las particiones a medida que se vayan necesitando resulta muy interesante para facilitar el mantenimiento y administración de particiones.

Particionado System

Una de las nuevas funcionalidades introducida en la version 11g es el denominado partitioning interno o de sistema. En este particionado Oracle no realiza la gestión del lugar donde se almacenaran los registros, sino que seremos nosotros los que tendremos que indicar en que partición se hacen las inserciones.

create table t (c1 int,
                c2 varchar2(10),
                c3 date)
     partition by system
    (partition p1,
     partition p2,
     partition p3);
Si hicieramos un insert sobre la tabla (por ejemplo, insert into t values (1,’A',sysdate);), daría error, siendo la instrucción a ejecutar correcta la siguiente:
insert into t partition (p3) values (1,’A',sysdate);
Puede ser util este particionado para aplicaciones donde nos interesa ser nosotros lo que gestionamos la forma en la que se realiza el particionado (lógica de aplicación).

Uso de columnas virtuales para particionar

En la versión 11g se pueden definir en las tablas columnas virtuales (no existen físicamente). Ademas estas columnas se pueden utilizar para realizar particionado sobre ellas. La forma de crear una tabla con columnas de este tipo sería la siguiente:
 create table t (c1 int,
                c2 varchar2(10),
                c3 date,
                c3_v char(1)
                generated always as
                (to_char(c3,'d')) virtual
                )
 partition by list (c3_v)
  (partition p1 values ('1'),
   partition p2 values ('2'),
   partition p3 values ('3'),
   partition p4 values ('4'),
   partition p5 values ('5'),
   partition p6 values ('6'),
   partition p7 values ('7') );

Gestión del particionado.

La gestión del particionado es totalmente dinámica, de forma que se podrán añadir particiones a una tabla particionada existente, juntar o borrar particiones, convertir una particion en una tabla no particionada, partir una partición en dos (Splitting), hacer un truncate (borra los datos de la partición pero deja la estructura). También podemos mover una partición de un tablespace a otro, renombrarla, etc. Os recomiendo la lectura de blog Bases de Datos y Tecnología donde se explican en detalle algunas de estas operaciones, así como el  blog Database Design que también habla sobre el tema).
El particionado en Oracle tiene muchas mas funcionalidades de las que podeis ampliar información en la propia documentación online del fabricante
 

PARTICION ULTILIZANDO DE PLATAFORMA MYSQL

(SON ENLACES)

PARTICION MYSQL

 CREACION DE PARTICIONES MYSQL

lunes, 11 de marzo de 2013

ACTIVIDAD #16

Que es una bitacora ( relacionada con SGBD):

Herramienta que permite registrar, analizar detectar y notificar eventos que suceden en cualquier sistemas de informacion utilizado en las organizaciones. La estructura mas ampliamente usada para grabar las modificaciones de la BD.

Cuales son sus funciones

  Recuperacion de informacion ante incidentes de seguridad.de cual es la seguridad, deteccion de comportamiento importancia de inudual, informacion para resolver una bitacora, problemas evidencia legal, es de gran ayuda en las tareas de computo forense

Tipo  de Bitacoras  

MYSQL:
  •  el registro de error: Registra problemas encontrados iniciando, ejecutando o parando mysql.
  • Registro de consultras: Registra las conexiones de clientes establecidas, y las sentencias ejecutadas.
  • Registro de Actualizaciones (The Update Log): Registra las sentencias que cambian datos. este registro esta ya en desuso.
  • Registro Binario: Registra todas las sentencias que cambian datos. Tambien utilizando para replicacion.
  • Registro de Lentitud: Registra todas las sentencias que tardaron mas de long_query_time segundos en ejecutarse, o no utilizaron indices.
ORACLE:
  •  Control (ctl): almacenan informacion acerca de la estructura de archivos de la base.
  • Rollback (rbs): cuando se modifica el valor de alguna tupla en una transaccion, los valores nuevos y anteriores se almacenan en un archivo, de modo que si ocurre algun error, se puede regresar (rollback) a un estado anterior.
  • Redo (rdo): bitacora de toda transaccion, en muchos dbms incluye todo tipo de consulta incluyendo aquellas que no modifican los datos.
  • Datos (dbf): el tipo mas comun, almacena la informacion qye es accesada en la BD.
  • Indices (dbi): archivos hermanos de los datos para acceso rapido.
  • Temp (tmp): localidades en disco dedicadas a operaciones de ordenamiento o alguna actividad particular que requiera espacio temporal adicional.

Como crearlas en SGBD ( Mysql y Oracle)


Se plantea un ejemplo de una bitácora desarrollada para la siguiente base de datos de MySQL, llamada proyecto, que tiene las tablas carrera, departamento y maestros.

CREATE DATABASE proyecto;
USE proyecto

CREATE TABLE IF NOT EXISTS `carrera` (`clave_carrera` int(11) NOT NULL, `nom_carrera` varchar(20) NOT NULL, `num_depto` int(11) NOT NULL, PRIMARY KEY (`clave_carrera`), KEY `num_depto` (`num_depto`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `departamento` ( `num_departamento` int(11) NOT NULL,`nombre_dept` varchar(20) NOT NULL, `jefe_num_tarjet` int(11) NOT NULL, PRIMARY KEY (`num_departamento`), KEY `jefe_num_tarjet` (`jefe_num_tarjet`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `maestros` (`num_tarjeta` int(11) NOT NULL DEFAULT ’0′,`nombre` varchar(50) DEFAULT NULL, PRIMARY KEY (`num_tarjeta`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;

La estructura de la tabla bitácora sería la siguiente:

CREATE TABLE IF NOT EXISTS `bitacora` (`id` int(11) NOT NULL AUTO_INCREMENT, `operacion` varchar(10) DEFAULT NULL, `usuario` varchar(40) DEFAULT NULL, `host` varchar(30) NOT NULL, `modificado` datetime DEFAULT NULL, `tabla` varchar(40) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


La bitácora debe registrar todos los movimientos (insertar, eliminar y modificar) que se realicen en las tablas de la base de datos. Para lograr lo anterior es necesario crear un trigger para que se ejecute después de la operación de insertar, otro para después de eliminar y el último para después de modificar para cada una de las 3 tablas de la base de datos. Los nueve triggers necesarios para que funcione la bitácora son los siguientes:


DROP TRIGGER IF EXISTS `bit_carr_ins`;

DELIMITER

CREATE TRIGGER `bitacora` AFTER INSERT ON `carrera`

FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “INSERTAR”, NOW(), “CARRERA”)


DROP TRIGGER IF EXISTS `bit_carr_upd`;

CREATE TRIGGER `bit_carr_upd` AFTER UPDATE ON `carrera`

FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “ACTUALIZAR”, NOW(), “CARRERA”)


DROP TRIGGER IF EXISTS `bit_carr_del`;

CREATE TRIGGER `bit_carr_del` AFTER DELETE ON `carrera`

FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “ELIMINAR”, NOW(), “CARRERA”)



DROP TRIGGER IF EXISTS `bit_depto_ins`;

CREATE TRIGGER `bit_depto_ins` AFTER INSERT ON `departamento`

FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “INSERTAR”, NOW(), “DEPARTAMENTO”)


DROP TRIGGER IF EXISTS `bit_depto_upd`;

CREATE TRIGGER `bit_depto_upd` AFTER UPDATE ON `departamento`

FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “ACTUALIZAR”, NOW(), “DEPARTAMENTO”)


DROP TRIGGER IF EXISTS `bit_depto_del`;

CREATE TRIGGER `bit_depto_del` AFTER DELETE ON `departamento`

FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “ELIMINAR”, NOW(), “DEPARTAMENTO”)




DROP TRIGGER IF EXISTS `bit_mae_ins`;

CREATE TRIGGER `bit_mae_ins` AFTER INSERT ON `maestros`

FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “INSERTAR”, NOW(), “MAESTROS”)


DROP TRIGGER IF EXISTS `bit_mae_upd`;

CREATE TRIGGER `bit_mae_upd` AFTER UPDATE ON `maestros`

FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “ACTUALIZAR”, NOW(), “MAESTROS”)


DROP TRIGGER IF EXISTS `bit_mae_del`;

CREATE TRIGGER `bit_mae_del` AFTER DELETE ON `maestros`

FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “ELIMINAR”, NOW(), “MAESTROS”)

 BITACORA EN ORACLE


Miramos que actualmente no está activada la auditoria en la base de datos.

SQL> select name , value from v$parameter where name like 'audit_trail';
audit_trail NONE

Activamos la auditoría de la base de datos

SQL> alter system set audit_trail = DB scope = spfile;

Reiniciamos la base de datos ( shutdown immediate, startup ) y comprobamos que la auditoría se ha activado.

SQL> select name , value from v$parameter where name like 'audit_trail';
audit_trail DB

Activamos la auditoría para ver la conexión y desconexión de los usuarios a la base de datos, se hace con la siguiente sentencia

SQL> audit connect;

Fuente

http://www.slideshare.net/LaloOsorio1/bitcora-de-base-de-datos 

http://dev.mysql.com/doc/refman/5.0/es/log-files.html 

http://bases-datos-2013.blogspot.mx/2013/02/arquitectura-de-sgbd.html 

jueves, 7 de marzo de 2013

ACTIVIDAD #15

SISTEMA DE ARCHIVOS


Un sistema de archivos es la estructura subyacente que un equipo usa para organizar los datos de un disco duro. Si está instalando un disco duro nuevo, tiene que realizar las particiones y formatearlo empleando un sistema de archivos para poder comenzar a almacenar datos o programas. En Windows, las tres opciones del sistema de archivos que tiene para elegir son NTFS, FAT32 y la anterior y poco usada FAT (también conocida como FAT16).

COMPARACION


NTFS

NTFS es el sistema de archivos preferido para esta versión de Windows. Tiene muchos beneficios respecto al sistema de archivos FAT32, entre los que se incluye:

La capacidad de recuperarse a partir de algunos errores relacionados con el disco automáticamente, lo que FAT32 no puede hacer.

Compatibilidad mejorada para discos duros más grandes.

Mejor seguridad porque puede utilizar permisos y cifrado para restringir el acceso a archivos específicos para usuarios aprobados.

FAT32

FAT32, y el menos usado FAT, se usan en versiones anteriores de sistemas operativos de Windows, incluyendo Windows 95, Windows 98 y Windows Millennium Edition. FAT32 no tiene la seguridad que NTFS proporciona, por lo que si tiene una partición FAT32 o volumen en el equipo, cualquier usuario que tenga acceso al equipo puede leer el archivo incluido. FAT32 también tiene limitaciones de tamaño. No puede crear una partición FAT32 mayor que 32GB en esta versión de Windows y no puede almacenan un archivo mayor que 4GB en una partición FAT32.

La razón principal de utilizar FAT32 es que tiene un equipo que a veces ejecutará Windows 95, Windows 98 o Windows Millennium Edition y en otras ocasiones ejecutará esta versión de Windows, conocida como configuración de arranque múltiple. Si éste es el caso, tendrá que instalar el sistema operativo anterior en una partición FAT32 o FAT y asegurarse de que es una partición primaria (una que puede alojar un sistema operativo). Las particiones adicionales a las que tendrá acceso cuando use estas versiones anteriores de Windows también estarán formateadas con FAT32. Estas versiones anteriores de Windows pueden tener acceso a volúmenes o particiones NTFS en una red pero no en el equipo.

Partición de disco:


Es una unidad de almacenamiento, en la cual se alojan y organizan los archivos mediante un sistema de archivos. existen distintos esquemas de particiones para la distribucion de particiones en un disco.

Su importancia:

  • Algunos sistemas de archivos(p.p. versiones antiguas de sistemas FAT de Miscrosoft) tienen tamaños maximosmaspequeños que los que el tamaño que porporciona un disco, siendo necesaria una particion de tamaño pequeño, para que sea posible el adecuado funcionamento de este antiguo sistemas de archivos.
  • Se puedeguardar una copia de seguridad delos datos del usuario en otra particion del mismo disco, para evitar la perdida de informacion importante. Esto es similar a un RAID, excepto en que esta en el mismo disco.
  • En algunos sistemasoperativos aconsejan mas de un particion para funcionar, como por ejemplo, la particion de intercambio (swap) en los sistemas operativos basados en linux.
  • A menudo, dos sistemas operativos no pueden coexistir en la misma particion, o usar diferentesformatosdedisco "nativo". La unidad se particiona para diferentes sistemas operativos.
  • Uno de los principales usos que sele suele dar a las particiones (principalmente a la extendida)es ladealmacenar toda la informacion del usuario (entiendase musica, fotos, videos, documentos), para que al momento de reinstalar algun  sistema operativo se formatee unicamente la unidad que lo contiene sin perder el resto de la informacion del usuario.


Como particionar un disco:




martes, 5 de marzo de 2013

INSTANCIA DE UN SGBD

ORACLE

Que es Oracle?
Es una base de datos los cuales estan almacenados y accesibles segun el formato de tablas relacionales. una tabla  relacional tiene un nombre y unas columnas, su definicion. Los daots estan almacenados en las filas. Las tablas pueden estar relacionadas con otras.
Una BD de Oracle esta almacenada fisicamente en ficheros, y la correspondencia entre los ficheros y las tablas es posible gracias a las estructuras internas de la BD, que permiten que diferentes tipos de datos esten almacenados fisicamente separados. esta divicion logica se hace gracias a los espacios de tablas, tablespaces.

CARACTERISTICAS DE ADB

  • instalacion de nuevos componentes del software 
  • interaccion con el administrador del sistema
  • garantizar la seguridad del sistema
  • monitorizacion
  • respaldos
  • prevecion de riesgos



lunes, 4 de marzo de 2013

MAPAS CONCEPTUALES


SISTEMAS GESTORES DE  BASE DE DATOS


ARQUITECTURA DE UN MANEJADOR DE BASE DE DATOS


TIPOS DE UN DBMS

RESUMEN DE MYSQL

MySQL (pronunciado mai-es-quiu-el), es una manejador de bases de datos relacional bastante robusto, de código abierto bajo la licencia GPL el cual se ha convertido en el más popular hoy en día.
Su origen se debió a la búsqueda por parte de los fundadores de crear un manejador de bases de datos que fuera "rápido", todavía más rapido que mSQL. Así surgió MySQL, primero como un producto de la empresa y despúes como software de dominio público.
  • Por qué usar MySQL ? Es importante resaltar que no se trata de una herramienta de juguete o aprendizaje, MySQL es un manejador que puede competir competir con sus famosas contrapartes comerciales: Oracle, DB2, Informix, Sybase. los motivos por los cuales se podría optar por usar MySQL son: 

    • Es gratis
    • Es extensible
    • Es robusto
    • Es rápido




No requiere de una gran número de recursos para funcionar (obviamente para aplicaciones a gran escala es mejor contar con una buena infraestructura)
Es fácil de administrar

Instalación Básica.-

Una vez descargado el software se procede a desempaquetarlo (.tgz, zip) o bien ejecutar el .exe correspondiente.
  • Dichos directorios contenidos en un directorio que por lo general lleva el mismo nombre 'mysql' contiene una estructura de la siguiente manera:
    • bin: programas ejecutables, mysql, mysqld, mysqldump, myisamchk, mysqlbinlog.
    • include, lib, libexec: librerías y encabezados para programar en C/C++
    • mysql-test, sql-bench: pruebas y benchmarks
    • var ó data: estructura de todas las bases y datos de las tablas tipo MyISAM y Berkeley DB.
    • man: páginas de manual
    • share: información en distintos idiomas
    • support-files: archivos de configuración y scripts de arranque automático








Arranque y Terminación.- 

Arranque del manejador....Una vez configurado se puede iniciar el demonio del dbms a través del comando "mysqld" o alguna de sus variantes "safe_mysqld", "mysqld-max".
Esto se puede hacer desde cualquier terminal y se pueden pasar como parametros algunas de las mismas variables disponibles para configuración (en caso de necesitar alguna opción particular).
Terminación del manejador....Se puede hacer de 2 maneras:
a) Usando el comando "mysqladmin shutdown".
b) Matando el proceso asociado.

Creación de bases y cuentas de usuario.-


Para cada tabla se puede emplear el comando 'desc' o 'describe' para analizar la estructura de cada tabla y apreciar la relación que tiene con las demás. Para dar de un alta un usuario, se debe crear el usuario dentro de la tabla 'user', crear la base de datos y posteriormente asociar dicho usuario con la base en la tabla 'bd', todo lo anterior utilizando instrucciones de SQL tradicionales.

Utilización de la base de datos SQL


MySQL cumple con el estándar SQL92. Es importante resaltar que aunque no implementa todas las funciones que otros manejadores poseen, es posible realizar cualquier consulta usando los distintos tipos de joins o inclusive a través de tablas temporales. 

Creación de índices

La sintáxis de creación de índices no está considerada como un estándar, así que varía en cada dbms, ej.

create index index_name on table_name (atrib_1,..atrib_n);

En el caso partícular de MySQL toda llave primaria está asociada a un índice, así que no se requiere crear un índice adicional para dicho propósito.

Por otro lado si se crea un índice X que contiene a los atributos (a,b,c) ya no es necesario crear un índice para el caso de hacer una consulta que sólo involucre a (a) o (a,b) ya que se empleará el mismo índice X; para saber con certeza qué índices de están empleando en una consulta se puede recurrir a la expresión de 'explain'.

Respaldos

La manera usual de hacer un respaldo es usando el comando mysqldump, que posee muchas opciones que permiten duplicar todas las base, una base en particular, una tabla, solo los datos, solo la estructura, etc.
Para obtener un respaldo completo de una base
<!--[endif]-->
[digital@pcproal digital]$ mysqldump --opt -u carlos -p prueba > prueba.bak
Para restaurar un respaldo completo de una base
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
[digital@pcproal digital]$ mysql -u carlos -p prueba < prueba.bak

Otra manera de hacer respaldos es através del comando "select into" y restaurar los datos con "mysqlimport" o "load data infile".