You are on page 1of 113

Seguridad de la Base de

Datos

Semana 13

Facultad de10-1
Facultad de Ingeniera Industrial
Ingeniera Industrial yy de
de Sistemas
Sistemas Copyright OracleProfesor
Corporation,
Prof. Ing.Ing.
Ponte Roca
Ponte 2001.
Miguel
Roca Todos los derechos reservados.
Angel
Miguel Angel 11
Objetivos
Al finalizar esta leccin, usted estar capacitado
para:

Crear y definir Usuarios


Definir y manejar la Autorizacin de Usuarios
Administrar los Perfiles de Usuarios
Establecer Privilegios de Usuarios
Crear y Establecer Roles
Tener conocimiento del alcance de la
Auditora.

Facultad de Ingeniera Industrial y de Sistemas


Facultad de10-2
Ingeniera Industrial y de Sistemas
Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados.
Profesor Ing. Ponte Roca Miguel Angel 2
2
Autorizacin

Incluye 2 procesos:
Permitir nicamente a ciertos usuarios
acceder, procesar o modificar datos.

La aplicacin da lmites a los accesos


de usuarios o a sus acciones. Las
limitaciones establecidas a los
usuarios pueden aplicarse a objetos
(esquemas, tablas, filas) o a recursos
(CPU, LPT, tiempo ocioso)

Facultad de Ingeniera Industrial y de Sistemas


Facultad de10-3
Ingeniera Industrial y de Sistemas
Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados.
Profesor Ing. Ponte Roca Miguel Angel
3
2
Lmites de recurso de usuario y perfiles (1)

Es posible establecer lmites en la cantidad de


recursos disponibles para cada usuario.
Se evita el consumo incontrolado de
recursos del sistema (CPU, etc.).

Se puede administrar los lmites de recursos y


los passwords con perfiles.
Perfil: conjunto de lmites de recursos que
se asignan a un usuario.

Puede haber un nmero ilimitado de perfiles.

Facultad de Ingeniera Industrial y de Sistemas


10-4 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 4
Lmites de recurso de usuario y perfiles (2)
Se puede controlar cada uno de los recursos ya sea a nivel de
sesin, a nivel de llamada o ambos.
Nivel de sesin:
Cuando un usuario se conecta a la BD se crea una
sesin.
Si el usuario excede algn lmite de recurso se
bloquea la sesin.

Nivel de llamada:
Para prevenir llamadas excesivas en la ejecucin de
una sentencia SQL, se pueden establecer lmites de
recursos.
Si el lmite es excedido se detiene la ejecucin de la
sentencia y se enva un mensaje de error.

Facultad de Ingeniera Industrial y de Sistemas


10-5 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 5
Lmites de recurso de usuario y perfiles (3)

Tipos de recursos que se pueden limitar, ejemplos:

Tiempo de CPU

Lecturas lgicas de los datos

Nmero de sesiones simultneas por usuario

Tiempo ocioso de una sesin

Tiempo transcurrido de una sesin

Facultad de Ingeniera Industrial y de Sistemas


10-6 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 6
Lmites de recurso de usuario y perfiles (4)

Perfiles:
En el contexto de recursos de sistemas, un perfil es
un conjunto de lmites de recursos que pueden ser
asignados a un usuario.

Proveen una fcil administracin de los lmites de


recursos.

Se pueden crear diferentes perfiles.

Un perfil predeterminado se utiliza para los usuarios


a los que no se les asigna explcitamente un perfil.

Facultad de Ingeniera Industrial y de Sistemas


10-7 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 7
Lmites de recurso de usuario y perfiles (5)

Cundo utilizar perfiles?


nicamente si los lmites de recursos son
requerimientos de las polticas de seguridad para la
BD.

Antes de crear los perfiles:


Categorizar a los usuarios

Determinar cuntos perfiles se necesitan

Determinar los valores apropiados para cada lmite


de recurso.

Facultad de Ingeniera Industrial y de Sistemas


10-8 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 8
Privilegios (1)

Es un derecho para ejecutar un tipo particular de


sentencia SQL o para acceder a otro objeto de usuario.

Se dan privilegios para que el usuario pueda llevar a


cabo las tareas de su trabajo.

Se dan privilegios solo a los usuarios que los


requieren.

Dar privilegios innecesarios puede comprometer la


seguridad de la BD.

Facultad de Ingeniera Industrial y de Sistemas


10-9 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 9
Privilegios (2)

Existen 2 formas de dar privilegios:


1. Dar un privilegio explcitamente a un usuario.

2. Dar un privilegio a un Rol y luego asignar ese rol a


uno o ms usuarios.

Los Roles permiten una mejor y ms fcil administracin


de los privilegios.

Facultad de Ingeniera Industrial y de Sistemas


10-10 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 10
Roles (1)

Facultad de Ingeniera Industrial y de Sistemas


10-11 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 11
Roles (2)

Un Rol es un conjunto de privilegios relacionados que


se entrega, a un usuario, grupo de usuarios, o a otro
rol.

El nombre de un Rol debe ser nico y no puede


coincidir con ningn nombre de usuario u objeto de
esquema.

Un usuario que crea un rol puede ser eliminado sin


afectar el rol.

Facultad de Ingeniera Industrial y de Sistemas


10-12 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 12
Roles (3)

Usos comunes:
Administrar los privilegios para una aplicacin de
base de datos.
Administrar los privilegios para un grupo de
usuarios.
1. Rol de usuario:
Un grupo de usuarios con requerimientos de
privilegios comunes.
2. Rol de aplicacin:
Establece los privilegios necesarios para ejecutar
una aplicacin.

Facultad de Ingeniera Industrial y de Sistemas


10-13 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 13
Confidencialidad y Seguridad en la Bases de
Datos

a. Confidencialidad
- Introduccin
- Acceso a la base de datos (usuarios)
- Autorizacin de acceso a datos (permisos y roles)
- Uso de recursos del sistema (perfiles)

b. Seguridad
- Introduccin
- Tipos de Ataques
- Auditorias

c. Encriptacin

Facultad de Ingeniera Industrial y de Sistemas


10-14 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 14
a. Confidencialidad: Introduccin
Objetivos:
No permitir modificar datos a usuarios no autorizados

Tipos de Acciones:
1) Cuentas de Usuario: autentican a los usuarios para
permitir el acceso a la base de datos.
Nombre de usuario y Contrasea.
Identificacin por Hardware
Caractersticas bioantropomtricas (huellas
dactilares, voz, retina)
Conocimientos, aptitudes y hbitos del usuario

