Está en la página 1de 113

Seguridad de la Base de

Datos

Semana 13

Facultad de10-1
Facultad de Ingeniería Industrial
Ingeniería 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 lección, usted estará capacitado
para:

• Crear y definir Usuarios


• Definir y manejar la Autorización de Usuarios
• Administrar los Perfiles de Usuarios
• Establecer Privilegios de Usuarios
• Crear y Establecer Roles
• Tener conocimiento del alcance de la
Auditoría.

Facultad de Ingeniería Industrial y de Sistemas


Facultad de10-2
Ingeniería 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
Autorización

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

– La aplicación da límites 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 Ingeniería Industrial y de Sistemas


Facultad de10-3
Ingeniería 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
Límites de recurso de usuario y perfiles (1)

• Es posible establecer límites en la cantidad de


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

• Se puede administrar los límites de recursos y


los passwords con perfiles.
– Perfil: conjunto de límites de recursos que
se asignan a un usuario.

• Puede haber un número ilimitado de perfiles.

Facultad de Ingeniería Industrial y de Sistemas


10-4 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 4
Límites de recurso de usuario y perfiles (2)
• Se puede controlar cada uno de los recursos ya sea a nivel de
sesión, a nivel de llamada o ambos.
– Nivel de sesión:
– Cuando un usuario se conecta a la BD se crea una
sesión.
– Si el usuario excede algún límite de recurso se
bloquea la sesión.

– Nivel de llamada:
– Para prevenir llamadas excesivas en la ejecución de
una sentencia SQL, se pueden establecer límites de
recursos.
– Si el límite es excedido se detiene la ejecución de la
sentencia y se envía un mensaje de error.

Facultad de Ingeniería Industrial y de Sistemas


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

Tipos de recursos que se pueden limitar, ejemplos:

– Tiempo de CPU

– Lecturas lógicas de los datos

– Número de sesiones simultáneas por usuario

– Tiempo ocioso de una sesión

– Tiempo transcurrido de una sesión

Facultad de Ingeniería Industrial y de Sistemas


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

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

– Proveen una fácil administración de los límites de


recursos.

– Se pueden crear diferentes perfiles.

– Un perfil predeterminado se utiliza para los usuarios


a los que no se les asigna explícitamente un perfil.

Facultad de Ingeniería Industrial y de Sistemas


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

• ¿Cuándo utilizar perfiles?


– Únicamente si los límites de recursos son
requerimientos de las políticas de seguridad para la
BD.

• Antes de crear los perfiles:


– Categorizar a los usuarios

– Determinar cuántos perfiles se necesitan

– Determinar los valores apropiados para cada límite


de recurso.

Facultad de Ingeniería 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 Ingeniería 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 explícitamente a un usuario.

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


uno o más usuarios.

Los Roles permiten una mejor y más fácil administración


de los privilegios.

Facultad de Ingeniería Industrial y de Sistemas


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

Facultad de Ingeniería 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 ningún nombre de usuario u objeto de
esquema.

• Un usuario que crea un rol puede ser eliminado sin


afectar el rol.

Facultad de Ingeniería 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 aplicación 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 aplicación:
 Establece los privilegios necesarios para ejecutar
una aplicación.

Facultad de Ingeniería 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
- Introducción
- Acceso a la base de datos (usuarios)
- Autorización de acceso a datos (permisos y roles)
- Uso de recursos del sistema (perfiles)

b. Seguridad
- Introducción
- Tipos de Ataques
- Auditorias

c. Encriptación

Facultad de Ingeniería Industrial y de Sistemas


10-14 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 14
a. Confidencialidad: Introducción
• 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 Contraseña.
 Identificación por Hardware
 Características bioantropométricas (huellas
dactilares, voz, retina)
 Conocimientos, aptitudes y hábitos 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 Ingeniería 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

• Definición:
– Esquema: colección de objetos (tablas, vistas, clusters,
procedimientos, paquetes, etc.)

Facultad de Ingeniería 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 Creación 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 Ingeniería 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 Creación de Usuarios (2/2):
 NOTA: Después de crear el usuario, hay que darle permisos para
que pueda acceder a los recursos de la BD.
 Los comandos necesarios para permitir la conexión 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 „María‟ 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 Ingeniería 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 Modificación 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
Ingeniería 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 Modificación de Usuarios (2/2):

– NOTA: Los mismos parámetros que la sentencia CREATE


