ADMINISTRACÓN DE BASE DE DATOS Jaroslav Reznik Tomas Ochmann ABD - Primera práctica ● Creación de la Base de Datos y carga inicial – DDL (data definition language) ● ● ● ● Estudio de Indices – ● CREATE, DROP, ALTER triggers grants Indices para los atributos candidatos Reorganización de la BD – lógica y física Creación de la BD I. ● Creación de la Base de Datos – DDL script ● – – – – ● create database oraXE Nombre de la base de dato oraXE Tamaño del bloque 8192B Tamaño de memoria 80M raíz a ficheros de BD C:\oraclexe\oradata\oraXE Creación de usuario – CREATE USER ABDDBA IDENTIFIED BY clave Creación de la BD II. ● Derecho de conexión a BD GRANT "CONNECT" TO ABDDBA ; ● Derecho de la BD GRANT DROP ANY TRIGGER TO ABDDBA ; GRANT UPDATE ANY TABLE TO ABDDBA ; GRANT ALTER ANY TRIGGER TO ABDDBA ; GRANT ALTER ANY TABLE TO ABDDBA ; GRANT SELECT ANY TABLE TO ABDDBA ; GRANT CREATE ANY TABLE TO ABDDBA ; GRANT CREATE ANY TRIGGER TO ABDDBA ; GRANT DROP ANY TABLE TO ABDDBA ; Creación de la BD III. ● Creación de las tablas de la BD – – Según un diagrama entidad-relación DDL ● – – – – – – CREATE TABLE nombre ... atencion_medica paciente motivo medico clinica consulta Creación de la BD III. ● Carga de datos – Recuperación ● ● ● Falta dato necesario (trigger) Trigger before insert Hay que quedar integridad de la BD create or replace trigger puesto_null before insert on personal for each row when ( (new.puesto is NULL)) begin :new.puesto := 'falta!!!'; end; / Creación de la BD IV. ● Tablas externas para cargar datos de ficheros ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY MIDIRECTORIO ACCESS PARAMETERS ( records delimited by newline fields ( cod_clinica POSITION(1:6) INTEGER EXTERNAL, direccion POSITION(7:66) CHAR, ciudad POSITION (67:96) CHAR, telefono POSITION(97:105) CHAR ) ) LOCATION ( 'clinica.txt' ) ) REJECT LIMIT UNLIMITED; Estudio de indices I. ● Datos pegueños y grandes ● 3 sentencias de Select ● 1 sentencia de Update ● Medida de los Tiempos – – – Sin cláves foráneas Con cláves foráneas Atributos candidatos Estudio de indices II. ● Creación de claves primarios – ● Creación de claves foráneas – ● ALTER TABLE paciente ADD CONSTRAINT paciente_pk PRIMARY KEY (cod_paciente); ALTER TABLE atencion_medica ADD CONSTRAINT atencion_medica_paciente_fk FOREIGN KEY (cod_paciente) REFERENCES paciente (cod_paciente); Indices para atributos candidatos – Atributo candidato – sentencia SQL contiene atributo en WHERE parte Estudio de indices III. ● Mejor tiempos – ● Datos pegueños – – – ● Claves primarios y secundarios indice cod_paciente en tabla atencio_medico indice operacione en tabla paciente indice fecha_nac en tabla paciente Datos grandes – Todos indices sin turno en tabla madico ABD - Segunda práctica ● Catálogo de la Base de Datos – – ● Tres vistas para ABD sobre catálogo Para indices y tablas Ejecución de Transacciones Concurrentes – Estudio detallado de la ejecución de transactiones Catálogo de la Base de Datos I. ● Catálogo – almacena metadata de la BD ● ● ● ● estructura de la Base de Datos indices ... Vistas – – CREATE VISTA nombre AS SELECT ... muchas vista de cátalogo ● ● ● DBA_TABLES DBA_INDEXES ... Catálogo de la Base de Datos II. ● Vista A – Por cada indice: ● ● ● ● nombre del indice nombre de la tabla a la que indexa si es único o no y por cada atributo – el nombre – la posición – el tipo de datos – la longitud del atributo Catálogo de la Base de Datos III. ● Vista A CREATE VIEW VISTA_A AS SELECT DISTINCT DBA_INDEXES.INDEX_NAME, DBA_INDEXES.TABLE_NAME, DBA_INDEXES.UNIQUENESS, DBA_IND_COLUMNS.COLUMN_NAME AS ATRIBUTE_NAME, DBA_IND_COLUMNS.COLUMN_POSITION AS ATRIBUTE_POSITION, DBA_TAB_COLUMNS.DATA_TYPE AS ATRIBUTE_TYPE, DBA_IND_COLUMNS.COLUMN_LENGTH AS ATRIBUTE_LENGTH FROM DBA_INDEXES, DBA_IND_COLUMNS, DBA_TAB_COLUMNS WHERE (DBA_INDEXES.INDEX_NAME=DBA_IND_COLUMNS.INDEX_NAME) AND (DBA_IND_COLUMNS.COLUMN_NAME=DBA_TAB_COLUMNS.COLUMN_NAME) AND (DBA_INDEXES.OWNER='ABDDBA') ORDER BY DBA_INDEXES.INDEX_NAME; Catálogo de la Base de Datos IV. ● Vista B – Por cada indice: ● ● ● ● nombre del indice nombre de la tabla a la que indexa si está activo o no la longitud total de clave de indice Catálogo de la Base de Datos V. ● Vista B CREATE VIEW VISTA_B AS SELECT DBA_INDEXES.INDEX_NAME, DBA_INDEXES.TABLE_NAME, STATUS AS ACTIVE, (SELECT SUM(COLUMN_LENGTH)+COUNT(*) FROM DBA_IND_COLUMNS WHERE INDEX_NAME=DBA_INDEXES.INDEX_NAME) AS OVERALL_LENGTH FROM DBA_INDEXES WHERE (DBA_INDEXES.OWNER='ABDDBA') ORDER BY INDEX_NAME; Catálogo de la Base de Datos VI. ● Vista C – Por cada tabla en la BD: ● ● ● ● ● ● ● ● ● nombre de l tabla cuenta de columnas tamaño de columna la longitud TABLE_NAME COLUMNS COLUMNS_LENGTH NUM_ROWS TOTAL_LENGTH Catálogo de la Base de Datos VII. ● Vista C CREATE VIEW VISTA_C AS SELECT DBA_TABLES.TABLE_NAME, (SELECT COUNT(DBA_TAB_COLS.COLUMN_NAME) FROM DBA_TAB_COLS WHERE (DBA_TABLES.TABLE_NAME=DBA_TAB_COLS.TABLE_NAME)) AS COLUMNS, (SELECT SUM(DBA_TAB_COLS.DATA_LENGTH) FROM DBA_TAB_COLS WHERE (DBA_TABLES.TABLE_NAME=DBA_TAB_COLS.TABLE_NAME)) AS COLUMNS_LENGTH, DBA_TABLES.NUM_ROWS, (SELECT SUM(DBA_TAB_COLS.DATA_LENGTH)*DBA_TABLES.NUM_ROWS FROM DBA_TAB_COLS WHERE (DBA_TABLES.TABLE_NAME=DBA_TAB_COLS.TABLE_NAME)) AS TOTAL_LENGTH FROM DBA_TABLES WHERE (DBA_TABLES.OWNER='ABDDBA') ORDER BY DBA_TABLES.TABLE_NAME; Catálogo de la Base de Datos VIII. ● ● ● ● ● ● ● Privilegios para usuario ABDDBA GRANT SELECT ON DBA_INDEXES TO ABDDBA; GRANT SELECT ON DBA_IND_COLUMNS TO ABDDBA; GRANT SELECT ON DBA_TAB_COLUMNS TO ABDDBA; GRANT SELECT ON DBA_TABLES TO ABDDBA; GRANT SELECT ON DBA_TAB_COLS TO ABDDBA; GRANT CREATE VIEW TO ABDDBA; Ejecución de Trans. Concurentes I. ● Isolation levels en Oracle – READ COMMITED ● ● – SERIARIZABLE ● ● por defecto en Oracle nonrepeatable query más restrictivo Mode – READ ONLY ● Solo para lectura Ejecución de Trans. Concurentes II. ● Transactiones – SET TRANSACTION ● ISOLATION LEVEL – – ● – NAME 'nombre' COMMIT ● – READ COMMITED SERIARIZABLE Termina transaction y aplica a la BD ROLLBACK ● Termina transaction y deshecho Ejecución de Trans. Concurentes III. ● ISOLATION LEVEL READ COMMITED – lectura – lectura ● – lectura-escritura ● – no hay ninguna problema lee solo datos que están commited, nonrepeatable read esctritura - escritura ● puede ocurrir un interbloqueo Ejecución de Trans. Concurentes IV. ● ISOLATION LEVEL SERIARIZABLE – lectura – lectura ● – lectura-escritura ● – no hay ninguna problema datos en lo mismo estado como en momento de empieza de transaction – repeatable read esctritura - escritura ● puede ocurrir un interbloqueo – un error ● ORA-08177: can't serialize access for this transaction Ejecución de Trans. Concurentes V. ● INTERBLOQUEO – – – – dos transactiones concurentes T1 y T2 en mismo tiempo misma fila fila cerrada por T1 T2 no puede hacer cambios COMMIT; SET TRANSACTION ISOLATION LEVEL READ COMMITED NAME 'T1'; UPDATE CLINICA SET CIUDAD='Sevilla' WHERE COD_CLINICA='1'; SELECT * FROM CLINICA WHERE COD_CLINICA='1' OR COD_CLINICA='2'; UPDATE CLINICA SET CIUDAD='Madrid' WHERE COD_CLINICA='2'; SELECT * FROM CLINICA WHERE COD_CLINICA='1' OR COD_CLINICA='2'; COMMIT; COMMIT; SET TRANSACTION ISOLATION LEVEL READ COMMITED NAME 'T2'; UPDATE CLINICA SET CIUDAD='Praha' WHERE COD_CLINICA='2'; SELECT * FROM CLINICA WHERE COD_CLINICA='1' OR COD_CLINICA='2'; UPDATE CLINICA SET CIUDAD='Brno' WHERE COD_CLINICA='1'; SELECT * FROM CLINICA WHERE COD_CLINICA='1' OR COD_CLINICA='2'; COMMIT; ABD – Artículo I. ● Diferentes entre SGBD – – – – ● Varios presentación de datos Diferentes lenguas Fecha y tiempo Triggers and procedures Precio de cambio – – costa dinero costa tiempo ABD – Artículo II. ● Morpheus – ● 3 principales partes – – – ● Architectura SGBD independiente Core Metadata model Database abstraction layer Access contol subsystem – Derechos de ususarios ABD – Artículo III. ● Resultados de Morpheus – – – – Implementacion en PHP Pruebas del tiempo Buenos resultados con muchos datos y usuarios Posible uso en Web o televisión digital