2) Permisos y Roles: otorgar / revocar privilegios de acceso a


objetos de la base de datos.

3) Perfiles: controlan el uso de los recursos del sistema.

Facultad de Ingeniera Industrial y de Sistemas


10-15 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 15
a. Confidencialidad: 1) Cuentas de Usuarios

Tipos de Usuarios:
Usuario: nombre definido en la BD que puede conectarse y
acceder a objetos de la BD.
Usuario externo: usuarios externos al DBMS (p.e: usuarios
de un Sistema Operativo)
Usuarios de empresa (global): grupo de usuarios
(gestionados en un directorio) con permisos a la misma BD
sin necesidad de crear una cuenta o esquema en cada BD.

Usuarios DBA por defecto: SYS, SYSTEM

Definicin:
Esquema: coleccin de objetos (tablas, vistas, clusters,
procedimientos, paquetes, etc.)

Facultad de Ingeniera Industrial y de Sistemas


10-16 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 16
a. Confidencialidad: 1) Cuentas de Usuarios
Sintaxis de Creacin de Usuarios (1/2):
Prerrequisito: Tener el Privilegio de sistema CREATE USER
Nota: Deben existir, el perfil dbd_perfil y el Tablespace
dbd_tablespace

EJEMPLO:

CREATE USER user303


IDENTIFIED BY user303
DEFAULT TABLESPACE dbd_tablespace
QUOTA 10M ON dbd_tablespace
PROFILE dbd_perfil
PASSWORD EXPIRE;

Facultad de Ingeniera Industrial y de Sistemas


10-17 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 17
a. Confidencialidad: 1) Cuentas de Usuarios
Sintaxis de Creacin de Usuarios (2/2):
NOTA: Despus de crear el usuario, hay que darle permisos para
que pueda acceder a los recursos de la BD.
Los comandos necesarios para permitir la conexin a la BD
son:
GRANT CONNECT, RESOURCE TO user303;
GRANT CREATE SESSION TO user303;

EJEMPLOS:
1. Usuario Pepe identificado de forma externa cuya cuenta no
expire y cuyo tablespace temporal sea espacio_temporal.
2. Usuario Mara identificado con pwd Maria con tablespace
por defecto espacio_infinito y espacio en este tablespace
ilimitado.
3. Usuario Juan identificado de forma global como Juanito y
cuya cuenta est inicialmente bloqueada.
Facultad de Ingeniera Industrial y de Sistemas
10-18 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 18
a. Confidencialidad.
1) Cuentas de Usuarios
Sintaxis de Modificacin de Usuarios (1/2):
EJEMPLO:
ALTER USER user303
IDENTIFIED BY user303
DEFAULT TABLESPACE dbd_tablespace
QUOTA 10M ON dbd_tablespace
PROFILE dbd_perfil
PASSWORD EXPIRE
DEFAULT ROLE rol_user303;

Facultad de10-19
Ingeniera Industrial y de Sistemas Copyright OracleProf.
Corporation, 2001.
Ing. Ponte Roca Miguel Todos los derechos reservados.
Angel 19
a. Confidencialidad: 1) Cuentas de Usuarios

Sintaxis de Modificacin de Usuarios (2/2):

NOTA: Los mismos parmetros que la sentencia CREATE


USER + gestin de roles.

EJEMPLOS:
1. Modificar el usuario Pepe identificado de forma interna
por el password pepito cuya cuenta expire.
2. Modificar el usuario Mara identificado de forma
externa con tablespace por defecto espacio_infinito y
espacio en este tablespace limitado a 30 MB. Adems,
este usuario ha de tener el rol por defecto llamado
rol_usuarios_habituales.

Facultad de Ingeniera Industrial y de Sistemas


10-20 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 20
a. Confidencialidad: 1) Cuentas de Usuarios

Sintaxis de Borrado de Usuarios:

NOTA: Se borran automticamente TODOS los objetos del que


el usuario es propietario

EJEMPLO: DROP USER user303 CASCADE;

Facultad de Ingeniera Industrial y de Sistemas


10-21 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 21
a. Confidencialidad: 2) Permisos y Roles

Objetivo:
Proporcionar a los usuarios privilegios de acceso a objetos de
la BD.

Definicin:
Permiso: privilegio de acceso a objetos de la BD
Rol: conjunto de privilegios (agrupados).
Simplificacin en la gestin de privilegios

Quin tiene privilegios para asignar privilegios?:


El DBA (privilegios de cuenta, sistema y objetos de esquemas).
Otros usuarios a los que le hayan dado privilegios de forma
especfica.
El propietario del esquema tiene todos los privilegios sobre sus
objetos.

Facultad de Ingeniera Industrial y de Sistemas


10-22 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 22
a. Confidencialidad: 2) Permisos y Roles
Tipos de privilegios de ORACLE(1):
1. Del sistema: ejecutar una accin en cualquier esquema
Conexin a una base de datos (Create Session)
Crear Tablespaces, borrar filas de cualquier tabla, etc.
Crear un esquema o Tabla base: CREATE SCHEMA,
CREATE TABLE.
Crear una vista: CREATE VIEW
Agregar o eliminar atributos de Tablas: ALTER
Eliminar Tablas o vistas: DROP
Insertar, eliminar o modificar tuplas: MODIFY
Obtener informacin de la BD: SELECT

Clusters, ndices, disparadores (Triggers), enlaces a
BD, etc.

Facultad de Ingeniera Industrial y de Sistemas


10-23 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 23
a. Confidencialidad: 2) Permisos y Roles
Tipos de privilegios de ORACLE(2)
2. De objetos del esquema: ejecutar una accin en un objeto de
un esquema especfico.
Tablas, vistas, secuencias, procedimientos, funciones y
paquetes
Privilegio SELECT, para obtener tuplas de la
relacin.
Privilegio MODIFY, para modificar tuplas de la
relacin.
UPDATE, actualizacin (tambin a atributos)
DELETE, borrado
INSERT, insertar (tambin a atributos)
Privilegio REFERENCES, que confiere a la cuenta la
capacidad de hacer referencia a la relacin al
especificar restricciones de integridad.

Facultad de Ingeniera Industrial y de Sistemas
10-24 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 24
a. Confidencialidad: 2) Permisos y Roles

Sintaxis Oracle. Otorgar Privilegios: GRANT (1/2)

EJEMPLO

GRANT connect, resource, create user TO user303;

Facultad de Ingeniera Industrial y de Sistemas


10-25 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 25
a. Confidencialidad: 2) Permisos y Roles

Sintaxis Oracle. Otorgar Privilegios: GRANT (2/2)