USER + gestión de roles.

– EJEMPLOS:
1. Modificar el usuario „Pepe‟ identificado de forma interna
por el password „pepito‟ cuya cuenta expire.
2. Modificar el usuario „María‟ identificado de forma
externa con tablespace por defecto „espacio_infinito‟ y
espacio en este tablespace limitado a 30 MB. Además,
este usuario ha de tener el rol por defecto llamado
„rol_usuarios_habituales‟.

Facultad de Ingeniería 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 automáticamente TODOS los objetos del que


el usuario es propietario

EJEMPLO: DROP USER user303 CASCADE;

Facultad de Ingeniería 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.

• Definición:
– Permiso: privilegio de acceso a objetos de la BD
– Rol: conjunto de privilegios (agrupados).
– Simplificación en la gestión de privilegios

• ¿Quién 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
específica.
– El propietario del esquema tiene todos los privilegios sobre sus
objetos.

Facultad de Ingeniería 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 acción en cualquier esquema
– Conexión 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 información de la BD: SELECT
– …
– Clusters, índices, disparadores (Triggers), enlaces a
BD, etc.

Facultad de Ingeniería 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 acción en un objeto de
un esquema específico.
– Tablas, vistas, secuencias, procedimientos, funciones y
paquetes
– Privilegio SELECT, para obtener tuplas de la
relación.
– Privilegio MODIFY, para modificar tuplas de la
relación.
– UPDATE, actualización (también a atributos)
– DELETE, borrado
– INSERT, insertar (también a atributos)
– Privilegio REFERENCES, que confiere a la cuenta la
capacidad de hacer referencia a la relación al
especificar restricciones de integridad.

Facultad de Ingeniería 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 Ingeniería 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 Ingeniería 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 sesión actual


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

Facultad de Ingeniería 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 sesión: a cada sesión un determinado
tiempo de CPU, determinada cantidad de memoria.
– A nivel de llamadas: ordenes SQL.

Facultad de Ingeniería 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 Ingeniería 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 número de sesiones


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

– Perfil „p3‟ que limite el tiempo de CPU por sesión a


500000 segundos y que limite el tiempo de vida de su
contraseña a 50 días.

Facultad de Ingeniería Industrial y de Sistemas


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

• Objetivo: proteger los datos de accesos no autorizados


• ¿Quién puede estar interesado en atacar el sistema?
– Un antiguo empleado recientemente despedido
– Alguien externo a la organización
– Un usuario del sistema que trata de obtener mayores
privilegios
– Un hacker profesional con un propósito específico

Actualización/Consulta
de Información
Violación de Actualización/Consulta
Seguridad Autorizada

Facultad de Ingeniería 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 Ingeniería 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 más
datos de los que espera recibir.
– Esto permite escribir en una zona de memoria más
allá de la reservada (depende del S.O. entre otras
cosas).

• Inyección de Código SQL.


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

Facultad de Ingeniería Industrial y de Sistemas


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

• Para evitar posibles ataques como los anteriormente


descritos deben realizarse auditorías.
• Propiedades:
 Una auditoría es una revisión de los permisos de
cada usuario y de los archivos del sistema con el
propósito de detectar riesgos de seguridad.
 Una auditoría completa no es un conjunto estricto
de validaciones a realizar, sino que evoluciona
según los riesgos detectados.
 Es una tarea ardua, consume mucho tiempo y no
asegura al 100% que el sistema está “limpio”.

Facultad de Ingeniería Industrial y de Sistemas


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

• El recojo de información de auditoría puede centrarse


en distintos elementos:
– Sentencias SQL: Registro de los intentos de
conexión 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 Ingeniería Industrial y de Sistemas


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

• Sintaxis de Oracle. AUDIT Sql_statement_object_clause

EJEMPLO

AUDIT SELECT ON user303.tabla1

Facultad de Ingeniería Industrial y de Sistemas


10-36 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 36
b. Seguridad. Auditorías
• 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
operación.
– Idem pero que la operación 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 Ingeniería Industrial y de Sistemas


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

• Sintaxis de Oracle. NOAUDIT

EJEMPLO

NOAUDIT SELECT ON user303.tabla1

Facultad de Ingeniería Industrial y de Sistemas


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

Se incluye la siguiente información:

• Nombre del usuario


• Indentificador del proceso
• Indentificador de sesión
• Indentificador de terminal
• Nombre del objeto accesado.
• Operación llevada a cabo o intentada.
• Fecha y hora (hasta decimas de segundo).
• Privilegios del sistema utilizados.

