Documentos de Académico
Documentos de Profesional
Documentos de Cultura
D17090CS30
Edición 3.0
Noviembre de 2005
D50253
Autores Copyright © 2005, Oracle. Todos los derechos reservados.
Sandra Cheevers
Stefan Lindblad
Stella Kister
Steve Friedberg
Steven Karam
Sushma Jagannath
Tammy Bednar
Redactores
Navratan Singh
Nita Pavitran
Raj Kumar
Diseñadores Gráficos
Satish Bettegowda
Steve Elwood
Editor
Joseph Fernandez
Contenido
Prefacio
1 Introducción
Objetivos del Curso 1-2
Planificación Sugerida 1-3
Objetivos 1-4
Productos y Servicios Oracle 1-5
Base de Datos Oracle 10g: “g” Significa Grid 1-6
Arquitectura de la Base de Datos Oracle 1-8
Estructuras de Bases de Datos 1-9
iii
3 Creación de una Base de Datos Oracle
Objetivos 3-2
Planificación de la Base de Datos 3-3
Bases de Datos: Ejemplos 3-4
Asistente de Configuración de Bases de Datos (DBCA) 3-5
Uso de DBCA para Crear una Base de Datos 3-6
Password Management 3-12
Creación de una Plantilla de Diseño de Bases de Datos 3-13
Uso de DBCA para Suprimir una Base de Datos 3-14
iv
Vistas de Rendimiento Dinámico: Ejemplos de Uso 4-33
Vistas de Rendimiento Dinámico: Consideraciones 4-34
Resumen 4-35
Visión General de la Práctica: Gestión de la Instancia de Oracle 4-36
v
Revocación de Privilegios del Sistema con ADMIN OPTION 6-15
Revocación de Privilegios de Objeto con GRANT OPTION 6-16
Ventajas de los Roles 6-17
Asignación de Privilegios a Roles y de Roles a Usuarios 6-18
Roles Predefinidos 6-19
Creación de un Rol 6-20
Roles Seguros 6-21
Asignación de Roles a Usuarios 6-22
Perfiles y Usuarios 6-23
vi
¿Qué es una Vista? 7-35
Creación de Vistas 7-36
Secuencias 7-37
Creación de una Secuencia 7-38
Uso de una Secuencia 7-40
Tablas Temporales 7-41
Tablas Temporales: Consideraciones 7-43
Diccionario de Datos: Visión General 7-44
Vistas del Diccionario de Datos 7-45
vii
Resolución de Conflictos de Bloqueo mediante SQL 8-31
Interbloqueos 8-32
Resumen 8-33
Visión General de la Práctica: Gestión de Datos y Simultaneidad 8-34
viii
Mantenimiento de la Pista de Auditoría 10-27
Actualizaciones de Seguridad 10-28
Aplicación de Parches de Seguridad 10-29
Resumen 10-30
Visión General de la Práctica: Implementación de Seguridad de la Base de Datos Oracle 10-31
12 Mantenimiento Proactivo
Objetivos 12-2
Mantenimiento Proactivo 12-3
Introducción a la Terminología 12-4
ix
Estadísticas del Optimizador 12-5
Uso de la Página Manage Optimizer Statistics 12-7
Niveles de Estadísticas 12-9
Repositorio de Carga de Trabajo Automática (AWR) 12-10
Infraestructura de AWR 12-11
Juegos de Instantáneas AWR 12-12
Enterprise Manager y AWR 12-13
Gestión de AWR 12-14
Monitor de Diagnóstico de Base de Datos Automático (ADDM) 12-15
13 Gestión de Rendimiento
Objetivos 13-2
Control del Rendimiento 13-3
Control del Rendimiento: Top Sessions 13-7
Control del Rendimiento: Top Services 13-8
Asesor de Ajustes SQL: Visión General 13-9
Recomendaciones y Opciones del Asesor de Ajustes SQL 13-10
Uso del Asesor de Ajustes SQL 13-11
Uso del Asesor de Ajustes SQL: Ejemplo 13-12
Asesor de Ajustes SQL: Estadísticas SQL 13-13
Asesor de Ajustes SQL: Identificación de SQL Duplicados 13-14
Uso del Asesor de Acceso SQL 13-15
Gestión de los Componentes de la Memoria 13-17
Activación de la Gestión Automática de Memoria Compartida (ASMM) 13-18
Definición Manual de la Gestión de Memoria Compartida 13-20
x
Uso del Asesor de Memoria 13-21
Estadísticas de Rendimiento Dinámicas 13-22
Vistas de Solución de Problemas y de Ajustes 13-24
Objetos No Válidos o No Utilizables 13-25
Resumen 13-27
Visión General de la Práctica: Control y Mejora del Rendimiento 13-28
xi
Configuración de Valores de Copia de Seguridad 15-11
Planificación de Copias de Seguridad: Estrategia 15-14
Planificación de Copias de Seguridad: Options 15-15
Planificación de Copias de Seguridad: Settings 15-16
Planificación de Copias de Seguridad: Schedule 15-17
Planificación de Copias de Seguridad: Review 15-18
Copia de Seguridad del Archivo de Control en un Archivo de Rastreo 15-19
Gestión de Copias de Seguridad 15-21
Área de Recuperación de Flash 15-22
17 Realización de Flashback
Objetivos 17-2
Tecnología de Flashback: Ventajas 17-3
Cuándo Utilizar la Tecnología de Flashback 17-4
Realización de Flashback en Cualquier Error 17-5
Flashback de Base de Datos: Visión General 17-6
Flashback de Base de Datos: Reducción del Tiempo de Restauración 17-7
Flashback de Base de Datos: Consideraciones 17-8
Flashback de Base de Datos: Limitaciones 17-9
Activación de la Función de Flashback de Base de Datos 17-10
Flashback de Tabla: Visión General 17-11
Flashback de Tabla 17-12
Activación del Movimiento de Filas en una Tabla 17-13
Realización de Flashback de Tabla 17-14
Flashback de Tabla: Consideraciones 17-15
Flashback de Borrado: Visión General 17-17
xii
Flashback de Tablas Borradas mediante Enterprise Manager 17-18
Flashback de Borrado: Consideraciones 17-19
Acceso al Tiempo de Flashback 17-20
Consulta de Flashback: Visión General 17-21
Consulta de Flashback: Ejemplo 17-22
Consulta de Flashback de Versiones: Visión General 17-23
Consulta de Flashback de Versiones mediante Enterprise Manager 17-24
Consulta de Flashback de Versiones: Consideraciones 17-25
Consulta de Flashback de Transacciones: Visión General 17-26
18 Movimiento de Datos
Objetivos 18-2
Movimiento de Datos: Arquitectura General 18-3
Objeto de Directorio: Visión General 18-4
Creación de Objetos de Directorio 18-5
SQL*Loader: Visión General 18-6
Carga de Datos con SQL*Loader 18-8
Archivo de Control de SQL*Loader 18-9
Métodos de Carga 18-11
Pump de Datos: Visión General 18-13
Pump de Datos: Ventajas 18-15
Exportación e Importación de Pump de Datos: Visión General 18-17
Utilidad Pump de Datos: Interfaces y Modos 18-18
Selección de Objetos Detallada 18-19
Función Avanzada: Creación de Ejemplos 18-20
Opciones de Exportación: Archivos 18-21
Ubicaciones de los Archivos de Pump de Datos 18-22
Planificación y Ejecución de un Trabajo 18-24
Nomenclatura y Tamaño de los Archivos de Pump de Datos 18-25
Importación de Pump de Datos 18-26
Importación de Pump de Datos: Transformaciones 18-27
Pump de Datos: Consideración del Rendimiento 18-29
Parámetros de Inicialización de Rendimiento 18-30
Rutas de Acceso de Pump de Datos: Consideraciones 18-31
Uso de Enterprise Manager para Controlar Trabajos de Pump de Datos 18-32
Relleno de Tabla Externa 18-33
xiii
Uso de Tablas Externas 18-34
Relleno de Tabla Externa mediante ORACLE_DATAPUMP 18-35
Relleno de Tabla Externa mediante ORACLE_LOADER 18-36
Diccionario de Datos 18-37
Resumen 18-38
Visión General de la Práctica: Movimiento de Datos 18-39
Apéndice A: Prácticas
Apéndice B: Soluciones
Índice
xiv
Prefacio
Prefacio - 3
Publicaciones Relacionadas
Publicaciones de Oracle
Título Número de Artículo
Oracle Database 2 Day DBA 10g Release 2 (10.2) B14196-01
Oracle Database Administrator's Guide 10g Release 2 (10.2) B14231-01
Oracle Database Backup and Recovery Basics 10g Release 2 (10.2) B14192-01
Oracle Database Concepts 10g Release 2 (10.2) B14220-01
Oracle Database Licensing Information 10g Release 2 (10.2) B14199-01
Oracle Database Net Services Administrator's Guide 10g Release 2 (10.2) B14212-01
Oracle Database Net Services Reference 10g Release 2 (10.2) B14213-01
Oracle Database New Features Guide 10g Release 2 (10.2) B14214-01
Publicaciones Adicionales
• Boletines de las versiones del sistema
• Guías de instalación y del usuario
• Archivos léame
• Artículos del grupo internacional de usuarios de Oracle (International Oracle User’s Group, IOUG)
• Oracle Magazine
Prefacio - 4
Convenciones Tipográficas
Convenciones Tipográficas en el Texto
Mayúscula Etiquetas de los gráficos Dirección del cliente (salvo Oracle Payables)
inicial (a menos que el término
sea un nombre propio)
Prefacio - 5
Convenciones Tipográficas (continuación)
Convenciones Tipográficas en el Texto (continuación)
Prefacio - 6
Convenciones Tipográficas (continuación)
Convenciones Tipográficas en las Rutas de Acceso de Navegación
En este curso se utilizan rutas de acceso de navegación simplificadas, como el ejemplo siguiente, para guiarle
a través de Aplicaciones Oracle.
Ejemplo:
Prefacio - 7
Prefacio - 8
Oracle Internal & Oracle Academy Use Only
Introducción
9. Deshacer
10. Seguridad
11. Red
12. Mantenimiento Proactivo
Productos Oracle
• Bases de datos Oracle: La base de datos Oracle es la primera base de datos diseñada para
Enterprise Grid Computing (el modo más flexible y rentable de gestionar información y
aplicaciones).
• Oracle Application Server: El servidor certificado para plataforma Java 2 Enterprise
Edition (J2EE) de Oracle integra todo lo necesario para desarrollar y desplegar aplicaciones
basadas en Web. El servidor de aplicaciones despliega portales de comercio electrónico,
servicios Web y aplicaciones transaccionales que incluyen aplicaciones basadas en PL/SQL,
en Oracle Forms y en J2EE.
• Aplicaciones Oracle: Oracle E-Business Suite es un juego completo de aplicaciones de
negocio para gestionar y automatizar los procesos de la organización.
• Oracle Collaboration Suite: Oracle Collaboration Suite es un sistema integrado único para
todos los datos de comunicaciones de la organización: voz, correo electrónico, fax,
dispositivo móvil, información de agenda y archivos.
• Oracle Developer Suite: Oracle Development Suite es un completo entorno integrado que
combina herramientas de desarrollo de aplicaciones y de análisis de negocios.
• Servicios Oracle: Los servicios como Oracle Consulting y Oracle University proporcionan
los conocimientos necesarios para sus proyectos Oracle. Para obtener enlaces útiles a
diferentes recursos, consulte el apéndice titulado “Siguientes Pasos para Continuar con la
Formación”.
Un servidor de Oracle:
• Es un sistema de gestión de bases de datos que
proporciona un enfoque abierto, completo e
integrado a la gestión de información
• Consta de una instancia Oracle y una base de
Estructuras de proceso
Procesos en segundo plano
Caché de
Buffer de
Pool Java buffers de la
redo log
base de datos
Instancia
PGA
SGA
Proceso de Proceso
usuario de
servidor Procesos
en segundo plano
Estructuras de Proceso
Al llamar a un programa de aplicación o herramienta de Oracle, como Enterprise Manager,
el servidor de Oracle crea un proceso de servidor para ejecutar los comandos que emita la
aplicación. El servidor de Oracle también crea un juego de procesos en segundo plano para
una instancia que interactúan entre sí y con el sistema operativo para gestionar las estructuras
de memoria, realizar una E/S asíncrona para escribir datos en disco y llevar a cabo otras tareas
necesarias. El que estén presentes unos procesos en segundo plano u otros depende de las
funciones que se estén utilizando en la base de datos.
Pool Pool
Pool grande
compartido de Streams
DBWn
Archivos de datos
Tablespace USERS
Base de datos
Archivo
Esquema Tablespace
de datos
Extensión
JOBS
COUNTRIES JOB_ID (PK)
COUNTRY_ID (PK) JOB_TITLE
COUNTRY_NAME MIN_SALARY
JOB_HISTORY
REGION_ID (FK) MAX_SALARY EMPLOYEE_ID (PK)
START_DATE (PK)
END_DATE
JOB_ID (FK)
• Requisitos de memoria:
– 1 GB para la instancia con Database Control
• Requisitos de espacio en disco:
– 1,5 GB de espacio de intercambio
– 400 MB de espacio en disco en el directorio /tmp
– Entre 1,5 GB y 3,5 GB para el software de Oracle
• Espacio temporal
adecuado
• Problemas de
64 bits frente
a 32 bits
• Comprobaciones del sistema operativo correcto
Fin de la Instalación
10. Cuando termine el proceso de instalación, anote las direcciones URL para uso futuro.
• Almacén de Datos:
– Datos de marketing e investigación
– Pagos de impuestos estatales o regionales
– Licencias de profesionales (doctores, enfermeras, etc.)
• Procesamiento de Transacciones:
10
12
Password Management
Cuando termine DBCA, anote la siguiente información para referencia futura:
• Ubicación de los archivos log de instalación (A)
• Nombre de la base de datos global (B)
• Identificador del sistema (SID) (B)
• Ubicación y nombre del archivo de parámetros de servidor (B)
• Dirección URL de Enterprise Manager (C)
Haga clic en Password Management para desbloquear las cuentas de la base de datos que piensa
utilizar. Proporcione una contraseña cuando desbloquee una cuenta.
Agente o
de gestión bien
Database Listener
Control
Interfaz de gestión
Marco de Gestión
Hay tres componentes principales del marco de gestión de la base de datos Oracle:
• La instancia de base de datos que se está gestionando
• Un listener que permite las conexiones a la base de datos
• La interfaz de gestión. Puede ser un agente de gestión que se ejecute en el servidor de base
de datos (que se conecte a Oracle Enterprise Manager Grid Control) o la versión autónoma
de Oracle Enterprise Manager Database Control. También se denomina Consola de Base de
Datos.
Cada uno de estos componentes se debe iniciar explícitamente para poder utilizar los servicios
del componente y se debe cerrar limpiamente al cerrar el servidor que contiene la base de datos
Oracle.
El primer componente que se va a iniciar es la interfaz de gestión. Una vez que esté activada, la
interfaz de gestión se puede utilizar para iniciar los demás componentes.
Páginas de propiedades
Uso de iSQL*Plus
iSQL*Plus es una interfaz basada en explorador para una base de datos Oracle. Es un
componente del producto SQL*Plus. iSQL*Plus dispone de un proceso del listener del servidor
que se debe iniciar para poder conectarse a un explorador. Para iniciar este proceso de servidor,
utilice:
isqlplusctl start
Una vez iniciado el proceso de servidor, especifique la siguiente URL en un explorador para
conectarse a él:
http://nombre_host:puerto/isqlplus
El número de puerto utilizado por iSQL*Plus suele ser 5560 a menos que Oracle Universal
Installer (OUI) detecte algo que ya esté utilizando dicho puerto. Busque en
$ORACLE_HOME/install/portlist.ini el puerto que utiliza iSQL*Plus.
SQL*Plus:
• Es una herramienta de línea de comandos
• Se utiliza de forma interactiva o en modo de lotes
$ sqlplus hr/hr
LAST_NAME
-------------------------
Abel
Ande
Atkinson
Uso de SQL*Plus
Puede utilizar la interfaz de línea de comandos para que SQL*Plus escriba comandos SQL*Plus,
SQL y PL/SQL para lo siguiente:
• Introducir, editar, ejecutar, almacenar, recuperar y guardar comandos SQL y bloques
PL/SQL
• Formatear, calcular, almacenar e imprimir resultados de consultas
• Enumerar definiciones de columna para cualquier tabla
• Enviar mensajes a un usuario final y aceptar sus respuestas
• Realizar la administración de la base de datos
Para iniciar SQL*Plus, realice los siguientes pasos:
1. Abra una ventana de terminal.
2. En el prompt de la línea de comandos, introduzca el comando SQL*Plus con el formato:
$ sqlplus /nolog
3. Introduzca connect seguido del usuario que desea utilizar para conectarse.
4. Cuando se le indique, introduzca la contraseña del usuario.
SQL*Plus se inicia y se conecta a la base de datos por defecto.
Salida
$ sqlplus hr/hr @script.sql
Básicos Avanzados
MOUNT
Se inicia
la instancia
SHUTDOWN
MOUNT
El archivo de
control se abre
Modo de Cierre A I T N
Modo de cierre:
• A = ABORT
• I = IMMEDIATE
• T = TRANSACTIONAL
• N = NORMAL
Modos de Cierre
Los modos de cierre se ajustan progresivamente a la actividad actual según el siguiente orden:
• ABORT: Realiza la cantidad mínima de trabajo antes del cierre. Puesto que esta opción
necesita recuperación antes del inicio, utilícela sólo cuando sea necesario. Normalmente se
utiliza cuando no funciona ninguna otra forma de cierre, cuando hay problemas al iniciar la
instancia o cuando necesita cerrar inmediatamente porque se ha producido una situación
inminente, como el aviso de un corte del suministro eléctrico en unos segundos.
• IMMEDIATE: Es la opción que más se utiliza. Se realiza un rollback de las transacciones
sin confirmar.
• TRANSACTIONAL: Permite que finalicen las transacciones.
• NORMAL: Espera a que las sesiones se desconecten.
Si considera la cantidad de tiempo que se tarda en realizar el cierre, descubrirá que ABORT es el
método más rápido y que NORMAL es el más lento.
Opciones de SHUTDOWN
SHUTDOWN NORMAL
El modo de cierre por defecto es normal. El cierre normal de la base de datos continúa con las
condiciones siguientes:
• No se pueden realizar nuevas conexiones.
• El servidor de Oracle espera a que todos los usuarios se desconecten antes de completar el
cierre.
• Los buffers de la base de datos y de redo se escriben en disco.
• Los procesos en segundo plano se terminan y el SGA se elimina de la memoria.
• El servidor de Oracle cierra y desmonta la base de datos antes de cerrar la instancia.
• El siguiente inicio no necesita recuperación de instancias.
SHUTDOWN TRANSACTIONAL
Un cierre transaccional impide que los clientes pierdan los datos, incluyendo los resultados de su
actividad actual. El cierre transaccional de la base de datos continúa con las condiciones
siguientes:
• Ningún cliente puede iniciar una nueva transacción en esta instancia en particular.
• Un cliente se desconecta cuando el cliente finaliza la transacción en curso.
• Cuando han finalizado todas las transacciones, se produce inmediatamente un cierre.
• El siguiente inicio no necesita recuperación de instancias.
Esto le permite incluir las operaciones de inicio y cierre como parte de un archivo de comandos
o un proceso por lotes que realice tareas en la base de datos, para las que es necesario que la base
de datos se encuentre en un estado específico.
Etc.
Instancia de Oracle
Base de datos
Archivo del
Tablespace
sistema operativo
Extensión
Estructuras de Almacenamiento
Una base de datos se divide en unidades lógicas de almacenamiento denominadas tablespaces.
Cada tablespace se compone de muchos bloques lógicos de datos de Oracle. El parámetro
DB_BLOCK_SIZE especifica el tamaño que tiene un bloque lógico. El rango de tamaño de un
bloque lógico es de 2 KB a 32 KB. El tamaño por defecto es 8 KB. Un número determinado de
bloques lógicos contiguos constituye una extensión. Un juego de extensiones que se asignan
según una estructura lógica concreta constituye un segmento. Un bloque de datos de Oracle
representa la unidad más pequeña de E/S lógica.
Columnas Bloques
Tabla A Tabla B
Filas
Segmento Segmento
Cabecera de bloque
Crecimiento
Espacio libre
• SYSTEM • UNDOTBS1
• SYSAUX • USERS
• TEMP • EXAMPLE
Modificación de un Tablespace
Después de crear un tablespace, puede modificarlo de varios modos a medida que cambian las
necesidades del sistema.
Cambio de nombre: Introduzca un nuevo nombre para el tablespace y haga clic en Apply.
Cambio del estado: Un tablespace puede tener tres estados distintos. Cualquiera de los tres estados
siguientes puede no estar disponible ya que su disponibilidad depende del tipo de tablespace:
• Read Write: El tablespace está online y se puede leer y escribir en él.
• Read Only: Especifique Read Only para poner el tablespace en el modo de sólo lectura de
transición. En este estado, se pueden realizar las transacciones existentes (de confirmación o
de rollback), pero no se permiten otras operaciones de lenguaje de manipulación de datos
(DML) en los objetos del tablespace. El tablespace está online mientras tiene el estado de sólo
lectura. No puede hacer que el tablespace SYSTEM o SYSAUX sea de sólo lectura.
Borrado de Tablespaces
Puede borrar un tablespace y su contenido (los segmentos incluidos en el tablespace) de la base
de datos si el tablespace y su contenido ya no son necesarios. Debe tener el privilegio del sistema
DROP TABLESPACE para borrar un tablespace.
Cuando borra un tablespace, se eliminan los punteros al archivo del archivo de control de la base
de datos asociada. Opcionalmente puede indicar al servidor de Oracle que suprima los archivos
del sistema operativo (archivos de datos) que constituyen el tablespace borrado. Si no indica al
servidor de Oracle que suprima los archivos de datos al mismo tiempo que el tablespace, deberá
utilizar posteriormente los comandos adecuados del sistema operativo si desea suprimirlos.
No puede borrar un tablespace que contenga segmentos activos. Por ejemplo, si se está utilizando
actualmente una tabla del tablespace o el tablespace contiene datos de deshacer necesarios para
realizar un rollback de transacciones sin confirmar, no puede borrar el tablespace. El tablespace
puede estar online u offline, pero es mejor que se ponga offline antes de borrarlo.
12061_1_sel_ts_3
SYSTEM INVENTORY
tablespace tablespace
ASM
• Segmenta los archivos, pero no los volúmenes
lógicos
• Permite la reconfiguración y nuevo equilibrio
dinámico de discos online
Grupo de
Base de datos
discos de ASM
Archivo Archivo
Tablespace
de datos de ASM
ASM: Conceptos
ASM no elimina ninguna de las funciones existentes de la base de datos. Las bases de datos
existentes siguen funcionando como siempre. Puede crear nuevos archivos como archivos de
ASM y dejar que los archivos existentes se administren del modo anterior, o bien puede
migrarlos a ASM.
En el diagrama de la diapositiva se representan las relaciones que existen entre los diversos
componentes de almacenamiento dentro de una base de datos Oracle que utiliza ASM. Las partes
izquierda y central del diagrama muestran las relaciones que existen en versiones anteriores.
En la derecha se encuentran los nuevos conceptos introducidos con ASM.
Los archivos de base de datos se pueden almacenar como archivos de ASM. La cabeza de la
nueva jerarquía la ocupan los grupos de discos de ASM. Todos los archivos de ASM están en un
único grupo de discos. Por el contrario, un grupo de discos puede contener archivos que
pertenezcan a varias bases de datos y una única base de datos puede utilizar almacenamiento de
varios grupos de discos. Como puede observar, un grupo de discos está formado por varios
discos de ASM y cada disco de ASM pertenece a un único grupo de discos. Los archivos de
ASM siempre se distribuyen por todos los discos de ASM del grupo. Los discos de ASM están
particionados en unidades de asignación de un megabyte. La unidad de asignación constituye el
espacio de disco contiguo más pequeño que asigna ASM. ASM no permite dividir un bloque de
Oracle en unidades de asignación.
Nota: El gráfico sólo tiene que ver con un tipo de archivo de ASM: archivo de datos. Sin
embargo, ASM se puede utilizar para almacenar otros tipos de archivos de base de datos.
Objetivos
Los siguientes términos están relacionados con la administración de usuarios de base de datos y
le ayudarán a comprender los objetivos:
Una cuenta de usuario de base de datos es un medio de organizar la propiedad y el acceso a
objetos de base de datos.
Una contraseña es una autenticación por parte de la base de datos Oracle.
Un privilegio es un derecho para ejecutar un tipo concreto de sentencia SQL o para acceder a un
objeto de otro usuario.
Un rol es un grupo con nombre de privilegios relacionados que se otorgan a los usuarios o a
otros roles.
Los perfiles imponen un juego con nombre de límites de recursos en cuanto al uso de la base de
datos y de los recursos de la instancia.
La cuota es un espacio asignado en un tablespace determinado. Es uno de los métodos mediante
el cual puede controlar el uso de recursos por parte de los usuarios.
• La cuenta SYS:
– Tiene el rol DBA otorgado
– Tiene todos los privilegios con ADMIN OPTION
– Es necesaria para el inicio, el cierre y para algunos
comandos de mantenimiento
Creación de un Usuario
En Enterprise Manager, puede gestionar la lista de usuarios de base de datos que pueden acceder
a la base de datos actual mediante la página Users. Puede utilizar esta página para crear, suprimir
y modificar los valores de un usuario.
Para crear un usuario de base de datos, realice los siguientes pasos:
1. En Enterprise Manager Database Control, seleccione Administration > Schema > Users &
Privileges > Users.
2. Haga clic en el botón Create.
Proporcione la información necesaria. Los elementos obligatorios, como Name, aparecen
marcados con un asterisco.
Las siguientes páginas le proporcionan más información sobre la autenticación. Los perfiles se
tratarán más adelante en esta lección.
Asigne un tablespace por defecto y un tablespace temporal a cada usuario. De esta forma puede
controlar dónde se crean sus objetos, en el caso de que los usuarios no especifiquen un
tablespace durante la creación de un objeto.
Si no selecciona un tablespace por defecto, se utiliza el permanente por defecto definido por el
sistema. Lo mismo sucede con el tablespace temporal: si no especifica ninguno, se utiliza el
tablespace temporal definido por el sistema.
Autenticación de Usuarios
La autenticación significa verificar la identidad de alguien (un usuario, dispositivo u otra
entidad) que desea utilizar datos, recursos o aplicaciones. La validación de dicha identidad
establece una relación de confianza para una mayor interacción. La autenticación también
permite establecer responsabilidades al posibilitar el enlace de acceso y acciones con
identidades concretas. Tras la autenticación, los procesos de autorización pueden permitir o
limitar los niveles de acceso y acción permitidos para dicha entidad.
Al crear un usuario, debe decidir la técnica de autenticación que se va a utilizar y que se podrá
modificar posteriormente.
Password: También denominada autenticación por la base de datos Oracle. Cree cada usuario
con una contraseña asociada que se debe proporcionar cuando el usuario intente establecer una
conexión. Al configurar una contraseña, puede establecer que venza inmediatamente, lo que
obliga al usuario a cambiar la contraseña después de la primera conexión. Si decide utilizar el
vencimiento de contraseñas de usuario, asegúrese de que los usuarios pueden cambiar la
contraseña. Algunas aplicaciones no tienen esta función.
Las contraseñas siempre se cifran de forma automática y transparente durante las conexiones de
red (cliente/servidor y servidor/servidor) mediante un algoritmo modificado Data Encryption
Standard (DES) antes de enviarlas por la red.
Autenticación de Administradores
Seguridad del Sistema Operativo: En UNIX y Linux, por defecto, los DBA pertenecen al
grupo del sistema operativo install, que posee los privilegios necesarios para crear y
suprimir archivos de base de datos.
Seguridad del Administrador: Las conexiones SYSBA y SYSOPER se autorizan únicamente
después de la verificación con el archivo de contraseñas o con los privilegios y los permisos
del sistema operativo. Si se utiliza la autenticación del sistema operativo, la base de datos no
utiliza el nombre de usuario y contraseña proporcionados. La autenticación del sistema
operativo se utiliza si no existe archivo de contraseñas, si el nombre de usuario o la contraseña
proporcionados no están en ese archivo o si no se proporciona ningún nombre de usuario y
contraseña.
No obstante, si la autenticación se produce mediante el archivo de contraseñas, la conexión se
registra con el nombre de usuario. Si la autenticación se produce a través del sistema
operativo, entonces es una conexión CONNECT / que no registra el usuario concreto.
Nota: La autenticación del sistema operativo tiene prioridad sobre la autenticación del archivo
de contraseñas. En concreto, si es miembro del grupo OSDBA u OSOPER del sistema
operativo y se conecta como SYSDBA o SYSOPER, lo hará con los privilegios administrativos
asociados independientemente del nombre de usuario y contraseña que especifique.
Privilegios
Un privilegio es un derecho para ejecutar un tipo concreto de sentencia SQL o para acceder a un
objeto de otro usuario. La base de datos Oracle le permite controlar lo que los usuarios pueden o
no pueden hacer en la base de datos. Los privilegios se dividen en dos categorías:
• Privilegios del sistema: Cada privilegio del sistema permite a un usuario realizar una
operación de base de datos concreta o una clase de operaciones de base de datos. Por
ejemplo, el privilegio para crear tablespaces es un privilegio del sistema. Estos privilegios
los puede otorgar el administrador o alguien a quién se le haya proporcionado
explícitamente permiso para administrar el privilegio. Existe más de cien privilegios del
sistema distintos. Muchos de ellos contienen la cláusula ANY.
• Privilegios de objeto: Los privilegios de objeto permiten a un usuario realizar una acción
concreta en un objeto determinado, como una tabla, una vista, una secuencia, un
procedimiento, una función o un paquete. Sin el permiso concreto, los usuarios sólo pueden
acceder a sus propios objetos. Estos privilegios los puede otorgar el propietario de un
objeto, el administrador o alguien al que se le haya proporcionado explícitamente permiso
para otorgar privilegios sobre el objeto.
Privilegios de Objeto
Para otorgar privilegios de objeto, haga clic en el separador Object Privileges de la página Edit
User. Seleccione el tipo de objeto para el que desea otorgar los privilegios y haga clic en el botón
Add. Para seleccionar los objetos para los que desea otorgar privilegios, introduzca
<nombre_usuario.nombre_objeto> o selecciónelos en la lista.
A continuación, seleccione los privilegios adecuados de la lista Available Privileges y haga clic
en el botón Move. Cuando termine de seleccionar los privilegios, haga clic en OK.
De nuevo en la página Edit User, active la casilla de control Grant si este usuario puede otorgar
el mismo acceso a otros usuarios.
OTORGAR
Privilegio
Objeto
REVOKE CREATE
TABLE FROM jeff;
Usuarios
Jenny David Rachel
Roles HR_CLERK
Insertar
empleados.
Roles Predefinidos
Existen varios roles definidos automáticamente para bases de datos Oracle al ejecutar los
archivos de comandos de creación de bases de datos. CONNECT se otorga automáticamente a
cualquier usuario creado con Enterprise Manager. En versiones anteriores de la base de datos
(antes de la base de datos Oracle 10g Versión 2), el rol CONNECT incluía más privilegios, como
CREATE TABLE y CREATE DATABASE LINK, que se han eliminado por motivos de seguridad.
Nota: Tenga en cuenta que al otorgar el rol RESOURCE también se otorga el privilegio
UNLIMITED TABLESPACE.
Roles Funcionales
Se crean otros roles que le autorizan a administrar funciones especiales, cuando se instala esta
función. Por ejemplo, XDBADMIN contiene los privilegios necesarios para administrar la base de
datos XML (Extensible Markup Language) si esta función está instalada.
AQ_ADMINISTRATOR_ROLE proporciona privilegios para administrar el servicio de gestión de
colas avanzada. HS_ADMIN_ROLE incluye los privilegios necesarios para administrar servicios
heterogéneos. No debe modificar los privilegios otorgados a estos roles funcionales sin la ayuda
de los Servicios de Soporte Oracle porque podría desactivar involuntariamente funciones
necesarias.
Creación de un Rol
Un rol es un grupo con nombre de privilegios relacionados que se otorgan a los usuarios o a
otros roles. Un DBA gestiona los privilegios mediante roles.
Para crear un rol, realice los siguientes pasos:
1. En Enterprise Manager Database Control, seleccione Administration > Schema > Users &
Privileges > Roles.
2. Haga clic en el botón Create.
Roles Seguros
Los roles se suelen activar por defecto, lo que significa que si un rol se otorga a un usuario,
dicho usuario puede ejercer los privilegios asignados al rol. Es posible:
• Hacer que un rol no sea por defecto. Cuando el rol se otorga a un usuario, desactive la
casilla de control DEFAULT. El usuario debe ahora activar explícitamente el rol para
poder ejercer los privilegios de dicho rol.
• Exigir la autenticación adicional de un rol. La autenticación por defecto de un rol es None,
pero es posible exigir la autenticación adicional del rol para poder definirlo.
• Crear roles de aplicación seguros que se puedan activar sólo mediante la ejecución correcta
de un procedimiento PL/SQL. El procedimiento PL/SQL puede comprobar varias cosas
como, por ejemplo, la dirección de red del usuario, qué programa está ejecutando el
usuario, la hora del día o cualquier otro elemento necesario para proteger de forma
adecuada un grupo de permisos.
Perfiles y Usuarios
Los perfiles imponen un juego con nombre de límites de recursos en cuanto al uso de la base de
datos y de los recursos de la instancia. Los perfiles también gestionan el estado de las cuentas y
establecen limitaciones en cuanto a las contraseñas de usuarios (longitud, fecha de vencimiento,
etc.). Cada uno de los usuarios se asigna a un perfil y puede pertenecer sólo a un perfil en un
momento determinado. Si los usuarios ya se han conectado cuando cambia su perfil, el cambio no
se aplica hasta la siguiente conexión.
El perfil por defecto sirve como base para todos los demás perfiles. Como se ilustra en la diapositiva,
las limitaciones para un perfil pueden estar especificadas implícitamente (como en CPU/Session),
ser ilimitadas (como en CPU/Call) o hacer referencia al valor del perfil por defecto (como en
Connect Time).
Los perfiles no pueden imponer limitaciones de recursos a los usuarios a menos que el parámetro de
inicialización RESOURCE_LIMIT esté definido en TRUE. Si RESOURCE_LIMIT tiene su valor
por defecto FALSE, se ignoran las limitaciones del perfil.
Los perfiles permiten al administrador controlar los siguientes recursos del sistema:
• CPU: Los recursos de CPU pueden estar limitados por sesión o por llamada. Una limitación de
CPU/Session de 1.000 significa que si una sesión concreta que utiliza este perfil consume más
de 10 segundos de tiempo de CPU (las limitaciones de tiempo de CPU se miden en centésimas
de segundo), dicha sesión recibe un error y se desconecta:
ORA-02392: exceeded session limit on CPU usage, you are being
logged off
Verificación de la
Historial de complejidad de
contraseñas las contraseñas
Antigüedad y Bloqueo de
vencimiento de cuentas
contraseñas
Nota: No utilice perfiles que provoquen el vencimiento de las
contraseñas SYS, SYSMAN, y DBSNMP y el bloqueo de las cuentas.
Esquema HR
Usuario HR
¿Qué es un Esquema?
Un esquema es una recopilación de objetos de base de datos propiedad de un usuario en
particular. Normalmente, en una base de datos de producción, este usuario no representa una
persona, sino una aplicación. Un esquema tiene el mismo nombre que el usuario propietario del
esquema. Los objetos de esquema son estructuras lógicas que hacen referencia directa a datos de
la base de datos. Los objetos de esquema incluyen estructuras como tablas, vistas e índices.
Puede crear y manipular objetos de esquema mediante SQL o Enterprise Manager. Cuando
utiliza Enterprise Manager, el SQL subyacente se genera automáticamente.
Nota: Un esquema no tiene que estar relacionado necesariamente de forma directa con un
tablespace. Puede definir configuraciones de modo que los objetos de un esquema puedan estar
en diferentes tablespaces, y un tablespace pueda contener objetos de diferentes esquemas.
Especificar el nombre
de la tabla y el esquema.
REGIONS
REGION_ID (PK)
REGION_NAME
Definición de Restricciones
Para agregar una restricción a una tabla con Enterprise Manager, realice los siguientes pasos:
1. Seleccione la tabla en la página Tables y haga clic en Edit.
2. Haga clic en Constraints. Se mostrará la página Constraints con todas las restricciones
definidas en la tabla.
3. Seleccione el tipo de restricción que desea agregar en la lista desplegable y haga clic en Add.
4. Introduzca la información adecuada para el tipo de restricción que está definiendo. Haga clic
en OK.
Violaciones de Restricciones
La violación de una restricción tiene lugar cuando se ejecuta DML, y éste no cumple la
restricción. Las violaciones de las restricciones pueden adoptar muchas formas, por ejemplo:
• Unicidad: Se realiza el intento de tener valores duplicados en una columna que tiene una
restricción única, como el caso en que una columna es la clave primaria o está indexada de
forma única.
• Integridad referencial: Se viola la regla de que cada fila secundaria tiene una fila
principal.
• Control: Se realiza el intento de almacenar un valor en una columna que no sigue las
reglas definidas para ella. Por ejemplo, una columna AGE podría tener una restricción de
control de modo que al aplicarla sea un número positivo.
Datos nuevos
Datos existentes
Estados de Restricciones
Para abordar mejor las situaciones en las que los datos deben estar temporalmente en estado de
violación de una restricción, puede designar que una restricción tenga diversos estados. Una
restricción de la integridad se puede activar (ENABLE) o desactivar (DISABLE). Si una
restricción está activada, los datos se comprueban conforme se introducen o actualizan en la base
de datos. Se impide la entrada de los datos que no se ajustan a la regla de la restricción. Si una
restricción está desactivada, los datos que no guardan conformidad con la regla se pueden
introducir en la base de datos. Una restricción de la integridad puede tener uno de los siguientes
estados:
• DISABLE NOVALIDATE
• DISABLE VALIDATE
• ENABLE NOVALIDATE
• ENABLE VALIDATE
Comprobación de Restricciones
Puede diferir la comprobación de la validez de las restricciones hasta que termine la transacción.
Restricciones sin diferir, conocidas también como restricciones inmediatas, se aplican al final
de las sentencias DML. La violación de una restricción ocasiona el rollback de la sentencia. Si
una restricción provoca una acción, por ejemplo, delete cascade, ésta se lleva a cabo como
parte de la sentencia que la ha ocasionado. Las restricciones definidas como no diferibles no se
pueden cambiar a diferibles.
Las restricciones diferidas son aquellas que solo se comprueban cuando se confirma una
transacción. Si en el momento de la confirmación (COMMIT) se detecta alguna violación de
restricción, se produce el rollback de toda la transacción. Estas restricciones son útiles
principalmente cuando las filas principal y secundaria de una relación de clave ajena se
introducen al mismo tiempo, como en el caso de un sistema de entrada de pedidos en el que el
pedido y los artículos del pedido se introducen a la vez.
Las restricciones definidas como diferibles se pueden especificar de dos maneras:
• Initially immediate, especifica que, por defecto, debe funcionar como restricción
inmediata a menos que se establezca explícitamente lo contrario.
• Initially deferred, especifica que, por defecto, la restricción sólo se debe aplicar al
final de la transacción.
Puntero
Clave de fila
22
Índice Tabla
Índices
Los índices son estructuras opcionales asociadas a las tablas. Se pueden crear para mejorar el
rendimiento de la recuperación y actualización de los datos. Un índice de Oracle proporciona
una ruta de acceso directo a una fila de datos.
Los índices se pueden crear en una o más columnas de una tabla. Una vez creado un índice,
el servidor de Oracle lo mantiene y utiliza automáticamente. Las actualizaciones de datos de una
tabla, como la adición de nuevas filas, la actualización de filas o la supresión de filas, se
propagan automáticamente a todos los índices relevantes con completa transparencia para los
usuarios.
Tipos de Índices
Éstos son los tipos de índices más comunes:
• Árbol B
• Bitmap
Un índice de árbol B tiene almacenados sus valores clave en un árbol equilibrado, lo que permite
búsquedas binarias rápidas.
Un índice de bitmap tiene un bipmap para cada valor clave distinto indexado. En cada bitmap,
hay un juego de bits contiguos para cada fila de la tabla indexada. Esto permite búsquedas
rápidas cuando hay pocos valores distintos, es decir, la columna indexada tiene baja
cardinalidad. Un ejemplo sería un indicador de género. Sólo puede tener los valores de “M” y
“F”. De modo que solo se pueden buscar dos bitmaps. Por ejemplo, si se utilizara un índice de
bitmap para una columna phone_number, habría que gestionar tantos bitmaps que la
búsqueda resultaría muy poco eficaz. Utilice índices de bitmap en columnas de baja
cardinalidad.
Entrada de índice
Raíz
Índice de Árbol B
Estructura de un índice de árbol B
Al principio del índice está la raíz, que contiene entradas que apuntan al siguiente nivel del
índice. En el siguiente nivel están los bloques rama, que su vez apuntan a los bloques del
siguiente nivel del índice. En el nivel inferior están los nodos hoja, que contienen las entradas de
índice que apuntan a las filas de la tabla. Los bloques hoja están enlazados doblemente para
facilitar la búsqueda de los valores clave del índice en orden ascendente y descendente.
Formato de las entradas de hojas del índice
Una entrada de índice está formada por los siguientes componentes:
• Una cabecera de entrada, que almacena el número de columnas y la información de
bloqueo
• Pares longitud-valor de columna clave, que definen el tamaño de una columna en la clave
seguida por el valor de la columna (el número de estos pares es el número máximo de
columnas del índice)
• ROWID de una fila que contiene los valores clave
Tabla Archivo 3
Bloque 10
Bloque 11
Índice Bloque 12
Índices de Bitmap
Los índices de bitmap ofrecen más ventajas que los índices de árbol B en determinadas
situaciones:
• Cuando una tabla tiene millones de filas y las columnas de clave poseen baja cardinalidad,
es decir, tienen pocos valores distintos. Por ejemplo, los índices de bitmap pueden ser
preferibles a los de árbol B para las columnas de género y estado marital de una tabla que
contenga registros de pasaporte.
• Cuando es frecuente que las consultas utilicen una combinación de varias condiciones
WHERE relacionadas con el operador OR.
• Cuando hay actividad de sólo lectura o de actualización baja en las columnas de clave.
Estructura de un índice de bitmap
El índice de bitmap también está organizado como un árbol B, pero el nodo hoja almacena un
bitmap para cada valor clave en lugar de una lista de ROWID. Cada bit del bitmap corresponde a
un posible ROWID, y si este bit está definido, significa que la fila con el ROWID correspondiente
contiene el valor clave.
Como se muestra en el diagrama, el nodo hoja de un índice de bitmap contiene lo siguiente:
• Una cabecera de entrada, que contiene el número de columnas y la información de
bloqueo.
Opciones de Índice
Para facilitar la recuperación, puede resultar ventajoso contar con un índice que almacene las
claves en orden descendente. Esta decisión se debe tomar en función de cómo se acceda a los
datos normalmente.
Un índice de clave inversa tiene almacenados los bytes del valor indexado en orden inverso.
Esto puede reducir la actividad en un punto conflictivo determinado del índice. Si muchos
usuarios están procesando datos en el mismo orden, las partes de prefijo de los valores clave
(actualmente procesándose) se aproximan en un momento dado. Como consecuencia, hay mucha
actividad en esa área de la estructura del índice. Los índices de clave inversa reparten esa
actividad entre la estructura del índice indexando una versión de byte inverso de los valores
clave.
Los índices creados por la combinación de más de una columna se denominan índices
compuestos. Por ejemplo, puede crear un índice basado en el apellido y nombre de una persona:
CREATE INDEX name_ix ON employees
(last_name, first_name);
Creación de Índices
Puede hacer clic en el enlace Indexes situado bajo la cabecera Schema de la página
Administration para ver la página Indexes. Puede ver atributos de índice o utilizar el menú
Actions para ver dependencias de un índice.
Los índices se pueden crear explícita o implícitamente mediante restricciones que se colocan en
una tabla. Un ejemplo de un índice creado implícitamente es la definición de una clave primaria,
en cuyo caso se crearía automáticamente un índice único para reforzar la unicidad en la columna.
Tabla COUNTRY
Vista
Creación de Vistas
Al igual que con las tablas, se pueden realizar consultas, actualizaciones, inserciones y
supresiones en las vistas, pero con algunas restricciones. Todas las operaciones realizadas en una
vista en realidad afectan a las tablas base de la vista. Las vistas proporcionan un nivel adicional
de seguridad al restringir el acceso a un juego predeterminado de filas y columnas de una tabla.
También pueden ocultar la complejidad de los datos y almacenar consultas complejas.
Para ver las vistas definidas en la base de datos, haga clic en el enlace Views situado bajo la
cabecera Schema de la página Administration.
Secuencias
Para recuperar el siguiente valor de una secuencia, se hace referencia a ella por su nombre;
no existe asociación alguna de una secuencia con una tabla o columna.
Una vez emitido un número determinado, no se volverá a emitir, a menos que la secuencia
se defina como cíclica. En ocasiones, una aplicación solicita que un valor no deje nunca de
utilizarse o de almacenarse en la base de datos. Esto puede dar lugar a intervalos vacíos en
los números que residen en la tabla en la que se están almacenando.
El almacenamiento en caché de los números de secuencia mejora el rendimiento ya que se asigna
previamente un juego de números en la memoria para un acceso más rápido. En caso de fallo de
la instancia, los números de secuencia almacenados en caché no se utilizan, lo que da lugar a
intervalos vacíos.
Nota: Si una aplicación necesita que no haya intervalos vacíos, la aplicación debe implementar
un generador de números personalizados. No obstante, este método puede producir un
rendimiento muy deficiente. Si utiliza una tabla para almacenar un valor, y ese valor lo
incrementa y actualiza la tabla para cada solicitud, ese proceso supondría un cuello de botella
en todo el sistema. Éste es el motivo por el que cada sesión tendría que esperar ese mecanismo,
el cual, para garantizar que no haya duplicados ni intervalos vacíos, sólo gestiona una solicitud
a la vez.
Tablas Temporales
Puede aprovechar las tablas temporales cuando necesite almacenar datos de forma privada con el
fin de realizar una tarea y desee que los datos se limpien una vez terminada ésta, al final de una
transacción o sesión. Las tablas temporales ofrecen esta funcionalidad pero además le liberan de
las responsabilidades de ocultar los datos de otras sesiones y eliminan los datos generados
cuando ha terminado. Los únicos datos de la tabla temporal visibles para una sesión son los datos
que ha insertado la sesión.
Una tabla temporal puede ser específica de una transacción o de una sesión. En el caso de las
tablas temporales específicas de una transacción, los datos se conservan lo que dura la
transacción, y en el segundo caso lo que dura la sesión. En ambos casos, los datos que inserta
una sesión son privados para la sesión. Cada sesión sólo puede ver y modificar sus propios datos.
Como resultado, nunca se adquieren bloqueos DML en los datos de las tablas temporales. Las
siguientes cláusulas controlan la duración de las filas:
• ON COMMIT DELETE ROWS: Para especificar que la duración de las filas insertadas
equivale a lo que dura la transacción.
• ON COMMIT PRESERVE ROWS: Para especificar que la duración de las filas insertadas
equivale a lo que dura la sesión.
a
SELECT table_name, tablespace_name FROM
user_tables;
d DESCRIBE dba_indexes;
1 row created.
1 row updated.
1 row deleted.
Comando INSERT
La sentencia básica INSERT crea filas de una en una. Mediante lo que se denomina
subselección, puede hacer que el comando INSERT copie filas de una tabla a otra. Este método
también se denomina sentencia INSERT SELECT. El ejemplo de la diapositiva es el siguiente
comando INSERT:
insert into dept_80 (select * from employees
where department_id = 80);
En este caso la tabla dept_80 tiene exactamente la misma estructura que la tabla employees.
Si este no es el caso, puede nombrar las columnas de cada tabla. Los valores seleccionados en la
sentencia SELECT se asocian a las columnas de la tabla en la que se insertan, respectivamente.
Los valores de columna coinciden en el orden especificado en las sentencias INSERT y
SELECT. Todo lo que se necesita es que los tipos de dato coincidan. Por ejemplo:
insert into just_names (first, last)
(select first_name, last_name from employees);
Aquí, la tabla just_names sólo tiene dos columnas que tienen el mismo tipo de dato que las
columnas first_name y last_name de la tabla employees.
El uso del método INSERT SELECT es un modo de cargar datos en bloque de una o más tablas
en otra tabla.
Comando UPDATE
El comando UPDATE se utiliza para modificar filas existentes de una tabla. El número de filas
modificadas por el comando UPDATE depende de la condición WHERE. Si se omite la cláusula
WHERE, se cambian todas las filas. Si ninguna fila cumple la condición WHERE, no se realizarán
modificaciones.
Comando DELETE
El comando DELETE se utiliza para eliminar filas existentes de una tabla. El número de filas
modificadas por el comando DELETE depende de la condición WHERE. Si se omite la cláusula
WHERE, se eliminan todas las filas. Si ninguna fila cumple la condición WHERE, no se eliminará
ninguna fila. Tenga en cuenta en el ejemplo que cuando no se suprime ninguna fila, no es un
error; el mensaje devuelto sólo indica que se han eliminado cero filas de la tabla.
Comando MERGE
El comando MERGE realiza las acciones de UPDATE e INSERT en el mismo comando. Puede
fusionar datos de un origen de datos con otro, insertar de manera opcional filas nuevas y
actualizar columnas específicas si ya existe una fila.
Considere este ejemplo: Algunos datos de la tabla JOBS tienen el siguiente aspecto:
El comando MERGE inserta en la tabla JOBS cualquier fila con un JOB_ID nuevo y actualiza
las filas JOBS existentes con JOB_TITLE, si ya existe JOB_ID. El resultado es que el cargo
“President” se cambia por “VP” y se agregan los trabajos nuevos “SA” y “DBA”.
PL/SQL
PL/SQL es un lenguaje de programación de cuarta generación propietario de Oracle que
proporciona extensiones de procedimiento a SQL. PL/SQL proporciona un entorno de
programación común para las aplicaciones y las bases de datos Oracle independientemente
del sistema operativo o de la plataforma de hardware.
Con PL/SQL, puede manipular datos con sentencias SQL y controlar el flujo de programas
con estructuras de procedimientos como IF-THEN, CASE y LOOP. También puede declarar
constantes y variables, definir procedimientos y funciones, utilizar recopilaciones y tipos de
objetos, e interrumpir errores de tiempo de ejecución. El programa PL/SQL también puede
llamar a programas escritos en otros lenguajes como C, C++ y Java.
PL/SQL también proporciona protección de los datos. El emisor necesita conocer las estructuras
de datos que se están leyendo o manipulando para realizar la llamada. Asimismo, también
necesita tener permiso para acceder a esos objetos; si el emisor tiene permiso para ejecutar el
programa PL/SQL, es todo lo que necesita. De manera opcional, existe otro modo de permisos
para llamar a PL/SQL en el que el emisor tiene que disponer de permiso para ejecutar cada
sentencia que se ejecute durante el programa llamado.
Objetos PL/SQL
• Paquete: Un paquete es una recopilación de procedimientos y funciones que están
relacionados lógicamente. Esta parte del paquete también se denomina especificación
y describe la interfaz para las aplicaciones; declara los tipos, variables, constantes,
excepciones, cursores y subprogramas disponibles para su uso.
• Cuerpo del paquete: El cuerpo define totalmente los cursores y subprogramas, y de este
modo implementa la especificación. El cuerpo contiene los detalles de implementación y
las declaraciones privadas, que están ocultas para el emisor.
• Cuerpo del tipo: Es una recopilación de métodos (procedimientos y funciones) asociados
a los tipos de dato definidos por el usuario. Para obtener más información sobre los tipos de
dato definidos por el usuario, consulte Oracle Database Application Developer’s Guide –
Object Relational Features.
• Procedimiento: Un procedimiento es un bloque PL/SQL que realiza una acción concreta.
• Función: Una función es un bloque PL/SQL que devuelve un único valor mediante el
comando PL/SQL RETURN. Es un procedimiento que tiene un valor de retorno.
• Disparador: Un disparador es un bloque PL/SQL que se ejecuta cuando se produce un
evento concreto en la base de datos. Estos eventos se pueden basar en una tabla, por
ejemplo, cuando se inserta una fila en la tabla. También pueden ser eventos de base de
datos, como cuando un usuario se conecta a la base de datos.
Funciones
Las funciones PL/SQL se utilizan normalmente para calcular un valor. Existen muchas funciones
incorporadas como SYSDATE, SUM, AVG y TO_DATE. Los desarrolladores también crean sus
propias funciones al escribir aplicaciones. El código para una función PL/SQL debe contener una
sentencia RETURN. Para crear funciones PL/SQL hay que introducir un nombre, un esquema y
un código de origen, como se muestra en la diapositiva.
La función compute_tax mostrada en la diapositiva se crea con el siguiente comando SQL:
CREATE OR REPLACE FUNCTION compute_tax (salary NUMBER)
RETURN NUMBER
AS
BEGIN
IF salary<5000 THEN
RETURN salary*.15;
ELSE
RETURN salary*.33;
END IF;
END;
/
Procedimientos
Los procedimientos PL/SQL realizan una acción concreta. Al igual que las funciones, los
procedimientos pueden aceptar valores de entrada y realizar sentencias condicionales como
IF-THEN, CASE y LOOP.
Paquetes
Los paquetes son recopilaciones de funciones y procedimientos. Existen ventajas de rendimiento
y mantenimiento al agrupar funciones y procedimientos en un único paquete. Cada paquete debe
estar formado por dos objetos de base de datos compilados por separado:
• Especificación del paquete: Este objeto (en ocasiones denominado cabecera del paquete)
tiene un tipo de objeto PACKAGE y sólo contiene la definición de los procedimientos,
funciones y variables del paquete.
• Cuerpo del paquete: Este objeto tiene un tipo de objeto PACKAGE BODY y contiene el
código real de los subprogramas definidos en la especificación del paquete.
Los procedimientos y funciones que se llaman desde un paquete se llaman mediante una
notación de puntos:
nombre_paquete.nombre_procedimiento o nombre_función
En el paquete que se muestra en la diapositiva, los subprogramas se pueden llamar de la
siguiente forma:
SQL> SELECT money.compute_tax(salary) FROM hr.employees
WHERE employee_id=107;
SQL> EXECUTE money.give_raise_to_all;
Paquetes Incorporados
Los paquetes PL/SQL incorporados que se proporcionan con la base de datos Oracle
proporcionan acceso a funciones ampliadas de la base de datos, como el servicio de gestión de
colas avanzadas, el cifrado y la entrada/salida (E/S) de archivos. También incluyen muchas
utilidades de administración y de mantenimiento.
Los paquetes que utiliza un administrador dependen del tipo de aplicaciones que sirve la base
de datos. A continuación se muestran algunos de los paquetes de administración y de
mantenimiento más comunes:
• DBMS_STATS: Recopilación, visualización y modificación de estadísticas del optimizador
• DBMS_OUTPUT: Generación de salida de PL/SQL
• DBMS_SESSION: Acceso PL/SQL a las sentencias ALTER SESSION y SET ROLE
• DBMS_RANDOM: Generación de números aleatorios
• DBMS_UTILITY: Obtención de la hora, hora de la CPU y la información de versión;
cálculo de un valor hash y realización de otras muchas funciones
• DBMS_SCHEDULER: Planificación de funciones y procedimientos que se pueden llamar
desde PL/SQL
• DBMS_CRYPTO: Cifrado y descifrado de datos de la base de datos
• UTL_FILE: Lectura y escritura en los archivos del sistema operativo desde PL/SQL
Nota: Para obtener más información sobre estos y otros paquetes incorporados, consulte el
manual PL/SQL Packages and Types Reference.
Disparadores
Los disparadores son objetos de código PL/SQL que se almacenan en la base de datos y que se
ejecutan o “arrancan” automáticamente cuando sucede algo. La base de datos Oracle permite que
muchas acciones sirvan como eventos disparadores, entre las que se incluyen una inserción en
una tabla, la conexión de un usuario a la base de datos y el intento de borrar una tabla o el
cambio de valores de auditoría.
Los disparadores pueden llamar a otros procedimientos o funciones. Lo más recomendable es
acortar todo lo posible el código del disparador y colocar todo aquello que necesite un código
más largo en un paquete independiente.
Los DBA utilizan disparadores para ayudar en las auditorías basadas en valores (se tratará en
la lección titulada “Implementación de Seguridad de la Base de Datos Oracle”), para aplicar
restricciones complejas y para automatizar muchas tareas. Por ejemplo, el disparador
SECURE_EMPLOYEES que se muestra en la diapositiva registra todas las sentencias DML
en una tabla de mantenimiento.
Eventos Disparadores
Existen muchos eventos que se pueden utilizar para arrancar un disparador y se dividen en tres
categorías.
• Los disparadores de eventos DML se arrancan cuando las sentencias modifican los datos.
• Los disparadores de eventos DDL se arrancan cuando las sentencias crean un objeto o lo
modifican de alguna forma.
• Los disparadores de evento de base de datos se arrancan cuando suceden ciertos eventos en
la base de datos.
Se puede especificar que la mayoría de los disparadores arranquen antes o después de que se
produzca el evento. Con los eventos DML, el disparador se puede diseñar para que se arranque
una vez con la sentencia o con cada fila que se modifique.
Bloqueos
Para que la base de datos permita que una sesión modifique datos, la sesión debe bloquear
primero los datos que se van a modificar. Un bloqueo ofrece a la sesión el control exclusivo
sobre los datos, para que ninguna otra transacción pueda modificar los datos bloqueados hasta
que se libera el bloqueo.
Las transacciones pueden bloquear filas individuales de datos, varias filas o incluso tablas
completas. La base de datos Oracle 10g soporta tanto bloqueo manual como el automático.
Los bloqueos adquiridos automáticamente eligen siempre el nivel de bloqueo más bajo posible
para minimizar posibles conflictos con otras transacciones.
Transacción 1 Transacción 2
Mecanismo de Bloqueo
El mecanismo de bloqueo está diseñado para proporcionar el máximo grado posible de
simultaneidad de datos en la base de datos. Las transacciones que modifican datos adquieren
bloqueos de nivel de fila en lugar de bloqueos de nivel de tabla o de bloque. Las modificaciones
de objetos (como movimientos de tabla) obtienen bloqueos de nivel de objeto en lugar de
bloqueos de todo el esquema o base de datos.
Las consultas de datos no necesitan ningún bloqueo y una consulta se realiza correctamente
aunque los datos estén bloqueados (mostrando siempre el original, el valor previo al bloqueo
reconstruido a partir de información de deshacer).
Cuando varias transacciones necesitan bloquear el mismo recurso, la primera transacción que
solicita el bloqueo lo obtiene. Las demás transacciones esperan hasta que termina la primera
transacción. El mecanismo de cola es automático y no necesita la interacción del administrador.
Todos los bloqueos se liberan al final de una transacción. Las transacciones se completan cuando
se emite un comando COMMIT o ROLLBACK. En caso de una transacción fallida, el mismo
proceso en segundo plano que automáticamente realiza un rollback de los cambios de la
transacción fallida libera todos los bloqueos retenidos por esa transacción.
Simultaneidad de Datos
El mecanismo de bloqueo es por defecto un modo de bloqueo detallado de nivel de fila. Distintas
transacciones pueden estar actualizando diferentes filas dentro de la misma tabla sin interferir las
unas en las otras.
Aunque el modelo por defecto es el bloqueo en el nivel de fila, la base de datos Oracle soporta el
bloqueo manual en niveles superiores si es necesario:
SQL> LOCK TABLE employees IN EXCLUSIVE MODE;
Table(s) Locked.
Con la sentencia anterior, cualquier otra transacción que intente actualizar una fila de la tabla
bloqueada debe esperar hasta que termine la transacción que emitió la solicitud de bloqueo.
EXCLUSIVE es el modo de bloqueo más absoluto. Los otros modos de bloqueo son los
siguientes:
• ROW SHARE: Permite el acceso simultáneo a la tabla bloqueada, pero prohíbe que las
sesiones bloqueen toda la tabla para un acceso exclusivo.
• ROW EXCLUSIVE: Igual que ROW SHARE, pero también prohíbe el bloqueo en el modo
SHARE. Los bloqueos ROW EXCLUSIVE se obtienen automáticamente al actualizar,
insertar o suprimir datos.
Transacción 1 Transacción 2
SQL> UPDATE employees SQL> UPDATE employees
2 SET salary=salary*1.1 2 SET salary=salary*1.1
3 WHERE employee_id= 107; 3 WHERE employee_id= 106;
1 row updated. 1 row updated.
Bloqueos de DML
Las transacciones de DML obtienen dos bloqueos:
• Bloqueo EXCLUSIVE de fila para la fila o filas que se van a actualizar.
• Bloqueo de nivel de tabla ROW EXCLUSIVE en la tabla que se va a actualizar. Sirve para
evitar que otra sesión bloquee la tabla completa (posiblemente para borrarla o truncarla)
mientras se realiza el cambio.
Conflictos de Bloqueo
Los conflictos de bloqueo se producen con frecuencia, pero normalmente se resuelven con el
tiempo y el mecanismo de cola. En algunos casos excepcionales, puede que sea necesaria la
intervención del administrador en un conflicto de bloqueo. En el caso de la diapositiva, la
transacción 2 obtiene un bloqueo de una única fila a las 9:00:00 y no se realiza la confirmación,
dejando el bloqueo en su lugar. La transacción 1 intenta actualizar toda la tabla a las 9:00:05, lo
que necesita un bloqueo de todas las filas. La transacción 2 bloquea la transacción 1 hasta que la
transacción 2 realiza la confirmación a las 16:30:01.
El usuario que intenta realizar la transacción 1 se pondría en contacto casi con toda probabilidad
con el administrador para solicitar ayuda en este caso, y el DBA debería detectar y resolver el
conflicto.
Transacción 1 Transacción 2
Interbloqueos
Un interbloqueo es un ejemplo especial de conflicto de bloqueo. Los interbloqueos surgen
cuando dos o más sesiones esperan los datos que bloquean entre ellas. Puesto que cada una
está esperando a la otra, ninguna puede terminar la transacción para resolver el conflicto.
La base de datos Oracle detecta automáticamente los interbloqueos y termina la sentencia con un
error. La respuesta adecuada a ese error es una acción de confirmación o de rollback, que libera
cualquier otro bloqueo de esa sesión para que la otra sesión pueda continuar con su transacción.
En el ejemplo de la diapositiva, la transacción 1 debe realizar una confirmación o un rollback
como respuesta al error detectado de interbloqueo. Si realiza una confirmación, necesitará
volver a enviar la segunda actualización para terminar su transacción. Si realiza un rollback,
debe volver a enviar ambas sentencias para terminar su transacción.
Manipulación de Datos
Los datos se manipulan, o modifican, mediante la clase DML de sentencias SQL: INSERT,
UPDATE, DELETE y MERGE. Estas sentencias se ejecutan como parte de una transacción,
que se inicia con la primera sentencia DML correcta y termina con un comando COMMIT o
ROLLBACK. En las transacciones sólo se puede realizar una operación de confirmación o de
rollback.
La operación de rollback también se puede producir si hay un fallo del sistema o de proceso.
Nota: El comando MERGE realiza una combinación de inserciones y actualizaciones para
fusionar datos de una tabla en otra. Este tema se aborda en la lección titulada “Gestión de Datos
y Simultaneidad”.
Usuario
Datos de Deshacer
La base de datos Oracle guarda el valor anterior (datos de deshacer) cuando un proceso cambia
datos de una base de datos. Almacena los datos como existían antes de que se modificaran. La
captura de datos de deshacer le permite realizar una operación de rollback en los datos no
confirmados. Los datos de deshacer también soportan consultas de flashback y de lectura
consistente.
Las consultas de lectura consistente proporcionan resultados que son consistentes con los datos
en el momento en que se inicia una consulta. Para que una consulta de lectura consistente se
realice correctamente, la información original debe existir aún como información de deshacer.
Mientras se retenga la información de deshacer, la base de datos Oracle puede reconstruir datos
que cumplan las consultas de lectura consistente.
Las consultas de flashback son consultas que piden con determinación una versión de los datos
tal como existían en algún momento del pasado. Siempre que la información de deshacer del
pasado exista, las consultas de flashback pueden terminar correctamente.
Tabla
Segmento de Valor
deshacer nuevo
Deshacer Redo
Control de Deshacer
La mayor parte del tiempo la instancia gestiona automáticamente las operaciones de deshacer
casi sin intervención del administrador de base de datos (DBA). Puede que sea necesaria la
participación del administrador cuando se produce lo siguiente:
• Espacio insuficiente para deshacer
• Los usuarios reciben mensajes de error ORA-01555 snapshot too old
La información de deshacer siempre se retiene hasta que una transacción termina. Esto significa
que si se suprimen o actualizan cantidades muy grandes de datos (las operaciones de inserción
consumen muy poco espacio de deshacer porque la imagen original de los datos insertados es un
valor nulo) sin confirmar, el tablespace de deshacer debe ser lo bastante grande para contener los
datos originales. Imagine un caso en el que en una tabla de 50 GB se hubieran suprimido todas
las filas con el comando siguiente:
SQL> DELETE FROM reallybigtable;
Sería necesario que el tablespace tuviera espacio para 50 GB de información original sólo en
caso de que el usuario que emitió esta sentencia cambiara de opinión y quisiera realizar un
rollback del cambio. Si el tablespace de deshacer se queda sin espacio para los datos de deshacer,
los usuarios reciben un mensaje de error como el siguiente:
ORA-01650: unable to extend rollback segment
UNDO_MANAGEMENT=AUTO
UNDO_TABLESPACE=UNDOTBS1 DBA
Administración de Deshacer
Se recomienda el uso de la gestión automática de deshacer, que se configura mediante la
definición del parámetro de inicialización UNDO_MANAGEMENT en AUTO. La gestión manual de
deshacer está soportada para la compatibilidad con Oracle8i y versiones anteriores, pero necesita
más participación del DBA.
Con la gestión automática de deshacer, el DBA gestiona los datos de deshacer en el nivel de
tablespace, que controla qué tablespace de deshacer utiliza una instancia con el parámetro de
inicialización UNDO_TABLESPACE. Una vez seleccionado el tablespace de deshacer, el
administrador sólo se debe preocupar de proporcionar espacio suficiente y de configurar un
intervalo de retención de deshacer.
Con la gestión manual, el DBA también debe tener en cuenta lo siguiente:
• Asignación de tamaño a los segmentos, que incluye las extensiones máximas y el tamaño
de las extensiones
• Identificación y eliminación de transacciones bloqueantes
• Creación de segmentos de rollback suficientes para manejar transacciones (en el modo
manual, los segmentos de deshacer se denominan segmentos de rollback)
• Selección de un tablespace que contenga los segmentos de rollback (los tablespaces de
deshacer sólo se utilizan con la gestión automática de deshacer)
DBA
Garantía: 15 minutos
Datos de deshacer
Tamaño de espacio
de tabla actual
Objetivos
Esta lección es el punto de inicio para conocer la seguridad de Oracle. En la siguiente
documentación encontrará información adicional:
• Oracle Database Concepts 10g Release 2 (10.2)
• Oracle Database Administrator’s Guide 10g Release 2 (10.2)
• Oracle Database Security Guide 10g Release 2 (10.2)
En los siguientes cursos encontrará formación adicional:
• Base de Datos Oracle 10g: Taller de Administración II (D17092GC30)
• Oracle Database 10g: Security (D17499GC10)
Separación de Responsabilidades
Éstos son los principales requisitos necesarios para satisfacer la separación de las tareas.
Se debe confiar en los DBA: Es difícil limitar a un DBA. Para hacer su trabajo, el DBA requiere
privilegios de alto nivel. Un DBA posee una posición de confianza y se debe investigar a fondo.
Incluso un DBA protegido debe tener responsabilidad. Considere lo siguiente:
• Abuso de confianza: Un DBA puede utilizar de manera incorrecta las contraseñas cifradas
de la vista DBA_USERS.
• Las pistas de auditoría protegen la posición protegida: Cuando la auditoría se
implementa con cuidado y se siguen las directrices, la pista de auditoría puede mostrar
que una persona específica no ha violado los procedimientos o causado un acto perjudicial.
Si un usuario no autorizado intenta que las sospechas recaigan sobre un usuario protegido,
una pista de auditoría bien diseñada detectará el engaño.
1 Activar auditoría
de base de datos.
Archivo de El usuario
DBA parámetros ejecuta un
comando.
2 Especificar opciones de
auditoría.
Base de datos
Proceso de
Activación de Auditoría
Debe activar la auditoría de la base de datos antes de especificar valores de auditoría.
DBA_AUDIT_TRAIL DBA_FGA_AUDIT_TRAIL
DBA_COMMON_AUDIT_TRAIL
Política: AUDIT_EMPS_SALARY
SELECT name, salary
FROM employees
WHERE
department_id = 10; employees
Auditoría Detallada
La auditoría de la base de datos registra que se ha producido una operación, pero no captura
información sobre la sentencia que causó la operación. La auditoría detallada (FGA) amplía
dicha función para permitir la captura de las sentencias SQL reales que consultan o manipulan
los datos. FGA también permite que la auditoría se centre de forma más restringida que la
auditoría de la base de datos estándar o basada en valores.
Las opciones de auditoría FGA se pueden centrar en columnas individuales de una tabla o
vista e incluso pueden ser condicionales para que sólo se capturen auditorías si se cumplen
determinadas especificaciones definidas por el administrador. Las políticas de FGA soportan
más de una columna relevante. Por defecto, se audita cualquiera de esas columnas que esté
presente en la sentencia SQL. DBMS_FGA.ALL_COLUMNS y DBMS_FGA.ANY_COLUMNS
permiten realizar la auditoría según se utilice o no alguna de las columnas relevantes (o todas
ellas) en la sentencia.
Utilice el paquete PL/SQL DBMS_FGA para crear una política de auditoría en la tabla o vista de
destino. Si una de las filas devueltas por un bloque de consulta coincide con la columna auditada
y la condición de auditoría especificada, un evento de auditoría hace que se cree y almacene un
registro de auditoría en la pista de auditoría. Opcionalmente, el evento de auditoría también
puede ejecutar un procedimiento. FGA centra automáticamente la auditoría en el nivel de
sentencia, de forma que una sentencia SELECT que devuelve miles de filas genere un único
registro de auditoría.
Política de FGA
El ejemplo de la diapositiva muestra una política de FGA creada con el procedimiento
DBMS_FGA.ADD_POLICY. El procedimiento acepta los siguientes argumentos:
Nombre de Política
Asigne a cada política de FGA un nombre cuando la cree. En el ejemplo de la diapositiva se
asigna a la política el nombre AUDIT_EMPS_SALARY mediante el siguiente argumento:
policy_name => 'audit_emps_salary'
Condición de Auditoría
La condición de auditoría es un predicado de SQL que define cuándo se debe arrancar el evento
de auditoría. En el ejemplo de la diapositiva, se auditan todas las filas del departamento 10
mediante el siguiente argumento de condición:
audit_condition => 'department_id = 10‘
UPDATE hr.employees
SET salary = 10
WHERE employee_id = 111;
Instrucciones de FGA
Con las sentencias SELECT, FGA captura la propia sentencia y no las filas reales. Sin embargo,
cuando se combina FGA con consultas de flashback, se pueden reconstruir las filas tal y como
existían en ese punto concreto.
Para obtener más información sobre las consultas de flashback, consulte la lección titulada
“Realización de Flashback”.
Para obtener más información sobre el paquete DBMS_FGA, consulte Oracle Database, PL/SQL
Packages and Types Reference.
Auditoría de DBA
Los usuarios SYSDBA y SYSOPER tienen privilegios para iniciar y cerrar la base de datos.
Puesto que pueden realizar cambios mientras la base de datos está cerrada, la pista de auditoría
para estos privilegios se debe almacenar fuera de la base de datos. La base de datos Oracle
captura de manera automática los eventos de conexión de los usuarios SYSDBA y SYSOPER.
Esto proporciona una forma valiosa para realizar un seguimiento de acciones SYSDBA y
SYSOPER autorizadas y no autorizadas, si bien sólo resulta útil si se revisa la pista de auditoría
del sistema operativo.
La base de datos Oracle no captura nada que no sean eventos de conexión a menos que se active
específicamente la auditoría. Active la auditoría de usuarios SYSDBA y SYSOPER mediante la
definición del parámetro de inicialización:
audit_sys_operations=TRUE (El valor por defecto es FALSE.)
Si se auditan las operaciones SYS, el parámetro de inicialización audit_file_dest controla
la ubicación de almacenamiento de los registros de auditoría. En una plataforma Windows, la
pista de auditoría toma por defecto el registro de eventos de Windows. En plataformas UNIX o
Linux, los registros de auditoría se almacenan en $ORACLE_HOME/rdbms/audit.
Actualizaciones de Seguridad
Las alertas de seguridad de Oracle contienen una breve descripción de la vulnerabilidad,
una evaluación del riesgo y del grado de exposición asociados a la vulnerabilidad, así como
soluciones alternativas o parches que se pueden aplicar. Con Enterprise Manager, puede
gestionar los parches. Oracle incluye una confirmación del individuo u organización que notificó
la vulnerabilidad.
Las alertas de seguridad se publican en la dirección Web de Oracle Technology Network y en
OracleMetaLink (MetaLink). Aunque las alertas de seguridad se dan a conocer públicamente a
cualquier persona que esté interesada en ellas, sólo los clientes con un número de identificación
de soporte al cliente (Customer Support Identification o CSI) actual pueden descargar parches.
Oracle agradece su cooperación en el mantenimiento de la seguridad de sus productos a través
de notificaciones rápidas, completas y confidenciales de posibles vulnerabilidades de seguridad.
Si descubre una vulnerabilidad de seguridad con cualquier producto Oracle, notifíquenoslo
enviando una solicitud de servicio a través de MetaLink o un mensaje de correo electrónico a
secalert_us@oracle.com.