System_privileges: ALTER DATABASE, AUDIT SYSTEM,
CREATE TABLE, DROP ANY TABLE, DELETE ANY TABLE,
LOCK ANY TABLE, UPDATE ANY TABLE, SELECT ANY
TABLE, CREATE VIEW, CREATE ROLE, ALTER ANY ROLE,
DROP ANY ROLE, ALTER SESSION, CREATE SEQUENCE,
CREATE PROCEDURE, CREATE TRIGGER, CREATE TYPE,
CREATE ROLLBACK SEGMENT, CREATE USER, etc.

Object_privileges: DDL (ALTER, REFERENCES, INDEX); DML


(INSERT, DELETE, UPDATE, SELECT); READ, EXECUTE, etc.

Roles predefinidos: CONNECT, RESOURCE, DBA,


EXP_FULL_DATABASE, IMP_FULL_DATABASE, etc.

Facultad de Ingeniera Industrial y de Sistemas


10-26 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 26
a. Confidencialidad. 2) Permisos y Roles
Sintaxis Oracle Roles:
Crear EJEMPLO
CREATE ROLE usuario_dbd NOT IDENTIFIED;

Borrar
EJEMPLO DROP ROLE usuario_dbd;

Activar/Desactivar roles para la sesin actual


SET ROLE usuario_dbd IDENTIFIED BY
pwd_usuario_dbd;
SET ROLE ALL;
SET ROLE ALL EXCEPT usuario_dbd;
SET ROLE NONE;

Facultad de Ingeniera Industrial y de Sistemas


10-27 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 27
a. Confidencialidad: 3) Perfiles

Objetivo: gestionar el uso de los recursos de la BD

Establecer recursos cuando se crea el usuario: un


tablespace por defecto, temporal, cuotas de espacio
y uso.

Limitar recursos:
A nivel de sesin: a cada sesin un determinado
tiempo de CPU, determinada cantidad de memoria.
A nivel de llamadas: ordenes SQL.

Facultad de Ingeniera Industrial y de Sistemas


10-28 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 28
a. Confidencialidad. 3) Perfiles

Sintaxis Oracle. Perfiles (1/2):

EJEMPLO

CREATE PROFILE perfil1 LIMIT


CPU_PER_CALL UNLIMITED;

Facultad de Ingeniera Industrial y de Sistemas


10-29 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 29
a. Confidencialidad. 3) Perfiles

Sintaxis Oracle. Perfiles (2/2). Ejemplos

Perfil p1 que limite el tiempo de acceso a CPU por


llamada a 3000 segundos.

Perfil p2 que limite el nmero de sesiones


concurrentes que puede abrir el usuario a 3 y que
limite tambin el tiempo de inactividad del usuario a
15 minutos.

Perfil p3 que limite el tiempo de CPU por sesin a


500000 segundos y que limite el tiempo de vida de su
contrasea a 50 das.

Facultad de Ingeniera Industrial y de Sistemas


10-30 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 30
b. Seguridad (Introduccin)

Objetivo: proteger los datos de accesos no autorizados


Quin puede estar interesado en atacar el sistema?
Un antiguo empleado recientemente despedido
Alguien externo a la organizacin
Un usuario del sistema que trata de obtener mayores
privilegios
Un hacker profesional con un propsito especfico

Actualizacin/Consulta
de Informacin
Violacin de Actualizacin/Consulta
Seguridad Autorizada

Facultad de Ingeniera Industrial y de Sistemas


10-31 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 31
b. Seguridad.
Tipos de Ataques

CLIENTE
DBMS

SO

DATOS

INTERNET

Facultad de Ingeniera Industrial y de Sistemas


10-32 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 32
b. Seguridad. Tipos de Ataques.

Ejemplos

Desbordamiento de memoria (buffer overflow).


Se basa en pasar como entrada a un programa ms
datos de los que espera recibir.
Esto permite escribir en una zona de memoria ms
all de la reservada (depende del S.O. entre otras
cosas).

Inyeccin de Cdigo SQL.


Consiste en incluir o modificar un comando SQL al
enviarlos al servidor.

Facultad de Ingeniera Industrial y de Sistemas


10-33 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 33
b. Seguridad. Auditoras

Para evitar posibles ataques como los anteriormente


descritos deben realizarse auditoras.
Propiedades:
Una auditora es una revisin de los permisos de
cada usuario y de los archivos del sistema con el
propsito de detectar riesgos de seguridad.
Una auditora completa no es un conjunto estricto
de validaciones a realizar, sino que evoluciona
segn los riesgos detectados.
Es una tarea ardua, consume mucho tiempo y no
asegura al 100% que el sistema est limpio.

Facultad de Ingeniera Industrial y de Sistemas


10-34 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 34
b. Seguridad. Auditoras

El recojo de informacin de auditora puede centrarse


en distintos elementos:
Sentencias SQL: Registro de los intentos de
conexin con la base de datos.
Privilegios: Consiste en recopilar las operaciones
que se han efectuado sobre la base de datos
(inserciones, borrados, modificaciones, etc.) y por
qu usuarios.
Objetos: Se pueden recoger operaciones realizadas
sobre determinados objetos de la base de datos.

Facultad de Ingeniera Industrial y de Sistemas


10-35 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 35
b. Seguridad. Auditoras

Sintaxis de Oracle. AUDIT Sql_statement_object_clause

EJEMPLO

AUDIT SELECT ON user303.tabla1

Facultad de Ingeniera Industrial y de Sistemas


10-36 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 36
b. Seguridad. Auditoras
Sintaxis de Oracle. AUDIT. Ejercicios
Sentencias SQL
Auditar cada vez que se cree, borre, modifique, etc.
cualquier role (ROLE)
Auditar cada vez que se cree, borre, modifique, etc.
cualquier role (ROLE) siempre que sea exitosa la
operacin.
Idem pero que la operacin no sea exitosa.
Auditar cada vez que se seleccione (SELECT) o
modifique (UPDATE) cualquier tabla.
Privilegios
Auditar cada vez que el usuario user303 o el usuario
user304 seleccione o modifique cualquier tabla
Objetos de Esquemas
Auditar cada vez que se borre (DELETE) en la tabla
tabla1 del usuario user303

Facultad de Ingeniera Industrial y de Sistemas


10-37 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 37
b. Seguridad. Auditoras

Sintaxis de Oracle. NOAUDIT

EJEMPLO

NOAUDIT SELECT ON user303.tabla1

Facultad de Ingeniera Industrial y de Sistemas


10-38 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 38
Registros de auditora

Se incluye la siguiente informacin:

Nombre del usuario


Indentificador del proceso
Indentificador de sesin
Indentificador de terminal
Nombre del objeto accesado.
Operacin llevada a cabo o intentada.
Fecha y hora (hasta decimas de segundo).
Privilegios del sistema utilizados.

Facultad de Ingeniera Industrial y de Sistemas


10-39 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 39
Registros de auditora (cont.)

Estos registros se almacenan en:

Una tabla llamada SYS.AUD$ (Database audit trail).

Archivos del Sistema Operativo (Operating system audit trail).

Facultad de Ingeniera Industrial y de Sistemas


10-40 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 40
c. Seguridad. Encriptacin

Facultad de Ingeniera Industrial y de Sistemas


10-41 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 41
c. Seguridad. Encriptacin

Diseado de manera que la encriptacin de los datos


sea algo fcil de hacer. Elimina la necesidad de
implementar rutinas de encriptacin en las
aplicaciones.

La base de datos Oracle encripta la informacin de


manera automtica antes de escribirla al disco.

Facultad de Ingeniera Industrial y de Sistemas


10-42 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 42
Transacciones

Concurencia a la Base de
Datos
Semana 14

Facultad de Ingeniera Industrial y de Sistemas Prof. Ing. Ponte Roca Miguel Angel 1
Facultad de 10-43
Ingeniera Industrial y de Sistemas Copyright OracleProfesor
Corporation, 2001.
Ing. Ponte Roca Todos los derechos reservados.
Miguel Angel 1
Objetivos

Al finalizar esta leccin, debera estar capacitado


para:
Controlar transacciones
Describir cada sentencia DML
Fusionar las filas de una tabla

Facultad de Ingeniera Industrial y de Sistemas


10-44 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 2
TRANSACCIONES

EL SERVIDOR ORACLE SE ASEGURA DE MANTENER


LA CONSISTENCIA DE DATOS A TRAVES DE LAS
TRANSACCIONES.

LAS TRANSACCIONES LE DAN MAYOR FLEXIBILIDAD


Y CONTROL CUANDO SE CAMBIAN LOS DATOS Y SE
ASEGURA DE MANTENER LA CONSISTENCIA DE LOS
DATOS EN EL EVENTO DEL PROCESO DEL USUARIO.

LAS TRANSACCIONES SON SENTENCIAS DEL


LENGUAJE DE MANIPULACION DE DATOS QUE
HACEN UN CAMBIO DE DATOS CONSISTENTE.

Facultad de Ingeniera Industrial y de Sistemas


10-45 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 3
TRANSACCIONES

UNA TRANSACCION SE INICIA CUANDO LA 1RA SENTENCIA


EJECUTABLE ES ENCONTRADA Y TERMINA CUANDO OCURRE
ALGUNA DE LAS SIGUIENTES ACCIONES:

SE EJECUTA UNA SENTENCIA COMMIT o ROLLBACK


ES EJECUTADA UNA SENTENCIA DDL (por ejemplo cuando se
crea o se elimina una Tabla)
SE EJECUTA UNA SENTENCIA GRANT o REVOKE
EL USUARIO SALE DEL SQL *plus o de cualquier editor SQL
LA MAQUINA O SISTEMA FALLA

DESPUES DE QUE UNA TRANSACCION TERMINE, LA


SIGUIENTE SENTENCIA EJECUTABLE AUTOMATICAMENTE
INICIA LA SIGUIENTE TRANSACCION.

Facultad de Ingeniera Industrial y de Sistemas


10-46 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 4
COMMIT

ES UNA SENTENCIA PARA TERMINAR UNA


TRANSACCION Y HACER QUE LOS CAMBIOS
REALIZADOS EN LA BASE DE DATOS SEAN
PERMANENTES.

NO SE REQUIEREN PRIVILEGIOS PARA REALIZAR


UN COMMIT;

Facultad de Ingeniera Industrial y de Sistemas


10-47 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 5
ROLLBACK

ELIMINA TODOS LOS CAMBIOS QUE HA RECIBIDO LA BASE


DE DATOS HASTA EL ULTIMO COMMIT.

TRANSACCION

INSERT UPDATE INSERT DELETE

COMMIT SAVEPOINT A SAVEPOINT B


ROLLBACK SAVEPOINT B

ROLLBACK SAVEPOINT A

ROLLBACK

Facultad de Ingeniera Industrial y de Sistemas


10-48 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 6
SAVEPOINT

SIRVE PARA IDENTIFICAR UN PUNTO DE UNA TRANSACCION A


LA QUE POSTERIORMENTE PODEMOS REGRESAR CON UN
ROLLBACK.

UPDATE emp SET sal = 2000 WHERE ename = 'BLAKE';


SAVEPOINT blake_sal;(ES UNA ETIQUETA)

UPDATE emp SET sal = 1500 WHERE ename = 'CLARK';


SAVEPOINT clark_sal;

SELECT SUM(sal) FROM emp;


ROLLBACK TO SAVEPOINT blake_sal;

UPDATE emp SET sal = 1200 WHERE ename = 'CLARK';


COMMIT;

Facultad de Ingeniera Industrial y de Sistemas


10-49 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 7
Transacciones de Base de Datos

Una transaccin de Base de Datos consta de


uno de los siguientes elementos:

Sentencias DML, que constituyen un cambio


consistente en los datos
Una sentencia DDL o
Una sentencia DCL

Facultad de Ingeniera Industrial y de Sistemas


10-50 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 8
Ventajas de las Sentencias
COMMIT y ROLLBACK

Con las sentencias COMMIT y ROLLBACK, usted puede:


Asegurar la consistencia de los datos
Realizar una presentacin preliminar de los cambios de datos
antes de hacer que estos sean permanentes
Agrupar las operaciones relacionadas lgicamente

Facultad de Ingeniera Industrial y de Sistemas


10-51 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 9
Control de Transacciones

Tiempo
COMMIT
Transaccin

DELETE
SAVEPOINT A
INSERT

UPDATE
SAVEPOINT B
INSERT ROLLBACK ROLLBACK ROLLBACK
to SAVEPOINT B to SAVEPOINT A

Facultad de Ingeniera Industrial y de Sistemas


10-52 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 10
Realizacin de Rollback de los
Cambios a un Marcador

Cree un marcador en una transaccin actual utilizando la


sentencia SAVEPOINT.
Realice rollback a dicho marcador utilizando la sentencia
ROLLBACK TO SAVEPOINT.

UPDATE...
SAVEPOINT update_done;
Savepoint created.
INSERT...
ROLLBACK TO update_done;
Rollback complete.