Facultad de Ingeniería Industrial y de Sistemas


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

Estos registros se almacenan en:

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

• Archivos del Sistema Operativo (Operating system audit trail).

Facultad de Ingeniería Industrial y de Sistemas


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

Facultad de Ingeniería Industrial y de Sistemas


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

• Diseñado de manera que la encriptación de los datos


sea algo fácil de hacer. Elimina la necesidad de
implementar rutinas de encriptación en las
aplicaciones.

• La base de datos Oracle encripta la información de


manera automática antes de escribirla al disco.

Facultad de Ingeniería 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 Ingeniería Industrial y de Sistemas Prof. Ing. Ponte Roca Miguel Angel 1
Facultad de 10-43
Ingeniería Industrial y de Sistemas Copyright © OracleProfesor
Corporation, 2001.
Ing. Ponte Roca Todos los derechos reservados.
Miguel Angel 1
Objetivos

Al finalizar esta lección, debería estar capacitado


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

Facultad de Ingeniería 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 Ingeniería 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 Ingeniería 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 Ingeniería 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 Ingeniería 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 Ingeniería 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 transacción 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 Ingeniería 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 presentación preliminar de los cambios de datos
antes de hacer que estos sean permanentes
• Agrupar las operaciones relacionadas lógicamente

Facultad de Ingeniería 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
Transacción

DELETE
SAVEPOINT A
INSERT

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

Facultad de Ingeniería Industrial y de Sistemas


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

• Cree un marcador en una transacción 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 Ingeniería 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 Ingeniería Industrial y de Sistemas


10-54 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 12
Estado de los Datos Después 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 están disponibles para que otros usuarios las
manipulen.
• Todos los puntos de grabación se borran.

Facultad de Ingeniería Industrial y de Sistemas


10-55 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 13
Validación 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 Ingeniería Industrial y de Sistemas


10-56 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 14
Estado de los Datos Después
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 Ingeniería 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 ejecución,


solamente se realiza rollback de dicha sentencia.
• Oracle Server implementa un punto de grabación
implícito.
• Todos los demás cambios se retienen.
• El usuario debe terminar las transacciones
explícitamente ejecutando una sentencia COMMIT o
ROLLBACK.

Facultad de Ingeniería 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 visualización


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 Ingeniería Industrial y de Sistemas


10-59 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 17
Implementación 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 Ingeniería 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 interacción destructiva entre transacciones
simultáneas.
• No requieren la acción del usuario.
• Utilizan automáticamente el nivel más bajo de
restricción.
• Se mantienen durante la transacción.
• Son de dos tipos: bloqueo explícito y bloqueo implícito.

Facultad de Ingeniería Industrial y de Sistemas


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

• Dos modos de bloqueo:


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

Facultad de Ingeniería Industrial y de Sistemas


10-62 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 20
Lenguaje de Manipulación 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 transacción consta de una recopilación de
sentencias DML que forman una unidad de trabajo
lógica.

Facultad de Ingeniería Industrial y de Sistemas


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

…inserte una fila


nueva en la tabla
DEPARMENTS…

Facultad de Ingeniería 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 sólo se inserta una fila cada vez.

Facultad de Ingeniería Industrial y de Sistemas


10-65 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 23
Inserción 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 cláusula
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 Ingeniería Industrial y de Sistemas


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

• Método implícito: Omita la columna de la lista de


columnas.

