jueves, 24 de octubre de 2013

actividad 20

DBMS


Es un sistema robusto que es capaz de emplear algoritmos de almacenamiento y recuperación de información para poder implementar un modelo de datos de manera física garantizando que todas las transacciones que se realizan con respecto a dichos datos sean "ácidas" (Atomicity, Consistency, Isolation, Duration).

 Las partes utilizadas para ejemplificar la arquitectura se refieren a Oracle


Una base de datos en ejecución consta de 3 cosas:
  • Archivos
    • Control (ctl): almacenan información acerca de la estructura de archivos de la base.
    • Rollback (rbs): cuando se modifica el valor de alguna tupla en una transacción, los valores nuevos y anteriores se almacenan en un archivo, de modo que si ocurre algún error, se puede regresar (rollback) a un estado anterior.
    • Redo (rdo): bitácora de toda transacción, en muchos dbms incluye todo tipo de consulta incluyendo aquellas que no modifican los datos.
    • Datos (dbf): el tipo más común, almacena la información que es accesada en la base de datos.
    • Indices (dbf) (dbi): archivos hermanos de los datos para acceso rápido.
    • Temp (tmp): localidades en disco dedicadas a operaciones de ordenamiento o alguna actividad particular que requiera espacio temporal adicional.
  • Memoria
    • Shared Global Area (SGA): es el área más grande de memoria y quizás el más importante
      • Shared Pool: es una caché que mejora el rendimiento ya que almacena parte del diccionario de datos y el parsing de algunas consultas en SQL
      • Redo Log Buffer: contiene un registro de todas las transacciones dentro de la base, las cuales se almacenan en el respectivo archivo de Redo y en caso de siniestro se vuelven a ejecutar aquellos cambios que aún no se hayan reflejado en el archivo de datos (commit).
      • Large Pool: espacio adicional, generalmente usado en casos de multithreading y esclavos de I/O.
      • Java Pool: usado principalmente para almacenar objetos Java
    • Program Global Area (PGA): información del estado de cursores/apuntadores
    • User Global Area(UGA): información de sesión, espacio de stack
  • Procesos
    • Threading
    • System Monitor: despierta periódicamente y realiza algunas actividades entre las que se encuentran la recuperación de errores, recuperación de espacio libre en tablespaces y en segmentos temporales.
    • Process Monitor: limpia aquellos procesos que el usuario termina de manera anormal, verificando consistencias, liberación de recursos, bloqueos.
    • Database Writer: escribe bloques de datos modificados del buffer al disco, aquellas transacciones que llegan a un estado de commit.
    • Log Writer: escribe todo lo que se encuentra en el redo log buffer hacia el redo file
    • Checkpoint: sincroniza todo lo que se tenga en memoria, con sus correspondientes archivos en disco



Tablas de administración del dbms

                                
(root) [mysql]> desc user;
+-----------------------+-----------------------------------+-------------------+------+-----+---------+-------+
| Field                 | Type                              | Collation         | Null | Key | Default | Extra |
+-----------------------+-----------------------------------+-------------------+------+-----+---------+-------+
| Host                  | varchar(60) binary                | binary            |      | PRI |         |       |
| User                  | varchar(16) binary                | binary            |      | PRI |         |       |
| Password              | varchar(45) binary                | binary            |      |     |         |       |
| Select_priv           | enum('N','Y')                     | latin1_swedish_ci |      |     | N       |       |
| Insert_priv           | enum('N','Y')                     | latin1_swedish_ci |      |     | N       |       |
| Update_priv           | enum('N','Y')                     | latin1_swedish_ci |      |     | N       |       |
| Delete_priv           | enum('N','Y')                     | latin1_swedish_ci |      |     | N       |       |
| Create_priv           | enum('N','Y')                     | latin1_swedish_ci |      |     | N       |       |
| Drop_priv             | enum('N','Y')                     | latin1_swedish_ci |      |     | N       |       |
| Reload_priv           | enum('N','Y')                     | latin1_swedish_ci |      |     | N       |       |
| Shutdown_priv         | enum('N','Y')                     | latin1_swedish_ci |      |     | N       |       |
| Process_priv          | enum('N','Y')                     | latin1_swedish_ci |      |     | N       |       |
| File_priv             | enum('N','Y')                     | latin1_swedish_ci |      |     | N       |       |
| Grant_priv            | enum('N','Y')                     | latin1_swedish_ci |      |     | N       |       |
| References_priv       | enum('N','Y')                     | latin1_swedish_ci |      |     | N       |       |
| Index_priv            | enum('N','Y')                     | latin1_swedish_ci |      |     | N       |       |
| Alter_priv            | enum('N','Y')                     | latin1_swedish_ci |      |     | N       |       |
| Show_db_priv          | enum('N','Y')                     | latin1_swedish_ci |      |     | N       |       |
| Super_priv            | enum('N','Y')                     | latin1_swedish_ci |      |     | N       |       |
| Create_tmp_table_priv | enum('N','Y')                     | latin1_swedish_ci |      |     | N       |       |
| Lock_tables_priv      | enum('N','Y')                     | latin1_swedish_ci |      |     | N       |       |
| Execute_priv          | enum('N','Y')                     | latin1_swedish_ci |      |     | N       |       |
| Repl_slave_priv       | enum('N','Y')                     | latin1_swedish_ci |      |     | N       |       |
| Repl_client_priv      | enum('N','Y')                     | latin1_swedish_ci |      |     | N       |       |
| ssl_type              | enum('','ANY','X509','SPECIFIED') | latin1_swedish_ci |      |     |         |       |
| ssl_cipher            | blob                              | binary            |      |     |         |       |
| x509_issuer           | blob                              | binary            |      |     |         |       |
| x509_subject          | blob                              | binary            |      |     |         |       |
| max_questions         | int(11) unsigned                  | binary            |      |     | 0       |       |
| max_updates           | int(11) unsigned                  | binary            |      |     | 0       |       |
| max_connections       | int(11) unsigned                  | binary            |      |     | 0       |       |
+-----------------------+-----------------------------------+-------------------+------+-----+---------+-------+
31 rows in set (0.00 sec)