Facultad de Ingeniera Industrial y de Sistemas


10-53 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 11
Estado de los Datos
Antes de COMMIT o ROLLBACK

Se puede recuperar el estado anterior de los datos.


El usuario actual puede revisar los resultados de las operaciones
DML utilizando la sentencia SELECT.
Otros usuarios no pueden ver los resultados de las sentencias
DML del usuario actual.
Las filas afectadas se bloquean; otros usuarios no pueden
cambiar los datos de las filas afectadas.

Facultad de Ingeniera Industrial y de Sistemas


10-54 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 12
Estado de los Datos Despus de COMMIT

Los cambios de datos se hacen permanentes en la base


de datos.
El estado anterior de los datos se pierde
permanentemente.
Todos los usuarios pueden ver los resultados.
Los bloqueos de las filas afectadas se liberan; estas
filas estn disponibles para que otros usuarios las
manipulen.
Todos los puntos de grabacin se borran.

Facultad de Ingeniera Industrial y de Sistemas


10-55 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 13
Validacin de Datos

Realice los cambios.


DELETE FROM employees
WHERE employee_id = 99999;
1 row deleted.

INSERT INTO departments


VALUES (290, 'Corporate Tax', NULL, 1700);
1 row inserted.

Valide los cambios.


COMMIT;
Commit complete.

Facultad de Ingeniera Industrial y de Sistemas


10-56 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 14
Estado de los Datos Despus
de ROLLBACK

Deseche todos los cambios pendientes utilizando la


sentencia ROLLBACK:
Los cambios de datos se deshacen.
Se restaura el estado anterior de los datos.
Los bloqueos de las filas afectadas se liberan.
DELETE FROM copy_emp;
22 rows deleted.
ROLLBACK;
Rollback complete.

Facultad de Ingeniera Industrial y de Sistemas


10-57 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 15
Rollback a Nivel de Sentencia

Si una sola sentencia DML falla durante la ejecucin,


solamente se realiza rollback de dicha sentencia.
Oracle Server implementa un punto de grabacin
implcito.
Todos los dems cambios se retienen.
El usuario debe terminar las transacciones
explcitamente ejecutando una sentencia COMMIT o
ROLLBACK.

Facultad de Ingeniera Industrial y de Sistemas


10-58 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 16
Consistencia de Lectura

La consistencia de lectura garantiza una visualizacin


consistente de los datos en todo momento.
Los cambios realizados por un usuario no entran en
conflicto con los cambios realizados por otro usuario.
La consistencia de lectura asegura que en los mismos
datos:
Los lectores no esperan a los escritores.
Los escritores no esperan a los lectores.

Facultad de Ingeniera Industrial y de Sistemas


10-59 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 17
Implementacin de Consistencia
de Lectura
Usuario A
UPDATE employees Bloques
SET salary = 7000 de datos
WHERE last_name = 'Goyal';

Segmentos
de rollback

datos
SELECT * cambiados y
FROM Scott.employees; Imagen sin cambiar
consistente antes del
de lectura cambio
de datos
antiguos
Usuario B

Facultad de Ingeniera Industrial y de Sistemas


10-60 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 18
Bloqueo

En una base de datos Oracle, los bloqueos:


Evitan la interaccin destructiva entre transacciones
simultneas.
No requieren la accin del usuario.
Utilizan automticamente el nivel ms bajo de
restriccin.
Se mantienen durante la transaccin.
Son de dos tipos: bloqueo explcito y bloqueo implcito.

Facultad de Ingeniera Industrial y de Sistemas


10-61 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 19
Bloqueo Implcito

Dos modos de bloqueo:


Exclusivo: Bloquea a otros usuarios.
Compartido: Permite que accedan otros usuarios.
Alto nivel de simultaneidad de datos:
DML: Comparticin de tabla, exclusivo de fila.
Consultas: No se requieren bloqueos.
DDL: Protege definiciones de objetos.
Bloqueos mantenidos hasta validacin o rollback

Facultad de Ingeniera Industrial y de Sistemas


10-62 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 20
Lenguaje de Manipulacin de Datos

Se ejecuta una sentencia DML cuando:


Agrega filas nuevas a una tabla.
Modifica las filas existentes de una tabla.
Elimina filas existentes de una tabla.
Una transaccin consta de una recopilacin de
sentencias DML que forman una unidad de trabajo
lgica.

Facultad de Ingeniera Industrial y de Sistemas


10-63 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 21
Adicin de una Fila Nueva a una Tabla
Fila
DEPARTMENTS nueva

inserte una fila


nueva en la tabla
DEPARMENTS

Facultad de Ingeniera Industrial y de Sistemas


10-64 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 22
Sintaxis de la Sentencia INSERT

Agregue nuevas filas a una tabla mediante la sentencia


INSERT.

INSERT INTO table [(column [, column...])]


VALUES (value [, value...]);

Con esta sintaxis slo se inserta una fila cada vez.

Facultad de Ingeniera Industrial y de Sistemas


10-65 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 23
Insercin de Filas Nuevas

Inserte una fila nueva que contenga valores para cada


columna.
Enumere los valores en el orden por defecto de las
columnas de la tabla.
Opcionalmente, liste las columnas en la clusula
INSERT.
INSERT INTO departments(department_id, department_name,
manager_id, location_id)
VALUES (70, 'Public Relations', 100, 1700);
1 row created.
Escriba los valores de caracteres y de fecha entre
comillas simples.

Facultad de Ingeniera Industrial y de Sistemas


10-66 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 24
Insercin de Filas con Valores Nulos

Mtodo implcito: Omita la columna de la lista de


columnas.

INSERT INTO departments (department_id,


department_name )
VALUES (30, 'Purchasing');
1 row created.

Mtodo explcito: Especifique la palabra clave NULL en


la clusula VALUES.
INSERT INTO departments
VALUES (100, 'Finance', NULL , NULL);
1 row created.

Facultad de Ingeniera Industrial y de Sistemas


10-67 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 25
Insercin de Valores Especiales

La funcin SYSDATE registra la fecha y la hora


actuales.
INSERT INTO employees (employee_id,
first_name, last_name,
email, phone_number,
hire_date, job_id, salary,
commission_pct, manager_id,
department_id)
VALUES (113,
'Louis', 'Popp',
'LPOPP', '515.124.4567',
SYSDATE, 'AC_ACCOUNT', 6900,
NULL, 205, 100);
1 row created.

Facultad de Ingeniera Industrial y de Sistemas


10-68 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 26
Insercin de Valores de Fecha Especficos

Agregue un empleado nuevo.