INSERT INTO departments (department_id,


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

• Método explícito: Especifique la palabra clave NULL en


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

Facultad de Ingeniería Industrial y de Sistemas


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

La función 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 Ingeniería Industrial y de Sistemas


10-68 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 26
Inserción de Valores de Fecha Específicos

• 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 adición.

Facultad de Ingeniería Industrial y de Sistemas


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

• Utilice la sustitución & en una sentencia SQL para


solicitar valores.
• & es una variable pendiente de asignación 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 Ingeniería 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 cláusula VALUES.


• Haga coincidir el número de columnas de la cláusula
INSERT con el de la subconsulta.
• Haga coincidir los tipos de datos para cada columna

Facultad de Ingeniería 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 Ingeniería 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 Ingeniería 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 Ingeniería 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 más de una fila cada vez si es necesario.

Facultad de Ingeniería Industrial y de Sistemas


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

• Si incluye la cláusula WHERE, las filas específicas 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


cláusula WHERE.
UPDATE copy_emp
SET department_id = 110;
22 rows updated.

Facultad de Ingeniería Industrial y de Sistemas


10-76 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 34
Actualización 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 Ingeniería Industrial y de Sistemas


10-77 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 35
Actualización de Filas
Basándose en otra Tabla

Utilice subconsultas en sentencias UPDATE para actualizar


las filas de una tabla basándose 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 Ingeniería Industrial y de Sistemas


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

Suprima una fila de la tabla DEPARTMENTS

Facultad de Ingeniería 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 Ingeniería Industrial y de Sistemas


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

• Se suprimen filas específicas si incluye la cláusula


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

• Se suprimen todas las filas de la tabla si omite la


cláusula WHERE.

DELETE FROM copy_emp;


22 rows deleted.

Facultad de Ingeniería Industrial y de Sistemas


10-81 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 39
Supresión de Filas Basándose
en otra Tabla

Utilice subconsultas en sentencias DELETE para eliminar


las filas de una tabla basándose 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 Ingeniería Industrial y de Sistemas


10-82 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 40
Supresión de Filas:
Error de Restricción 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 Ingeniería Industrial y de Sistemas


10-83 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 41
Visión General de la Función Valor
por Defecto Explícito

• Con la función valor por defecto explícito, puede utilizar


la palabra clave DEFAULT como valor de columna donde
desee el valor por defecto de columna.
• Esta función se agrega para asegurar el cumplimiento
con el estándar SQL: 1999.
• Esto permite al usuario controlar dónde y cuándo se
debe aplicar el valor por defecto a los datos.
• Se pueden utilizar valores por defecto explícitos en
sentencias INSERT y UPDATE.

Facultad de Ingeniería 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 Explícitos

• 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 Ingeniería Industrial y de Sistemas


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

En esta lección, debería haber aprendido a utilizar


sentencias DML y a controlar transacciones.
Sentencia Descripción

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
grabación.
ROLLBACK Desecha todos los cambios de datos pendientes.

Facultad de Ingeniería Industrial y de Sistemas


10-86 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 44
Visión General de la Práctica 14

Esta práctica cubre los siguientes temas:


• Inserción de filas en las tablas
• Actualizacion y supresión de filas de la tabla
• Control de transacciones

Facultad de Ingeniería 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 Ingeniería Industrial y de Sistemas Prof. Ing. Ponte Roca Miguel Angel 1
Facultad de 10-88
Ingeniería Industrial y de Sistemas Copyright © OracleProfesor
Corporation, 2001.
Ing. Ponte Roca Todos los derechos reservados.
Miguel Angel 1
Objetivos

Al finalizar esta lección, debería estar capacitado para:


• Crear, mantener y utilizar secuencias
• Crear y mantener índices
• Crear sinónimos públicos y privados

Facultad de Ingeniería 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 Descripción

Tabla Unidad básica de almacenamiento; está


formada por filas y columnas.

Vista Representa lógicamente subjuegos de datos


de una o más tablas.

Secuencia Genera valores de clave primaria.

Índice Mejora el rendimiento de algunas consultas.

Sinónimo Nombre alternativo para un objeto.

Facultad de Ingeniería 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 automáticamente números únicos.
• Es un objeto compartible.
• Normalmente se utiliza para crear un valor de
clave primaria.
• Sustituye al código de aplicación.
• Acelera la eficacia del acceso a los valores de
secuencia al almacenarse en memoria caché.

Facultad de Ingeniería 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 números secuenciales


automáticamente:

CREATE SEQUENCE sequence


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

Facultad de Ingeniería Industrial y de Sistemas


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

• Cree una secuencia llamada DEPT_DEPTID_SEQ para


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

Facultad de Ingeniería Industrial y de Sistemas


10-93 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 6
Confirmación 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 número


de secuencia disponible si se especifica NOCACHE.

Facultad de Ingeniería 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 Ingeniería 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 cláusula VALUES de una sentencia INSERT
– La cláusula 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 cláusulas GROUP BY, HAVING u ORDER BY
– Una subconsulta en una sentencia SELECT, DELETE o UPDATE
– La expresión DEFAULT en una sentencia CREATE TABLE o ALTER
TABLE
– Para obtener más información, consulte Oracle11g SQL Reference,
sección “Pseudocolumns” y “CREATE SEQUENCE”.

Facultad de Ingeniería 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 localización 2500, utilice la siguiente
instrucción:
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 instrucción:
SELECT dept_deptid_seq.CURRVAL
FROM dual;

Facultad de Ingeniería 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 más rápido 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 Ingeniería Industrial y de Sistemas


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

Para cambiar el valor de aumento, el valor máximo, el valor


mínimo, la opción de ciclo o la opción de caché, utilice la
siguiente instrucción:

ALTER SEQUENCE dept_deptid_seq


INCREMENT BY 20
MAXVALUE 999999
NOCACHE
NOCYCLE;
Sequence altered.

Facultad de Ingeniería Industrial y de Sistemas


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

• Debe ser el propietario o tener el privilegio ALTER


para la secuencia.
• Sólo se ven afectados los números de secuencia
futuros.
• Se debe borrar y volver a crear
la secuencia para reiniciarla en un número
diferente.
• Se realiza alguna validación.

Facultad de Ingeniería Industrial y de Sistemas


10-100 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 13
Eliminación 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 Ingeniería 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 recuperación de
filas utilizando un puntero.
• Puede reducir la E/S de disco mediante un método de
ruta de acceso rápido para encontrar datos.
• Es independiente de su tabla indexada.
• Oracle Server lo utiliza y mantiene automáticamente.

Facultad de Ingeniería Industrial y de Sistemas


10-102 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 15
¿Cómo Se Crean los Índices?

• Automáticamente: Un índice único se crea


automáticamente al definir una restricción UNIQUE o
PRIMARY KEY en una definición de tabla.
• Manualmente: Los usuarios pueden crear índices no
únicos en columnas para acelerar el acceso a las filas.

Facultad de Ingeniería Industrial y de Sistemas


10-103 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 16
Creación 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 Ingeniería Industrial y de Sistemas


10-104 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 17
Cuándo Se Crea un Índice

Debe crear un índice si:


• Una columna contiene un amplio rango de valores.
• Una columna contiene un gran número de valores
nulos.
• Una o más columnas se utilizan juntas frecuentemente
en una cláusula WHERE o en una condición de unión.
• La tabla es grande y se espera que la mayoría de las
consultas recuperen menos del 2 al 4 por ciento de las
filas.

Facultad de Ingeniería Industrial y de Sistemas


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

Normalmente no merece la pena crear un índice si:


• La tabla es pequeña.
• Las columnas no se suelen utilizar como condición en
la consulta.
• Se espera que la mayoría de las consultas recuperen
más 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 expresión.

Facultad de Ingeniería Industrial y de Sistemas


10-106 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 19
Confirmación 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 Ingeniería 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 función es un índice basado en


expresiones.
• La expresión 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 Ingeniería Industrial y de Sistemas


10-108 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 21
Eliminación 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 Ingeniería Industrial y de Sistemas


10-109 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 22
Sinónimos

Simplifique el acceso a los objetos mediante la creación de


un sinónimo (un objeto con otro nombre). Con los
sinónimos, 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 Ingeniería Industrial y de Sistemas


10-110 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 23
Creación y Eliminación de Sinónimos

• Cree una abreviatura para la vista


DEPT_SUM_VU.

CREATE SYNONYM d_sum


FOR dept_sum_vu;
Synonym Created.

• Borre un sinónimo.
DROP SYNONYM d_sum;
Synonym dropped.

Facultad de Ingeniería Industrial y de Sistemas


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

En esta lección, hemos aprendido a:


• Generar números de secuencias automáticamente
utilizando un generador de secuencias.
• Visualizar información de secuencia en la tabla
USER_SEQUENCES del diccionario de datos.
• Crear índices para mejorar la velocidad de recuperación
de consulta.
• Visualizar información de índice en la tabla
USER_INDEXES del diccionario.
• Utilizar sinónimos para proporcionar nombres
alternativos para objetos.

Facultad de Ingeniería Industrial y de Sistemas


10-112 Copyright © OracleProf. Ing. Ponte Roca Miguel Angel
Corporation, 2001. Todos los derechos reservados. 25
Visión General de la Práctica 15

Esta práctica cubre los siguientes temas:


• Creación de secuencias
• Uso de secuencias
• Creación de índices no únicos
• Visualización de información del diccionario de datos
acerca de secuencias e índices
• Borrado de índices

Facultad de Ingeniería Industrial y de Sistemas


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

También podría gustarte