(root) [mysql]> desc db;
+-----------------------+-----------------+-------------------+------+-----+---------+-------+
| Field                 | Type            | Collation         | Null | Key | Default | Extra |
+-----------------------+-----------------+-------------------+------+-----+---------+-------+
| Host                  | char(60) binary | binary            |      | PRI |         |       |
| Db                    | char(64) binary | binary            |      | PRI |         |       |
| User                  | char(16) binary | binary            |      | PRI |         |       |
| Select_priv           | enum('N','Y')   | latin1_swedish_ci |      |     | N       |       |
| Insert_priv           | enum('N','Y')   | latin1_swedish_ci |      |     | N       |       |
| Update_priv           | enum('N','Y')   | latin1_swedish_ci |      |     | N       |       |
| Delete_priv           | enum('N','Y')   | latin1_swedish_ci |      |     | N       |       |
| Create_priv           | enum('N','Y')   | latin1_swedish_ci |      |     | N       |       |
| Drop_priv             | enum('N','Y')   | latin1_swedish_ci |      |     | N       |       |
| Grant_priv            | enum('N','Y')   | latin1_swedish_ci |      |     | N       |       |
| References_priv       | enum('N','Y')   | latin1_swedish_ci |      |     | N       |       |
| Index_priv            | enum('N','Y')   | latin1_swedish_ci |      |     | N       |       |
| Alter_priv            | enum('N','Y')   | latin1_swedish_ci |      |     | N       |       |
| Create_tmp_table_priv | enum('N','Y')   | latin1_swedish_ci |      |     | N       |       |
| Lock_tables_priv      | enum('N','Y')   | latin1_swedish_ci |      |     | N       |       |
+-----------------------+-----------------+-------------------+------+-----+---------+-------+
(root) [mysql]> insert into user (host,user,password) values ('%','carlos',password('lolo'));
Query OK, 1 row affected (0.07 sec)

(root) [mysql]> select * from user where user='carlos';
+------+--------+-----------------------------------------------+-------------+-------------+-------------+-------------+
| Host | User   | Password                                      | Select_priv | Insert_priv | Update_priv | Delete_priv |
+------+--------+-----------------------------------------------+-------------+-------------+-------------+-------------+
| %    | carlos | *87f0212af7420ce3e0b2b8992eb42dda4be54c9125b3 | N           | N           | N           | N           |
+------+--------+-----------------------------------------------+-------------+-------------+-------------+-------------+
1 row in set (0.00 sec)


(root) [mysql]> create database prueba;
Query OK, 1 row affected (0.00 sec)


(root) [mysql]> insert into db values ('%','prueba','carlos','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
Query OK, 1 row affected (0.00 sec)

(root) [mysql]> select * from db where user='carlos';
+------+--------+--------+-------------+-------------+-------------+-------------+
| Host | Db     | User   | Select_priv | Insert_priv | Update_priv | Delete_priv |
+------+--------+--------+-------------+-------------+-------------+-------------+
| %    | prueba | carlos | Y           | Y           | Y           | Y           |
+------+--------+--------+-------------+-------------+-------------+-------------+
1 row in set (0.09 sec)

(root) [mysql]> flush privileges;
Query OK, 0 rows affected (0.07 sec)

No hay comentarios.:

Publicar un comentario