INSERT INTO employees
VALUES (114,
'Den', 'Raphealy',
'DRAPHEAL', '515.127.4561',
TO_DATE('FEB 3, 1999', 'DD MON, YYYY'),
'AC_ACCOUNT', 11000, NULL, 100, 30);
1 row created.

Verifique la adicin.

Facultad de Ingeniera Industrial y de Sistemas


10-69 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 27
Creacin de un Archivo de Comandos

Utilice la sustitucin & en una sentencia SQL para


solicitar valores.
& es una variable pendiente de asignacin para el valor
de la variable. Ejemplo para SQL/Plus
INSERT INTO Scott.dept
(deptno, dname, loc)
VALUES (&deptno, '&dname', '&loc');

1 row created.

Facultad de Ingeniera Industrial y de Sistemas


10-70 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 28
Copia de Filas
desde otra Tabla

Escriba la sentencia INSERT con una subconsulta.


INSERT INTO sales_reps(id, name, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM employees
WHERE job_id LIKE '%REP%';

4 rows created.

No utilice la clusula VALUES.


Haga coincidir el nmero de columnas de la clusula
INSERT con el de la subconsulta.
Haga coincidir los tipos de datos para cada columna

Facultad de Ingeniera Industrial y de Sistemas


10-71 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 29
Cambio de los Datos de una Tabla
EMPLOYEES

Actualice las filas de la tabla EMPLOYEES.

Facultad de Ingeniera Industrial y de Sistemas


10-72 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 30
Uso de una Subconsulta en
una Sentencia INSERT
INSERT INTO
(SELECT empno, ename,job,mgr,
hiredate, sal,comm,
deptno
FROM scott.emp
WHERE deptno = 30)
VALUES (9999, 'Taylor', 'CLERK',7920,
TO_DATE('07-JUN-99', 'DD-MON-RR'),
5000,500, 30);

1 row created.

Facultad de Ingeniera Industrial y de Sistemas


10-73 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 31
Uso de una Subconsulta en
una Sentencia INSERT

Verifique
SELECT *FROMlos
SCOTT.EMP
resultados
WHERE DEPTNO=30;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO


7499 ALLEN SALESMAN 7698 20/02/1981 12:00:00 AM 1600 300 30

7521 WARD SALESMAN 7698 22/02/1981 12:00:00 AM 1250 500 30

7654 MARTIN SALESMAN 7698 28/09/1981 12:00:00 AM 1250 1400 30

7698 BLAKE MANAGER 7839 01/05/1981 12:00:00 AM 2850 30

7844 TURNER SALESMAN 7698 08/09/1981 12:00:00 AM 1500 0 30

7900 JAMES CLERK 7698 03/12/1981 12:00:00 AM 950 30

9999 Taylor CLERK 7920 07/06/1999 12:00:00 AM 5000 500 30

Facultad de Ingeniera Industrial y de Sistemas


10-74 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 32
La Sintaxis de la Sentencia UPDATE

Modifique las filas existentes con la sentencia UPDATE.

UPDATE table
SET column = value [, column = value, ...]
[WHERE condition];

Actualice ms de una fila cada vez si es necesario.

Facultad de Ingeniera Industrial y de Sistemas


10-75 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 33
Actualizacin de las Filas de una Tabla

Si incluye la clusula WHERE, las filas especficas se


modifican.
UPDATE employees
SET department_id = 70
WHERE employee_id = 113;
1 row updated.

Se modifican todas las filas de la tabla si omite la


clusula WHERE.
UPDATE copy_emp
SET department_id = 110;
22 rows updated.

Facultad de Ingeniera Industrial y de Sistemas


10-76 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 34
Actualizacin de Dos Columnas
con una Subconsulta

Actualice el cargo y el salario del empleado 114 para que


coincida con el del empleado 205 .
UPDATE employees
SET job_id = (SELECT job_id
FROM employees
WHERE employee_id = 205),
salary = (SELECT salary
FROM employees
WHERE employee_id = 205)
WHERE employee_id = 114;
1 row updated.

Facultad de Ingeniera Industrial y de Sistemas


10-77 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 35
Actualizacin de Filas
Basndose en otra Tabla

Utilice subconsultas en sentencias UPDATE para actualizar


las filas de una tabla basndose en valores de otra tabla.

UPDATE copy_emp
SET department_id = (SELECT department_id
FROM employees
WHERE employee_id = 100)
WHERE job_id = (SELECT job_id
FROM employees
WHERE employee_id = 200);
1 row updated.

Facultad de Ingeniera Industrial y de Sistemas


10-78 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 36
Eliminacin de una Fila de una Tabla
DEPARTMENTS

Suprima una fila de la tabla DEPARTMENTS

Facultad de Ingeniera Industrial y de Sistemas


10-79 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 37
La Sentencia DELETE

Puede eliminar las filas existentes de una tabla


utilizando la sentencia DELETE.

DELETE [FROM] table


[WHERE condition];

Facultad de Ingeniera Industrial y de Sistemas


10-80 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 38
Supresin de Filas de una Tabla

Se suprimen filas especficas si incluye la clusula


WHERE.
DELETE FROM departments
WHERE department_name = 'Finance';
1 row deleted.

Se suprimen todas las filas de la tabla si omite la


clusula WHERE.

DELETE FROM copy_emp;


22 rows deleted.

Facultad de Ingeniera Industrial y de Sistemas


10-81 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 39
Supresin de Filas Basndose
en otra Tabla

Utilice subconsultas en sentencias DELETE para eliminar


las filas de una tabla basndose en los valores de otra tabla.

DELETE FROM employees


WHERE department_id =
(SELECT department_id
FROM departments
WHERE department_name LIKE '%Public%');
1 row deleted.

Facultad de Ingeniera Industrial y de Sistemas


10-82 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 40
Supresin de Filas:
Error de Restriccin de Integridad

DELETE FROM departments


WHERE department_id = 60;

DELETE FROM departments


*
ERROR at line 1:
ORA-02292: integrity constraint (HR.EMP_DEPT_FK)
violated - child record found

Facultad de Ingeniera Industrial y de Sistemas


10-83 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 41
Visin General de la Funcin Valor
por Defecto Explcito

Con la funcin valor por defecto explcito, puede utilizar


la palabra clave DEFAULT como valor de columna donde
desee el valor por defecto de columna.
Esta funcin se agrega para asegurar el cumplimiento
con el estndar SQL: 1999.
Esto permite al usuario controlar dnde y cundo se
debe aplicar el valor por defecto a los datos.
Se pueden utilizar valores por defecto explcitos en
sentencias INSERT y UPDATE.

Facultad de Ingeniera Industrial y de Sistemas


10-84 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 42
Uso de Valores por Defecto Explcitos

DEFAULT con INSERT:


INSERT INTO departments
(department_id, department_name, manager_id)
VALUES (300, 'Engineering', DEFAULT);

DEFAULT con UPDATE:


UPDATE departments
SET manager_id = DEFAULT WHERE department_id = 10;

Facultad de Ingeniera Industrial y de Sistemas


10-85 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 43
Resumen

En esta leccin, debera haber aprendido a utilizar


sentencias DML y a controlar transacciones.
Sentencia Descripcin

INSERT Agrega una fila nueva a la tabla.

UPDATE Modifica las filas existentes de la tabla.

DELETE Elimina las filas existentes de la tabla.

COMMIT Hace que todos los cambios pendientes sean permanentes.

Se utiliza para realizar rollback en el marcador del punto de


SAVEPOINT
grabacin.
ROLLBACK Desecha todos los cambios de datos pendientes.

Facultad de Ingeniera Industrial y de Sistemas


10-86 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 44
Visin General de la Prctica 14

Esta prctica cubre los siguientes temas:


Insercin de filas en las tablas
Actualizacion y supresin de filas de la tabla
Control de transacciones

Facultad de Ingeniera Industrial y de Sistemas


10-87 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 45
Otros Objetos de la Base de
Datos
Semana 15

Facultad de Ingeniera Industrial y de Sistemas Prof. Ing. Ponte Roca Miguel Angel 1
Facultad de 10-88
Ingeniera Industrial y de Sistemas Copyright OracleProfesor
Corporation, 2001.
Ing. Ponte Roca Todos los derechos reservados.
Miguel Angel 1
Objetivos

Al finalizar esta leccin, debera estar capacitado para:


Crear, mantener y utilizar secuencias
Crear y mantener ndices
Crear sinnimos pblicos y privados

Facultad de Ingeniera Industrial y de Sistemas


10-89 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 2
Objetos de Base de Datos

Objeto Descripcin

Tabla Unidad bsica de almacenamiento; est


formada por filas y columnas.

Vista Representa lgicamente subjuegos de datos


de una o ms tablas.

Secuencia Genera valores de clave primaria.

ndice Mejora el rendimiento de algunas consultas.

Sinnimo Nombre alternativo para un objeto.

Facultad de Ingeniera Industrial y de Sistemas


10-90 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 3
Qu es una Secuencia?

Una secuencia:
Genera automticamente nmeros nicos.
Es un objeto compartible.
Normalmente se utiliza para crear un valor de
clave primaria.
Sustituye al cdigo de aplicacin.
Acelera la eficacia del acceso a los valores de
secuencia al almacenarse en memoria cach.

Facultad de Ingeniera Industrial y de Sistemas


10-91 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 4
Sintaxis de la Sentencia
CREATE SEQUENCE

Defina una secuencia para generar nmeros secuenciales


automticamente:

CREATE SEQUENCE sequence


[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];

Facultad de Ingeniera Industrial y de Sistemas


10-92 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 5
Creacin de una Secuencia

Cree una secuencia llamada DEPT_DEPTID_SEQ para


utilizarla para la clave primaria de la tabla
DEPARTMENTS.
No utilice la opcin CACHE y CYCLE.
CREATE SEQUENCE dept_deptid_seq
INCREMENT BY 10
START WITH 120
MAXVALUE 9990
NOCACHE
NOCYCLE;
Sequence created.

Facultad de Ingeniera Industrial y de Sistemas


10-93 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 6
Confirmacin de Secuencias

Verifique los valores de secuencia en la tabla


USER_SEQUENCES del diccionario de datos.

SELECT sequence_name, min_value, max_value,


increment_by, last_number
FROM user_sequences
[WHERE Condicion];

La columna LAST_NUMBER muestra el siguiente nmero


de secuencia disponible si se especifica NOCACHE.

Facultad de Ingeniera Industrial y de Sistemas


10-94 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 7
Pseudocolumnas NEXTVAL y CURRVAL

NEXTVAL devuelve el siguiente valor de


secuencia disponible. Devuelve un valor nico
cada vez que se hace referencia a ella, incluso
para usuarios distintos.
CURRVAL obtiene el valor de la secuencia
actual.
NEXTVAL se debe emitir para dicha secuencia
antes de que CURRVAL contenga un valor.

Facultad de Ingeniera Industrial y de Sistemas


10-95 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 8
Reglas para el Uso de NEXTVAL y CURRVAL
Puede utilizar NEXTVAL y CURRVAL en los siguientes casos:
La lista SELECT de una sentencia SELECT que no forme parte de una
subconsulta.
La lista SELECT de una subconsulta en una sentencia INSERT
La clusula VALUES de una sentencia INSERT
La clusula SET de una sentencia UPDATE
No puede utilizar NEXTVAL y CURRVAL en los siguientes casos:
La lista SELECT de una vista
Una sentencia SELECT con la palabra clave DISTINCT
Una sentencia SELECT con clusulas GROUP BY, HAVING u ORDER BY
Una subconsulta en una sentencia SELECT, DELETE o UPDATE
La expresin DEFAULT en una sentencia CREATE TABLE o ALTER
TABLE
Para obtener ms informacin, consulte Oracle11g SQL Reference,
seccin Pseudocolumns y CREATE SEQUENCE.

Facultad de Ingeniera Industrial y de Sistemas


10-96 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 8
Uso de una Secuencia

Para Insertar un nuevo departamento llamado Finanzas


en el identificador de localizacin 2500, utilice la siguiente
instruccin:
INSERT INTO departments(department_id,
department_name, location_id)
VALUES (dept_deptid_seq.NEXTVAL,
'Finanzas', 2500);
1 row created.

Para visualizar el valor actual para la secuencia


DEPT_DEPTID_SEQ, utilice la siguiente instruccin:
SELECT dept_deptid_seq.CURRVAL
FROM dual;

Facultad de Ingeniera Industrial y de Sistemas


10-97 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 10
Uso de una Secuencia

El almacenamiento en memoria cach de valores de


secuencia proporciona un acceso ms rpido a dichos
valores.
Los intervalos en los valores de secuencia se pueden
producir cuando:
Se realiza un rollback.
El sistema falla.
Se est utilizando una secuencia en otra tabla.
Si la secuencia se cre con NOCACHE, visualice el
siguiente valor disponible, consultando la tabla
USER_SEQUENCES.

Facultad de Ingeniera Industrial y de Sistemas


10-98 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 11
Modificacin de una Secuencia

Para cambiar el valor de aumento, el valor mximo, el valor


mnimo, la opcin de ciclo o la opcin de cach, utilice la
siguiente instruccin:

ALTER SEQUENCE dept_deptid_seq


INCREMENT BY 20
MAXVALUE 999999
NOCACHE
NOCYCLE;
Sequence altered.

Facultad de Ingeniera Industrial y de Sistemas


10-99 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 12
Instrucciones para la Modificacin
de una Secuencia

Debe ser el propietario o tener el privilegio ALTER


para la secuencia.
Slo se ven afectados los nmeros de secuencia
futuros.
Se debe borrar y volver a crear
la secuencia para reiniciarla en un nmero
diferente.
Se realiza alguna validacin.

Facultad de Ingeniera Industrial y de Sistemas


10-100 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 13
Eliminacin de una Secuencia

Elimine una secuencia del diccionario de datos


utilizando la sentencia DROP SEQUENCE.
Una vez que se ha eliminado, ya no se puede hacer
referencia a la secuencia.

DROP SEQUENCE dept_deptid_seq;


Sequence dropped.

Facultad de Ingeniera Industrial y de Sistemas


10-101 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 14
Qu es un ndice?

Un ndice:
Es un objeto de esquema.
Oracle Server lo utiliza para acelerar la recuperacin de
filas utilizando un puntero.
Puede reducir la E/S de disco mediante un mtodo de
ruta de acceso rpido para encontrar datos.
Es independiente de su tabla indexada.
Oracle Server lo utiliza y mantiene automticamente.

Facultad de Ingeniera Industrial y de Sistemas


10-102 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 15
Cmo Se Crean los ndices?

Automticamente: Un ndice nico se crea


automticamente al definir una restriccin UNIQUE o
PRIMARY KEY en una definicin de tabla.
Manualmente: Los usuarios pueden crear ndices no
nicos en columnas para acelerar el acceso a las filas.

Facultad de Ingeniera Industrial y de Sistemas


10-103 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 16
Creacin de un ndice

Cree un ndice en una o varias columnas.


CREATE INDEX index
ON table (column[, column]...);

Mejore la velocidad de acceso de consulta a la columna


LAST_NAME de la tabla EMPLOYEES.

CREATE INDEX emp_last_name_idx


ON employees(last_name);
Index created.

Facultad de Ingeniera Industrial y de Sistemas


10-104 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 17
Cundo Se Crea un ndice

Debe crear un ndice si:


Una columna contiene un amplio rango de valores.
Una columna contiene un gran nmero de valores
nulos.
Una o ms columnas se utilizan juntas frecuentemente
en una clusula WHERE o en una condicin de unin.
La tabla es grande y se espera que la mayora de las
consultas recuperen menos del 2 al 4 por ciento de las
filas.

Facultad de Ingeniera Industrial y de Sistemas


10-105 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 18
Cundo No Se Crea un ndice

Normalmente no merece la pena crear un ndice si:


La tabla es pequea.
Las columnas no se suelen utilizar como condicin en
la consulta.
Se espera que la mayora de las consultas recuperen
ms del 2 al 4 por ciento de las filas de la tabla.
La tabla se actualiza frecuentemente.
Se hace referencia a las columnas indexadas como
parte de una expresin.

Facultad de Ingeniera Industrial y de Sistemas


10-106 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 19
Confirmacin de ndices

La vista USER_INDEXES del diccionario de datos


contiene el nombre del ndice y su unicidad.
La vista USER_IND_COLUMNS contiene el nombre del
ndice, el nombre de la tabla y el nombre de la columna.

SELECT ic.index_name, ic.column_name,


ic.column_position col_pos,ix.uniqueness
FROM user_indexes ix, user_ind_columns ic
WHERE ic.index_name = ix.index_name
AND ic.table_name = 'EMP';

Facultad de Ingeniera Industrial y de Sistemas


10-107 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 20
ndices Basados en Funciones

Un ndice basado en funcin es un ndice basado en


expresiones.
La expresin de ndice se crea desde columnas de
tabla, constantes, funciones SQL y funciones definidas
por el usuario.

CREATE INDEX upper_dept_name_idx


ON departments(UPPER(department_name));

Index created.

SELECT *
FROM departments
WHERE UPPER(department_name) = 'SALES';

Facultad de Ingeniera Industrial y de Sistemas


10-108 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 21
Eliminacin de un ndice

Para eliminar un ndice del diccionario de datos utilice


el comando DROP INDEX.

DROP INDEX index;

Elimine el ndice UPPER_LAST_NAME_IDX del


diccionario de datos.
DROP INDEX upper_last_name_idx;
Index dropped.

Para borrar un ndice, debe ser el propietario del mismo


o tener el privilegio DROP ANY INDEX.

Facultad de Ingeniera Industrial y de Sistemas


10-109 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 22
Sinnimos

Simplifique el acceso a los objetos mediante la creacin de


un sinnimo (un objeto con otro nombre). Con los
sinnimos, puede:
Facilitar la referencia a una tabla propiedad de otro
usuario.
Reducir nombres largos de objeto (Tablas, Vistas, etc.)
CREATE [PUBLIC] SYNONYM synonym
FOR object;

Facultad de Ingeniera Industrial y de Sistemas


10-110 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 23
Creacin y Eliminacin de Sinnimos

Cree una abreviatura para la vista


DEPT_SUM_VU.

CREATE SYNONYM d_sum


FOR dept_sum_vu;
Synonym Created.

Borre un sinnimo.
DROP SYNONYM d_sum;
Synonym dropped.

Facultad de Ingeniera Industrial y de Sistemas


10-111 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 24
Resumen

En esta leccin, hemos aprendido a:


Generar nmeros de secuencias automticamente
utilizando un generador de secuencias.
Visualizar informacin de secuencia en la tabla
USER_SEQUENCES del diccionario de datos.
Crear ndices para mejorar la velocidad de recuperacin
de consulta.
Visualizar informacin de ndice en la tabla
USER_INDEXES del diccionario.
Utilizar sinnimos para proporcionar nombres
alternativos para objetos.

Facultad de Ingeniera Industrial y de Sistemas


10-112 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 25
Visin General de la Prctica 15

Esta prctica cubre los siguientes temas:


Creacin de secuencias
Uso de secuencias
Creacin de ndices no nicos
Visualizacin de informacin del diccionario de datos
acerca de secuencias e ndices
Borrado de ndices

Facultad de Ingeniera Industrial y de Sistemas


10-113 Copyright OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 26

You might also like