Sie sind auf Seite 1von 142

PROYECTO FORMACIN

Administracin de Oracle

Cliente: Dirigido a:

Aubay
Alumnos del curso de Administracin de Oracle

Preparado por: Fecha:

rea de formacin Emisin: Categora: Julio 2004 Documentacin del curso

Aubay Espaa - Formacin

HOJA DE INFORMACIN GENERAL


CONTROL DOCUMENTAL
PROYECTO: ENTIDAD DE DESTINO: TITULO: CDIGO DE REFERENCIA: VERSIN: FECHA EDICIN: FICHERO: HERRAMIENTA/S DE EDICIN: AUTOR: RESUMEN: Nemo SC SR DERECHOS DE USO:
La presente documentacin es propiedad de Aubay Espaa, S.A., tiene carcter de confidencial y no podr ser objeto de reproduccin total o parcial, tratamiento informtico ni transmisin de ninguna forma o por cualquier medio, ya sea electrnico, mecnico, por fotocopia, registro o cualquiera otro. Asimismo tampoco podr ser objeto de prstamo, alquiler o cualquier forma de cesin de uso sin el permiso previo y escrito de Aubay Espaa, S.A., titular del copyright. El incumplimiento de las limitaciones sealadas por cualquier persona que tenga acceso a la documentacin ser perseguida conforme a ley.

Formacin rea de Formacin Administracin de Oracle 1.01 20/07/2004 Curso de Administracin de Oracle Word 2003 Ricardo Domingo Manual del curso de Administracin de Oracle

ESTADO FORMAL:
Preparado por: Revisado por: Aprobado por:

Nombre: Ricardo Domingo Fecha:


5107-F03.V02

Nombre: Fecha:

Nombre: Fecha:

20/07/2004

Administracin de Oracle (V1.01)

Pg. 2

Aubay Espaa - Formacin

CONTROL DE VERSIONES
VERSIN
1.00 1.01

PARTES QUE CAMBIAN


N/A

DESCRIPCIN DEL CAMBIO


Documento original Correccin de diversos errores

FECHA DE CAMBIO

16/06/2004 20/07/2004

Administracin de Oracle (V1.01)

Pg. 3

Aubay Espaa - Formacin

NDICE
1 INTRODUCCIN AL DOCUMENTO ...........................................................................8 1.1 1.2 1.3 1.4 1.5 2 2.1 2.2 2.3 OBJETO ............................................................................................................. ALCANCE ......................................................................................................... DESTINATARIOS ............................................................................................... DOCUMENTACIN DE REFERENCIA ...................................................................... CONVENCIONES NOTACIONALES......................................................................... 8 8 8 8 8

COMPONENTES DE LA ARQUITECTURA ORACLE ...................................................10 ESTRUCTURA DE LA BASE DE DATOS ...........................................................................10 FICHEROS DE LA BASE DE DATOS ORACLE ....................................................................11 INSTANCIA ORACLE...............................................................................................12 CONEXIN A UNA BASE DE DATOS .............................................................................14 PROCESAMIENTO DE UNA CONSULTA ...........................................................................15 EL CONJUNTO COMPARTIDO (SHARED POOL)..................................................................15 CACHE DE BUFFERS DE DATOS..................................................................................16 REA GLOBAL DE PROGRAMAS (PGA) .........................................................................16 PROCESAMIENTO DE UNA SENTENCIA DML (INSERT, DELETE,UPDATE)..............................17 BUFFER DE REDO LOG .........................................................................................18 SEGMENTO DE ROLLBACK .....................................................................................18 PROCESAMIENTO COMMIT...................................................................................19 DATABASE WRITE (DBW)....................................................................................20 LOG WITER (LGWR) .........................................................................................20 SYSTEM MONITOR (SMON)..................................................................................21 PROCESS MONITOR (PMON) ................................................................................21 CHECKPOINT PROCESS (CKPT)..............................................................................21 ARCHIVER PROCESS (ARC) ..................................................................................21 ARRANQUE DE UNA INSTANCIA DE BASE DE DATOS ...........................................................24
Area Global del Sistema (SGA).................................................................................. 13 Procesos en Background .......................................................................................... 13

2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13 2.14 2.15 2.16 2.17 2.18 3 3.1 3.2 3.3 3.4 3.5 4 4.1

2.3.1 2.3.2

GESTIN DE UNA INSTANCIA DE BASE DE DATOS ORACLE..................................24


3.1.1 3.2.1 3.3.1 Comando de Arranque de una instancia de BD ............................................................ 26

PARADA DE UNA INSTANCIA DE BASE DE DATOS ...............................................................26

FICHERO DE PARMETROS .......................................................................................28


VISTAS DINMICAS DE RENDIMIENTO ...........................................................................32

Comando de Parada de una instancia de BD................................................................ 27 Parmetros Dinmicos ............................................................................................. 30

FICHERO ALERT Y DE RASTREO ..................................................................................33 CONCEPTOS .......................................................................................................34


Consideraciones previas a la creacin de la Base de Datos ............................................ 34 Planificacin de la ubicacin de los ficheros ................................................................. 34 Mtodos para crear una Base de Datos....................................................................... 35

CREACIN BASE DE DATOS ORACLE ....................................................................34


4.1.1 4.1.2 4.1.3

4.2

CREACIN DE UNA BASE DE DATOS MANUALMENTE ............................................................35

Administracin de Oracle (V1.01)

Pg. 4

Aubay Espaa - Formacin

4.3 5 5.1

4.2.1 4.2.2 4.2.3 4.2.4

EJEMPLO REAL .....................................................................................................38 VISIN GENERAL DEL DICCIONARIO DE DATOS ................................................................40


Contenido del Diccionario de Datos ............................................................................ 40 Tablas Base y Vistas del Diccionario de Datos.............................................................. 41 Categoras del Diccionario de Datos ........................................................................... 41

Configuracin del Entorno del Sistema Operativo ......................................................... 35 Preparacin del Fichero de Parmetros ....................................................................... 35 Inicio de la Instancia ............................................................................................... 36 Creacin de la Base de Datos.................................................................................... 36

CREACIN Y USO DEL DICCIONARIO DE DATOS Y PAQUETES ESTNDAR............40


5.1.1 5.1.2 5.1.3 5.2.1 5.3.1 5.3.2

5.2 5.3 5.4 6 6.1 6.2 6.3 6.4 6.5 6.6 7 7.1 7.2

UNIDADES DE PROGRAMA ALMACENADAS .......................................................................42

CREACIN DEL DICCIONARIO DE DATOS .......................................................................44


Ficheros de Comandos creacin del Diccionario de datos requeridos ............................... 44 Ficheros de Comandos creacin del Diccionario de datos opcionales................................ 47

Ejecucin de una Unidad de Programa PL/SQL............................................................. 43

EJEMPLO REAL .....................................................................................................48 JERARQUA DE ALMACENAMIENTO DE LA BASE DE DATOS .....................................................50

GESTIN DE TABLESPACES Y FICHEROS DE DATOS .............................................50


6.1.1 Tablespaces ........................................................................................................... 51

CREACIN DE TABLESPACES.....................................................................................52 MODIFICACIN DE TABLESPACES ...............................................................................57 BORRADO DE TABLESPACES......................................................................................60 VISTAS DEL DICCIONARIO DE DATOS SOBRE TABLESPACES...................................................61 EJEMPLO REAL .....................................................................................................61 CONCEPTO .........................................................................................................64 BLOQUES DE DATOS ..............................................................................................65
Formato del bloque de datos..................................................................................... 65 Parmetros de Utilizacin de Espacio de Bloque ........................................................... 66 Parmetros que controlan la Simultaneidad................................................................. 68 Nmero y Tamao de una Extensin .......................................................................... 69 Extensiones en Segmentos Temporales ...................................................................... 70

SEGMENTOS, EXTENSIONES Y BLOQUES DE DATOS .............................................64

7.3 7.4

7.2.1 7.2.2 7.2.3 7.3.1 7.3.2 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.4.6

EXTENSIONES

.....................................................................................................69

SEGMENTOS .......................................................................................................70
Segmentos de Datos ............................................................................................... 70 Segmentos de ndices.............................................................................................. 70 Segmentos Temporales............................................................................................ 71 Segmentos Rollback ................................................................................................ 71 Vistas del diccionario de datos sobre Estructuras de Almacenamiento ............................. 72 Fragmentacin de Segmentos ................................................................................... 72

GESTIN DE SEGMENTOS DE ROLLBACK ..............................................................74 8.1 8.2 8.3 8.4


8.1.1
CONCEPTO .........................................................................................................74 TIPOS DE SEGMENTOS DE ROLLBACK ............................................................................75 CREACIN DE SEGMENTOS DE ROLLBACK .......................................................................76

Uso y Asignacin de Extensiones en Segmentos de Rollback .......................................... 74

8.3.1

VISTAS DEL DICCIONARIO DE DATOS SOBRE SEGMENTOS DE ROLLBACK....................................79

Activar/Desactivar/Borrar Segmentos de Rollback ........................................................ 78

GESTIN DE TABLAS............................................................................................81

Administracin de Oracle (V1.01)

Pg. 5

Aubay Espaa - Formacin

9.1 9.2

FORMATO Y TAMAO DE LAS FILAS ..............................................................................81 TIPOS DE DATOS ORACLE

9.3

9.2.1 9.2.2 9.2.3 9.3.1 9.3.2 9.3.3 9.3.4 9.4.1 9.4.2 9.4.3 9.4.4

CREACIN DE TABLAS ............................................................................................86


Instrucciones para la Creacin de Tablas .................................................................... 88 Definicin de PCTFREE y PCTUSED............................................................................. 88 Migracin y Encadenamiento de Filas ......................................................................... 89 Control del Espacio Utilizado por las Tablas ................................................................. 89

Tipos de Datos Escalares .......................................................................................... 82 Recopilaciones ........................................................................................................ 85 Tipos de Datos de Relacin ....................................................................................... 85

........................................................................................82

9.4

MODIFICACIN DE TABLAS .......................................................................................90

9.5 9.6 10

.............................................................................................92 VISTAS DEL DICCIONARIO DE DATOS SOBRE TABLAS .........................................................93


TABLAS TEMPORALES

Liberacin de Espacio no Utilizado ............................................................................. 90 Truncado de una Tabla ............................................................................................ 91 Borrado de una Tabla .............................................................................................. 91 Borrado de una Columna.......................................................................................... 91

GESTIN DE NDICES.....................................................................................95
10.1.1 10.1.2 10.1.3 10.2.1 10.2.2 10.2.3 10.2.4 10.3.1 10.3.2 10.3.3 10.3.4 10.4.1 10.4.2 10.4.3 10.4.4

10.1

CLASIFICACIN LGICA .......................................................................................95


ndices Concatenados o de Columna nica............................................................... 95 ndices nicos y No nicos .................................................................................... 95 ndices basados en Funciones ................................................................................ 95

10.2

CLASIFICACIN FSICA.........................................................................................96

10.3

CREACIN DE NDICES ....................................................................................... 100

Estructura de un ndice B-Tree............................................................................... 96 ndice de Clave Invertida ...................................................................................... 97 ndices Bitmap .................................................................................................... 98 Comparacin ndices B-Tree y Bitmap ................................................................... 100 Instrucciones en la Creacin de ndices ................................................................. Creacin de ndices B-Tree Normales .................................................................... Creacin de ndices B-Tree de Clave Invertida........................................................ Creacin de ndices Bitmap ................................................................................. Cambio de los Parmetros de Almacenamiento para ndices ..................................... Asignacin y Liberacin de Espacio de ndice.......................................................... Reconstruccin de ndices ................................................................................... Borrado de ndices .............................................................................................

10.4

MODIFICACIN DE NDICES

................................................................................. 103

100 101 102 102

10.5 11 11.1

VISTAS DEL DICCIONARIO DE DATOS SOBRE NDICES .................................................... 105

103 103 104 105

MANTENIMIENTO DE LA INTEGRIDAD DE LOS DATOS ..................................107


RESTRICCIONES DE INTEGRIDAD

11.2 11.3 11.4 12 12.1

11.1.1 11.1.2 11.1.3 11.2.1 11.2.2

Tipos de Restricciones ........................................................................................ 107 Restricciones Diferidas/No Diferidas ...................................................................... 108 Estados de Restriccin ........................................................................................ 109
IMPLEMENTACIN DE RESTRICCIONES

........................................................................... 107

MANTENIMIENTO DE RESTRICCIONES....................................................................... 113 VISTAS DEL DICCIONARIO DE DATOS SOBRE RESTRICCIONES ........................................... 114

Instrucciones para Definir Restricciones................................................................. 111 Consideraciones sobre la Clave Ajena.................................................................... 112

..................................................................... 110

GESTIN DE USUARIOS................................................................................116
CREACIN DE USUARIOS

.................................................................................... 116

Administracin de Oracle (V1.01)

Pg. 6

Aubay Espaa - Formacin

12.2 12.3 12.4 13 13.1 13.2 14 14.1

MODIFICACIN DE USUARIOS ............................................................................... 118

SUPRESIN DE USUARIOS ................................................................................... 119 VISTAS DEL DICCIONARIO DE DATOS SOBRE USUARIOS .................................................. 119 GESTIN DE PRIVILEGIOS ...........................................................................121
PRIVILEGIOS DE SISTEMA

13.1.1 13.2.1

PRIVILEGIOS DE OBJETO ..................................................................................... 125

Vistas Mostrar Privilegios del Sistema.................................................................... 124 Vistas Mostrar Privilegios de Objetos..................................................................... 126

................................................................................... 121

GESTIN DE ROLES ......................................................................................127


14.1.1 14.1.2 14.1.3 14.1.4 14.1.5
CREACIN, MODIFICACIN, ASIGNACIN Y BORRADO DE ROLES ........................................ 127

14.2 14.3 15 15.1

ACTIVACIN Y DESACTIVACIN DE ROLES ................................................................. 129 VISTAS MOSTRAR INFORMACIN DE ROLES ............................................................... 129

Creacin de Roles .............................................................................................. Modificacin de Roles.......................................................................................... Asignacin de Roles............................................................................................ Borrado de Roles ............................................................................................... Uso de Roles Predefinidos....................................................................................

127 127 128 128 128

UTILIDADES: IMPORT, EXPORT, SQL*LOADER .............................................132


15.1.1 15.1.2 15.1.3 15.1.4 15.2.1 15.3.1
EXPORT ........................................................................................................ 132

15.2 15.3 16 16.1 16.2 16.3 16.4 16.5

IMPORT ........................................................................................................ 135 SQL*LOADER

Modo Tabla ....................................................................................................... Modo Usuario .................................................................................................... Modo Base de Datos Completa ............................................................................. Parmetros de la utilidad Export...........................................................................

133 133 133 133

Parmetros de la utilidad Import .......................................................................... 135 Formato del Fichero de Control ............................................................................ 138

................................................................................................. 137

PRCTICAS...................................................................................................140 2: COMPONENTES DE LA ARQUITECTURA ORACLE ................................................. 140 3: GESTIN DE UNA INSTANCIA ORACLE ............................................................ 141 TEMA 4: CREACIN DE UNA BASE DE DATOS ORACLE .................................................... 141 TEMA 5: DICCIONARIO DE DATOS .......................................................................... 142 TEMA 6: GESTIN DE TABLESPACES Y FICHEROS DE DATOS ............................................. 142
TEMA TEMA

Administracin de Oracle (V1.01)

Pg. 7

Aubay Espaa - Formacin

1 INTRODUCCIN AL DOCUMENTO
1.1 OBJETO
Este documento contiene la informacin necesaria para iniciarse en la Administracin Bsica de Oracle de modo que, al finalizar el curso el alumno sea capaz de iniciarse directamente en el mantenimiento y gestin de bases de datos Oracle.

1.2 ALCANCE

Este documento puede utilizarse como gua de estudio autodidacta, o como ayuda a un curso tutelado.

1.3 DESTINATARIOS

Los destinatarios principales de este documento son las personas interesadas en iniciarse en la Administracin Bsica de Oracle.

1.4 DOCUMENTACIN DE REFERENCIA


Documento
Documentacin diversa http://otn.oracle.com Oracle9i DBA Fundamentos (I y II) http://metalink.oracle.com

Referencia Versin
Internet Internet Gua de Estudio Internet

Fecha

1.5 CONVENCIONES NOTACIONALES


Notacin Descripcin

Administracin de Oracle (V1.01)

Pg. 8

Aubay Espaa - Formacin

Notacin

Descripcin

Administracin de Oracle (V1.01)

Pg. 9

Aubay Espaa - Formacin

2 COMPONENTES DE LA ARQUITECTURA ORACLE


2.1 ESTRUCTURA DE LA BASE DE DATOS
Una base de datos ORACLE es un sistema de gestin de base de datos relacionales de objetos que proporciona un enfoque abierto. El objeto habitual de una base de datos es almacenar y recuperar informacin. Una base de datos puede estar abierta (accesible) o cerrada (inaccesible). En situaciones normales una base de datos est accesible y preparada para su utilizacin, sin embargo, hay veces que para realizar labores administrativas especficas la base de datos debe estar no accesible para los usuarios. Una base de datos Oracle est compuesta de tres partes bsicas: Memoria. Puede ser memoria asociada a procesos de usuario (PGA) y por lo tanto privada, o tambin memoria asociada al servidor Oracle, se llama memoria Compartida o SGA. Esta ltima zona de memoria son buffers que oracle toma del sistema operativo al tiempo de arrancar la BD; su tamao est determinado por el fichero de inicializacin de la base de datos, que se llama habitualmente init<SID>.ora (SID es el nombre de la BD). En la SGA se sitan datos, informacin del diccionario de datos, gestin de bloqueos, etc Procesos. Existen dos tipos de procesos: Procesos de usuario, p.e. sqlplus, sqlforms.Procesos background o procesos de oracle como DBWR, LGWR Ficheros de Datos. Existen 3 tipos de ficheros: o REDO LOG: Sirven para mantener la consistencia en caso de fallo. o Fichero de Control: Contienen informacin para poder arrancar la BD, su nombre, fecha de creacin, ficheros asociados a la BD, etc o Ficheros de Datos: Son los ficheros donde se almacena la informacin de la BD. Una base de datos contempla 3 aspectos: Estructuras: Son objetos definidos que almacenan la informacin de una BD. El acceso a las estructuras y los datos contenidos en ellas se realiza mediante operaciones. Operaciones: Las operaciones son las acciones que nos permiten acceder y manipular los datos y las estructuras. Las operaciones en una BD suelen ajustarse a una serie de reglas de integridad predefinidas. Reglas de Integridad: Son las leyes que rigen las operaciones que permiten acceder a los datos y manipularlos. Sirven para proteger los datos y las estructuras que los contienen. El servidor Oracle est formado por una instancia y una base de datos Oracle. Instancia Oracle: Una instancia Oracle es la combinacin de los procesos en background y las estructuras de memoria. Es necesario iniciar la instancia para acceder a los datos de la BD. Cada vez que se inicia una instancia se asigna un rea global del sistema (SGA) y se inician los procesos en background Oracle. El SGA es una zona de memoria que se utiliza para almacenar la informacin de la base de datos que comparten los procesos asociados a la BD. Los procesos en background desempean funciones de E/S y supervisan a otros procesos para proporcionar un mayor paralelismo con el fin de conseguir un mejor rendimiento y fiabilidad.

Administracin de Oracle (V1.01)

Pg. 10

Aubay Espaa - Formacin

2.2 FICHEROS DE LA BASE DE DATOS ORACLE

Fig. 2.1 Ficheros BBD Oracle Una base de datos Oracle es una recopilacin de datos que se tratan como una unidad. La base de datos tiene una estructura lgica y una fsica. La estructura fsica es el conjunto de ficheros del sistema operativo asociados a la BD. Una base de datos Oracle consta de tres tipos de ficheros: Los ficheros de datos, que contienen los datos reales de la BD. Los datos se almacenan en tablas definidas por el usuario, pero tambin contienen el diccionario de datos, imgenes anteriores de los datos modificados, ndices y otros tipos de estructuras. Las caractersticas de los ficheros de datos son las siguientes: o Un fichero de datos slo puede estar asociado con una BD. o Los ficheros de datos pueden tener caractersticas definidas que les permiten extenderse de forma automtica cuando el tamao definido inicialmente se ha completado. o Uno o ms ficheros de datos forman una unidad lgica de almacenamiento de base de datos conocida como tablespace. Los ficheros de Redo Log, contienen registros de los cambios efectuados en la base de datos con el objeto de poder recuperar los datos en caso de fallos. Una base de datos Oracle necesita al menos dos ficheros de redo log. Los ficheros de Control, contienen la informacin necesaria para mantener y verificar la integridad de la base de datos. Por ejemplo, un fichero de control se usa para identificar los ficheros de datos y redo log. Una base de datos Oracle necesita al menos un fichero de Control. El servidor Oracle tambin utiliza otros ficheros que no forman parte de la base de datos pero son necesarios para un correcto funcionamiento de la misma:

Administracin de Oracle (V1.01)

Pg. 11

Aubay Espaa - Formacin

Fig. 2.2 Ficheros Auxiliares BD Oracle El fichero de parmetros, define las caractersticas de una instancia Oracle. Por ejemplo contiene los parmetros que especifican el tamao de las estructuras de la memoria en el SGA. Los ficheros del protocolo SQLNet, (listener.ora, tnsnames.ora y sqlnet.ora). Permiten el acceso a la base de datos por parte de las aplicaciones. Los ficheros Archive-Log, son copias de los ficheros redo log, que pueden ser necesarios para recuperar la BD en el caso de fallos del medio fsico.

2.3 INSTANCIA ORACLE

Estructura de Memoria

Procesos en background

Fig. 2.3 Instancia BD Oracle Una instancia oracle se compone de la estructura de la memoria SGA y de los procesos en background que se utilizan para gestionar una base de datos. La instancia slo podr abrir y utilizar una base de datos a la vez.

Administracin de Oracle (V1.01)

Pg. 12

Aubay Espaa - Formacin

2.3.1 Area Global del Sistema (SGA)

Fig.2.4 SGA de una BD Oracle El SGA es una zona de memoria compartida que se utiliza para almacenar la informacin de la base de datos y que es compartida por los procesos de la BD. Contiene informacin de datos y de control para el servidor Oracle. El SGA est formada por diversas estructuras: El conjunto compartido, se utiliza para almacenar las ltimas sentencias SQL ejecutadas y los ltimos datos utilizados por el diccionario de datos. Las sentencias SQL pueden ser enviadas por procesos de usuario o bien por procedimientos almacenados. La cach de buffers, se utiliza para almacenar los ltimos datos que se hayan utilizado. El buffer de redo log, se utiliza por los procesos en background para hacer un seguimiento de los cambios realizados en la base de datos. Ms adelante se explica en detalle las estructuras de la SGA. Tambin hay otra estructura de memoria opcional en el SGA, el conjunto Java, se utiliza para almacenar cdigo Java.

2.3.2 Procesos en Background

Fig.2.5 Procesos en Bakground de una BD Oracle

Administracin de Oracle (V1.01)

Pg. 13

Aubay Espaa - Formacin

Los procesos en background de una instancia tienen por objeto atender las solicitudes de usuarios simultneos sin comprometer la integridad ni el rendimiento del sistema. En funcin de la configuracin de la instancia Oracle se pueden incluir diferentes procesos en background, aunque cada instancia incluye siempre estos cinco procesos: Database Write (DBW0): Es el responsable de escribir los datos cambiados desde la cach de buffers de base de datos en los ficheros de datos. Log Writer (LGWR): Escribe los cambios registrados en el buffer de redo log a los ficheros Archive-Log. El Monitor del Sistema (SMON): Comprueba la consistencia de la BD y si es necesario inicia la recuperacin de la base de datos cuando se abre. El Monitor de Procesos (PMON): Limpia los recursos si falla uno de los procesos. El Proceso de Punto de Control (CKPT): Es el responsable de actualizar la informacin de estado de la BD de los ficheros de control y de datos.

2.4 CONEXIN A UNA BASE DE DATOS

Fig.2.6 Conexin a una BD Antes que los usuarios puedan enviar sentencias SQL a Oracle se deben conectar a una instancia: El usuario inicia una aplicacin, por ejemplo sqlplus. Esta aplicacin se ejecutar en un proceso de usuario. En la configuracin ms bsica, cuando un usuario se conecta a un servidor Oracle, se crea un proceso en el equipo que ejecuta el servidor Oracle. A este proceso se le llama proceso de servidor y se comunicar con la instancia Oracle en nombre del proceso del usuario que se ejecuta en el cliente. El proceso de servidor ejecutar las sentencias SQL en nombre del usuario. Una conexin no es ms que una ruta de comunicacin entre un proceso de usuario y una instancia Oracle.

Administracin de Oracle (V1.01)

Pg. 14

Aubay Espaa - Formacin

En estos casos hay una correspondencia uno a uno entre un proceso de usuario y de servidor, y se denomina conexin de servidor dedicado. Cuando se utiliza una configuracin de servidor multithread (MTS), muchos procesos de usuario podrn compartir un proceso de servidor.

2.5 PROCESAMIENTO DE UNA CONSULTA


Las consultas son diferentes a otros tipos de sentencias SQL, ya que, si son correctas devuelven los datos como resultados y otras sentencias SQL devuelven xito o fallo al procesamiento de dicha sentencia. Tres son las etapas principales en el procesamiento de una consulta: 1. Anlisis 2. Ejecucin 3. Recuperacin Anlisis de una Sentencia SQL: Durante esta etapa la sentencia SQL se transfiero del proceso de usuario al de servidor y se carga una representacin analizada de la sentencia en un rea SQL compartida. Durante el anlisis el proceso servidor: Busca una copia existente de la sentencia en el zona de memoria compartida. Valida la sentencia SQL comprobando su sintaxis. Realiza bsquedas en el diccionario de datos para validar las definiciones de tablas y columnas. Establece bloqueos de anlisis en objetos de forma que no cambien sus definiciones durante el anlisis de la sentencia. Comprueba los privilegios que el usuario dispone para acceder a los objetos que se referencian en la consulta. Determina el plan de ejecucin ptimo de la sentencia. Carga la sentencia y el plan de ejecucin en un rea SQL compartida.

La etapa de anlisis incluye el procesamiento de los requisitos que, normalmente, slo se deben realizar una vez, independientemente de las veces que se ejecute la sentencia. El anlisis slo identifica los errores que puedan encontrarse antes de ejecutar la sentencia, con lo cual hay ciertos errores que se van a escapar de la fase de anlisis y slo pueden notificarse durante la etapa de ejecucin. Ejecucin de una Sentencia SELECT: El servidor Oracle dispone de toda la informacin y recursos necesarios, por lo que se ejecuta la sentencia. Recuperacin de las Filas de una Consulta: El servidor selecciona, ordena (si es necesario) y devuelve los registros al usuario.

2.6 EL CONJUNTO COMPARTIDO (SHARED POOL)

Administracin de Oracle (V1.01)

Pg. 15

Aubay Espaa - Formacin

Durante la etapa de anlisis de una sentencia SQL, el proceso de servidor utiliza el rea del SGA, conocida como conjunto compartido para compilar la sentencia SQL. Este conjunto est formado de dos componentes principales: Cach de biblioteca. Cach del diccionario de datos. Cach de Biblioteca: Almacena informacin acerca de las ltimas sentencias SQL que se hayan utilizado, y contiene: El texto de la sentencia SQL El rbol de anlisis: Una versin compilada de la sentencia. El plan de ejecucin: Los pasos a seguir cuando se ejecuta la sentencia. El optimizador es la funcin del servidor Oracle que determina el plan de ejecucin ptimo.

Si se vuelve a ejecutar una sentencia SQL y un rea SQL compartida ya dispone del plan de ejecucin de dicha sentencia, el proceso de servidor no necesitar analizar la sentencia. De esta forma la cach de biblioteca mejora el rendimiento de las aplicaciones que vuelven a utilizar las sentencias SQL, reduciendo el tiempo de anlisis y los requisitos de memoria. Si la sentencia SQL no se vuelve a utilizar, al final caducar en dicha cach y ser reemplazada aplicando el algoritmo LRU. Cach del Diccionario de Datos: Es una coleccin de las ltimas definiciones utilizadas en la base de datos. Incluye informacin acerca de los archivos de datos, columnas, usuarios, privilegios y otros objetos de la BD. Durante la fase de anlisis, el proceso servidor busca informacin en dicha cach para validar los privilegios de acceso. Si fuese necesario el proceso servidor inicia la carga de esta informacin de los archivos de datos. Especificacin del Tamao del Conjunto Compartido: El tamao del conjunto compartido lo especifica el parmetro de inicializacin SHARED_POOL_SIZE.

2.7 CACH DE BUFFERS DE DATOS


Cuando se procesa una consulta, el proceso servidor busca en la cach de buffers de datos los bloques que necesita. Si no se encuentra el bloque en la cach de datos, entonces el proceso servidor lee el bloque en el archivo de datos y coloca una copia en dichos buffers. De esta forma las siguientes solicitudes para el mismo bloque encontrarn el bloque en memoria, y dichas solicitudes no necesitarn realizar lecturas fsicas. El servidor Oracle utiliza el algoritmo LRU para hacer caducar los buffers a los que se ha accedido recientemente, para dejar sitio a los nuevos bloques en la cach de buffers. Especificacin del Tamao de la Cach de Buffers de la Base de Datos: El tamao de cada buffer en la cach de buffers equivale al tamao de un bloque de oracle, y lo especifica el parmetro DB_BLOCK_SIZE. El nmero de buffers equivale al valor del parmetro DB_BLOCK_BUFFERS.

2.8 REA GLOBAL DE PROGRAMAS (PGA)

Administracin de Oracle (V1.01)

Pg. 16

Aubay Espaa - Formacin

Es una regin de la memoria que posee los datos y la informacin de los controles de un nico proceso de servidor o de un nico proceso en background. A diferencia del SGA, que comparten varios procesos, el PGA es un rea que slo utiliza un proceso. En una configuracin de servidor dedicado, el PGA de servidor incluye los siguientes componentes: rea de ordenacin: Se utiliza para cualquier ordenacin necesaria para procesar la sentencia SQL. Informacin de la sesin: Incluye los privilegios de usuario y las estadsticas del rendimiento de la sesin. Estado del Cursor: Indica la etapa en el procesamiento de las sentencias que la sesin utiliza en ese momeno. Espacio de la Pila: Contiene otras variables de la sesin. El PGA se asigna cuan se crea un proceso y se libera cuando dicho proceso termina. Si se utiliza una configuracin de servidor Multithread (MTS) entonces algunas de estas estructuras se almacenarn en el SGA. Gracias a una configuracin MTS, es posible que muchos procesos de usuario compartan un nico proceso de servidor.

2.9 PROCESAMIENTO DELETE,UPDATE)

DE

UNA

SENTENCIA

DML

(INSERT,

Fig.2.7 Procesamiento de una sentencia DML Una sentencia del Lenguaje de Manipulacin de Datos (DML) slo requiere dos fases de procesamiento: Anlisis, es la misma que la utilizada para procesar una consulta. Ejecucin, requieren de un procesamiento adicional para efectuar cambios de datos. Fase de Ejecucin DML Para ejecutar una sentencia DML:

Administracin de Oracle (V1.01)

Pg. 17

Aubay Espaa - Formacin

1. Si los bloques de datos y de rollback no estn en la cach de buffers, el proceso de servidor los leer en los ficheros de datos y los llevar a dicha cach. 2. El proceso servidor realiza los bloqueos en las filas que se deben modificar. 3. En el buffer de redo log, el proceso servidor registra los cambios que se deban efectuar en el rollback y en los datos. Los cambios del bloque de rollback registran los valores de los datos antes que se modifiquen. El bloque de rollback se utiliza para almacenar la imagen anterior de los datos, de forma que se puedan deshacer los cambios de las sentencias DML si fuera necesario. Los cambios de los bloques de datos registran los nuevos valores de los datos. 4. El proceso de servidor registra la imagen anterior en el bloque de rollback y actualiza el bloque de datos. Estos dos cambios se llevan a cabo en la cach de buffers de datos. Cualquier bloque que se cambie en el cach de buffers ser marcar como buffer sucio, es decir, aquellos buffers que no son los mismos que los bloques correspondientes en el disco.

2.10 BUFFER DE REDO LOG


El proceso de servidor registra la mayor parte de los cambios efectuados a los bloques de archivos de datos en el buffer de redo log, que es una parte de la SGA. El buffer de redo log tiene las siguientes caractersticas: Su tamao en bytes lo define el parmetro LOG_BUFFER. Registra el bloque que se modifica, la ubicacin del cambio y el nuevo valor, en un registro de redo. Un registro redo no distingue el tipo de bloque que se cambia, simplemente registra los bytes que se cambian en el bloque. El buffer de redo log se usa de forma secuencial, y los cambios que lleve a cabo una transaccin se pueden intercalar con los efectuados por otras transacciones. Se trata de un buffer circular que se vuelve a utilizar despus de llenarlo, aunque nicamente cuando los registros de redo se hayan registrado en los ficheros de redo log.

2.11 SEGMENTO DE ROLLBACK


Antes de realizar un cambio, el proceso de servidor guarda el valor de datos antiguo en un segmento de rollback. Esta imagen anterior se utiliza para: Deshacer los cambios en caso de anular la transaccin. Proporciona consistencia de lectura, asegurndose que otras transacciones no vean los cambios no validados realizados por la sentencia DML. Recuperar la consistencia del estado de la base de datos en caso de fallo. Los segmentos de rollback como las tablas y los ndices, existen en los archivos de datos, mientras que los bloques de rollback se introducen en el buffer de base de datos a medida que se necesitan. Los cambios efectuados en los segmentos de rollback se registran en el buffer de redo log.

Administracin de Oracle (V1.01)

Pg. 18

Aubay Espaa - Formacin

2.12 PROCESAMIENTO COMMIT

Fig.2.8 Procesamiento del COMMIT La sentencia SQL COMMIT es el mecanismo que utiliza Oracle para confirmar los datos de una transaccin en la base de datos, y que dichos cambios puedan ser visualizados por el resto de los usuarios. Siempre que se valida una transaccin, el servidor Oracle asigna un nmero de cambio del sistema de validacin (SCN) a la transaccin. El SCN se incrementa regularmente y es nico en la base de datos. Este nmero lo utiliza el servidor Oracle como un registro interno para sincronizar los datos y proporcionar consistencia de lectura cuando se recuperan datos de archivos de datos. Pasos para el Procesamiento de COMMIT A continuacin se muestran los pasos que a seguir cuando se emite la sentencia COMMIT: 1. El proceso de servidor coloca un registro de validacin, junto con el SCN, en el buffer de redo log 2. El proceso LGWR realiza una escritura contigua de todos los registros de buffers de redo log hasta ese momento e incluye el registro de validacin en los archivos de redo log. De esta forma el servidor Oracle garantiza que los cambios no se perdern si falla la instancia. 3. Se informa al usuario que el COMMIT ha finalizado 4. El proceso de servidor registra la informacin para indicar que la transaccin est completa y que los bloqueos de recursos se pueden liberar. El proceso DBW0 llevar a cabo el vaciado de los buffers de datos sucios en los ficheros de datos, y dicha accin la podr realizar antes o despus de la validacin.

Administracin de Oracle (V1.01)

Pg. 19

Aubay Espaa - Formacin

El hecho de deshacer una transaccin (ROLLBACK) no dispara la escritura en disco del proceso LGWR. El servidor Oracle deshace los cambios no validados cuando se recupera de fallos. En caso que aparezca un fallo despus de deshacer, antes de registrar los registros de rollback en disco, la ausencia de un registro de validacin ser suficiente para asegurar que se desharn los cambios realizados por la transaccin.

2.13 DATABASE WRITE (DBW)


El proceso de servidor registra los cambios en los bloques de rollback y de datos en la cach de buffers. El proceso DBW0 escribe los buffers sucios de la cach de buffers de base de datos en los ficheros de datos. Se asegura que haya un nmero suficiente de buffers libres, es decir, buffers que se puedan sobrescribir cuando los procesos de servidor necesiten leer bloques de los archivos de datos hacia la cach de buffers de base de datos. El rendimiento de la base de datos es mucho mejor, ya que los procesos de servidor slo realizan cambios en la cach de buffers, y el proceso DBW0 difiere la escritura a los archivos de datos hasta que se produzca uno de los siguientes eventos: El nmero de buffers sucios alcanza un valor umbral. Un proceso explora un nmero determinado de bloques cuando explora buffers libres y no puede encontrar ninguno. Se produce un timeout cada tres segundos. Se produce un punto de control. Un punto de control es un medio de sincronizar la cach de buffer de base de datos con el archivo de datos.

El parmetro de inicializacin DB_WRITER_PROCESSES determina el nmero de procesos DBWn. El proceso DBW0 escribe los buffers de datos aplicando el algoritmo LRU.

2.14 LOG WITER (LGWR)


El proceso LGWR realiza escrituras secuenciales desde el buffer de redo log al archivo redo log en las siguientes situaciones: Cuando se valida una transaccin. Cuando el buffer de redo log se encuentra a un tercio de su capacidad. Cuando se registra ms de un MB de cambios en el buffer de redo log. Antes que el proceso DBW0 escriba los bloques modificados de la cach de buffers de base de datos en los archivos de datos.

Este proceso escribe de forma sncrona en los grupos de ficheros redo log online que se deben encontrar en configuracin mirror. Si uno de los ficheros del grupo est inaccesible, el proceso contina escribiendo en otros ficheros del grupo, mostrando un error en el fichero de la alerta de la instancia. Si todos los ficheros de un grupo estn inaccesibles, entonces este proceso no podr realizar su funcin. Si el proceso DBW0 al tiempo de escribir en los ficheros de datos encuentra registros redo que no han sido escritos en los ficheros de redo log, entonces indica al proceso LGWR que debe escribir dichos registros en los ficheros redo, esperando el proceso DBW0 a que se complete dicha operacin para que pueda escribir en los ficheros de datos.

Administracin de Oracle (V1.01)

Pg. 20

Aubay Espaa - Formacin

2.15 SYSTEM MONITOR (SMON)


Si falla la instancia Oracle se perder toda la informacin contenida en el SGA que no se haya escrito en el disco. Una vez que se haya perdido la instancia el proceso SMON realiza automticamente una recuperacin de la informacin no guardada cuando la base de datos se vuelve a abrir. La recuperacin de esta informacin se hace de la siguiente forma: 1. Se aplican transacciones pendientes para recuperar los datos que no se hayan registrado en los ficheros de redo log. Estos datos no se han escrito en los ficheros de datos debido al fallo de la instancia. Durante el proceso de arranque, SMON lee los ficheros redo log y aplica los cambios registrados en el redo log hacia los bloques de datos. Como todas las transacciones validadas se han escrito en los redo log, este proceso recupera completamente dichas transacciones. 2. Se deshacen las transacciones no validadas. Es SMON o los procesos de servidor individual los que las deshacen a medida que acceden a los datos no bloqueados. Este proceso SMON tambin realiza funciones de mantenimiento del espacio: Combina o fusiona las reas adyacentes de espacio libre en los ficheros de datos. Libera segmentos temporales para devolverlos como espacio libre en los ficheros de datos. Los segmentos temporales se utilizan para almacenar datos durante el procesamiento de sentencias SQL.

2.16 PROCESS MONITOR (PMON)


El proceso PMON hace una limpieza cuando los procesos del usuario han fallado: Deshace los cambios de las transacciones actuales del usuario Libera los bloqueos de tablas o filas Libera otros recursos que el usuario haya reservado hasta ese mometo. Otra de las funciones que realiza el proceso PMON es registrar la instancia con el proceso listener del protocolo SQLNet.

2.17 CHECKPOINT PROCESS (CKPT)


En un instante de tiempo dado, todas las modificaciones realizadas en los buffers de datos del SGA van a ser escritos en los ficheros de datos a travs del proceso DBW; Este evento se llama checkpoint. el proceso Checkpoint es el responsable de indicar al proceso DBW los eventos checkpoints y actualizar todos los ficheros de datos y de control de la base de datos.

2.18 ARCHIVER PROCESS (ARC)


Este proceso es fundamental para la recuperacin de una base de datos tras la prdida de un disco. A medida que se llenan los ficheros de redo log de un grupo, el servidor Oracle comienza a escribir en los ficheros de redo log de otro grupo. A este proceso de cambiar de redo log es lo que se llama cambio de log.

Administracin de Oracle (V1.01)

Pg. 21

Aubay Espaa - Formacin

Una de las decisiones importantes que debe tomar un DBA es si debe configurar la instancia en modo ARCHIVELOG o modo NOARCHIVELOG. Modo NOARCHIVELOG En este modo, los ficheros de redo log se sobrescriben cada vez que se produce un cambio de log. Sin embargo el proceso LGWR no sobrescribir un grupo de redo log hasta que el punto de control se haya completado para ese grupo. Esto asegura que los datos validados se pueden recuperar si se produce un error de la instancia. Durante el error de la instancia solo se perder la informacin almacenada en la SGA y no guardada en los ficheros de redo log. Modo ARCHIVELOG En caso de que la instancia se configure para trabajar en modo ARCHIVELOG, ser necesario archivar los grupos de redo log llenos antes que se puedan volver a utilizar de nuevo. Como los cambios efectuados en la base de datos se registran en los ficheros de redo log y si est configurada en este modo dichos registros se guardan en los ficheros ARCHIVELOG, se podr recuperar una base de datos de forma completa en caso de fallo en disco. Generalmente se suele configurar una base de datos de produccin en este modo. Proceso ARC0 Este proceso realiza copias de seguridad de los ficheros de redo log llenos en cada cambio de log. Para llevar a cabo el archivado de forma automtica es necesario que el parmetro ARCHIVE_LOG_START est establecido a true.

Administracin de Oracle (V1.01)

Pg. 22

Aubay Espaa - Formacin

Fig. 2.9Ficheros,SGA y Procesos BD Oracle

Administracin de Oracle (V1.01)

Pg. 23

Aubay Espaa - Formacin

3 GESTIN DE UNA INSTANCIA DE BASE DE DATOS ORACLE

Fig. 3.1Arrnque y Parada Instancia Oracle

3.1 ARRANQUE DE UNA INSTANCIA DE BASE DE DATOS


Una base de datos Oracle no est disponible a los usuarios hasta que haya sido iniciada la instancia y abierta la base de datos. A continuacin se muestran los eventos que se producen durante el inicio de una base de datos. En cada evento la base de datos Oracle atraviesa varias etapas: 1. Inicio de una instancia 2. Montaje de la base de datos 3. Apertura de la base de datos Cada vez que se inicia una instancia, Oracle utiliza un fichero de parmetros, que contiene los parmetros de inicializacin para asignar el SGA e iniciar los procesos en background. Si se inicia la instancia y se abre una base de datos, los pasos a seguir para cerrar dicha base de datos, son: 1. Cerrar la base de datos 2. Desmontar la base de datos 3. Cerrar la instancia Inicio de la Instancia El inicio de una instancia incluye las siguientes tareas: Lectura del fichero de parmetros Asignacin del SGA

Administracin de Oracle (V1.01)

Pg. 24

Aubay Espaa - Formacin

Inicio de los procesos en background Apertura del fichero de alerta

Montaje de la Base de Datos Este estado est especificado para realizar operaciones de mantenimiento, por ejemplo, durante las siguientes tareas: Cambio del nombre de los ficheros de datos Activacin y desactivacin de las opciones de archivado redo log Recuperacin completa de una base de datos

El montaje incluye las siguientes tareas: Asociacin de una base de datos con una instancia iniciada previamente Ubicacin y apertura de los ficheros de control especificados en el fichero de parmetros Lectura de los ficheros de control para obtener los nombres y el estado de los ficheros de datos y redo log

Apertura de la Base de Datos La operacin normal de la base de datos significa que se inicia una instancia y que la base de datos se monta y se abre; lo que permite que cualquier usuario se conecte a la misma y realice operaciones de acceso a los datos. La apertura de la base de datos incluye las siguientes tareas: Apertura de los ficheros de datos Apertura de los ficheros redo log

Si no apareciese alguno de los ficheros de datos o de redo log, el servidor Oracle devolver un error. Durante esta etapa final el servidor Oracle comprueba que todos los ficheros de datos y de redo log se pueden abrir y comprueba la consistencia de la base de datos. Si fuese necesario, el proceso SMON iniciara la recuperacin de la instancia. Recuperacin de la Instancia El proceso en background SMON lleva a cabo automticamente la recuperacin de la instancia en caso de que haya existido un fallo de la misma. Este proceso utiliza los ficheros de redo log para recuperar los datos validados en la cach de buffers de la base de datos que se perdi debido al fallo de la instancia.

La recuperacin de la instancia consta de los siguientes pasos: 1. Aplicacin de las transacciones pendientes para recuperar los datos que no se hayan registrado en los ficheros de datos, sino en los redo log 2. Apertura de la base de datos, en lugar de esperar que se apliquen todas las transacciones pendientes antes de que la base de datos est disponible de nuevo.

Administracin de Oracle (V1.01)

Pg. 25

Aubay Espaa - Formacin

3. Aplicacin de las transacciones no validadas por los procesos de servidor a medida que acceden a los datos bloqueados.

3.1.1 Comando de Arranque de una instancia de BD


El Servidor Oracle utiliza el comando STARTUP para arrancar una instancia de base de datos. STARTUP [FORCE][RESTRICT][PFILE=nombrearchivo] [OPEN [RECOVER] [basededatos]| MOUNT | NOMOUNT] OPEN: Permite que los usuarios accedan a la base de datos. MOUNT: Monta la base de datos para ciertas actividades de DBA. NOMOUNT: Crea el SGA e inicia los procesos en segundo plano. PFILE: Permite el uso de un archivo de parmetros no por defecto para configurar la instancia. FORCE:Aborta la instancia en ejecucin antes de realizar un inicio normal. RESTRICT: Slo permite el acceso a los usuarios con el privilegio RESTRICTED SESSION. RECOVER:Comienza la recuperacin del medio fsico.

3.1.1.1Cambio de la disponibilidad de la Base de Datos


Para abrir la base de datos desde una etapa STARTUP NOMOUNT a otra MOUNT o desde MOUNT a OPEN, es necesario utilizar el comando ALTER DATABASE. ALTER DATABASE { MOUNT | OPEN } Para evitar que las transacciones de usuario modifiquen la informacin contenida en la base de datos, oracle permite abrir las base de datos en modo solo lectura. Para iniciar una instancia en este modo se puede ejecutar el siguiente comando: ALTER DATABASE OPEN [ READ WRITE | READ ONLY ] Donde READ WRITE abre la base de datos en modo lectura escritura, lo que permite que los usuarios generen registros de redo log y en READ ONLY restringe a los usuarios a transacciones de solo lectura, evitando que los usuarios generen informacin de redo log. La utilizacin de una base de datos en modo solo lectura est especialmente diseada para tiempos en los que la base de datos de produccin se encuentre realizando operaciones de mantenimiento y no se desea que los usuarios prescindan de consultar la informacin contenida en la base de datos.

3.2 PARADA DE UNA INSTANCIA DE BASE DE DATOS


Cierre de la Base de Datos Cuando se cierra la base de datos el servidor Oracle escribe los cambios de la cach de buffers y los registros de la cach de buffers de redo log en los ficheros de datos y en los ficheros de redo log respectivamente. Despus de esta operacin, cierra todos los ficheros de datos y de

Administracin de Oracle (V1.01)

Pg. 26

Aubay Espaa - Formacin

redo log. Los ficheros de control permanecen abiertos mientras una base de datos est cerrada pero todava montada. Desmontaje de la Base de Datos El segundo paso es desmontar la base de datos de una instancia. Una vez desmontada slo quedar la instancia, esto es, los procesos en background y la SGA. Cuando se desmonta una base de datos el servidor Oracle cierra los ficheros de control. Cierre de la Instancia El ltimo paso es cerrar la instancia, en el cual, se cerrarn los ficheros de alerta, se libera la memoria ocupada por la SGA y se terminan todos los procesos en background.

3.2.1 Comando de Parada de una instancia de BD


El Servidor Oracle utiliza el comando SHUTDOWN para parar una instancia de base de datos. SHUTDOWN [NORMAL | TRANSACTIONAL | IMMEDIATE | ABORT] NORMAL: Es el modo de cierre por defecto. Este cierre se lleva a cabo en las siguientes condiciones: o o o o No se permiten nuevas conexiones. El servidor Oracle espera a que se desconecten todos los usuarios antes de completar el cierre. Oracle cierra y desmonta la base de datos antes de cerrar la instancia. El siguiente inicio no requiere una recuperacin de la instancia.

TRANSACTIONAL: Evita que los clientes pierdan trabajo. Un cierre transaccional de la base de datos se lleva a cabo en las siguientes condiciones: o o o o Ningn cliente puede iniciar una nueva transaccin en la instancia. Un cliente se desconecta cuando finaliza la transaccin en curso. Una vez finalizadas todas las transacciones, se produce un cierre inmediato. El siguiente inicio no requiere una recuperacin de la instancia.

IMMEDIATE: Este cierre se lleva a cabo en las siguientes condiciones: o o o o o No se completan las sentencias SQL que est procesando en ese momento el servidor Oracle. El servidor Oracle no espera hasta que se desconecten los usuarios actuales en la base de datos. Oracle deshace las transacciones activas. Oracle cierra y desmonta la base de datos antes de cerrar la instancia. El siguiente inicio no requiere una recuperacin de la instancia.

Administracin de Oracle (V1.01)

Pg. 27

Aubay Espaa - Formacin

ABORT: Si las opciones de cierre inmediato y normal no funcionan, entonces es necesario abortar la instancia de base datos. La interrupcin de una instancia se lleva a cabo en las siguientes condiciones: o o o o o Se terminan inmediatamente las sentencias SQL que el servidor Oracle est procesando. Oracle no espera hasta que se desconecten los usuarios. Oracle no deshace las transacciones no validadas. La instancia se termina sin cerrar los ficheros. El siguiente inicio requiere la recuperacin de la instancia. Modo de cierre Permitir nuevas conexiones Esperar a que finalicen las sesiones actuales Esperar a finalicen las transacciones actuales Forzar un punto de comprobacin y cerrar los archivos A X X X X I X X X O T X X O O N X O O O

3.3 FICHERO DE PARMETROS


El fichero de parmetros, al que generalmente se le denomina init<SID>.ora. Es un fichero de texto que se puede mantener a travs de un editor estndar del sistema operativo. Por defecto se ubica en el directorio $ORACLE_HOME/dbs en una mquina UNIX. Este fichero slo se lee durante el inicio de la instancia. Si se modifica el fichero, se debe reiniciar la instancia para que los valores de los parmetros modificados, tengan efecto. En la versin 9 y posteriores de Oracle se ha mejorado esta deficiencia ya que permite modificar los parmetros online y almacenarlos en el fichero spfile<SID>.ora. Este fichero no se puede modificar por un editor estndar del sistema, lo gestiona el propio servidor Oracle. Los parmetros de este fichero pueden tener un efecto trascendente en el rendimiento de la base de datos y es necesario modificar dichos parmetros en funcin del sistema en produccin. Algunos de dichos parmetros determinan: Especifica el tamao de los componentes de la SGA para optimizar el rendimiento Define los valores por defecto de la base de datos y de la instancia Define los lmites de los usuarios o de los procesos Define los lmites de los recursos de la base de datos Define los distintos atributos fsicos de la base de datos, como el tamao del bloque de datos Especifica los ficheros de control, los archive log, el fichero de alerta

Generalmente el servidor Oracle tiene un valor por defecto para cada parmetro. Este valor depende del sistema operativo. Los parmetros se pueden especificar en cualquier orden. Se pueden incluir ficheros adicionales con la palabra clave IFILE e indicando el nombre y ruta del fichero que se desea incluir. A continuacin se muestra un fragmento de un fichero de parmetros real de produccin:

Administracin de Oracle (V1.01)

Pg. 28

Aubay Espaa - Formacin

control_files

= (<ORACLE_DATA>/<ORACLE_SID>/ctrl1<ORACLE_SID>.ctl, <ORACLE_DATA>/<ORACLE_SID>/ctrl2<ORACLE_SID>.ctl, <ORACLE_DATA>/<ORACLE_SID>/ctrl3<ORACLE_SID>.ctl)

background_dump_dest core_dump_dest user_dump_dest

= <ORACLE_BASE>/admin/<ORACLE_SID>/bdump

= <ORACLE_BASE>/admin/<ORACLE_SID>/cdump = <ORACLE_BASE>/admin/<ORACLE_SID>/udump

log_archive_dest = <ORACLE_BASE>/admin/<ORACLE_SID>/arch/arch.log nls_date_format db_name rollback_segments db_files = 100 db_block_size = 8192 db_file_multiblock_read_count = 8 db_block_buffers = 3200 shared_pool_size = 10000000 log_checkpoint_interval = 10000 processes = 50 parallel_max_servers = 5 dml_locks = 200 log_buffer = 65536 = 'yyyymmddhh24miss' = <ORACLE_SID> = (r1_01,r1_02,r1_03,r1_04,r2_01,r2_02,r2_03,r2_04)

sort_area_size = 524288 sort_area_retained_size = 262144 optimizer_mode = RULE audit_trail = true #timed_statistics = true max_dump_file_size = 10240 log_archive_start = true

Administracin de Oracle (V1.01)

Pg. 29

Aubay Espaa - Formacin

global_names = FALSE open_cursors = 300 compatible = 8.1.0 utl_file_dir =* Entre los parmetros que se deben especificar y que se modifican frecuentemente estn: Parmetro BACKGROUND_DUMP_DES T COMPATIBLE CONTROL_FILES DB_BLOCK_BUFFERS DB_NAME SHARED_POOL_SIZE USER_DUMP_DEST LOG_BUFFER MAX_DUMP_FILE_SIZE PROCESSES SQL_TRACE TIMED_STATISTICS OPEN_CURSORS Descripcin Indica la ubicacin donde se escriben los ficheros de rastreo por los procesos en background. Tambin se incluye el fichero de Alerta del servidor Oracle. Versin de Oracle con el que la instancia ser compatible. Indica la ruta y los nombres de los ficheros de control. Nmero de bloques copiados en la memoria cach dentro del SGA Identificador del nombre de la base de datos. Este valor no puede superar los 8 caracteres. Es el nico requisito para crear la base de datos. Tamao en bytes del conjunto compartido. Ubicacin donde se crean los ficheros de rastreo de los procesos de usuario. Nmero de bytes asignados al buffer de redo log dentro del SGA. Tamao mximo de los ficheros de rastreo. Nmero mximo de procesos del sistema operativo que se pueden conectar simultneamente a una instancia. Activa o desactiva la utilidad de rastreo SQL por cada sesin de usuario. Activa o desactiva la temporizacin en los ficheros de rastreo. Indica el nmero mximo de cursores que pueden tener abiertos la instancia de la base de datos.

Las definiciones de los valores de los parmetros en una base de datos se pueden consultar en la vista del diccionario de datos V$PARAMETER o bien ejecutando el comando SHOW PARAMETER.

3.3.1 Parmetros Dinmicos


Algunos parmetros de inicializacin son dinmicos, esto es, se pueden modificar una vez inicializada la base de datos. Los comandos que permiten realizar dichas son modificaciones son: ALTER SESSION

Administracin de Oracle (V1.01)

Pg. 30

Aubay Espaa - Formacin

ALTER SYSTEM ALTER SYSTEM DEFERRED ALTER SESSION SET nombre_parametro = valor ALTER SYSTEM SET nombre_parametro = valor [DEFERRED]

El comando ALTER SESSION modifica el valor del parmetro slo en la sesin desde donde se est ejecutando. El comando ALTER SYSTEM cambia globalmente el valor del parmetro. El nuevo parmetro ser eficaz hasta que se cierre la base de datos. Si se desea hacer permanente este cambio ser necesario modificar el fichero de parmetros. En la versin 9 y posteriores de oracle esto se puede evitar si el fichero de parmetros que se usa para arrancar la instancia es el spfile<SID>.ora. El comando ALTER SYSTEM DEFERRED modifica el valor del parmetro para las futuras sesiones que se conecten a la base de datos. Se puede consultar la vista el diccionario de datos V$SYSTEM_PARAMETER para obtener que parmetros se pueden modificar. SQL> SELECT isses_modifiable,issys_modifiable,ismodified,name V$SYSTEM_PARAMETER WHERE ismodified <> FALSE; Las columnas muestran la siguiente informacin: isses_modifiable, indica si el parmetro se puede modificar por el comando ALTER SESSION. issys_modifiable, indica si el parmetro se puede modificar por el comando ALTER SYSTEM. Ismodified, si el valor es MODIFIED ha sido modificado por un comando ALTER SESSION, y si el valor es SYS_MODIFIED indica que ha sido modificado por un comando ALTER SYSTEM. FROM

La vista V$PARAMETER muestra los valores actuales de la sesin y V$SYSTEM_PARAMETER muestra los valores actuales del sistema independientes de la sesion. Los comandos ALTER SYSTEM o ALTER SYSTEM DEFERRED se registran en el fichero de rastreo ALERT<SID>. Ejemplos de utilizacin de estos comandos: ALTER SESSION SET SQL_TRACE = TRUE; ALTER SYSTEM SET TIMED_STATISTICS = TRUE; ALTER SYSTEM SET SORT_AREA_SIZE = 131072 DEFERRED; ALTER SYSTEM SET SHARED_POOL_SIZE = 64M; ALTER SYSTEM SET DB_CACHE_SIZE = 96M;

Administracin de Oracle (V1.01)

Pg. 31

Aubay Espaa - Formacin

3.4 VISTAS DINMICAS DE RENDIMIENTO


Se llaman vistas dinmicas de rendimiento ya que se actualizan constantemente, (por el servidor Oracle) mientras la base de datos permanece abierta y se utilice. Su contenido est relacionado con el rendimiento. Proporciona datos acerca de las estructuras fsicas (ficheros) y lgicas (memoria) de la base de datos. Las vistas dinmicas de rendimiento se identifican con el prefijo V_$ aunque Oracle proporciona sinnimos pblicos con el prefijo V$. Una vez iniciada la instancia en la etapa NOMOUNT, se podr acceder a las vistas dinmicas que se pueden leer desde la memoria. Las vistas que lean datos desde los ficheros de control precisarn que la base de datos est montada. La vista V$FIXED_TABLE muestra todas las vistas dinmicas de rendimiento. Ejemplo de un conjunto de vistas dinmicas: Nombre V$PARAMETER V$SGA V$OPTION V$PROCESS V$SESSION V$VERSION V$INSTANCE V$THREAD V$CONTROLFILE V$DATABASE V$DATAFILE V$DATAFILE_HEADE R V$LOGFILE Descripcion Contiene informacin acerca de los parmetros de incializacin Contiene informacin resumida sobre el SGA Enumera las opciones que se instalan en el servidor Contiene informacin acerca de los procesos activos actualmente Enumera la informacin de la sesin actual Enumera el nmero de versin y componentes Muestra el estado de la instancia actual Contiene informacin del thread, por ejemplo de los grupos de redo log Enumera los nombres de los ficheros de control Contiene informacin sobre la base de datos Contiene informacin de ficheros de datos y de los ficheros de control Contiene informacin acerca de la cabecera de los ficheros de datos y de los ficheros de control Contiene informacin acerca los ficheros de redo log Leen Datos SGA SGA SGA SGA SGA SGA SGA Fichero Control Fichero Control Fichero Control Fichero Control Fichero Control Fichero Control

Para obtener una lista completa de estas vistas y de la descripcin de las columnas se puede consultar el documento Oracle Reference.

Administracin de Oracle (V1.01)

Pg. 32

Aubay Espaa - Formacin

3.5 FICHERO ALERT Y DE RASTREO


Si se produce un error mientras se ejecuta la instancia Oracle, los mensajes se escribirn en el fichero ALERT. Durante el inicio de la base de datos, si no existe dicho fichero, el servidor Oracle crear uno. El fichero ALERT de una base de datos es un log cronolgico de mensajes y errores. Si un proceso en background detecta un error, la informacin del error se volcar en un fichero de log, en el cual el nombre del fichero indicar el nmero y nombre del proceso que ha creado dicho fichero. Los ficheros de log tambin pueden ser generados a peticin del usuario, es el caso si se desea realizar un rastreo de las sentencias SQL que se procesan en el servidor. Por ejemplo la sentencia ALTER SESSION SET sql_trace=TRUE; habilitar la creacin de ficheros de log por cada sentencia SQL que enve al servidor en dicha sesin. Los siguientes parmetros controlan la ubicacin y el tamao del fichero ALERT y de los ficheros de rastreo: BACKGROUND_DUMP_DEST: Define la ubicacin del fichero de rastreo de los procesos en backgruound como del fichero de ALERT de Oracle. USER_DUMP_DEST: Define la ubicacin de los ficheros de rastreo de los usuarios. MAX_DUMP_FILE_SIZE: Se especifica en bloques del sistema operativo. Limita el tamao de los ficheros de rastreo, no del fichero de ALERT ni de los ficheros de rastreo de los procesos en background.

Administracin de Oracle (V1.01)

Pg. 33

Aubay Espaa - Formacin

4 CREACIN BASE DE DATOS ORACLE


4.1 CONCEPTOS
La creacin de una base de datos es el primer paso en la gestin y organizacin de un sistema de base de datos. La creacin de una base de datos es una tarea que prepara varios archivos del sistema operativo y slo es necesario realizarla en una ocasin, independientemente de los ficheros de datos que tenga la base de datos. El proceso de creacin es muy importante, ya que va a determinar el tamao del bloque y el juego de caracteres de la base de datos, los cuales no se podrn cambiar una vez la base de datos haya sido creada. El comando CREATE DATABASE inicia la creacin de los ficheros de control, redo log y la estructura del diccionario de datos que necesita el servidor Oracle para acceder a la base de datos.

4.1.1 Consideraciones previas a la creacin de la Base de Datos


Ser necesario crear un usuario del sistema operativo que ser el encargado de gestionar el servidor Oracle y las bases de datos desde el punto de vista del sistema (SO). En los sistemas UNIX ser necesario modificar los parmetros del KERNEL para establecer el nmero de semforos y tamao de la memoria compartida que el servidor Oracle precisa para la gestin de la base de datos. Ser necesario calcular el espacio en disco del sistema que la base de datos va a necesitar para ubicar los ficheros de datos, redo log, y de control. Ser necesario establecer la variable de entorno ORACLE_SID para el usuario del sistema operativo que va a crear y gestionar dicha base y de datos. El valor de ORACLE_SID deber ser el nombre de la instancia. Se aconseja consultar las guas de instalacin especficas del sistema operativo para determinar el ajuste de los parmetros del Kernel.

4.1.2 Planificacin de la ubicacin de los ficheros


Oracle aconseja realizar dos copias activas de los ficheros de control al menos en dos dispositivos diferentes. De esta forma, si falla uno de los dispositivos, el otro podr continuar trabajando con la base de datos. Se aconseja multiplexar los grupos de ficheros redo log y en dispositivos diferentes por razones de seguridad. Respecto a los ficheros de datos se aconseja crear diferentes ficheros en funcin del contenido que se vaya a alojar en ellos. De esta forma se reduce la fragmentacin y la contencin de disco. Esto es, se debe separar los objetos de la base de datos con vidas tiles diferentes, como los datos de aplicacin y los datos temporales, en tablespaces distintos.

Administracin de Oracle (V1.01)

Pg. 34

Aubay Espaa - Formacin

4.1.3 Mtodos para crear una Base de Datos


Se puede crear una base de datos, bien con el asistente de configuracin, o mediante un fichero de comandos SQL diseado de forma manual. El asistente de configuracin est basado en Java y se puede iniciar desde cualquier plataforma desde el motor Java. Durante la instalacin del servidor Oracle se permite crear una base de datos con este asistente. En este documento nos vamos a centrar en la creacin de una base de datos de modo manual con el objeto de ver todas las opciones disponibles y su significado en la creacin de la base de datos.

4.2 CREACIN DE UNA BASE DE DATOS MANUALMENTE


El proceso de creacin de la base de datos se puede dividir en los siguientes pasos:

4.2.1 Configuracin del Entorno del Sistema Operativo


Habr que elegir un nombre nico para la base de datos, definir y ajustar las siguientes variables del entorno ORACLE_HOME: Especifica el directorio donde se ha instalado el Software de Oracle. ORACLE_SID: Especifica el nombre de la instancia y debe ser nico para las instancias que se ejecuten en la misma mquina, este valor debe tener un mximo de 8 caracteres. ORACLE_BASE: No es una variable necesaria, aunque se recomienda tenerla configurada, generalmente tiene como valor el directorio padre de ORACLE_HOME. ORA_NLS33: Es necesario crear una base de datos con un juego de caracteres diferente al US7ASCII. Como ejemplo ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data PATH: Habr que aadir a esta variable el valor de $ORACLE_HOME/bin LD_LIBRARY_PATH: Habr que aadir a esta variable el de valor de $ORACLE_HOME/lib

4.2.2 Preparacin del Fichero de Parmetros


Antes de crear la base de datos ser necesario establecer un fichero de parmetros inicial, no tiene que ser el definitivo de la base de datos en produccin. Dicho fichero de parmetros inicial debe especificar como mnimo los siguientes parmetros: DB_NAME: Indentificador de la base de datos de cmo mximo 8 caracteres. Este es el nico parmetro necesario para crear la base de datos. No es necesario que este

Administracin de Oracle (V1.01)

Pg. 35

Aubay Espaa - Formacin

parmetro coincida con ORACLE_SID, aunque debe coincidir con el nombre que se utilice en la sentencia CREATE DATABASE. CONTROL_FILES: Especifica una lista de ficheros de control. No es necesario que existan los ficheros de control en este momento cuando no se ha creado an la base de datos. DB_BLOCK_SIZE: Determina el tamao del bloque de la base de datos. El tamao del bloque no se podr cambiar una vez creada la base de datos.

El nombre de la base de datos se asocia con una base de datos en el momento en que sta se crea y se almacena en los ficheros de control. Para cambiar el nombre de una base de datos existente, se puede utilizar el comando CREATE CONTROLFILE para volver a crear el fichero de control. El cambio de nombre de una base de datos no es muy recomendable.

4.2.3 Inicio de la Instancia


El paso siguiente es arrancar la instancia y ponerla en estado NOMOUNT, para ello habr que conectarse al interfaz de comandos de Oracle SQLPLUS como un usuario SYSDBA y ejecutar el comando STARTUP con la opcin que corresponda: $ORACLE_HOME/bin/sqlplus / as sysdba startup nomount pfile=init<ORACLE_SID>_0.ora

4.2.4 Creacin de la Base de Datos


Para crear la base de datos ser necesario utilizar el comando CREATE DATABASE, el cual tiene la siguiente sintaxis:

Administracin de Oracle (V1.01)

Pg. 36

Aubay Espaa - Formacin

DATABASE: Es el nombre de la base de datos que hay que crear, si se omite este nombre, se utilizar el parmetro de inicializacin DB_NAME. LOGFILE GROUP: Especifica los nombres de los ficheros de redo log que se deben utilizar y el grupo al que pertenecen. MAXLOGFILES: Especifica el nmero mximo de grupos de ficheros redo log que se podrn crear en la base de datos. MAXLOGMEMBERS: Especifica el nmero mximo de ficheros redo log que puede tener un grupo. MAXLOGHISTORY: Especifica el nmero mximo de redo log archivados para la recuperacin automtica del medio fsico. DATAFILE: Especifica los ficheros de base de datos que se deben utilizar. AUTOEXTEND: Activa o desactiva la extensin automtica de ficheros de datos. MAXDATAFILES: Indica el nmero mximo de ficheros de datos que puede tener una base de datos. Este valor se almacena en la seccin inicial de los ficheros de control en tiempo de creacin de la base de datos o creacin de ficheros de control. Cualquier intento por aadir un nuevo fichero cuyo nmero sea mayor que este parmetro, aunque menor que el parmetro DB_FILES, provocar que el fichero de control se expanda de forma automtica, para que la seccin de fichero de datos pueda albergar ms ficheros. MAXINSTANCES: Indica el nmero mximo de instancias que puede abrir simultneamente la base de datos.

Administracin de Oracle (V1.01)

Pg. 37

Aubay Espaa - Formacin

ARCHIVELOG: Indica que los ficheros de redo log se deben archivar antes que se puedan volver a utilizar. CHARACTER SET: Es el juego de caracteres que utiliza la base de datos para almacenar datos. NATIONAL CHARACTER SET: Especifica el juego de caracteres nacional que se utiliza para almacenar datos o en columnas definidas. Si no se especifica, el juego de caracteres nacional ser el mismo que el juego de caracteres de la base de datos.

Si se utiliza REUSE en una especificacin de fichero, entonces el fichero deber existir, de lo contrario, tendr que especificar la opcin SIZE y el fichero no deber existir. El servidor Oracle asigna tanto espacio en los ficheros de control como necesiten los valores de los argumentos MAXLOGMEMBERS, MAXLOGFILES, MAXDATAFILES, MAXLOGHISTORY y MAXINSTANCES. No existe ningn comando de DROP DATABASE. Para suprimir una base de datos, se deber suprimir los ficheros de datos, de control y de redo log del sistema operativo. Se puede utilizar la siguiente consulta para determinar cules son dichos ficheros: SELECT name FROM V$DATAFILE UNION SELECT name FROM V$CONTROLFILE UNION SELECT member FROM V$LOGFILE Despus de crear la base de datos no es posible cambiar el juego de caracteres ni el juego de caracteres nacional. Despus de ejecutar el comando CREATE DATABASE el servidor Oracle ejecuta el fichero sql.bsq y crea los siguientes objetos de la base de datos: Ficheros de datos que forman el tablespace SYSTEM. Ficheros de control y de redo log. El usuario sys con la contrasea change_on_install El usuario system con la contrasea manager El segmento de rollback SYSTEM Tablas internas pero no vistas por el diccionario de datos

4.3 EJEMPLO REAL


A continuacin se muestra un ejemplo de la creacin de una base de datos real: startup nomount pfile=<ORACLE_BASE>/admin/<ORACLE_SID>/init<ORACLE_SID>_0.ora create database "<ORACLE_SID>" controlfile reuse maxinstances 1

Administracin de Oracle (V1.01)

Pg. 38

Aubay Espaa - Formacin

maxlogfiles

50

maxdatafiles 100 character set "WE8ISO8859P1" datafile '<ORACLE_DATA>/<ORACLE_SID>/syst<ORACLE_SID>.dbf' autoextend on next 10M maxsize unlimited logfile group 1 ('<ORACLE_DATA>/<ORACLE_SID>/redo<ORACLE_SID>01A.dbf', '<ORACLE_DATA>/<ORACLE_SID>/redo<ORACLE_SID>01B.dbf') group 2 ('<ORACLE_DATA>/<ORACLE_SID>/redo<ORACLE_SID>02A.dbf', '<ORACLE_DATA>/<ORACLE_SID>/redo<ORACLE_SID>02B.dbf') group 3 ('<ORACLE_DATA>/<ORACLE_SID>/redo<ORACLE_SID>03A.dbf', '<ORACLE_DATA>/<ORACLE_SID>/redo<ORACLE_SID>03B.dbf') size 5M; size 5M, size 5M, size 50M

Administracin de Oracle (V1.01)

Pg. 39

Aubay Espaa - Formacin

5 CREACIN Y USO DEL DICCIONARIO DE DATOS Y PAQUETES ESTNDAR


Adems de la creacin de los ficheros de la base de datos, el servidor Oracle crea estructuras dentro de ellos: El diccionario de datos, contiene descripciones de los objetos de la base de datos. Incluye dos tipos de objetos: o o Las tablas base, son las tablas subyacentes que almacenan la descripcin de la base de datos. Han sido creadas al tiempo de ejecutar el comando CREATE DATABASE por el script sql.bsq. Estas tablas no se encuentran documentadas. Las vistas del diccionario de datos, resumen y muestran la informacin almacenada en la base de datos.

Las tablas de rendimiento dinmico, contienen informacin que utiliza el DBA para supervisar y ajustar la base de datos y la instancia. Las unidades de programa PL/SQL, agregan funcionalidad a la base de datos.

5.1 VISIN GENERAL DEL DICCIONARIO DE DATOS


Una de las partes ms importantes de una base de datos Oracle es su diccionario de datos, que es un conjunto de tablas de slo lectura que proporciona informacin acerca de su base de datos asociada. El diccionario de datos lo actualiza el servidor Oracle siempre que se ejecute una sentencia DDL o bien una sentencia DML. El diccionario de datos es una fuente de informacin para todos los usuarios. Para tener acceso al diccionario de datos es preciso utilizar sentencias SQL. El diccionario de datos es de slo lectura, con lo cual slo se pueden enviar consultas en las vistas del diccionario de datos. El propietario del diccionario de datos es el usuario SYS y se almacena siempre en el tablespace SYSTEM (este tablespace ha sido creado durante la ejecucin del comando CREATE DATABASE).

5.1.1 Contenido del Diccionario de Datos


Un diccionario de datos contiene: Las definiciones de todos los objetos del esquema en la base de datos (tablas, vistas, ndices, agrupamientos, secuencias, procedimientos, funciones, paquetes, disparadores, etc.).

Administracin de Oracle (V1.01)

Pg. 40

Aubay Espaa - Formacin

El espacio asignado y utilizado por los objetos. Valores por defecto de columnas. Informacin acerca de la restriccin de integridad. Los nombres de los usuarios de la base de datos Oracle. Privilegios y Roles otorgados a cada usuario. Informacin de auditora, como por ejemplo quin ha accedido o actualizado objetos de la base de datos. Otra informacin general de la base de datos.

5.1.2 Tablas Base y Vistas del Diccionario de Datos


Las tablas base del diccionario de datos son las primeras que se crean al tiempo de ejecutar el comando CREATE DATABASE. Se crean automticamente por el fichero sql.bsq. El servidor Oracle es el nico que debera escribir en las tablas base. Generalmente los usuarios no acceden a estas tablas, adems la mayora de la informacin se encuentra cifrada. Se recomienda no utilizar nunca comandos DML para actualizar las tablas base. Un ejemplo de tabla base es IND$, que contiene informacin acerca de los ndices de la base de datos. Generalmente cuando se examina el diccionario de datos, se est explorando las vistas del diccionario las cuales son sinnimos pblicos. Estas vistas resumen y muestran la informacin almacenada en la base de datos. Decodifican los datos de las tablas base en informacin til, mediante uniones y clasulas where para simplificar la informacin. Por ejemplo en las vistas del diccionario se utilizan los nombres de los objetos en vez de nmeros de objetos. Algunas de las vistas del diccionario de datos estn accesibles para todos los usuarios de la base de datos, otras van dirigidas nicamente a los administradores de la base de datos.

5.1.3 Categoras del Diccionario de Datos


Las vistas del diccionario de datos se dividen en tres categoras, que se pueden distinguir unas de otras por sus prefijos: DBA: Vista del Administrador de la base de datos, es decir, lo que hay en todos los esquemas. ALL: Vista del usuario ampliada, es decir, lo que hay en todos los esquemas. USER: Vista del usuario, es decir, lo que hay en el esquema del usuario.

Todas las vistas tienen sinnimos pblicos que se crean en ellas. No todas las vistas del diccionario de datos utilizan estas reglas de nomenclatura. VISTAS con el prefijo DBA Muestran informacin global de toda la base de datos. Su finalidad es que las consulten nicamente los administradores de la base de datos. Cualquier usuario al que se le haya

Administracin de Oracle (V1.01)

Pg. 41

Aubay Espaa - Formacin

otorgado el privilegio de sistema SELECT ANY TABLE podr consultar las vistas con prefijo DBA del diccionario de datos. Por ejemplo para consultar todos los objetos de la base de datos, el DBA podr emitir la siguiente sentencia: SELECT OWNER, OBJECT_NAME, OBJECT_TYPE FROM DBA_OBJECTS; Vistas con el prefijo ALL Hacen referencia a la perspectiva global del usuario de la base de datos. Estas vistas devuelven informacin acerca de los objetos de esquema a los que el usuario tiene acceso en forma de concesiones pblicas o explcitas de privilegios y roles, adems de los objetos del esquema del propio usuario. Por ejemplo, la siguiente consulta devuelve informacin acerca de todos los objetos a los que el usuario tiene acceso. SELECT OWNER, OBJECT_NAME, OBJECT_TYPE FROM ALL_OBJECTS; Vistas con el prefijo USER Estas vistas son las ms importantes desde el punto de vista del usuario ya que: Hacen referencia al propio entorno privado del usuario en la base de datos. Generalmente hacen referencia a los objetos que posee el usuario actual. Tienen columnas idnticas a las otras categoras de vistas, excepto que la columna OWNER es el usuario actual. Devuelven un subconjunto de la informacin de las vistas ALL_ Pueden tener sinnimos pblicos abreviados por comodidad.

Por ejemplo, la siguiente consulta devuelve todos los objetos del esquema: SELECT OBJECT_NAME, OBJECT_TYPE FROM USER_OBJECTS; Se puede obtener una lista completa de las vistas del diccionario de datos y sus columnas en el documento Oracle Reference.

5.2 UNIDADES DE PROGRAMA ALMACENADAS


El servidor Oracle permite acceder y manipular la informacin de la base de datos mediante objetos procedurales llamados unidades de programa almacenadas. Estas unidades de programa son un conjunto de sentencias SQL y PL/SQL que llevan a cabo una tarea especfica. PL/SQL es el lenguaje procedural de Oracle. Este lenguaje permite mezclar sentencias SQL con sentencias procedurales.

Administracin de Oracle (V1.01)

Pg. 42

Aubay Espaa - Formacin

El administrador de la base de datos puede instalar el componente JSERVER del servidor Oracle para ejecutar unidades de programa Java. Para llamar a un mtodo Java desde SQL o PL/SQL, es necesario publicar dicho mtodo escribiendo una especificacin de llamada. La especificacin de llamada asigna los nombres del mtodo Java, tipos de parmetros y devuelve los tipos homlogos SQL. Las unidades de programa almacenadas ofrecen las siguientes ventajas: Para reducir los tiempos de ejecucin, el cdigo PL/SQL se compila previamente y se almacena en el diccionario de datos compilado y con el cdigo fuente. Los programas en Java se pueden llamar desde SQL y PL/SQL definiendo sus especificaciones de llamada para PL/SQL. Se almacenan en la zona del SGA, conjunto compartido para reducir el tiempo de recuperacin del disco. La seguridad de los datos se puede reforzar permitiendo que los usuarios accedan a los datos nicamente a travs de los procedimientos y funciones. Durante la ejecucin, diferentes usuarios comparten una sola copia de la unidad de programa. Las funciones almacenadas se pueden utilizar en las sentencias SQL de la misma forma que las funciones agregadas de SQL o bien las incorporadas por Oracle.

En este documento se pretende dar una visin general de los procedimientos almacenados. El desarrollo y mantenimiento de unidades de programa almacenadas se describe de forma detallada en el documento de oracle Unidades de Programa PL/SQL.

5.2.1 Ejecucin de una Unidad de Programa PL/SQL

El proceso de servidor lee la unidad de programa PL/SQL almacenada en el conjunto compartido y la ejecuta. Como se puede aprecia en la figura, al tiempo de ejecutar cualquier bloque PL/SQL, el servidor Oracle enva cada sentencia a un motor distinto en funcin del tipo de sentencia. Si la sentencia es SQL el motor que la ejecuta es el ejecutor de sentencias SQL,

Administracin de Oracle (V1.01)

Pg. 43

Aubay Espaa - Formacin

mientras que si la sentencia es PL el motor que la ejecuta es el ejecutor de sentencias procedurales.

5.3 CREACIN DEL DICCIONARIO DE DATOS


Parte del diccionario de datos ya ha sido creado de forma automtica cuando se ejecut el comando CREATE DATABASE con el script sql.bsq, que son las tablas base; falta por crear todas las vistas, procedimientos y sinnimos que van a poder utilizar los usuarios de la base de datos. Para completar la creacin del diccionario de datos es necesario ejecutar una serie de scripts, cada uno de los cuales completan una parte especfica del diccionario de datos. No es obligatorio ejecutar todos los scripts que se indican a continuacin, todo depender de los requisitos de la base de datos en particular. Los ficheros de comandos para la creacin del diccionario de datos se pueden separar en cuatro categoras, segn sus nombres de ficheros: Ficheros de Comandos cat*.sql: Crean vistas del diccionario de datos. Ficheros de Comandos dbms*.sql y prvt*.plb: Crean objetos para los paquetes de Oracle predefinidos, que amplan la funcionalidad del servidor Oracle. Estos programas simplifican la gestin de la base de datos. Ficheros de Comandos utl*.sql: Se deben ejecutar cuando la base de datos necesite tablas adicionales.

La mayor parte de estos ficheros se deben ejecutar como usuario sys. El administrador de la base de datos deber examinar los ficheros de comandos para averiguar la cuenta de usuario que se debe utilizar para ejecutar dichos ficheros de comandos.

5.3.1 Ficheros de Comandos creacin del Diccionario de datos requeridos


Fichero catalog.sql Este fichero de comandos (catalog.sql) crea las vistas, tanto de las tablas base como de las vistas dinmicas de rendimiento, as como sinnimos. Inicia a su vez otros ficheros de comandos que crean objetos para (cataudit.sql, catexp.sql, catldr.sql),: El entorno PL/SQL bsico, incluyendo las declaraciones para PL/SQL: o Tipos de datos. o Excepciones predefinidas. o Procedimientos y funciones incorporados. o Operaciones SQL. Auditora. Importacin y Exportacin. SQL*Loador Opciones instaladas.

Administracin de Oracle (V1.01)

Pg. 44

Aubay Espaa - Formacin

Fichero catproc.sql Este fichero de comandos (catproc.sql) establece el uso de la funcionalidad PL/SQL. Tambin crea varios paquetes PL/SQL que se utilizan para ampliar la funcionalidad del motor de Oracle (ncleo). Este fichero tambin crea paquetes y vistas adicionales para: Alertas. Canales. Logminer. Objetos grandes. Objetos. Colas Avanzadas. Opcin de replicacin. Otros complementos y opciones.

Este script invoca a su vez los siguientes scripts: catprc.sql, casnap.sql, caprpc.sql, Standard.sql, dbmsutil.sql, dbmssnap.sql, dbmslock.sql, dbmspipe.sql, dbmsalrt.sql, dbmsotpt.sql, dbmsdesc.sql Fichero cataudit.sql Este fichero crea vistas y tablas de auditora. Lo ejecuta catalog.sql. Estas tablas pueden ser borradas ejecutando catnoaud.sql. Fichero catexp.sql Este fichero crea las tablas necesarias para Export e Import incrementales. Lo ejecuta catalog.sql Fichero catldr.sql Crea las tablas y vistas de SQL*Loador. Lo ejecuta catalog.sql Fichero catparr.sql Crea las tablas necesarias para mantener la informacin de Parallel Server Option Fichero catprc.sql Crea las estructuras del diccionario de datos para almacenar procedimientos, paquetes y disparadores de la base de datos. Ejecutado pro catproc.sql Fichero catsnap.sql Crea las estructuras del diccionario de datos para el mantenimiento de rplicas (snapshots). Lo ejecuta catproc.sql y requiere catprc.sql Fichero catrpc.sql

Administracin de Oracle (V1.01)

Pg. 45

Aubay Espaa - Formacin

Crea las vistas del diccionario de datos necesarias para el mantenimiento de una base de datos distribuida. Lo ejecuta catproc.sql y requiere catprc.sql Fichero Standard.sql Crea los paquetes PL/SQL necesarios para trabajar con PL/SQL suministrado por Oracle. Lo ejecuta catproc.sql y requiere catprc.sql Fichero dbmsstdx.sql Extensin del fichero Standard.sql. Lo ejecuta catproc.sql y requiere standarda.sql Fichero pipidl.sql Crea los paquetes para trabajar con PL/SQL en el ncleo. Lo ejecuta catproc.sql y requiere dbmsstdx.sql. Fichero pidian.sql Crea los paquetes PL/SQL necesarios para trabajar. Lo ejecuta catproc.sql y requiere dbmsstdx.sql. Fichero diutil.sql Crea los paquetes PL/SQL necesarios para trabajar. Lo ejecuta catproc.sql y requiere pidian.sql. Fichero pistub.sql Crea paquetes PL/SQL necesarios para trabajar con PL/SQL en el ncleo. Lo ejecuta catproc.sql y requiere diutil.sql. Fichero dbmsutil.sql Crea las utilidades que se invocan desde los procedimientos. Lo ejecuta catproc.sql y requiere pistub.sql. Fichero dbmssnap.sql Crea los procedimientos para la administracin de rplicas (snapshots). Lo ejecuta catproc.sql y requiere catsnap.sql Fichero dbmsalrt.sql Permite a usuarios y aplicaciones manejar alertas. Lo ejecuta catproc.sql y requiere pistub.sql Fichero dbmslock.sql Permite a los usuarios utilizar el procedimiento LOCK. Lo ejecuta catproc.sql y requiere pistub.sql

Administracin de Oracle (V1.01)

Pg. 46

Aubay Espaa - Formacin

Fichero dbmsotpt.sql Permite a los desarrolladores de apliaciones recibir entrada/salida desde procedimientos. Lo ejecuta catproc.sql y requiere pistub.sql Fichero dbmspipe.sql Permite establecer comunicaciones entre sesiones. Lo ejecuta catproc.sql y requiere pistub.sql Fichero dbmsdesc.sql Crea un paquete que permite definir argumentos y devolver valores de un programa. Lo ejecuta catproc.sql y requiere pistub.sql.

5.3.2 Ficheros de Comandos creacin del Diccionario de datos opcionales


Fichero catblock.sql Crea la vista blocking_locks que muestra los bloqueos existentes en el sistema Fichero Catnoaud.sql Borra de la base de datos las vistas de auditora generadas por cataudit.sql Fichero Catnoprc.sql Borra de la base de datos las estructuras generadas por catprc.sql Fichero catstat.sql Ejecuta el comando analize sobre el diccionario de datos para permitir la utilizacin del optimizador de costes en los accesos mediante SQL. Debe ejecutarse peridicamente para actualizar las estadsticas. Si se tiene opcin procedural puede utilizarse desde el paquete ANALYZE_SHEMA. Fichero utlbstat.sql Comienza la recogida de estadsticas para realizar un ajuste de la base de datos. Finaliza con utlestat.sql Fichero utlchain.sql Crea la tabla CHAINED_ROWS para almacenar la salida del comando analyze con la opcin list chained rows. Fichero utldtree.sql Crea las tablas y vistas que muestran dependencias entre los objetos de un usuario Fichero utlestat.sql

Administracin de Oracle (V1.01)

Pg. 47

Aubay Espaa - Formacin

Finaliza la recogida de estadsticas que comenzn con utlbstat.sql Fichero utlexcpt.sql Crea la tabla exceptions que se utiliza para activar restricciones de integridad Fichero utldidxs.sql Visualiza los resultados de haber ejecutado los ficheros utlidxss.sql y utlidxso.sql Fichero utloidxs.sql Ejecuta utlidxss.sql sobre mltiples columnas Fichero utllockt.sql Muestra un grfico en formato de rbol de las esperas para adquirir bloqueos. Fichero utlsampl.sql Crea las tablas de ejemplo, como emp y Dep. y el usuario scott. Fichero utlsidxs.ql Calcula la selectividad de una columna, y comprueba si se ha creado un ndice sobre dicha columna y si ste ndice es apropiado. Fichero utlxplan.sql Crea la tabla plan_table, que permite mostrar la salida del comando EXPLAIN PLAN.

5.4 EJEMPLO REAL


Una vez descritos algunos de los ficheros que permiten crear el diccionario de datos, se va especificar que comandos se deben ejecutar para crear un diccionario de datos real. Estos comandos se deben ejecutar despus de crear la base de datos, esto es, despus de ejecutar el comando CREATE DATABASE. $ORACLE_HOME/bin/sqlplus / as sysdba @<ORACLE_HOME>/rdbms/admin/catalog.sql @<ORACLE_HOME>/rdbms/admin/catproc.sql connect system/manager @<ORACLE_HOME>/rdbms/admin/catdbsyn.sql

Administracin de Oracle (V1.01)

Pg. 48

Aubay Espaa - Formacin

@<ORACLE_HOME>/sqlplus/admin/pupbld.sql @<ORACLE_HOME>/rdbms/admin/dbmspipe.sql La ejecucin de estos ficheros crear un diccionario de datos completamente funcional.

Administracin de Oracle (V1.01)

Pg. 49

Aubay Espaa - Formacin

6 GESTIN DE TABLESPACES Y FICHEROS DE DATOS


Como se ha comentado al principio de este documento una base de datos Oracle contiene estructuras fsicas y lgicas. Las estructuras fsicas estn determinadas por el conjunto de ficheros del sistema operativo asociados a una base de datos y la estructura lgica est determinada por uno o varios tablespaces y los objetos dentro de un esquema de usuario (tablas, vistas, ndices, procedimientos almacenados). El tablespace system siempre existe y se crea automticamente al crear la base de datos. Contiene el diccionario de datos y el cdigo de los procedimientos almacenados; aunque tambin puede contener el resto de las estructuras lgicas del esquema de usuario, sin embargo Oracle recomienda crear tablespaces adicionales para almacenar datos de usuario, ndices de usuario, segmentos de rollback, segmentos temporales. De esta forma se proporciona ms flexibilidad en diversas operaciones de administracin de la base de datos y reduce la contencin entre los objetos del diccionario y los objetos de los usuarios. El DBA puede crear nuevos tablespaces, cambiar el tamao de los ficheros de datos, aadir nuevos ficheros de datos a tablespaces, definir y modificar los valores de almacenamiento de los segmentos creados en un tablespace, hacer que un tablespace sea de slo lectura, hacer que un tablespace sea temporal, borrar tablespaces, etc

6.1 JERARQUA DE ALMACENAMIENTO DE LA BASE DE DATOS

Base de Tablespac Segmento Extensin Bloque Bloque del


Fig. 6.1 Jerarqua de Almacenamiento

Archivo de Datos

Administracin de Oracle (V1.01)

Pg. 50

Aubay Espaa - Formacin

El servidor Oracle permite el control del uso del espacio en disco mediante las estructuras de almacenamiento lgico, a travs de tablespaces, incluyendo segmentos, extensiones y bloques de datos.

6.1.1 Tablespaces

Fig 6.2 Tablespace-Datafile Las caractersticas principales de los tablespaces son: Un tablespace slo puede pertenecer a una base de datos a la vez. Cada tablespace est formado por uno o ms ficheros del sistema operativo, que reciben el nombre de ficheros de datos. Un tablespace puede estar formado por uno o ms segmentos. Los tablespace se pueden alternar entre el estado de slo lectura a lectura-escritura. Un fichero de datos slo puede pertenecer a un tablespace. El servidor Oracle crea los ficheros de datos para el tablespace, asignando la cantidad especificada de espacio en disco ms una peqea cantidad de sobrecarga. El administrador de la base de datos puede cambiar el tamao de un fichero de datos una vez creado, o bien especificar que un fichero debera aumentar dinmicamente a medida que aumentan los objetos en el tablespace. El nmero mximo de ficheros de datos para un tablespace es de 1023.

Administracin de Oracle (V1.01)

Pg. 51

Aubay Espaa - Formacin

6.1.1.1Tipos de Tablespaces
El servidor Oracle reconoce dos tipos de tablespaces: SYSTEM y todos los dems. El tablespace SYSTEM: Se crea con la base de datos. Es necesario en todas las bases de datos Oracle. Contiene el diccionario de datos, incluyendo las unidades de programa almacenadas. Contiene el segmento de rollback SYSTEM. No debera contener datos de usuario.

El tablespace No SYSTEM: Permite ms flexibilidad en la administracin de la base de datos. Separa los segmentos de rollback, lo temporales, los segmentos de datos de la aplicacin y de ndices de aplicacin. Separa los datos por los requisitos de copias de seguridad. Controla la cantidad de espacio asignado a los objetos de usuario.

6.2 CREACIN DE TABLESPACES


El comando para crear un tablespaces es CREATE TABLESPACE y su sintaxis es la siguiente:

Administracin de Oracle (V1.01)

Pg. 52

Aubay Espaa - Formacin

donde: Tablespace: Es el nombre del tablespace que se debe crear. DATAFILE: Especifica el fichero o ficheros de datos que conforman el tablespace. MINIMUM EXTENT: Asegura que cada tamao de extensin utilizado en el tablespace sea un mltiplo de integer. Utilice K o M para especificar este tamao en kilobytes o megabytes. LOGGING: Especifica que, por defecto, todos los cambios en las tablas, ndices y particiones en el tablespace se escribirn en los registros de redo log (este es el valor por defecto NOLOGGIN: Especifica que, por defecto, todos los cambios en las tablas, ndices y particiones en el tablespace, no se escribirn en los registros de redo log. Si esta opcin est especificada slo se escribirn en redo las sentencias DML y algunas DDL. DEFAULT storage: Especifica los parmetros de almacenamiento por defecto de todos los objetos creados en el tablespace.

Administracin de Oracle (V1.01)

Pg. 53

Aubay Espaa - Formacin

ONLINE|OFFLINE: Hace que el tablespace est disponible (ONLINE) o no est disponible (OFFLINE) despus de su creacin. El valor por defecto es ONLINE. PERMANENT: Especifica que el tablespace se utilizar para albergar objetos permanentes. Este es el valor por defecto. TEMPORARY: Especifica que el tablespace slo se utilizar para albergar objetos temporales, por ejemplo, segmentos que utilizan ordenaciones implcitas que usen la clausula ORDER BY. Extent_management_clause: Especifica la gestin de las extensiones del tablespace. Esta clusula se explica ms adelante.

NOTA: La clusula storage se explicar en un captulo posterior.

6.2.1.1Clusula Autoextend
Esta clusula activa o desactiva la extensin automtica de los ficheros de datos. La sintaxis de esta clusula es:

donde: AUTOEXTEND OFF: Desactiva la extensin automtica del fichero de datos. AUTOEXTEND ON: Activa la extensin automtica del fichero de datos. o NEXT: Especifica el espacio en disco que se debe asignar al fichero de datos cuando se necesitan ms extensiones. o MAXSIZE: Especifica el espacio de disco mximo que se permite asignar al fichero de datos. o UNLIMITED: No define ningn lmite para asignar espacio de disco al fichero de datos.

6.2.1.2Gestin del Espacio en Tablespaces


Las extensiones del tablespace se pueden gestionar con las tablas o con los bitmaps del diccionario de datos. Cuando se cree el diccionario de datos habr que seleccionar uno de estos mtodos de gestin del espacio. No se podr modificar el mtodo posteriormente.

Administracin de Oracle (V1.01)

Pg. 54

Aubay Espaa - Formacin

Tablespace Gestionado por el Diccionario El servidor Oracle actualizar las tablas adecuadamente en el diccionario de datos siempre que se asigne o se libere una extensin. Este es el mtodo por defecto de gestin del espacio en un tablespace. Se trata del nico mtodo disponible en la versin 8.0 de Oracle y anteriores. Tablespace Gestionado Localmente En este caso el propio tablespace mantiene un bitmap en cada fichero de datos para hacer un seguimiento de los bloques de estado libres y ocupados en dicho fichero de datos. Cada bit en el bitmap se corresponde con un bloque o grupo de bloques. Cuando un bloque se asigna o se libera para volver a utilizarlo, el servidor Oracle cambiar los valores del bitmap y mostrar el nuevo estado de los bloques. La sintaxis es la siguiente:

donde: DICTIONARY: Especifica que el tablespace se gestiona mediante tablas del diccionario de datos (este es el valor por defecto). LOCAL: Especifica que el tablespace se gestiona localmente con un bitmap. AUTOALLOCATE: Especifica que el tablespace lo gestiona el sistema, esto es, los usuarios no podrn modificar el tamao de una extensin. UNIFORM: Especifica que el tablespace se gestiona con extensiones uniformes de bytes SIZE. Se utiliza K o M para indicar que el tamao de la extensin est en kilobytes o megabytes. El tamao SIZE por defecto es de 1 MB. Si se especifica LOCAL, no se podr especificar la clusula DEFAULT storage_clausule, ni MINIMUM EXTENT o TEMPORARY.

La clusula EXTENT MANAGEMENT LOCAL se podr especificar en varios comandos CREATE: En un tablespace permanente que no sea SYSTEM. En un tablespace temporal CREATE TEMPORARY TABLESPACE.

Ventajas de los tablespaces gestionados localmente Reducen la contencin en el diccionario de datos ya que no registran el espacio libre en el mismo.

Administracin de Oracle (V1.01)

Pg. 55

Aubay Espaa - Formacin

Hace un seguimiento de forma automtica del espacio libre adyacente, eliminando la necesidad de fusionar las extensiones libres. El tamao de las extensiones lo puede determinar de forma automtica el sistema. Los cambios en los bitmaps de extensin no generan informacin de rollback, ya que no actualizan las tablas del diccionario de datos.

Ejemplos de creacin de tablespaces: CREATE TABLESPACE tabspace_2 DATAFILE 'tabspace_file2.dat' SIZE 20M DEFAULT STORAGE (INITIAL 10K NEXT 50K MINEXTENTS 1 MAXEXTENTS 999) ONLINE; CREATE TABLESPACE tabspace_5 DATAFILE 'tabspace_file3.dat' SIZE 500K REUSE AUTOEXTEND ON NEXT 500K MAXSIZE 10M; CREATE TABLESPACE tabspace_3 DATAFILE 'tabspace_file5.dbf' SIZE 2M MINIMUM EXTENT 64K DEFAULT STORAGE (INITIAL 128K NEXT 128K) LOGGING; CREATE TABLESPACE tbs_1 DATAFILE 'file_1.f' SIZE 10M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;

6.2.1.3Tablespace Temporal
Se puede gestionar el espacio en operaciones de ordenacin de forma ms eficaz diseando tablespaces temporales exclusivamente para los segmentos de ordenacin. Ningn objeto de esquemas de usuario podr residir en un tablespace temporal. Los tablespaces temporales proporcionan mejoras de rendimiento cuando se tenga mltiples ordenaciones demasiado grandes como para caber en memoria. Aunque el comando CREATE TABLESPACETEMPORARY se puede utilizar para crear un tablespace temporal, se recomienda utilizar el comando CREATE TEMPORARY TABLESPACE. Las caractersticas de los tablespaces temporales son: Siempre se definen en el modo NOLOGGING No se puede hacer un tablespace temporal que sea de slo lectura. No se permite cambiar el nombre. La recuperacin del medio fsico no recuperar los ficheros asociados a tablespaces temporales. BACKUP CONTROLFILE no generar informacin del tablespaces temporal CREATE CONTROLFILE no especificar ninguna informacin acerca de tablespaces temporales.

Para optimizar el rendimiento de una ordenacin en un tablespace temporal, se recomienda definir el parmetro UNIFORM SIZE para que sea mltiplo del parmetro SORT_AREA_SIZE.

Administracin de Oracle (V1.01)

Pg. 56

Aubay Espaa - Formacin

La sintaxis para la creacin de un tablespace temporal es:

Un ejemplo de creacin de un tablespace temporal: CREATE TEMPORARY TABLESPACE tbs_1 TEMPFILE 'file_1.f' EXTENT MANAGEMENT LOCAL UNIFORM SIZE 16M;

6.3 MODIFICACIN DE TABLESPACES


Se puede modificar los valores de almacenamiento de un tablespace ejecutando el comando ALTER TABLESPACE, la sintaxis para la modificacin de un tablespace es:

Administracin de Oracle (V1.01)

Pg. 57

Aubay Espaa - Formacin

6.3.1.1Conexin y Desconexin de un Tablespace


Normalmente un tablespace est conectado para que los datos que contenga se encuentren disponibles a los usuarios de la base de datos. Sin embargo el administrador de la base de datos puede desconectar un tablespace para: Realizar una copia de seguridad de un tablespace, aunque tambin se puede hacer una copia de seguridad de un tablespace conectado y en uso. Recuperar un tablespace o un fichero de datos mientras la base de datos est abierta. Mover un fichero de datos mientras la base de datos est abierta.

Cuando se desconecta un tablespace, el servidor Oracle no permitir realizar ninguna sentencia SQL que haga referencia a objetos almacenados en dicho tablespace. Los eventos de conexin y desconexin de un tablespace se registrarn en el diccionario de datos y en los ficheros de control. Si un tablespace est desconectado cuando se cierre una base de datos, el tablespace permanecer desconectado la prxima vez que se abra la base de datos. Si el proceso en background DBW0 detectase errores de escritura en un fichero de datos, el tablespace asociado a dicho fichero de datos conmutar automticamente al estado de desconexin, registrando dicho evento en el fichero de alerta de la instancia.

Administracin de Oracle (V1.01)

Pg. 58

Aubay Espaa - Formacin

El administrador de la base de datos podr desconectar un tablespace, excepto el tablespace SYSTEM o cualquier tablespace con algn segmento de rollback activo, o bien segmentos temporales. Cuando se desconecta un tablespace, el servidor Oracle tambin desconectar todos los ficheros de datos asociados a dicho tablespace. Los modos de desconectar un tablespace son: NORMAL: Vaca todos los bloques del SGA en el fichero de datos asociados a dicho tablespace. Esta es la opcin por defecto. No se precisar de recuperacin del medio fsico en este tablespace antes de conectarlo de nuevo. TEMPORARY: Realiza un punto de control para todos los ficheros de datos. Puede requerir recuperacin cuando el tablespace se conecte de nuevo. IMMEDIATE: No asegura que los ficheros del tablespace se encuentren disponibles y no realiza ningn punto de control. Ser necesario realizar recuperacin del medio fsico en el tablespace antes de volver a conectarlo. FOR RECOVER: Desconecta el tablespace para la recuperacin del tablespace en un punto del tiempo.

6.3.1.2Tablespace de Slo Lectura


Al hacer que un tablespace sea de slo lectura evita operaciones de escritura posteriores en dicho tablespace. Con lo cual los dispositivos fsicos asociados podrn residir en medios fsicos de slo lectura (CDROM) . El comando ALTER TABLESPACE..READ ONLY coloca el tablespace en un modo de transaccin de slo lectura. Este estado no permite llevar a cabo ninguna operacin de escritura posterior sobre el tablespace. Se puede borrar elementos, como las tablas e ndices, de un tablespace de slo lectura, ya que estos comandos slo afectan al diccionario de datos. Esto se puede hacer ya que el comando DROP slo actualiza el diccionario de datos, no los ficheros fsicos del tablespace. La accin de hacer un tablespace sea de slo lectura provocar un punto de control en los ficheros de datos de dicho tablespace.

6.3.1.3Agregar/Mover ficheros de datos de un Tablespace


Se pueden aadir/mover ficheros de datos a un tablespace para aumentar la cantidad total de espacio asignado al tablespace o bien modificar la ubicacin del fichero de datos. La sintaxis de la clusula datafile/tempfile es:

Administracin de Oracle (V1.01)

Pg. 59

Aubay Espaa - Formacin

Donde: ADD DATAFILE/TEMPFILE: Indica el/los nuevo/s ficheros del tablespace. RENAME DATAFILE: Slo se aplica a ficheros de datos en un tablespace NO SYSTEM que no contengan segmentos temporales o segmentos de rollback activos. Se puede utilizar el siguiente proceso para mover ficheros de un tablespace: 1. Desconectar el tablespace. 2. Utilizar comandos del sistema operativo para mover o copiar los ficheros de datos. 3. Ejecutar el comando ALTER TABLESPACE RENAME DATAFILE. 4. Conectar el tablespace. 5. Utilizar el comando del sistema operativo para eliminar el fichero si fuera necesario.

El movimiento de los ficheros de datos tambin se puede realizar con el comando ALTER DATABASE, en este caso la sintaxis de la sentencia es la siguiente: ALTER DATABASE RENAME FILE filename TO filename; Este mtodo est pensado para mover el tablespace SYSTEM que no se puede desconectar en el caso de ALTER TABLESPACE.... Se puede utilizar el siguiente proceso para cambiar el nombre de ficheros de datos en los tablespaces que no se puedan desconectar: 1. 2. 3. 4. 5. Cerrar la base de datos. Utilizar el comando del sistema operativo para mover los ficheros de datos. Montar la base de datos. Ejecutar el comando ALTER DATABASE RENAME FILE. Abrir la base de datos.

6.4 BORRADO DE TABLESPACES


Se puede eliminar un tablespace de una base de datos cuando el tablespace y su contenido ya no sean necesarios, para ello es necesario ejecutar el comando DROP TABLESPACE, la sintaxis de ejecucin es la siguiente:

Donde: Tablespace: Indica el nombre del tablespace que se desea borrar. INCLUDING CONTENTS: Borra todos los segmentos del tablespace. CASCADE CONSTRAINTS: Borra las restricciones de integridad referencial de las tablas del tablespace que hagan referencia a las claves primarias y nicas en las tablas del tablespace borrado.

Administracin de Oracle (V1.01)

Pg. 60

Aubay Espaa - Formacin

No se puede borrar un tablespace que todava contenga datos sin la opcin INCLUDING CONTENTS. Esta opcin puede generar que se deshagan muchos cambios cuando el tablespace contiene muchos objetos. Una ver que se haya borrado el tablespace, sus datos ya no estarn en la base de datos. Cuando se borra un tablespace, slo se borran aquellos punteros de archivo en los ficheros de control de la base de datos asociada. Los ficheros del sistema operativo todava existen y se deben eliminar de forma explcita con el comando adecuado del sistema operativo. Aunque se cambie un tablespace a slo lectura, todava se podr borrar dicho tablespace, as como los segmentos que contenga. Se recomienda que desconecte el tablespace antes de borrarlo para asegurarse que ninguna transaccin tenga acceso a ninguno de los segmentos del tablespace.

6.5 VISTAS DEL DICCIONARIO DE DATOS SOBRE TABLESPACES


El diccionario de datos posee diferentes vistas que dan informacin sobre los tablespaces, ficheros de datos y tempfile. Informacin acerca de tablespace: o DBA_TABLESPACES o V$TABLESPACE Informacin acerca de ficheros de datos: o DBA_DATA_FILES o V$DATAFILE Informacin acerca de Tempfile: o DBA_TEMP_FILES o V$TEMPFILE

Las vistas dinmicas se crean a partir de la informacin contenida en los ficheros de control. Se puede unir las vistas dinmicas V$TABLESPACE con V$DATAFILE con V$TEMPFILE a travs de la columna TS# (nmero de tablespace) para obtener informacin conjunta. Se puede unir las vistas del diccionario de datos en los tablespaces con las vistas de los ficheros de datos, el campo de union ser el nombre del tablespace.

6.6 EJEMPLO REAL


A continuacin se muestra la creacin de tablespaces de una base de datos real, siguiendo con la creacin completa de la base de datos, iniciada en capitulos anteriores. create rollback segment r0 tablespace system

Administracin de Oracle (V1.01)

Pg. 61

Aubay Espaa - Formacin

storage (initial 16k next 16k minextents 2 maxextents 20); alter rollback segment r0 online; create tablespace rbs_01 datafile '<ORACLE_DATA>/<ORACLE_SID>/<ORACLE_SID>_rbs_01.dbf' autoextend on next 10M maxsize unlimited default storage ( initial 1M next 1M pctincrease 0 minextents 8 ); size 256M

create tablespace rbs_02 datafile '<ORACLE_DATA>/<ORACLE_SID>/<ORACLE_SID>_rbs_02.dbf' autoextend on next 10M maxsize unlimited default storage ( initial 1M next 1M pctincrease 0 minextents 8 ); create tablespace temp datafile '<ORACLE_DATA>/<ORACLE_SID>/<ORACLE_SID>_temp01.dbf' autoextend on next 10M maxsize unlimited default storage ( initial 1M next 1M pctincrease 0 );

size

256M

size 256M

create tablespace spra_data_indx datafile '<ORACLE_DATA>/<ORACLE_SID>/<ORACLE_SID>_data_indx01.dbf' autoextend on next 10M maxsize unlimited default storage( initial 128k next 128k pctincrease 0); create tablespace spra_data_indx_2 datafile '<ORACLE_DATA>/<ORACLE_SID>/<ORACLE_SID>_data_indx02.dbf' autoextend on next 10M maxsize unlimited default storage( initial 128k next 128k pctincrease 0); create tablespace spra_data datafile '<ORACLE_DATA>/<ORACLE_SID>/<ORACLE_SID>_data01.dbf' autoextend on next 10M maxsize unlimited default storage( initial 128k next 128k pctincrease 0); create tablespace spra_msg datafile '<ORACLE_DATA>/<ORACLE_SID>/<ORACLE_SID>_msg01.dbf' autoextend on next 10M maxsize unlimited default storage(

size 512M

size 512M

size 1024M

size 128M

Administracin de Oracle (V1.01)

Pg. 62

Aubay Espaa - Formacin

initial next pctincrease

128K 128K 0); size 64M

create tablespace spra_msg_indx datafile '<ORACLE_DATA>/<ORACLE_SID>/<ORACLE_SID>_msg_indx01.dbf' autoextend on next 10M maxsize unlimited default storage( initial 128K next 128K pctincrease 0);

Administracin de Oracle (V1.01)

Pg. 63

Aubay Espaa - Formacin

7 SEGMENTOS, EXTENSIONES Y BLOQUES DE DATOS


7.1 CONCEPTO
Las unidades de asignacin de espacio en la base de datos que utiliza Oracle son: Segmentos, Extensiones y Bloques de Datos. La siguiente figura ilustra la relacin que existe entre ellas:

Fig. 7.1 Segmento-Extensin-Bloque Al nivel ms fino de granulidad, Oracle almacena los datos en bloques de datos, tambin llamados bloques lgicos, bloques de Oracle, pginas. Cada bloque de datos se corresponde con un nmero especfico de bytes fsicos dentro del disco. Oracle recomienda que el tamao de cada bloque de datos sea mltiplo del tamao de pgina del sistema operativo. El siguiente nivel lgico de espacio de la base de datos es la extensin. Una extensin es un nmero especfico de bloques de datos contiguos asignados para almacenar informacin.

Administracin de Oracle (V1.01)

Pg. 64

Aubay Espaa - Formacin

El siguiente nivel lgico de la base de datos y como nivel ms alto es el segmento. Un segmento es un conjunto de extensiones. Cada segmento tiene una estructura de datos especfica y cada una de las cuales est almacenada en el mismo tablespace. Por ejemplo cada tabla de datos est almacenado en su propio segmento de datos, mientras que cada ndice de datos est almacenado en su propio segmento de ndices. Si una tabla o ndice est particionado, entonces cada particin est almacenada en su propio segmento. Oracle asigna espacio a los segmentos en unidades de una o varias extensiones. Cuando se llenan las extensiones de un segmento, Oracle asigna otra extensin para ese segmento. Ya que las extensiones son asignadas cuando se necesitan, las extensiones de un segmento pueden o no ser contiguas en el disco. Un segmento y todas sus extensiones estn almacenadas dentro de un tablespace. Aunque un segmento puede incluir extensiones de ms de un fichero de datos ya que un tablespace puede tener asociados ms de un fichero. Con lo cual cada extensin puede contener datos de un nico fichero de datos.

7.2 BLOQUES DE DATOS


Oracle gestiona el espacio de almacenamiento (storage) dentro de los ficheros de datos de una base de datos, en unidades llamadas bloques de datos. Un bloque de datos es la unidad ms pequea de entrada/salida. Se puede hacer una comparacin a este nivel con los sistemas operativos, los cuales la unidad ms pequea de entrada/salida se llama pgina o tambin bloque. Oracle gestiona datos en nmero mltiplo de sus bloques de datos no en bloques del sistema operativo. Al crear la base de datos se establece el tamao del bloque de datos, el cual no podr ser cambiado una vez creada la base de datos. Como se ha comentado anteriormente, el tamao del bloque de datos se recomienda (debe) que sea mltiplo del bloque del sistema operativo, de esta forma se evita realizar I/O innecesaria sobre el disco. El parmetro dentro del fichero de parmetros que determina el tamao del bloque es DB_BLOCK_SIZE

7.2.1 Formato del bloque de datos


El formato del bloque de datos es independiente del segmento que lo contenga (tabla, ndice, segmento de rollback..). La figura que se muestra ilustra el formato de un bloque de datos:

Administracin de Oracle (V1.01)

Pg. 65

Aubay Espaa - Formacin

Fig. 7.2 Bloque de Datos A continuacin se explica cada una de las partes que componen un bloque de datos: HEADER (Common and Variable): Contiene informacin general del bloque, como la direccin del bloque y el tipo de segmento donde se ubica. Table Directory: Contiene informacin sobre la direccin del directorio de tablas. ROW Directory: Contiene informacin sobre las filas actuales en el bloque de datos, incluyendo direccin por cada porcin de fila. La sobrecarga de espacio asignado a esta parte de la cabecera del bloque, una vez que la fila de datos haya sido borrada, este espacio adicional no es restaurado como espacio til. Oracle reusa este espacio slo cuando nuevas filas se inserten dentro del bloque. SobreCarga: La cabecera del bloque, el directorio de tabla y de fila son referenciados como overhead. Este tamao es variable y suele tener una media de 84 a 107 bytes. Row Data: Esta es la porcin del bloque que contiene los datos. Free Space: Esta zona se utiliza para la insercin de nuevos datos dentro del bloque, o bien para actualizaciones de una fila del bloque. Al principio el espacio libre de un bloque es contiguo. Sin embargo las supresiones y actualizaciones pueden llegar a fragmentar el espacio libre del bloque. Oracle compacta el espacio libre cuando sea necesario.

7.2.2 Parmetros de Utilizacin de Espacio de Bloque


Los parmetros de utilizacin de espacio de bloque se pueden utilizar para controlar el uso del espacio en los segmentos de datos y de ndices. Estos parmetros son PCTREE y PCTUSED, permitiendo un control sobre el uso del espacio en operaciones como inserciones o

Administracin de Oracle (V1.01)

Pg. 66

Aubay Espaa - Formacin

actualizaciones. La especificacin de estos parmetros se realiza cuando se crea o se altera la tabla o ndice. PCTFREE: Este parmetro para un segmento de datos (tabla) especifica el porcentaje de espacio en cada bloque de datos reservado para el posible crecimiento resultado de las actualizaciones de filas en dicho bloque. El valor por defecto para este parmetro es 10% PCTUSED: Este parmetro para un segmento de datos (tabla) indica el mnimo porcentaje utilizado por el servidor Oracle que intenta conservar para cada bloque de datos de dicho segmento. Oracle considera que un bloque est no disponible (lleno) para una nueva insercin cuando dicho porcentaje cae por debajo del valor de este parmetro. El valor por defecto de este parmetro es del 40%.

Fig. 7.3 PCTFREE

Administracin de Oracle (V1.01)

Pg. 67

Aubay Espaa - Formacin

Fig. 7.4 PCTUSED Tanto PCTFREE como PCTUSED se calculan como porcentajes del espacio de datos disponibles, es decir el espacio del bloque que queda disponible despus de restar el espacio de cabecera del total del bloque. Estos parmetros de utilizacin de espacio de bloque slo se pueden especificar para segmentos, y no se pueden definir a nivel de tablespace. Las instrucciones para definir los parmetros PCTFREE y PCTUSED se explicar en los captulos de Gestin de Tablas y Gestin de ndices.

7.2.3 Parmetros que controlan la Simultaneidad


Los parmetros INITRANS y MAXTRANS especifican el nmero inicial y mximo de transacciones que se crean en un ndice o bloque de datos. Esta informacin determina el nmero de transacciones que pueden modificar un bloque de datos de forma simultnea. INITRANS: Tiene como valor por defecto 1 en el caso de segmento de datos y 2 en el caso de segmento de ndice, garantiza un mnimo de simultaneidad. Por ejemplo si se define 3 como INITRANS, asegura que como mnimo tres transacciones pueden efectuar cambios en el bloque. MAXTRANS: Tiene como valor por defecto 255 y determina el nmero mximo de transacciones concurrentes que pueden modificar un bloque de datos.

Oracle recomienda no modificar los valores por defecto de los parmetros de simultaneidad.

Administracin de Oracle (V1.01)

Pg. 68

Aubay Espaa - Formacin

7.3 EXTENSIONES
Una extensin es una unidad lgica de almacenamiento (storage) de la base de datos formada por un nmero de bloques de datos contiguos. Cuando el espacio de un segmento est completamente usado, Oracle asigna una nueva extensin a ese segmento. Al crear un segmento (tabla), Oracle asigna a dichos segmentos de datos un nmero especfico de extensiones que es lo que se llama initial extensin. Aunque no haya datos dentro del segmento, Oracle reserva ese espacio para futura informacin. Si las extensiones iniciales dentro del segmento se llenan y se precisa ms espacio, Oracle automticamente incrementa las extensiones para ese segmento. La cabecera de cada segmento contiene un directorio de las extensiones que hay dentro del segmento. Los segmentos de rollback siempre tienen al menos dos extensiones (estos segmentos se explican en detalle en el siguiente captulo).

7.3.1 Nmero y Tamao de una Extensin


Los parmetros storage expresados en trminos de extensiones definen cada segmento. Estos parmetros controlan cmo Oracle asigna el espacio libre de la base de datos para un segmento dado. Por ejemplo se puede controlar la cantidad de espacio inicial reservado para una tabla y se puede limitar el nmero de extensiones que una tabla puede contener, para ello se debe especificar los parmetros storage de la tabla en la clusula STORAGE de la sentencia CREATE TABLE. Si no se especifica dicha clusula en la definicin de la tabla, entonces se asume los parmetros storage default de su tablespace. Un tablespace que es gestionado por el diccionario de datos sus extensiones son de tamao incremental, los cuales son determinados por los parmetros storage INITIAL, NEXT y PCTINCREASE. Cuando se crea un segmento dentro de un tablespace, la primera extensin tiene el tamao de INITIAL, cuando se necesita ms espacio, el parmetro NEXT y PCTINCREASE determinan el tamao de las nuevas extensiones. Se puede modificar el valor de NEXT y de PCTINCREASE despus de la creacin de un segmento. Aqu se muestra un ejemplo de creacin de una tabla con los parmetros storages CREATE TABLE mitabla (id_pp NUMBER, aa NUMBER, bb NUMBER ) TABLESPACE MI_TABLESPACE_DATA STORAGE (INITIAL 6144 NEXT 4000 PCTINCREASE 20 MINEXTENTS 1 MAXEXTENTS 5 );

7.3.1.1Desasignacin de las Extensiones

Administracin de Oracle (V1.01)

Pg. 69

Aubay Espaa - Formacin

En general, las extensiones libres de un segmento no son devueltas al espacio libre del tablespace hasta que sea borrado dicho segmento, por ejemplo usando las sentencias DROP TABLE. Sin embargo esta regla general tiene sus excepciones: Cuando se ejecuta la sentencia TRUNCATEDROP STORAGE. Peridicamente Oracle puede desasignar una o ms extensiones de un segmento de rollback si dicho segmento ha sido definido con el parmetro OPTIMAL. De forma manual, ejecutando la sentencia ALTER TABLE table_name DEALLOCATE UNUSED.

7.3.2 Extensiones en Segmentos Temporales


Cuando Oracle completa la ejecucin de una sentencia que haya requerido el uso de un segmento temporal, de forma automtica borra el incremento de los segmentos temporales y devuelve las extensiones usadas al tablespace temporal.

7.4 SEGMENTOS
Un segmento es un conjunto de extensiones que contienen todos los datos para una estructura lgica especfica dentro de un mismo tablespace. Por ejemplo para cada tabla, Oracle asigna una o ms extensiones que van a formar el segmento de datos de la tabla. Una base de datos Oracle usa cuatro tipos de segmentos: 1. 2. 3. 4. Segmento Segmento Segmento Segmento de Datos. de ndice. Temporal. de Rollback.

7.4.1 Segmentos de Datos


Estos segmentos de datos es lo que comnmente se llama TABLA. Este segmento de datos se crea cuando se ejecuta una sentencia como CREATE TABLE. Los parmetros storage de una tabla determinan cmo son asignadas las extensiones dentro del segmento de datos. Estos parmetros se pueden modificar una vez creada la tabla con la sentencia ALTER TABLE.

7.4.2 Segmentos de ndices


Estos segmentos de ndices es lo que comnmente se llama NDICES. Estos segmentos se crean cuando se ejecuta una sentencia como CREATE INDEX. Se pueden especificar los parmetros storage para la gestin de las extensiones de un ndice dentro de un tablespace cuando se crea el ndice. Los segmentos de ndices que estn

Administracin de Oracle (V1.01)

Pg. 70

Aubay Espaa - Formacin

asociados a algn segmento de datos no tienen porque compartir el mismo tablespace, es ms, se recomienda crear un tablespace especfico para los ndices.

7.4.3 Segmentos Temporales


Oracle generalmente requiere de un espacio temporal en la ordenacin de datos durante el procesamiento de consultas. A este espacio de disco Oracle lo llama Segmento Temporal. Si la operacin de ordenacin puede hacerse en memoria, o bien Oracle encuentra alguna otra forma de ejecutar la operacin mediante el uso de ndices, entonces en estos casos Oracle no usar dichos segmentos temporales. Las siguientes operaciones requerirn el uso de segmentos temporales: CREATE INDEX. SELECT.ORDER BY. SELECT DISTINCT. SELECT GROUP BY. SELECTUNION. SELECTINTERSECT. SELECT..MINUS.

Las sesiones de usuario usarn segmentos temporales durante el uso de algunas de las sentencias SQL mencionadas. Esto implica que se debe crear un tablespace temporal para tal fin. Oracle recomienda que los usuarios deben tener un tablespace temporal. La forma de asignarle a los usuarios dicho tablespace es mediante la clusula TEMPORARY TABLESPACE, dicha clusula se ejecutar mediante un complemento a la creacin o modificacin de un usuario en la base de datos, esto es: CREATE USER.TEMPORARY TABLESPACE. ALTER USER .TEMPORARY TABLESPACE. Si no existe tablespace temporal, o bien los usuarios no tienen asignado dicho tablespace temporal, el tablespace SYSTEM ser el tablespace temporal por defecto. Oracle borra los segmentos temporales cuando la sentencia ha sido completada. Ya que la asignacin y desasignacin de segmentos temporales ocurren con frecuencia, es razonable y muy recomendable crear un tablespace temporal donde se alojarn los segmentos temporales, de esta forma se evitar tener fragmentacin en el tablespace system y en otros tablespaces que podran alojar segmentos temporales.

7.4.4 Segmentos Rollback


Un segmento de rollback lo utiliza aquella transaccin que efecte cambios en una base de datos. Antes de cambiar los bloques de datos o de ndices, el antiguo valor se almacena en el segmento de rollback. Esto permite que un usuario deshaga los cambios efectuados.

Administracin de Oracle (V1.01)

Pg. 71

Aubay Espaa - Formacin

7.4.5 Vistas del diccionario de datos sobre Estructuras de Almacenamiento


Las relaciones entre los tablespaces, los ficheros de datos, los segmentos y las extensiones libres y utilizadas se pueden ver consultando el diccionario de datos. Cuando se crea un tablespace con uno o ms ficheros de datos, entonces se agrega una fila a la vista DBA_TABLESPACES. Se agrega una fila a DBA_DATA_FILES por cada nuevo fichero de la base de datos. En este momento el espacio de cada fichero de datos, excluyendo la cabecera del fichero, aparece como una extensin libre en la vista DBA_FREE_SPACE. Cuando se crea un segmento, se agregar una fila en la vista DBA_SEGMENTS. El espacio que se asigna a las extensiones en este momento se puede ver en DBA_EXTENTS, mientras que en DBA_FREE_SPACE se ajusta para mostrar menos espacio libre en aquellos ficheros donde se han creado las extensiones para el segmento. Para controlar en todo momento el espacio en los ficheros de datos se recomienda controlar las vistas DBA_FREE_SPACE y DBA_EXTENTS

7.4.5.1Consultas a DBA_SEGMENTS
Consulta de la vista DBA_SEGMENTS para obtener el nmero de extensiones y bloques asignados a un segmento: SQL> SELECT segment_name, WHERE owner=<name_user>; tablespace_name, extents,block FROM DBA_SEGMENTS

7.4.5.2Consultas a DBA_EXTENTS
Consulta de la vista DBA_EXTENTS para comprobar las extensiones de un segmento determinado: SQL> SELECT extent_id, file_id, block_id, blocks owner=<name_user> and segment_name=<name_segment; FROM DBA_EXTENTS WHERE

7.4.5.3Consultas a DBA_FREE_SPACE
Consulta de la vista DBA_FREE_SPACE para comprobar las extensiones libres de un segmento determinado: SQL> SELECT tablespace_name, count(*), DBA_FREE_SPACE GROUP BY tablespace_name; max(blocks), sum(blocks) FROM

7.4.6 Fragmentacin de Segmentos


Hay varios tipos de segmentos con diferentes propensin a la fragmentacin. Se recomienda colocar los segmentos de diferente tipo en tablespaces diferentes para reducir el desperdicio de espacio.

Administracin de Oracle (V1.01)

Pg. 72

Aubay Espaa - Formacin

A continuacin se muestra una tabla donde se muestra el grado de fragmentacin de los diferentes tablespaces: Tablespace SYSTEM DATA INDEX RBS TEMP Uso Diccionario de datos Segmentos de datos Segmento de ndice Segmentos de rollback Segmentos temporales Fragmentacin Cero Baja Baja Alta Muy Alta

Los objetos del diccionario de datos nunca se borran ni se truncan y por lo tanto es poco probable que fragmenten el tablespace. Es probable que los segmentos de datos y de ndices que son utilizadas por las aplicaciones de los usuarios sean ms propensos a la fragmentacin que el tablespace del diccionario de datos. Como los segmentos de rollback (como se ver en el captulo posterior) pueden liberar las extensiones automticamente, es probable que provoquen fragmentacin en un sistema con una elevada actividad de modificaciones en los datos. Los segmentos temporales en los tablespace temporal pueden liberar espacio muy a menudo, y por lo tanto se deben ubicar en tablespaces diferentes.

Administracin de Oracle (V1.01)

Pg. 73

Aubay Espaa - Formacin

8 GESTIN DE SEGMENTOS DE ROLLBACK


8.1 CONCEPTO
Un segmento de rollback se utiliza para guardar una imagen del valor antiguo cuando un proceso cambia los datos de una base de datos. Almacena la ubicacin de los datos y lo datos antes de que se comenzasen a ser modificados. Una transaccin slo puede usar un segmento de rollback para almacenar todos sus registros de rollback. En un segmento de rollback pueden escribir muchas transacciones de forma simultnea. Si se deshacen los cambios de una transaccin, el servidor Oracle restaurar el valor original escribiendo de nuevo dicho valor en la fila. Si falla la instancia mientras la transaccin est en curso, el servidor Oracle deber deshacer los cambios no validados cuando se vuelva abrir la base de datos. Este rollback forma parte de la recuperacin de transacciones. La recuperacin slo es posible porque los cambios efectuados en el segmento de rollback tambin estn protegidos por los ficheros redo log. Mientras las transacciones estn en curso, los dems usuarios de la base de datos no vern ninguno de los cambios no validados por las transacciones, por lo tanto los segmentos de rollback proporcionan a los usuarios una imagen consistente de los datos, es lo que se llama consistencia de lectura. Cuando el servidor Oracle comienza una setencia SELECT, ste determina el Nmero de Cambio de Sistema (SCN) actual, y se asegura que la sentencia no procese ninguno de los cambios que no se hayan validado antes de este SCN. Cuando se inicia una transaccin, es necesario asignar un segmento de rollback a esta transaccin. Una transaccin puede solicitar un segmento de rollback especfico mediante el siguiente comando: SET TRANSACTION USE ROLLBACK SEGMENT rollback_segment Sin embargo como norma general esta labor se deja que la haga el propio servidor Oracle de forma automtica, el cual seleccionar el segmento de rollback con menos transacciones.

8.1.1 Uso y Asignacin de Extensiones en Segmentos de Rollback


Las transacciones utilizan las extensiones de un segmento de forma circular y secuencial, movindolas de una a la siguiente una vez est llena la extensin actual. Una transaccin escribe un registro en su ubicacin actual en el segmento de rollback y mueve hacia delante el puntero actual segn el tamao del registro.

Administracin de Oracle (V1.01)

Pg. 74

Aubay Espaa - Formacin

Fig. 8.1 Segmento de Rollback Ms de una transaccin puede escribir en la misma extensin de un segmento de rollback; sin embargo, cada segmento de rollback contiene informacin de una nica transaccin. El puntero del segmento de rollback se desplaza a la siguiente extensin cuando se utilicen todos los bloques de la extensin actual y se necesite otra extensin para que haya ms espacio. Cuando se llene la ltima extensin, el puntero se mover al principio de la primera extensin. El puntero slo se puede mover a la siguiente extensin si esta extensin no tiene transacciones activas, con lo cual el puntero no puede saltar una extensin. Si se est utilizando la siguiente extensin, la transaccin asignar una extensin adicional al segmento de rollback. A esto se le denomina una ampliacin. Un segmento de rollback puede crecer de esta forma hasta que alcance el nmero mximo de extensiones especificadas por el parmetro MAXEXTENTS.

8.2 TIPOS DE SEGMENTOS DE ROLLBACK


Oracle tiene dos tipos de segmentos de rollback: 1. Segmento de Rollback SYSTEM. 2. Segmento de Rollback No SYSTEM. a. Privados. b. Pblicos. Rollback SYSTEM

Administracin de Oracle (V1.01)

Pg. 75

Aubay Espaa - Formacin

Se crea este segmento en el tablespace SYSTEM cuando se crea la base de datos. Este segmento slo se podr utilizar en cambios relacionados con objetos del diccionario de datos. Rollback No SYSTEM Una base de datos con mltiples tablespaces necesita como mnimo un segmento de rollback No SYSTEM. Estos segmentos de rollback son creado por los administradores de la base de datos. Privado Los segmentos de rollback privados son segmentos asociados a una instancia ya que aparecen en el fichero de parmetros, a travs del parmetros rollback_segments, an as se pueden conectar a una instancia de forma manual a travs de la sentencia ALTER ROLLBACK SEGMENTS. Pblico Se utilizan normalmente con Oracle Parallel Server para crear un conjunto de segmentos de rollback que podr ser utilizado por cualquiera de las instancias de Parallel Server.

8.3 CREACIN DE SEGMENTOS DE ROLLBACK


La sintaxis para la creacin de un segmento de rollback es el siguiente:

Administracin de Oracle (V1.01)

Pg. 76

Aubay Espaa - Formacin

En los segmentos de rollback se debe seguir las siguientes instrucciones: Se debe utilizar siempre el parmetro INITIAL=NEXT para asegurar que el tamao de todas las extensiones sea el mismo. Se debe definir el valor OPTIMAL para reducir la asignacin y liberacin de las extensiones del segmento de rollback. Se debe evitar definir el valor MAXEXTENTS como UNLIMITED. Esto podra provocar la extensin innecesaria de un segmento de rollback. Colocar siempre los segmentos de rollback en un tablespace exclusivo y diferente para reducir la contencin y la fragmentacin.

Parmetro OPTIMAL El parmetro OPTIMAL especifica el tamao en bytes al que un segmento de rollback se debe reducir, si es posible. La especificacin de OPTIMAL reduce el posible desperdicio de espacio en

Administracin de Oracle (V1.01)

Pg. 77

Aubay Espaa - Formacin

un segmento de rollback. Al especificar este parmetro, un segmento de rollback podr liberar espacio despus de completar las transacciones que produjeron el crecimiento. La liberacin de las extensiones no se lleva a cabo de forma inmediata despus de completar la transaccin. Este proceso de liberar las extensiones slo se realiza cuando el puntero se mueve de una extensin a la siguiente. Las extensiones se liberan si se produce una de las dos condiciones siguientes: El tamao actual del segmento de rollback excede al valor del parmetro OPTIMAL. Existen extensiones inactivas contiguas.

El servidor Oracle intenta liberar las extensiones inactivas de un segmento de rollback hasta que el tamao del segmento equivalga al valor OPTIMAL, aunque deber parar si la siguiente extensin que se deba liberar se est utilizando. Restricciones de los Segmentos de Rollback Un segmento de rollback se puede especificar como PUBLIC o PRIVATE (valor por defecto es private) en el momento de la creacin y no se podr cambiar despus de su creacin. Para un segmento de rollback el valor de MINEXTENTS debe ser de dos. PCTINCREASE no se puede especificar en la creacin de un segmento de rollback y si se especificase su valor siempre debe ser 0. El valor del parmetro OPTIMAL deber coincidir, como mnimo al tamao inicial del segmento de rollback, que es el espacio que utiliza el nmero de extensiones que define MINEXTENTS.

A continuacin se muestra un ejemplo de creacin de segmentos de rollback: create tablespace rbs_01 datafile '<ORACLE_DATA>/<ORACLE_SID>/<ORACLE_SID>_rbs_01.dbf' autoextend on next 10M maxsize unlimited default storage ( initial 1M next 1M pctincrease 0 minextents 8 ); create create create create rollback rollback rollback rollback segment segment segment segment r1_01 r1_02 r1_03 r1_04 tablespace tablespace tablespace tablespace rbs_01 rbs_01 rbs_01 rbs_01 storage storage storage storage size 256M

(optimal (optimal (optimal (optimal

8M); 8M); 8M); 8M);

8.3.1 Activar/Desactivar/Borrar Segmentos de Rollback


Cuando se crea un segmento de rollback se encuentra desconectado y no se puede utilizar. Para hacer que un segmento de rollback est disponible para que lo utilicen las transacciones, se debe utilizar el comando: ALTER ROLLBACK SEGMENT <rollback_segment_name> ONLINE;

Administracin de Oracle (V1.01)

Pg. 78

Aubay Espaa - Formacin

El nmero de segmentos de rollback que una instancia puede conectar est limitado por el parmetro MAX_ROLLBACK_SEGMENTS. Para asegurarse que una instancia siempre conectar los segmentos de rollback que tenga definidos, se debe especificar el nombre del segmento de rollback en el fichero de parmetros de la instancia, como se muestra en el siguiente ejemplo: rollback_segments= (r1_01,r1_02,r1_03,r1_04) De forma similar a como se activan los segmentos de rollaback de forma manual, tambin se pueden desactivar manualmente; para ello se debe ejecutar el siguiente comando: ALTER ROLLBACK SEGMENT <rollback_segment_name> OFFLINE; Si durante la ejecucin de esta sentencia existiera transacciones activas en dicho segmento de rollback, se marcara como PENDING OFFLINE, como se puede observar en la vista dinmica V$ROLLSTAT. En el momento que se completen las transacciones existentes, se desconectar dicho segmento. Si se desea borrar un segmento de rollback cuando ya no sea necesario o bien hay que volver a crearlo con diferentes valores de almacenamiento para INITIAL, NEXT o MINEXTENTS, se debe ejecutar el siguiente comando: DROP ROLLBACK SEGMENT <rollback_segment_name>;

8.4 VISTAS DEL DICCIONARIO DE DATOS SOBRE SEGMENTOS DE ROLLBACK


Para obtener informacin acerca de todos los segmentos de rollback de la base de datos se debe consultar la vista DBA_ROLLBACK_SEGS. SQL>SELECT segment_name, tablespace_name, owner, status FROM DBA_ROLLBACK_SEGS; La columna owner hace referencia al tipo del segmento de rollback: Si su valor es SYS indica un segmento de rollback privado. Si su valor es PUBLIC indica un segmento de rollback pblico. Las vistas dinmicas para obtener estadsticas de los segmentos de rollback son: V$ROLLNAME V$ROLLSTAT

La vista V$ROLLNAME contiene los campos: NAME: Indica el nombre del segmento de rollback. USN: Indica el nmero del segmento de rollback.

La vista V$ROLLSTAT contiene los campos:

Administracin de Oracle (V1.01)

Pg. 79

Aubay Espaa - Formacin

USN: Indica el nmero del segmento de rollback, servir como campo de unin con la vista V$ROLLNAME. EXTENTS: Nmero de extensiones del segmento. RSSIZE: Tamao actual del segmento en bytes. XACTS: Nmero de transacciones que utilizan este segmento. OPTSIZE: Valor OPTIMAL para el segmento de rollback. HWMSIZE: Lmite superior (en bytes) que ha alcanzado el segmento desde el inicio. AVEACTIVE: Tamao actual de las extensiones activas, promediado con el paso del tiempo. STATUS: Estado del segmento de rollback. ONLINE, PENDING OFFLINE, OFFLINE. CUREXT: Ubicacin actual de la cabeza (puntero) del segmento de rollback. Nmero de extensin. CURBLK: Ubicacin actual de la cabeza (puntero) del segmento de rollback. Nmero de bloque.

NOTA: Si un segmento se encuentra en estado PENDING OFFLINE, el estado que se mostrar en la vista DBA_ROLLBACK_SEGS ser ONLINE. Se puede realizar la siguiente consulta para mostrar informacin del estado actual de los segmentos de rollback: SQL> SELECT n.name, s.extents, s.rssize, s.optsize, s.hwmsize, s.status FROM V$ROLLNAME n, V$ROLLSTAT s WHERE n.usn=s.usn; s.xacts,

Administracin de Oracle (V1.01)

Pg. 80

Aubay Espaa - Formacin

9 GESTIN DE TABLAS
Las tablas son la forma ms habitual de almacenamiento en las base de datos. El administrador de la base de datos tiene un control muy limitado sobre la distribucin de las filas en una tabla. Las tablas se pueden almacenar en cualquier orden, dependiendo de la actividad de la tabla.

9.1 FORMATO Y TAMAO DE LAS FILAS

Bloque de la Base de Datos

Cabecera de fila Longitud de columna Valor de columna

Fig. 9.1 Estructura de una Fila Las filas se almacenan en bloques de la base de datos como registros de longitud variable. Las columnas de una fila se almacenan normalmente en el orden en que se definieron y cualquier columna NULL final no se almacena. Cada fila de una tabla tiene: Cabecera de la Fila: Se utiliza para almacenar el nmero de columnas de la fila, la informacin de encadenamiento y el estado de bloqueo de la fila. Datos de Fila: Para cada columna, el servidor Oracle almacena la longitud de la columna y el valor. El valor de la columna se almacena inmediatamente a continuacin de los bytes de longitud de la columna.

Las filas adyacentes no necesitan espacio entre ellas, ya que cada fila tiene una entrada en el directorio de filas que indica la direccin de comienzo de la fila.

Administracin de Oracle (V1.01)

Pg. 81

Aubay Espaa - Formacin

9.2 TIPOS DE DATOS ORACLE


El servidor Oracle proporciona varios tipos de datos: 1. Escalares: a. CHAR(N), NCHAR(N) b. VARCHAR2(N) c. NVARCHAR2(N) d. NUMBER(P,S) e. DATE f. RAW(N) g. BLOB, CLOB,NCLOB,BFILE h. LONG, LONG RAW i. ROWID,UROWID 2. Recopilacin: a. VARRAY b. TABLAS ANIDADAS 3. Relacin: a. REF 4. Tipos de Datos definidos por el usuario.

9.2.1 Tipos de Datos Escalares


9.2.1.1Datos de Carcter
Los datos de carcter se pueden almacenar en la base de datos con longitud fija o longitud variable. Los tipos de datos de carcter de longitud fija, como CHAR y NCHAR, se almacenan con espacios. NCHAR es un idioma nacional, que permite almacenar juegos de caracteres tanto de ancho fijo como de ancho variable. El tamao mximo est determinado por el nmero de bytes necesarios para almacenar un carcter, con un lmite de 2000 bytes por campo. Por defecto 1 carcter es 1 byte. Los tipos de datos de carcter de longitud variable slo utilizan el nmero de bytes necesarios para almacenar el valor actual de la columna y puede variar de tamao para cada columna, hasta 4000 bytes. VARCHAR2 y NVARCHAR2 son ejemplos de tipos de datos de caracteres de longitud variable.

9.2.1.2Datos Numricos
Los nmeros en una base de datos Oracle siempre se almacenan como datos de longitud variable. Pueden almacenar hasta 38 digitos significativos. Los tipos de datos numricos requieren:

Administracin de Oracle (V1.01)

Pg. 82

Aubay Espaa - Formacin

Un byte para el exponente Un byte por cada dos dgitos significativos de la mantisa Un byte para nmeros negativos si el nmero de dgitos significativos es menos de 38 bytes.

9.2.1.3Tipos de Datos DATE


El servidor Oracle almacena los datos de tipo fecha en campos de longitud fija de siete bytes.

9.2.1.4Tipos de Datos RAW


Este tipo de datos permite almacenar pequeos datos binarios. El servidor Oracle no realiza conversiones de juegos de carcteres cuando se transmiten datos RAW entre mquinas dentro de una red o si los datos RAW se mueven de una base de datos a otra mediante utilidades Oracle. El nmero de bytes necesarios para almacenar el valor actual de la columna vara de tamao para cada fila, hasta 2000 bytes.

9.2.1.5Tipos de Datos para Almacenamiento de Large Objects (LOB)


Oracle proporciona seis tipos de datos para almacenar LOB: CLOB y LONG para datos de caracteres de ancho fijo. NCLOB para grandes datos del juego de caracteres nacional de ancho fijo. BLOB y LONG RAW para almacenamiento de datos no estructurados. BFILE para almacenamiento de datos no estructurados en ficheros del sistema operativo.

Los tipos de datos LONG y LONG RAW se utilizaban anteriormente para datos no estructurados, como imgenes, documentos o informacin geogrfica y se incluyen principalmente por compatibilidad hacia atrs. Estos tipos de datos se han sustituido por los tipos de datos LOB. Comparacin de los tipos de datos LONG con los tipos de datos LOB: LONG, LONG RAW Una nica columna por tabla Hasta 2 gigabytes SELECT devuelve datos Datos almacenados en lnea No existe soporte de tipo objeto Acceso secuencial a partes LOB Mltiples columnas por tabla Hasta 4 gigabytes SELECT devuelve el localizador Datos almacenados en lnea o fuera de lnea Soporta tipos de objetos Acceso aleatorio a partes

de

9.2.1.6Tipos de Datos ROWID y UROWID


ROWID es una pseudocolumna a la que se puede consultar junto con otras columnas de una tabla. Tiene las siguientes carctersticas:

Administracin de Oracle (V1.01)

Pg. 83

Aubay Espaa - Formacin

ROWID es un identificador nico para cada fila dentro de la base de datos. ROWID no se almacena explcitamente como un valor de columna. Aunque el ROWID no muestra de forma directa la direccin fsica de una fila, se puede usar para localizarla. ROWID es la forma ms rpida de acceder a una fila dentro de una tabla. ROWID se almacena en ndices para especificar las filas que tienen un conjunto dado de valores de clave.

A partir de la versin de Oracle 8.1 se proporciona un nuevo tipo de dato nico conocido como el rowid universal, o UROWID. Soporta los ROWID de tablas ajenas y puede almacenar todo tipo de rowids. El valor del parmetro compatible debe ser al menos 8.1 para poder usar UROWID. FORMATO ROWID ROWID necesita 10 bytes de espacio en disco y se muestran 18 caracteres. Consta de los siguientes componentes:

OOOOOO
Nmero del objeto de datos

FF
Nmero relativo de archivo

BBBBB
Nmero de Bloque

RR
Nmero de fila

Nmero del objeto de datos: Est asignado a cada objeto de datos, como una tabla o ndice, cuando se crea y es nico dentro de la base de datos. Nmero relativo del Fichero: Es nico para cada fichero dentro del tablespace Nmero de bloque: Representa la posicin del bloque que contiene la fila dentro del fichero. Nmero de Fila: Identifica la posicin de la entrada en el directorio de la fila en la cabecera del bloque.

Internamente, el nmero de objeto de datos necesita 32 bits, el nmero de fichero relativo necesita de 10 bits, el nmero de bloque necesia de 22 bits y el nmero de fila necesita e 16 bits, siendo un total de 80 bits (10 bytes). ROWID se muestra con un juego base-64 que utiliza seis posiciones para el nmero de objeto de datos, tres posiciones para el nmero de fichero relativo, seis posiciones para el nmero de bloque y tres posiciones para el nmero de fila. El juego base-64 utiliza los caracteres A-Z az 0-9 + y -. Ubicacin de una Fila mediante ROWID Como un segmento slo puede residir en un tablespace, mediante el nmero de objeto de datos, el servidor Oracle puede determinar el tablespace que contiene una fila.

Administracin de Oracle (V1.01)

Pg. 84

Aubay Espaa - Formacin

El nmero de fichero relativo dentro del tablespace se usa para encontrar el fichero, el nmero de bloque se utiliza para encontrar el bloque que contiene la fila y el nmero de fila se utiliza para encontrar el registro de directorio de fila para cada fila. El registro de directorio de fila s puede utilizar para encontrar el comienzo de la fila. As ROWID se puede utilizar para encontrar cualquier fila dentro de una base de datos.

9.2.2 Recopilaciones
Las recopilaciones son objetos que contienen objetos. Hay disponibles dos tipos de datos de recopilacin.

9.2.2.1Matrices Variables (VARRAYS)


Son tiles para almacenar listas que contienen un nmero de elementos pequeo. Los VARRAY tienen las siguiente caractersticas: Una matriz es un conjunto ordenado de elementos de datos. Todos los elementos de la matriz dada son del mismo tipo de dato. Cada elemento tiene un ndice, que es un nmero que corresponde a la posicin del elemento en la matriz. El nmero de elementos en una matriz es el tamao de la matriz. El servidor Oracle permite que las matrices tengan un tamao variable, razn por la cual se llaman VARRAY, pero el tamao mximo se debe especificar cuando se declara el tipo de matriz.

9.2.2.2Tablas Anidadas
Las tablas anidadas permiten definir una tabla como una columna dentro de una tabla. Se pueden usar para almacenar conjuntos que pueden tener un gran nmero de registros. Las tablas anidadas suelen tener las siguientes caractersticas: Es un conjunto desordenado de registros. Todas las filas de una tabla anidada tienen la misma estructura. Se almacenan de forma independiente de la tabla principal. Las caractersticas de almacenamiento para la tabla anidada las puede definir el administrador de la base de datos. No existe un tamao mximo predeterminado para una tabla anidada.

9.2.3 Tipos de Datos de Relacin


Los tipos de datos de Relacin se utilizan como punteros dentro de la base de datos. El uso de estos tipos requiere la opcin Objects.

Administracin de Oracle (V1.01)

Pg. 85

Aubay Espaa - Formacin

9.3 CREACIN DE TABLAS


La sintaxis ms bsica para crear una tabla es:

Propiedades Relacionales

Propiedades Fsicas

Donde: Schema: Es el propietario de la tabla. Table: Es el nombre de la tabla. Column: Es el nombre de la columna.

Administracin de Oracle (V1.01)

Pg. 86

Aubay Espaa - Formacin

Datatype: Es el tipo de datos de la columna. Tablespace: Identifica el tablespace donde se crear la tabla. PCTFREE: Es la cantidad de espacio reservado en cada bloque (es un porcentaje equivalente al espacio total meno la cabecera de bloque) para que las filas crezcan en longitud. PCTUSED: Determina el lmite inferior de espacio utilizado en un bloque, antes de que est disponible para ms inserciones de fila. INITRANS: Especifica el nmero de registros de transaccin preasignados en cada bloque, el valor por defecto es 1. MAXTRANS: Limita el nmero de entradas de transaccin que se pueden asignar a cada bloque, el valor por defecto es 255. STORAGE: Identifica la clusula de almacenamiento que determina cmo se almacenarn las extensiones en la tabla. LOGGING: Especifica que la creacin de la tabla se registrar en los ficheros redo log y todas las modificaciones posteriores de la misma. Esta es la opcin por defecto. NOLOGGIN: Especifica que la creacin de la tabla no se registrar en los ficheros de redo log. CACHE: Especifica que los bloques recuperados de esta tabla se colocan en el extremo que se ha utilizado ms recientemente de la lista LRU de la cach de buffers, incluso si se ha realizado una exploracin completa de la tabla. Esta opcin es til para tablas que son accedidas de forma muy frecuente, y tablas de tamao pequeo. NOCACHE: Especifica que los bloques recuperados de esta tabla se colocan en el extremo que se ha utilizado ms recientemente que est en la cach de buffers cuando se realiza una exploracin completa de la tabla. Es til para tablas que no son accedidas de forma frecuente.

Copia de una Tabla Existente Se puede utilizar el comando CREATE TABLE con una subconsulta para copiar una tabla existente completa o parcialmente. La sintaxis es: CREATE TABLE.table AS <SUBQUERY> Las restricciones, disparadores y privilegios de tabla no se copian en la nueva tabla. Si se defini una columna como NOT NULL en la tabla original, la columna correspondiente en la nueva tabla tambin se definir como NOT NULL. Ejemplo de Creacin de Tabla CREATE TABLE scott.emp (empno NUMBER ename VARCHAR2(10) CONSTRAINT pk_emp PRIMARY KEY, CONSTRAINT nn_ename NOT NULL CONSTRAINT upper_ename CHECK (ename = UPPER(ename)), job VARCHAR2(9), mgr NUMBER CONSTRAINT fk_mgr REFERENCES scott.emp(empno), hiredate DATE DEFAULT SYSDATE, sal NUMBER(10,2) CONSTRAINT ck_sal CHECK (sal > 500), comm NUMBER(9,0) DEFAULT NULL,

Administracin de Oracle (V1.01)

Pg. 87

Aubay Espaa - Formacin

deptno

NUMBER(2)

PCTFREE 5 PCTUSED 75;

CONSTRAINT nn_deptno NOT NULL CONSTRAINT fk_deptno REFERENCES scott.dept(deptno) )

9.3.1 Instrucciones para la Creacin de Tablas


Colocar las tablas en un tablespace independiente y no en el tablespace que tiene segmentos de rollaback, segmentos temporales, ndices o en el tablespace System. Colocar las tablas en tablespaces gestionados localmente para evitar la fragmentacin. Utilizar tamaos de extensin estndar que sean mltiplos de 5*DB_BLOCK_SIZE para minimizar la fragmentacin. Utilizar la clusula CACHE para pequeas tablas a las que sea probable acceder con mucha frecuencia.

9.3.2 Definicin de PCTFREE y PCTUSED


PCTFREE Un valor de PCTFREE grande permite ms espacio para las actualizaciones dentro del bloque de una base de datos. Definir un valor grande si la tabla contiene: Columnas que son inicialmente NULL y posteriormente se actualizan con algn valor. Columnas que es probable que aumenten de tamao como resultado de una actualizacin.

Un mayor valor de PCTFREE conllevar una menor densidad de bloque y que cada bloque pueda albergar un nmero menos de filas. El clculo de PCTFREE se hace de la siguiente forma: (Tamao medio de la Fila Tamao inicial de la Fila)*100/Tamao medio de la fila PCTUSED Al definir PCTUSED de forma correcta se asegura que el bloque se devuelve a la lista de bloques libres slo cuando hay espacio suficiente para albergar una fila de tamao medio. Si un bloque de la lista de bloques libres no contiene espacio suficiente para insertar una fila, el servidor Oracle busca en el bloque siguiente en la lista de bloques libres. La exploracin lineal continua hasta que se encuentra un bloque con suficiente espacio o se llega al final de la lista. Con la frmula de PCTUSED se reduce el tiempo necesario de exploracin de la lista de bloques libres aumentando la probabilidad de encontrar un bloque con el espacio libre necesario. El clculo de PCTFREE se hace de la siguiente forma: 100 PCTFREE (tamao medio de la fila*100/espacio de datos disponible)

Administracin de Oracle (V1.01)

Pg. 88

Aubay Espaa - Formacin

Nota: El valor para el tamao medio de la fila se puede estimar con el comando: ANALIZE TABLE <NOMBRE_TABLA>

9.3.3 Migracin y Encadenamiento de Filas


Migracin Si PCTFREE se define con un valor pequeo, puede que no haya espacio suficiente en un bloque para albergar una fila que crece como resultado de una actualizacin. Cuando ocurre esto, el servidor Oracle mover toda la fila a un nuevo bloque y dejar un puntero en el bloque original hacia la nueva ubicacin. A este proceso se le llama Migracin de Filas. Cuando se migra una fila, el rendimiento de E/S asociado con esta fila desciende ya que el servidor Oracle debe explorar dos bloques de datos para recuperar la fila. Encadenamiento El encadenamiento de filas se produce cuando una fila es demasiado grande para caber dentro de cualquier bloque. Esto puede ocurrir si la fila contiene muchas columnas muy largas. En este caso el servidor Oracle divide la fila en trozos ms pequeos denominados piezas de fila. Cada pieza de fila se almacena en un bloque junto a los punteros necesarios para recuperar y ensamblar toda la fila. El encadenamiento de filas se puede minimizar seleccionando un tamao de bloque mayor (cuando se crea la base de datos) o bien dividiendo la tabla en tablas ms pequeas con menos columnas si es posible.

9.3.4 Control del Espacio Utilizado por las Tablas


Algunos de los parmetros de almacenamiento y todos los parmetros de utilizacin de los bloques se pueden modificar con el comando ALTER TABLE, el cual para estos casos tiene la siguiente sintaxis ALTER TABLE [schema].table { [storage-clause] [PCTFREE integer] [PCTUSED integer] [INITRANS integer] [MAXTRANS integer]} Los parmetros que se pueden modificar y sus implicaciones son las siguientes: NEXT: Cuando el servidor Oracle asigna otra extensin, se utilizar el nuevo valor. Los tamaos de extensin posteriores se incrementarn con PCTINCREASE. PCTINCREASE: Un cambio en este parmetro se registrar en el diccionario de datos. Se utilizar para volver a calcular NEXT cuando la siguiente extensin sea asignada por el servidor Oracle. Por ejemplo, se tiene una tabla con dos extensiones que tiene como NEXT=10K y PCTINCREASE=0. Si se pone PCTINCREASE=100, la tercera extensin se asignar a 10K pero al cuarta extensin se asignar a 20K.

Administracin de Oracle (V1.01)

Pg. 89

Aubay Espaa - Formacin

MINEXTENTS: Este parmetro puede cambiar a cualquier valor que sea menor o igual que el nmero actual de extensiones. No tendr efecto inmediato, pero se utilizar si la tabla se trunca. MAXEXTENTS: El valor de este parmetro puede tomar cualquier valor igual o mayor que el nmero actual de extensiones. El valor INITIAL no se puede modificar para una tabla ya creada. El valor NEXT especificado se redondear a un valor mltiplo de un tamao de bloque mayor o igual que el valor especificado. Los parmetros de utilizacin de bloques se pueden cambiar para: Mejorar la utilizacin del espacio. Minimizar la posibilidad de migracin.

Los efectos de cambiar los parmetros de utilizacin de bloques son: PCTFREE: Un cambio en ese parmetro afectar a futuras inserciones. Los bloques que no se utilizan para inserciones porque ya se han rellenado, no se vern afectados hasta que se vuelvan a la lista de bloques libres. Slo se pueden colocar se pueden colocar en la lista de bloques libres si su uso desciende por debajo de PCTUSED. PCTUSED: Cualquier cambio en este parmetro afectar a todos los bloques de la tabla. Si una fila actualiza o borra, se comprobar si se puede utilizar el bloque que contiene la fila y se volver a utilizar para inserciones si el uso est por debajo de PCTUSED. INITRANS: Un cambio en este parmetro slo afectar a los bloques nuevos. MAXTRANS: Un cambio en este parmetro afectar a todos los bloques de la tabla.

9.4 MODIFICACIN DE TABLAS


9.4.1 Liberacin de Espacio no Utilizado
Si se han asignados grandes extensiones a una tabla y no se estn utilizando totalmente, se puede liberar espacio en la tabla ejecutando el siguiente comando de forma manual. De esta forma el espacio liberado queda disponible para otros segmentos del tablespace. ALTER TABLE [schema].table DEALLOCATE UNUSED [KEEP integer [K|M] ] El parmetro KEEP especifica el nmero de bytes por encima del lmite superior que se debera retener. Si el comando utiliza la clusula KEEP, el servidor Oracle liberar todo el espacio no utilizado por encima del lmite superior. Si el lmite superior est en una extensin menor que el valor de MINEXTENTS, el servidor Oracle liberar extensiones por encima de MINEXTENTS. Como la liberacin de espacio con este comando libera espacio sin utilizar dentro de una extensin, un uso frecuente puede provocar fragmentacin del espacio dentro del fichero de datos. Para evitar este problema se puede definir MINIMUM EXTENT en la creacin del tablespace.

Administracin de Oracle (V1.01)

Pg. 90

Aubay Espaa - Formacin

Si se quiere liberar todo el espacio por debajo del lmite superior, incluso si el lmite superior est por debajo de MINEXTENTS, se utilizar KEEP=0.

9.4.2 Truncado de una Tabla


Al truncar una tabla se borran todas las filas de una tabla y se libera el espacio sin utilizar. La sintaxis es: TRUNCATE TABLE [schema].table [ {DROP|REUSE} STORAGE ] Los efectos de utilizar este comando son los siguientes: Se borran todas las filas de la tabla. No se generan datos de rollback y el comando se valida implcitamente ya que el comando TRUNCATE TABLE es un comando DDL. Tambin se truncan los ndices correspondientes. Una tabla a la que hace referencia una clave ajena no se puede truncar. Los disparadores de borrado no actan cuando se usa este comando. Si se usa la clusula DROP, que es la clusula por defecto: o Se liberan todas las extensiones excepto aquellas especificadas mediante MINEXTENTS. o El lmite superior se restablece para apuntar al primer bloque de la tabla. o El valor de NEXT para la siguiente extensin se restablece. Se debe especificar la clusula REUSE para retener todo el espacio que utiliza la tabla. El efecto de DROP o REUSE repercute en cascada en los ndices de la tabla.

9.4.3 Borrado de una Tabla


Una tabla se debe borrar si ya no es necesaria o si se debe reorganizar. La sintaxis es la siguiente: DROP TABLE [schema].table [CASCADE CONSTRAINTS] Cuando se borra una tabla se liberan las extensiones que utiliza la tabla. Si son contiguas, se puede fusionar, ya sea automticamente o manualmente en una etapa posterior. La opcin de CASCADE CONTRAINTS es necesaria si la tabla es la principal en una relacin de clave ajena.

9.4.4 Borrado de una Columna


Antes de la versin de Oracle 8.1, no era posible borrar una columna de una tabla. A partir de esta versin de Oracle se permite el borrado de columnas en las tablas. Para ello se debe tener establecido el parmetro compatible a un valor igual o superior a 8.1. El borrado de columnas limpia columnas no utilizadas y potenciales demandantes de espacio sin tener que exportar o

Administracin de Oracle (V1.01)

Pg. 91

Aubay Espaa - Formacin

importar datos, ni volver a crear ndices y restricciones. Es posible que se tarde mucho tiempo en borrar una columna ya que se suprimen todos los datos de dicha columna. La sintaxis para eliminar columnas de una tabla es: ALTER TABLE [schema].table DROP CONTRAINTS CHEKPOINT integer] COLUMN <nombre_columna> [CASCADE

El borrado de una columna puede requerir mucho tiempo y necesitar una gran cantidad de espacio de rollback. Mientras se borran las columnas de tablas grandes, se pueden especificar puntos de control para minimizar el uso de espacio de rollback. Una forma alternativa de quitar una columna de una tabla y que sea ms rpido el borrado posterior, es marcarla como no utilizada (INVALID). Las columnas marcadas como no utilizadas se pueden eliminar de la tabla posteriormente cuando haya menos actividad en el sistema. La sintaxis para marcar una columna como no utilizada es la siguiente: ALTER TABLE [schema].table SET UNUSED COLUMN <nombre_columna> [CASCADE CONSTRAINTS] Las columnas no utilizadas actan como si no fueran parte de la tabla. Las consultas no pueden ver los datos de las columnas no utilizadas. Adems, los nombres y los tipos de datos de esas columnas no se muestran cuando se ejecuta el comando DESCRIBE. Se puede agregar una nueva columna con el mismo nombre que una columna no usada. Para borrar definitivamente las columnas no usadas de la tabla se debe ejecutar el siguiente comando: ALTER TABLE [schema].table DROP UNUSED COLUMNS [CHEKPOINT integer] Para identificar tablas con columnas no utilizadas, se puede consultar la vista DBA_UNUSED_COL_TABS. Con ello se obtiene los nombres de las tablas que tienen columnas no utilizadas y el nmero de columnas marcadas como no utilizadas. El borrado de columnas de una tabla tiene las siguientes restricciones: Suprimir Suprimir Suprimir Suprimir una columna de una tabla de tipo de objeto. columnas de tablas anidadas. todas las columnas de una tabla. una columna de clave principal.

9.5 TABLAS TEMPORALES


Adems de las tablas permanentes que se ha descrito anteriormente, se pueden crear tablas temporales para contener datos privados de sesin que slo existan mientras dure una transaccin o una sesin.

Administracin de Oracle (V1.01)

Pg. 92

Aubay Espaa - Formacin

El comando CREATE GLOBAL TEMPORARY TABLE <table_name> AS SELECT... crea una tabla temporal que puede ser especfica de transaccin o de sesin. Para tablas temporales especficas de transaccin, los datos permanecen hasta que se acaba la transaccin, mientras que en las tablas especficas de sesin, los datos permanecen hasta que acaba la sesin. Los datos de una sesin son privados para la sesin. Cada sesin slo puede ver y modificar sus propios datos. Las clusulas que controlan la duracin de las filas en una tabla temporal son: ON COMMIT DELETE ROWS para especificar que las filas son visibles dentro de la transaccin. ON COMMIT PRESERVE ROWS para especificar que las filas son visibles para toda la sesin.

La definicin de una tabla temporal es visible para todas las sesiones.

9.6 VISTAS DEL DICCIONARIO DE DATOS SOBRE TABLAS


Las vistas del diccionario de datos que muestran informacin sobre tablas son: DBA_OBJECTS DBA_SEGMENTS DBA_TABLES DBA_EXTENTS

Vista DBA_OBJECTS Esta vista contiene una lista de todos los objetos de la base de datos. Sus campos ms representativos son: OWNER OBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE CREATED

Vista DBA_SEGMENTS Esta vista contiene informacin sobre los parmetros storage de todos los segmentos de la base de datos. Sus campos ms representativos son: OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME HEADER_FILE HEADER_BLOCK

Administracin de Oracle (V1.01)

Pg. 93

Aubay Espaa - Formacin

Vista DBA_TABLES Esta vista contiene las descripciones de todas las tablas relacionales de la base de datos. Sus campos ms reprensentativos son: OWNER TABLE_NAME PCT_FREE PCT_USED INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE CACHE BLOCKS EMPTY_BLOCKS TEMPORARY

Vista DBA_EXTENTS Esta vista contiene el nmero de extensiones, su ubicacin y tamao. Sus campos ms reprensentativos son: OWNER SEGMENT_NAME EXTENT_ID FILE_ID BLOCK_ID BLOCKS

Si se ejecuta la siguiente consulta se obtendr el nmero de extensiones y los bloques totales utilizados por una tabla en cada fichero de la base de datos: SQL>SELECT file_id, count(*) Extents, SUM(blocks) Blocks From DBA_EXTENTS WHERE OWNER=<user_name> and SEGMENT_NAME=<segment_name> GROUP BY file_id;

Administracin de Oracle (V1.01)

Pg. 94

Aubay Espaa - Formacin

10 GESTIN DE NDICES
Un ndice es una estructura de rbol que permite el acceso directo a una fila de una tabla. Los ndices se pueden clasificar en funcin de su diseo lgico o de su implementacin fsica. La clasificacin lgica agrupa los ndices desde un punto de vista de la aplicacin, mientras que la clasificacin fsica se deriva del modo en que se almacenan los ndices. Lgico: o Columna nica o concatenada. o nico o No nico. o Basado en funciones. Fsico: o rbol-B. o Clave normal o invertida. o Bitmap.

10.1 CLASIFICACIN LGICA


10.1.1 ndices Concatenados o de Columna nica
Un ndice de columna nica tiene una nica columna en la clave del ndice. Un ndice concatenado, tambin conocido como ndice compuesto, se crea en mltiples columnas en una tabla. Las columnas de un ndice concatenado no necesitan estar en el mismo orden que las columnas de la tabla, y tampoco es necesario que sean adyacentes. El nmero mximo de columnas en un ndice de clave compuesta es de 32. Sin embargo el tamao combinado de todas las columnas no puede exceder de, aproximadamente un tercio del tamao del bloque de datos.

10.1.2 ndices nicos y No nicos


Un ndice nico garantiza que no haya dos filas de una tabla con valores duplicados en la columna que define el ndice. Una clave de ndice nico slo puede apuntar a una fila de la tabla. En un ndice no nico, una clave sencilla puede tener mltiples filas asociadas con ella.

10.1.3 ndices basados en Funciones


Un ndice basado en funciones se crea cuando se utilizan funciones o expresiones que implican a una o ms columnas en la tabla que se est indexando. Un ndice basado en funciones calcula previamente el valor de la funcin o de la expresin y lo almacena en el ndice. Estos ndices se pueden crear tanto sobre una estructura B-Tree o bien una estructura Bitmap.

Administracin de Oracle (V1.01)

Pg. 95

Aubay Espaa - Formacin

Los ndices basado en funciones ofrecen un mecanismo eficaz para evaluar sentencias que contienen funciones en sus clasulas WHERE. Un ndice basado en funciones se puede crear para materializar expresiones de clculo intensivo en el ndice, de forma que el servidor Oracle no tiene que calcular el valor de la expresin a la hora de procesar sentencias SELECT y DELETE. Sin embargo, cuando se procesan sentencias INSERT y UPDATE, el servidor Oracle an debe evaluar la funcin para procesar la sentencia y generar el registro ndice. A continuacin se muestra un ejemplo de creacin de un ndice basado en funciones y una consulta que utiliza dicho ndice: CREATE INDEX emp_i ON emp (UPPER(ename)); SELECT * FROM emp WHERE UPPER(ename) IS NOT NULL;

10.2 CLASIFICACIN FSICA


Aunque las dos estructuras de ndices (B-Tree y Bitmaps) usan una estructura de ndice de rbol-B, se suele asociar el trmino ndice B-Tree a los que almacenan una lista de ROWID para cada clave.

10.2.1 Estructura de un ndice B-Tree


En la siguiente figura se muestra la estructura de un ndice B-Tree
Raiz

Derivacin

Hoja Cabecera de entrada del ndice Longitud de la columna clave Valor de la columna clave ROWID

Fig. 10.1 ndice rbol-B En la parte superior del ndice est la raz que contiene los registros que apuntan al siguiente nivel del ndice. En el siguiente nivel estn los bloques de derivacin, que a su vez apuntan a los bloques del siguiente nivel del ndice. En el nivel inferior estn los nodos hojas que

Administracin de Oracle (V1.01)

Pg. 96

Aubay Espaa - Formacin

contienen los registros de ndice que apuntan a las filas de la tabla. Los bloques hoja estn doblemente enlazados para facilitar la exploracin del ndice en un orden ascendente, as como en un orden descendente de valores clave. Formato de los Registros de la Hoja ndice Un registro de ndice est compuesto de los siguientes componentes: Una cabecera de registro, que almacena el nmero de columnas e informacin de bloqueo. Los pares valor-longitud de la columna clave, que definen el tamao de una columna en la clave seguida del valor de la columna. ROWID de una fila que contiene los valores clave.

Caractersticas de los Registros de la Hoja ndice Los valores clave se repiten si hay mltiples filas que contienen el mismo valor clave. No hay registros de ndices que corresponde a una fila que tiene todas las columnas clave a NULL.

Efecto de Operaciones DML en un ndice El servidor Oracle mantiene de forma automtica los ndices cuando se realizan operaciones DML sobre la tabla que contiene el ndice: Las operaciones de insertar provocan una insercin de un registro ndice en el bloque apropiado. La eliminacin de una fila slo provoca la eliminacin lgica del registro de ndice. El espacio que utiliza la fila suprimida no est disponible para nuevos registros hasta que se eliminen todos los registros del bloque. Las actualizaciones de las columnas clave conducen a una eliminacin lgica y una insercin en el ndice.

10.2.2 ndice de Clave Invertida


Un ndice de clave invertida invierte los bytes de cada columna indexada, excepto el ROWID, al mantener el orden de la columna. Al insertar registros en una clave ascendente, se pueden producir cuellos de botella de E/S en el ndice ya que todas las actualizaciones del ndice se producen en el mismo sitio del rbol del ndice. Los ndices de clave inversa dividen la distribucin de las actualizaciones de ndice a travs del rbol invirtiendo el valor de los datos de la clave del ndice. Por ejemplo en la insercin de un nmero 7698 en la tabla, se almacena un valor clave en el ndice de 8967. Cuando se produce el siguiente nmero 7782 se genera un registro de ndice de valor clave 2877. De esta forma se distribuye la carga entre varios bloques de ndices.

Administracin de Oracle (V1.01)

Pg. 97

Aubay Espaa - Formacin

Los ndices de clave inversa son tiles en consultas que contienen predicados de igualdad. Como en un ndice de clave inversa no se guardan juntas las claves lxicamente adyacentes, no se puede realizar bsquedas de rango con un ndice as.

10.2.3 ndices Bitmap


Los ndices de Bitmap tienen ms ventajas que los ndices B-Tree en determinadas situaciones: Cuando una tabla tiene millones de registros y las columnas clave tienen baja cardinalidad, esto es, hay muy pocos valores distintos para la columna. Por ejemplo los ndices Bitmap son preferibles a los ndices B-Tree para las columnas gnero y estado civil de una tabla que contiene registros de pasaporte. Cuando las consultas suelen utilizar una combinacin de mltiples condiciones WHERE con relacin al operador OR. Cuando las columnas clave son de slo lectura o tienen baja actividad de actualizacin.

10.2.3.1 Estructura de un ndice Bitmap


Clave Azul Verde Rojo Amarillo ROWID Inicio 10.0.3 10.0.3 10.0.3 10.0.3 ROWID Final 12.8.3 12.8.3 12.8.3 12.8.3 Bitmap 100010010010100 000100001000010 010010011010001 001000100010010

Un ndice Bitmap tambin se organiza como uno B-Tree, pero el nodo hoja almacena un bitmap por cada valor clave en lugar de una lista de ROWIDS. Cada bit del bitmap corresponde con un posible ROWID, y si est definido el bit, significa que la fila ROWID correspondiente contien el valor clave. Como muestra la tabla anterior, el nodo hoja de un ndice bitmap contiene lo siguiente: Una cabecera de registro que contiene el nmero de columnas y la informacin de bloqueo. Los valores clave que consta de pares longitud-valor por cada columna clave. En el ejemplo de la tabla, la clave consta de una columna y el primer registro tiene un valor clave Azul. ROWID inicial, que en el ejemplo contiene 3 como nmero de fichero, 10 como nmero de bloque y 0 como nmero de fila. ROWID final, que en el ejemplo anterior contiene 3 como nmero de fichero, 12 como nmero de bloque y 8 como nmero de fila. Un segmento de bitmap, que consta de una cadena de bits. El bit se define cuando la fila correspondiente contiene el valor clave y deja de definirse cuando la fila no contiene el valor clave. El servidor Oracle usa una tcnica de compresin patentada para almacenar segmentos de bitmap.

Administracin de Oracle (V1.01)

Pg. 98

Aubay Espaa - Formacin

El ROWID inicial es el ROWID de la primera fila que apunta al segmento de bitmap del bitmap, es decir, el primer bit del bitmap corresponde a ese ROWID, el segundo bit del bitmap corresponde a la fila siguiente del bloque, y el ROWID final es un puntero hacia la ltima fila de la tabla cubierta por el segmento de bitmap. A continuacin se muestra una consulta muy eficiente donde se usa un ndice bitmap. SELECT COUNT(*) FROM CUSTOMER WHERE MARITAL_STATUS = 'married' AND REGION IN ('central','west'); Un ndice Bitmap puede procesar esta consulta con gran eficiencia, simplemente contando el nmero de unos en el ndice Bitmap

10.2.3.2 Uso de ndice Bitmap


El B-Tree se utiliza para encontrar los nodos hoja que contienen segmentos de bitmap para un valor dado de la clave. El ROWID inicial y los segmentos de bitmap se usan para encontrar las filas que contienen el valor clave. Cuando se realizan cambios en la columna clave de la tabla, se deben modificar los bitmaps. Esto provoca un bloqueo de los segmentos de bitmap. Como los bloqueos se adquieren en todo el segmento de bitmap, una fila que no est cubierta por el bitmap no se puede actualizar por otras transacciones hasta que termina la transaccin anterior. Los ndices bitmaps incluyen filas que tienen valores nulos en su clave, muy distinto al otro tipo de ndices que no los incluyen. Los ndices de nulos pueden ser muy tiles para algunos tipos de sentencias SQL, como aquellas que incluyen la funcin agregada COUNT. Por ejemplo si tenemos la sentencia SELECT COUNT(*) FROM <tabla> WHERE <campo> IS NULL; Si se define un ndice Bitmap sobre la columna <campo>, el optimizador usar el ndice bitmap sobre la columna indexada.

Administracin de Oracle (V1.01)

Pg. 99

Aubay Espaa - Formacin

10.2.4 Comparacin ndices B-Tree y Bitmap


rbol-B Bitmap

Idneo para las columnas Idneo en el caso de las de elevada cardinalidad. columnas de baja cardinalidad. Las actualizaciones de las Las actualizaciones de las claves son relativamente columnas clave son muy caras. econmicas. Ineficaz en el caso de Eficaces en el caso de consultas que utilizan los consultas que utilizan los predicados OR predicados OR tiles para OLTP tiles en el caso de los grandes almacenes de datos. Los ndices Bitmap son ms compactos que los ndices B-Tree cuando se utilizan con columnas de baja cardinalidad. Las actualizaciones en columnas clave en un ndice Bitmap son ms costosas ya que los bitmaps utilizan bloqueo a nivel de segmento de bitmap, mientras que un ndice B-Tree, los bloqueos son en registros correspondientes a filas individuales de la tabla. Los ndices Bitmap se pueden utilizar para realizar operaciones tales como OR, esto es, el servidor Oracle puede utilizar dos segmentos de bitmap para realizar un OR de bits y obtener un bitmap como resultado. Esto permite el uso eficaz de los bitmaps en las consultas que usan el predicado OR. Los ndices B-Tree pueden ser mejores para un entorno OLTP para el indexado de tablas con muchos movimientos, mientras que los ndices Bitmap pueden ser tiles en entornos de almacenamiento de datos en los que se realizan consultas complejas en tablas grandes y estticas.

10.3 CREACIN DE NDICES


10.3.1 Instrucciones en la Creacin de ndices
Los ndices aceleran el rendimiento de las consultas y ralentizan las operaciones DML. Evitar la creacin de ndices en tablas voltiles. Colocar ndices en tablespace independiente, no en tablespace que tenga segmentos de rollback, segmentos temporales, tablas, system. Minimizar la fragmentacin, utilizar algunos tamaos de extensin estndar que sena mltiplos de 5*DB_BLOCK_SIZE.

Administracin de Oracle (V1.01)

Pg. 100

Aubay Espaa - Formacin

Se puede conseguir una ganancia en el rendimiento de ndices grandes impidiendo la generacin de REDO. Tener en cuenta la clusula NOLOGGING para la creacin de ndices grandes. Como los registros de ndice son menores en comparacin con las filas de la tabla que indexan, los bloques de ndice suelen tener ms entradas por bloque. Por este motivo, normalmente INITRANS deber ser mayor en ndices que en las tablas correspondientes.

10.3.2 Creacin de ndices B-Tree Normales


Generalmente los ndices se crean en la cuenta de usuario que posee la tabla. La sintaxis de creacin de un ndice B-Tree normal es: CREATE [ UNIQUE ] INDEX [schema.] <name_index> ON [schema.] <name_table> (<name_column> [ASC | DESC] [ , <name_column> [ASC | DESC] ]......) [TABLESPACE <name_tablespace> ] [PCTFREE integer] [INITRANS integer] [MAXTRANS integer] [storage-clause] [LOGGING|NOLOOGING] [NOSORT|REVERSE] donde: UNIQUE: Se utiliza para especificar un ndice nico, por defecto no es nico. Schema: Es el propietario del ndice o tabla. Name_index: Es el nombre del ndice. Name_table: Es el nombre de la tabla. Name_column: Es el nombre de la columna. ASC/DES: Se proporciona por compatibilidad sintctica con otras bases de datos. NAME_TABLESPACE: Identifica el tablespace donde se crea el ndice. PCTFREE: Es la cantidad de espacio reservado en cada bloque. INITRANS: Especifica el nmero de registros de transaccin preasignados en cada bloque. 2 es el valor mnimo por defecto. MAXTRANS: Limita el nmero de bloques de transaccin que se pueden asignar a cada bloque. Por defecto es 255. LOGGING: Especifica que la creacin del ndice y las operaciones posteriores en el ndice se registran en el fichero Redo Log. Este es el valor por defecto. NOLOGGING: Especifica que la creacin y ciertos tipos de cargas no se registrarn en el fichero Redo Log. NOSORT: Especifica que las filas se almacenan en la base de datos en orden ascendente, y por tanto el servidor Oracle no tiene que ordenarlas al crear el ndice. REVERSE: Almacena los bytes del ndice en el bloque en orden inverso.

Un ejemplo de creacin de un ndice B-Tree Normal: CREATE INDEX summit.employee_last_name_idx ON summit.employee(last_name)

Administracin de Oracle (V1.01)

Pg. 101

Aubay Espaa - Formacin

STORAGE (INITIAL 200K NEXT 200K PCTINCREASE 0 MAXEXTENTS TABLESPACE indx;

50)

10.3.3 Creacin de ndices B-Tree de Clave Invertida


La sintaxis para crear un ndice de clave invertida es similar a los ndices normales, a excepcin que se usa la palabra clave REVERSE. En estos ndices no se puede usar la palabra clave NOSORT. CREATE [ UNIQUE ] INDEX [schema.] <name_index> ON [schema.] <name_table> (<name_column> [ASC | DESC] [ , <name_column> [ASC | DESC] ]......) [TABLESPACE <name_tablespace> ] [PCTFREE integer] [INITRANS integer] [MAXTRANS integer] [storage-clause] [LOGGING|NOLOOGING] REVERSE Un ejemplo de creacin de un ndice B-Tree de clave invertida: CREATE UNIQUE INDEX summit.orders_id_idx ON summit.orders(id) REVERSE STORAGE (INITIAL 200K NEXT 200K PCTINCREASE 0 MAXEXTENTS 50) TABLESPACE indx;

10.3.4 Creacin de ndices Bitmap


La sintaxis para crear un ndice Bitmap es la siguiente:
(<name_column> [ASC | DESC] [ , <name_column> [ASC | DESC] ]......)

CREATE BITMAP INDEX [schema.] <name_index> ON [schema.] <name_table>

[TABLESPACE <name_tablespace> ] [PCTFREE integer] [INITRANS integer] [MAXTRANS integer] [storage-clause] [LOGGING|NOLOOGING] [NOSORT]

Observar que un ndice Bitmap no puede ser nico. Un ejemplo de creacin de un ndice B-Tree de clave invertida:

Administracin de Oracle (V1.01)

Pg. 102

Aubay Espaa - Formacin

CREATE BITMAP INDEX summit.employee_last_name_idx ON summit.employee(last_name) STORAGE (INITIAL 200K NEXT 200K PCTINCREASE 0 MAXEXTENTS 50) TABLESPACE indx; CREATE_BITMAP_AREA_SIZE El parmetro de inicializacin CREATE_BITMAP_AREA_SIZE determina la cantidad de espacio que se utilizar para almacenar en memoria segmentos de bitmap. El valor por defecto es de 8 MB. Un valor mayor puede conducir a una creacin de ndice ms rpida. Si la cardinalidad es muy pequea, este valor se puede definir a un valor pequeo. Por ejemplo si la cardinalidad es de 2 elementos, entonces el valor puede estar en el orden de KB en lubar de MB. Por regla general para una cardinalidad mayor se necesita ms memoria para un rendimiento ptimo.

10.4 MODIFICACIN DE NDICES


10.4.1 Cambio de los Parmetros de Almacenamiento para ndices
Algunos parmetros de almacenamiento y de utilizacin de bloques se pueden modificar con el comando ALTER INDEX. La sintaxis para modificar los parmetros de almacenamiento es la siguiente: ALTER INDEX [schema.] <name_index> [storage_clause] [INITRANS integer] [MAXTRANS integer] Las implicaciones de cambiar los parmetros de almacenamiento para un ndice son las mismas que las de cambiarlos para una tabla. Un uso comn de este cambio es para incrementar MAXEXTENTS para un ndice. Se pueden cambiar los parmetros de utilizacin de bloques para garantizar mayores niveles de simultaneidad en un bloque de ndices. Un ejemplo de modificacin de los parmetros de almacenamiento en un ndice: ALTER INDEX summit.employee_last_name_idx STORAGE (NEXT 400K MAXEXTENTS 100);

10.4.2 Asignacin y Liberacin de Espacio de ndice

Administracin de Oracle (V1.01)

Pg. 103

Aubay Espaa - Formacin

Puede ser necesario agregar extensiones a un ndice antes de un periodo de mucha actividad de insercin en una tabla. De esta forma se evita la extensin dinmica de los ndices y una posterior degradacin del rendimiento por problemas de fragmentacin. Se puede utilizar la clusula DEALLOCATE del comando ALTER INDEX para liberar espacio no utilizado por encima del lmite superior de un ndice. La sintaxis para asignar o liberar espacio en los ndices es la siguiente: ALTER INDEX [schema.]<name_index> {ALLOCATE EXTENT (SIZE integer [K|M]) [DATAFILE filename]) | DEALLOCATE UNUSED [KEEP integer [K|M] ] } La asignacin o liberacin manual de espacio en un ndice sigue las mismas reglas que se utilizan con estos comandos aplicados a una tabla. Nota: El espacio de un ndice se libera cuando se trunca la tabla en la que se crea el ndice. El truncamiento de una tabla provoca el truncamiento de los ndices asociados. Un ejemplo de asignacin/liberacin de espacio en un ndice: ALTER INDEX summit.orders_region_id_idx ALLOCATE EXTENT /DISK6/INDX01.DBF); ALTER INDEX summit.orders_id_idx DEALLOCATE UNUSED; (SIZE 200K DATAFILE

10.4.3 Reconstruccin de ndices


La reconstruccin de un ndice se debe realizar en las siguientes situaciones: El ndice existente se desea mover a un tablespace distinto. Esto puede ser necesario si el ndice est en el mismo tablespace que la tabla o si los objetos deben redistribuirse a travs de varios discos. El ndice existente contiene muchas entradas suprimidas. Se trata de un problema habitual en ndices que almacenan el nmero de pedido de una tabla pedidos, en donde se ha suprimido los pedidos completamente y se han agregado a la tabla nuevos pedidos con nmeros mayores. Se desea convertir un ndice normal en un ndice de clave inversa. La tabla del ndice se ha movido a otro tablespace mediante el comando ALTER TABLE

La sintaxis para reconstruir un ndice es la siguiente: ALTER INDEX [schema.] <name_index> REBUILD [ONLINE] [TABLESPACE <name_tablespace> ] [PCTFREE integer] [INITRANS integer] [MAXTRANS integer] [storage-clause]

Administracin de Oracle (V1.01)

Pg. 104

Aubay Espaa - Formacin

[LOGGING|NOLOOGING] [REVERSE|NOREVERSE] Las palabras clave REVERSE o NOREVERSE slo se pueden utilizar para ndices B-Tree. Un ejemplo de reconstruccin de un ndice: ALTER INDEX summit.orders_region_id_idx REBUILD TABLESPACE indx02; Regenerar ndices en Lnea La construccin o reconstruccin de un ndice puede ser una tarea que requiera mucho tiempo, especialmente si la tabla es muy grande. Oracle ofrece un mtodo para contruir un ndice mientras se realizan operaciones simultneas en la tabla base, aunque no se recomienda realizarlas con grandes operaciones DML durante este procedimiento. Un ejemplo de reconstruccin de un ndice online: ALTER INDEX summit.orders_id_idx REBUILD ONLINE;

10.4.4 Borrado de ndices


Puede ser necesario suprimir ndices en las siguientes situaciones: Un ndice que ya no es necesario por las aplicaciones. Antes de cargas en bloque. La eliminacin de ndices antes de la carga de datos grandes y volver a crearlos despus de la carga: o Mejora el rendimiento de la carga. o Utiliza el espacio del ndice de forma ms eficaz. El ndice est corrupto

La sintaxis para borrar un ndice es la siguiente: DROP INDEX [schema.] <name_index>

10.5 VISTAS DEL DICCIONARIO DE DATOS SOBRE NDICES


Las vistas del diccionario de datos que muestran informacin sobre ndices son: DBA_INDEXES DBA_IND_COLUMNS

Vista DBA_INDEXES Esta vista contiene una lista de todos los ndices de la base de datos. Sus campos ms representativos son:

Administracin de Oracle (V1.01)

Pg. 105

Aubay Espaa - Formacin

OWNER INDEX_NAME INDEX_TYPE TABLE_OWNER TABLE_NAME UNIQENESS TABLESPACE_NAME LOGGING STATUS

Vista DBA_IND_COLUMNS Esta vista contiene una lista de columnas indexadas de la base de datos. Sus campos ms representativos son: INDEX_OWNER INDEX_NAME TABLE_OWNER TABLE_NAME COLUMN_NAME COLUMN_POSITION COLUMN_LENGTH

EJEMPLOS Un ejemplo de consulta para verificar el nombre, tipo y el estado de los ndices que posee un usuario puede ser el siguiente: SQL> SELECT index_name, tablespace_name, index_type, uniqueness, status FROM DBA_INDEXES WHERE OWNER=<name_user>; El siguiente ejemplo enumera todos los ndices propiedad de un usuario y muestra las tablas y las columnas en las que se ha construido ndices: SQL> SELECT index_name, table_owner, table_name, column_name FROM DBA_IND_COLUMNS WHERE INDEX_OWNER=<name_user> ORDER BY INDEX_NAME, COLUMN_POSITION;

Administracin de Oracle (V1.01)

Pg. 106

Aubay Espaa - Formacin

11 MANTENIMIENTO DE LA INTEGRIDAD DE LOS DATOS


La integridad de los datos garantiza que todos los datos de una base de datos siguen las reglas de negocio. Existen tres formas principales con las que se puede mantener la integridad de los datos: Cdigo de Aplicacin. Disparadores de la Base de Datos. Restricciones de Integridad Declarativa.

El cdigo de las aplicaciones se puede implementar mediante procedimientos almacenados dentro de la base de datos, o como aplicaciones que ejecutan en el lado del cliente. Este captulo se centra en las restricciones de integridad, y se explica conceptualmente lo que es un disparador. Disparadores de Bases de Datos Los disparadores de base de datos son programas PL/SQL que se ejecutan cuando se produce un determinado evento en una tabla, como una insercin, actualizacin o borrado. Los disparadores pueden estar activados o desactivados. Los disparadores de base de datos se crean normalmente slo para forzar una regla de negocio compleja que no se pudo definir como una restriccin de integridad. Restricciones de Integridad Las restricciones de integridad son un buen mecanismo para forzar reglas de negocio ya que: Mejoran el Rendimiento. Son fciles de declarar y modificar por que no requieren un cdigo extenso. Centralizan las reglas. Son flexibles (activadas o desactivadas) Estn documentadas completamente en el diccionario de datos.

11.1 RESTRICCIONES DE INTEGRIDAD


11.1.1 Tipos de Restricciones
Existen cinco tipos de restricciones de integridad declarativas en el servidor Oracle: Restriccin NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY Descripcin Especifica que una columna no puede contener valores nulos Designa una columna o combinacin de columnas como nica Designa una columna o combinacin de columnas como la clave primaria de la tabla Designa una columna o combinacin de columnas como la clave ajena en una restriccin de integridad referencial

Administracin de Oracle (V1.01)

Pg. 107

Aubay Espaa - Formacin

CHECK

Especifica una condicin que debe cumplir cada fila de la tabla

11.1.2 Restricciones Diferidas/No Diferidas


El punto en que una transaccin comprueba las restricciones se puede controlar mediante lo que se llama Restricciones Diferidas.

Restricciones No Diferidas Las restricciones No Diferidas, tambin llamadas inmediatas, se fuerzan al final de cada sentencia DML. La violacin de una restriccin hace que la sentencia se deshaga. Estas son las restricciones por defecto. Una restriccin definida como no diferible no se puede modificar para ser forzada al final de una transaccin. Restricciones Diferidas Estas restricciones son aquellas que slo se comprueban cuando se valida una transaccin. Si se detecta cualquier violacin de restriccin, ser en el momento de la validacin de la transaccin cuando se deshaga los cambios realizados. Estas restricciones son tiles cuando se ha introducido al mismo tiempo las filas de la tabla principal y secundaria en una relacin de clave ajena, como es el caso de entrada de pedidos, donde se introduce al mismo tiempo el pedido y los elementos del pedido. Para que una restriccin se considere como restriccin diferible, se debe definir como diferible en el momento de su creacin. Una vez definida la restriccin como diferible, se puede especificar como:

Administracin de Oracle (V1.01)

Pg. 108

Aubay Espaa - Formacin

Inmediata inicialmente: Especifica que, por defecto, debera funcionar como una restriccin inmediata. Diferida inicialmente: Especifica que, por defecto, la restriccin slo se debera forzar al final de la transaccin.

11.1.3 Estados de Restriccin


Una restriccin de integridad se puede dar en uno de los siguientes estados: Desactivada, no validar Desactivada, validar Activada, no validar o forzada Activada, validar

Desactivada, no validar Una restriccin que est desactivada no validada no se comprueba, incluso aunque la restriccin contine guardada en el diccionario de datos. Los datos de una tabla, al igual que los nuevos datos que se introduzcan o actualicen pueden no cumplir las reglas definidas por la restriccin. Desactivado Validado Si una restriccin se encuentra en este estado, entonces no se permite ninguna modificacin de las columnas restringidas, adems se suprime el ndice en la restriccin y la restriccin se desactiva.

Administracin de Oracle (V1.01)

Pg. 109

Aubay Espaa - Formacin

Para una restriccin nica, el estado desactivado validado permite cargar datos de forma eficaz en una tabla. Activada, no validar (Forzada) Si una restriccin est activada, no validar, no se pueden introducir nuevos datos que violen la restriccin, sin embargo la tabla puede contener datos que sean invlidos, es decir, datos que violen la restriccin. Esto suele ser una etapa intermedia que asegura que todos los datos nuevos se verifican antes de ser aceptados en la tabla. Activado Validado Si una restriccin est en este estado, entonces se garantiza que todos los datos de la tabla siguen la restriccin; este estado impide que se introduzca cualquier dato invlido. Este es el estado normal de operacin de una restriccin para el procesamiento de transacciones.

11.2 IMPLEMENTACIN DE RESTRICCIONES


Las restricciones se pueden definir cuando se crea las tablas o bien cuando se modifican las tablas para aadir la restriccin. La sintaxis utilizada para crear restricciones mientras se crea las tablas es la siguiente:

column datatype [CONSTRAINT constraint] {[NOT] NULL |UNIQUE [USING INDEX index_clause] |PRIMARY KEY [USING INDEX index_clause] |REFERENCES [schema.]table [(column)] [ON DELETE CASCADE] |CHECK (condition) } [constraint_state] :== [NOT DEFERRABLE|DEFERRABLE [INITIALLY {IMMEDIATE|DEFERRED}] ] [DISABLE|ENABLE [VALIDATE|NOVALIDATE]]
Donde: Constraint: Identifica el nombre de la restriccin almacenada en el diccionario de datos. USING INDEX: Especifica que los parmetros definidos se deberan utilizar para el ndice que utiliza el servidor Oracle para forzar una restriccin nica o de clave primaria. El nombre del ndice es el mismo que el de la restriccin. DEFERRABLE: Indica que la verificacin de la restriccin se puede diferir hasta el final de la transaccin mediante el comando SET CONSTRAINTS. NOT DEFERRABLE: Indica que esta restriccin se comprueba al final de cada sentencia DML. Esta es la opcin por defecto.

Administracin de Oracle (V1.01)

Pg. 110

Aubay Espaa - Formacin

INITIALLY IMMEDIATE: Indica que al inicio de cada transaccin se comprueba por defecto esta restriccin al final de cada sentencia DML. Esta es la opcin por defecto. INITIALLY DEFERRED: Indica que la restriccin slo se verifica al final de cada transaccin. DISABLE: Desactiva la restriccin de integridad. En este caso el servidor Oracle no la fuerza.

Aqu se muestra un ejemplo:

CREATE TABLE hr.employee( id NUMBER(7) CONSTRAINT employee_id_pk PRIMARY KEY DEFERRABLE USING INDEX STORAGE(INITIAL 100K NEXT 100K) TABLESPACE indx, last_name VARCHAR2(25) CONSTRAINT employee_last_name_nn NOT NULL, dept_id NUMBER(7)) TABLESPACE users;
La sintaxis utilizada para crear restricciones despus de crear las tablas es la siguiente: ALTER TABLE [ schema. ]<table_name> ADD

[CONSTRAINT constraint] {PRIMARY KEY (column [, column ]... ) [USING INDEX index_clause] |UNIQUE (column [, column ]... ) [USING INDEX index_clause] |FOREIGN KEY (column [, column ]... ) REFERENCES [schema.]table [(column [, column ]... )] [ON DELETE CASCADE] |CHECK (condition) } [constraint_state]
Aqu se muestra un ejemplo:

ALTER TABLE hr.employee ADD(CONSTRAINT employee_dept_id_fk FOREIGN KEY(dept_id) REFERENCES hr.department(id) DEFERRABLE INITIALLY DEFERRED); 11.2.1 Instrucciones para Definir Restricciones

Administracin de Oracle (V1.01)

Pg. 111

Aubay Espaa - Formacin

Colocar ndices para forzar restricciones de clave primaria y nica en un tablespace distinto del que utiliza la tabla. Esto se consigue especificando la clusula USING INDEX o bien creando la tabla, creando el ndice y modificando la tabla para agregar o activar la restriccin. Si los datos se suelen cargan en bloque dentro de la tabla es ms efectivo desactivar las restricciones, realizar la carga y seguidamente activar las restricciones. Si una tabla contiene una clave ajena de autoreferencia, se puede utilizar uno de los siguientes mtodos para cargar los datos: o Definir o activar la clave ajena despus de la carga inicial. o Definir la restriccin como diferible. (es til si las cargas son frecuentes)

11.2.2 Consideraciones sobre la Clave Ajena


Se debe tener en cuenta varios factores al mantener tablas que estn en una relacin de clave ajena:

DDL Relacionado con Tablas Principales La clave ajena se debe suprimir antes de borrar la tabla principal. Utilizar el siguiente comando para realizar las dos acciones con una sola sentencia: o DROP TABLE <name_table> CASCADE CONSTRAINTS La tabla principal no se puede truncar sin suprimir o desactivar la clave ajena. La clave ajena se debe suprimir antes de eliminar el tablespace que contiene la tabla principal. Utilizar el siguiente comando para realizar las dos acciones con una sola sentencia: o DROP TABLESPACE <name_tablespace> INCLUDING CONTENTS CASCADE CONSTRAINTS

DDL sobre Tablas en una Relacin de Clave Ajena Si no se utiliza la opcin DELETE CASCADE cuando se eliminan las filas de la tabla principal, el servidor Oracle debe asegurarse que no haya filas en la tabla hija con la correspondiente clave ajena. De igual modo, una actualizacin de la clave primaria slo se permite cuando no haya filas hijas con el antiguo valor clave. Si no hay ndices de clave ajena en la tabla hija, el servidor Oracle bloquea la tabla hija y no permite cambios para asegurar la integridad referencial. Si hay un ndice en la tabla, la

Administracin de Oracle (V1.01)

Pg. 112

Aubay Espaa - Formacin

integridad referencial se mantiene bloqueando los registros de ndice y permitiendo bloqueos restrictivos en la tabla hija. Se recomienda la creacin de ndices para columnas de clave ajena ya que tiene ventajas de rendimiento.

11.3 MANTENIMIENTO DE RESTRICCIONES


Una restriccin desactivada se puede activar de dos maneras: Active NOVALIDATE Active VALIDATE

Active NOVALIDATE Activar una restriccin de no validar es ms rpido que activar una restriccin de validar, ya que se comprueba la violacin de restricciones en los datos existentes si la restriccin es diferible. La sintaxis utilizada para activar una restriccin de no validar es la siguiente:

ALTER TABLE [ schema. ] table ENABLE NOVALIDATE {CONSTRAINT constraint | PRIMARY KEY | UNIQUE ( column [, column ] ... ) } [ USING INDEX index_clause ]
La clusula USING INDEX slo es aplicable para restricciones de clave primaria o nica creadas como diferibles y se cumple que: Las restricciones se crearon desactivas Las restricciones estaban desactivadas y los ndices suprimidos

Activate VALIDATE La sintaxis utilizada para activar una restriccin de no validar es la siguiente:

ALTER TABLE [ schema. ] table ENABLE [ VALIDATE ]{CONSTRAINT constraint | PRIMARY KEY | UNIQUE ( column [, column ] ... ) } [ USING INDEX index_clause ]
La opcin VALIDATE est activada por defecto y no es necesario especificarla cuando se activa una restriccin que est desactivada. Si los datos de la tabla violan la restriccin, se deshace la sentencia y la restriccin continua desactivada.

Administracin de Oracle (V1.01)

Pg. 113

Aubay Espaa - Formacin

11.4 VISTAS DEL RESTRICCIONES

DICCIONARIO

DE

DATOS

SOBRE

vistas del diccionario de datos que muestran informacin sobre restricciones son: DBA_CONSTRAINTS DBA_CONS_COLUMNS

Vista DBA_CONSTRAINTS Esta vista contiene informacin de las restricciones en la base de datos. Sus campos ms representativos son: OWNER CONSTRAINT_NAME CONSTRAINT_TYPE TABLE_NAME SEARCH_CONDITION R_OWNER R_CONSTRAINT_NAME DELETE_RULE STATUS DEFERRABLE DEFERRED VALIDATED GENERATED BAD RELY LAST_CHANGE

Vista DBA_CONS_COLUMNS

Administracin de Oracle (V1.01)

Pg. 114

Aubay Espaa - Formacin

Esta vista contiene informacin de las columnas con las restricciones en la base de datos. Sus campos ms representativos son: OWNER CONSTRAINT_NAME TABLE_NAME COLUMN_NAME POSITION

EJEMPLOS Utilizar la siguiente consulta para obtener los nombres, los tipos y los estados de todas las restricciones de la tabla EMPLOYEE del esquema SUMMIT:

SQL> SELECT constraint_name, constraint_type, deferrable, 2 deferred, validated 3 FROM dba_constraints 4 WHERE owner='SUMMIT' 5 AND table_name='EMPLOYEE';
Utilizar la siguiente consulta para obtener las columnas en las restricciones de la tabla EMPLOYEE del esquema SUMMIT:

SQL> SELECT c.constraint_name, c.constraint_type, 2 cc.column_name 3 FROM dba_constraints c, dba_cons_columns cc 4 WHERE c.owner='SUMMIT' 5 AND c.table_name='EMPLOYEE' 6 AND c.owner = cc.owner 7 AND c.constraint_name = cc.constraint_name 8 ORDER BY cc.position;
Utilizar la siguiente consulta para buscar las claves ajenas en la tabla EMPLOYEE del esquema SUMMIT y las restricciones principales:

SQL> SELECT c.constraint_name AS "Foreign Key", 2 p.constraint_name AS "Referenced Key", 3 p.constraint_type, 4 p.owner, 5 p.table_name 6 FROM dba_constraints c, dba_constraints p 7 WHERE c.owner='SUMMIT' 8 AND c.table_name='EMPLOYEE' 9 AND c.constraint_type='R' 10 AND c.r_owner=p.owner 11 AND c.r_constraint_name = p.constraint_name;

Administracin de Oracle (V1.01)

Pg. 115

Aubay Espaa - Formacin

12 GESTIN DE USUARIOS
El administrador de la base de datos define los nombres de los usuarios a los que se permite acceder a la base de datos. Cuando se crea un usuario de base de datos, se le asocia de forma automtica un esquema del mismo nombre, con lo cual nombre de usuario y esquema se utilizan indistintamente con frecuencia. Un esquema es una recopilacin especfica de los siguientes objetos asociados a un usuario particular: Tablas Disparadores Restricciones ndices Vistas Secuencias Unidades de programa almacenadas (PL/SQL) Sinnimos Enlaces de bases de datos Tipos de datos definidos por el usuario

12.1 CREACIN DE USUARIOS


La sintaxis para crear un usuario de base de datos en Oracle es la siguiente:

Administracin de Oracle (V1.01)

Pg. 116

Aubay Espaa - Formacin

donde: User: Es el nombre del usuario. BY password: Especifica que el usuario se autentica mediante la base de datos y debe proporcionar password para conectarse. EXTERNALLY: Especifica que el usuario se autentica mediante el sistema operativo. GLOBALLY AS: Especifica que el usuario se autentica globalmente por el nombre externo especificado. DEFAULT TABLESPACE: Identifica el tablespace por defecto para el usuario. TEMPORARY TABLESPACE: Identifica el tablespace temporal para el usuario. QUOTA: Define el espacio mximo permitido para objetos propiedad del usuario en el tablespace. La palabra clave UNLIMITED se utiliza para especificar que los objetos propiedad del usuario pueden usar tanto espacio como haya disponible en el tablespace. Por defecto no se tienen cuotas en ningn tablespace.

Administracin de Oracle (V1.01)

Pg. 117

Aubay Espaa - Formacin

PASSWORD EXPIRE: Fuerza al usuario a restablecer la contrasea cuando el usuario se conecta a la base de datos mediante SQL Plus. ACCOUNT LOCK/UNLOCK: Se puede usar para bloquear o desbloquear explcitamente la cuenta de usuario (por defecto es UNLOCK). PROFILE: Se utiliza para controlar el uso de los recursos y especificar el mecanismo de control de contrasea que se utiliza para el usuario.

12.2 MODIFICACIN DE USUARIOS


La sintaxis para modificar un usuario de base de datos en Oracle es la siguiente:

Administracin de Oracle (V1.01)

Pg. 118

Aubay Espaa - Formacin

Como nica novedad de parmetros respecto a la creacin de usuarios es la asignacin del ROLE que tiene asignado el usuario. Oracle proporciona una gestin de privilegios controlada por lo que llama Roles. Los roles son grupos especficos de privilegios relacionados que se otorgan a los usuarios o a otros roles. Estn diseados para facilitar la gestin de los privilegios en la base de datos.

12.3 SUPRESIN DE USUARIOS


Para eliminar un usuario de la base de datos se debe ejecutar el siguiente comando: DROP USER <name_user> [CASCADE] La opcin CASCADE suprime todos los objetos del esquema antes de suprimir al usuario. Esta opcin se debe especificar si el esquema contiene algn objeto. Un usuario que se encuentre conectado actualmente a la base de datos no se podr suprimir.

12.4 VISTAS DEL DICCIONARIO DE DATOS SOBRE USUARIOS


Las vistas del diccionario de datos que muestran informacin sobre usuarios son: DBA_USERS DBA_TS_QUOTAS

Vista DBA_USERS Muestra la informacin de todos los usuarios dados de alta en la base de datos. Sus campos ms representativos son: USERNAME USER_ID ACCOUNT_STATUS LOCK_DATE EXPIRY_DATE DEFAULT_TABLESPACE TEMPORARY_TABLESPACE CREATED

Vista DBA_TS_QUOTAS Muestra informacin de las quotas en los tablespaces para todos los usuarios de la base de datos. Sus campos son: USERNAME TABLESPACE_NAME BYTES MAX_BYTES BLOCKS

Administracin de Oracle (V1.01)

Pg. 119

Aubay Espaa - Formacin

MAX_BLOKS

Un valor de -1 en las columnas MAX_BLOCKS o MAX_BYTES indica que el usuario tiene cuota ilimiada en dicho tablespace. EJEMPLOS Un ejemplo de consulta para comprobar las cuotas de tablespace para un usuario concreto: SQL> SELECT tablespace_name, blocks, max_bloks,bytes, max_bytes FROM DBA_TS_QUOTAS WHERE USERNAME=<name_user>; Un ejemplo de consulta que enumera todos los usuarios de la base de datos, el estado de sus cuentas y los tablespaces temporales: SQL>SELECT username, account_status, temporary_tablespace FROM DBA_USERS;

Administracin de Oracle (V1.01)

Pg. 120

Aubay Espaa - Formacin

13 GESTIN DE PRIVILEGIOS
Un privilegio es el derecho a realizar un tipo de operacin sobre la base de datos o sobre objetos contenidos en la misma. Existen dos tipos de privilegios: Privilegios de Sistema: Permite que un usuario realice una operacin de base de datos, o un tipo de operaciones de bases de datos. Estas operaciones incluyen crear, borrar y modificar tablas, vistas, segmentos de rollback y procedimientos. Privilegios de Objetos: Permite que un usuario realice una operacin en un objeto especfico, como por ejemplo una tabla, vista, secuencia, procedimiento, funcin o paquete.

13.1 PRIVILEGIOS DE SISTEMA


Los privilegios de sistema se pueden clasificar de la siguiente forma: Los privilegios que permiten las operaciones en todo el sistema, por ejemplo CREATE SESSION, CREATE TABLESPACE. Los privilegios que permiten la gestin de objetos en el propio esquema de un usuario, por ejemplo CREATE TABLE. Los privilegios que permiten la gestin de objetos en cualquier esquema, por ejemplo CREATE ANY TABLE.

Los usuarios con privilegios ANY pueden acceder a las tablas del diccionario de datos. La sintaxis utilizada para otorgar privilegios del sistema es la siguiente: GRANT { privilegio | rol } TO { <user_name>|rol|PUBLIC } [WITH ADMIN OPTION] Donde: Privilegio: Especifica el privilegio del sistema que se quiere otorgar. Rol: Especifica el nombre del rol que se quiere otorgar. PUBLIC: Otorga el privilegio del sistema a todos los usuarios de la base de datos. WITH ADMIN OPTION: Permite que el usuario al que se otorga el derecho de acceso a que conceda el privilegio o rol a otros usuarios o roles. Para otorgar un privilegio del sistema, se le debe haber otorgado el privilegio WITH ADMIN OPTION. Cualquier usuario con el privilegio del sistema GRANT ANY ROLE, podr otorgar cualquier role en una base de datos.

A continuacin se muestra una tabla con la mayora de los privilegios de sistema en una base de datos Oracle:

Administracin de Oracle (V1.01)

Pg. 121

Aubay Espaa - Formacin

Privilegio ANALYZE ANALIZE ANY AUDIT AUDIT ANY AUDIT SYSTEM DATABASE ALTER DATABASE DATABASE LINK CREATE DATABASE LINK INDEX CREATE ANY INDEX ALTER ANY INDEX DROP ANY INDEX LIBRARY CREATE LIBRARY CREATE ANY LIBRARY DROP LIBRARY DROP ANY LIBRARY PRIVILEGE GRANT ANY PRIVILEGE PROCEDURE CREATE PROCEDURE CREATE ANY PROCEDURE ALTER ANY PROCEDURE DROP ANY PROCEDURE EXECUTE ANY PROCEDURE PROFILE CREATE PROFILE ALTER PROFILE DROP PROFILE ALTER RESOURCE COST PUBLIC DATABASE LINK CREATE PUBLIC DATABASE LINK DROP PUBLIC DATABASE LINK PUBLIC SYNONYM CREATE PUBLIC SYNONYM DROP PUBLIC

Descripcin Analiza cualquier tabla o ndice de la base de datos Auditar cualquier objeto de la base de datos Activar y desactivar la auditora Modificar la base de datos. Aadir ficheros a los tablespaces, siempre que se tenga el privilegio del sistema operativo. Crear enlaces de base de datos privados en el esquema propio

Crear ndices sobre cualquier tabla en cualquier esquema Modificar ndices sobre cualquier tabla en cualquier esquema Borrar ndices sobre cualquier tabla en cualquier esquema Crear libreras externas en el esquema propio Crear libreras externas en cualquier esquema Eliminar libreras externas en el esquema propio Eliminar Crear libreras externas en cualquier esquema Conceder cualquier privilegio del sistema, pero no sobre objetos Crear un procedimiento en el esquema propio Crear procedimientos bajo cualquier esquema Modificar cualquier procedimiento de la base de datos Borrar cualquier procedimiento de la base de datos Ejecutar cualquier procedimiento de la base de datos

Crear perfiles Modificar cualquier perfil de la base de datos Borrar cualquier perfil de la base de datos Calcular los costes de recursos utilizados en todas las sesiones de los usuarios

Crear enlaces de base de datos pblicos Borrar enlaces de base de datos pblicos

Crear sinnimos pblicos Borrar sinnimos pblicos

Administracin de Oracle (V1.01)

Pg. 122

Aubay Espaa - Formacin

SYNONYM ROLE CREATE ROLE ALTER ANY ROLE DROP ANY ROLE GRANT ANY ROLE ROLLBACK SEGMENT CREATE ROLLBACK SEGMENT ALTER ROLLBACK SEGMENT DROP ROLLBACK SEGMENT SESSION CREATE SESSION ALTER SESSION RESTRICTED SESSION SEQUENCE CREATE SEQUENCE CREATE ANY SEQUENCE ALTER ANY SEQUENCE DROP ANY SEQUENCE SELECT ANY SEQUENCE SNAPSHOT CREATE SNAPSHOT CREATE ANY SNAPSHOT ALTER ANY SNAPSHOT DROP ANY SNAPSHOT SYNONYM CREATE SYNONYM CREATE ANY SYNONYM DROP ANY SYNONYM SYSTEM ALTER SYSTEM TABLE CREATE TABLE CREATE ANY TABLE ALTER ANY TABLE DROP ANY TABLE EXPORT ANY TABLE LOCK ANY TABLE COMMENT ANY TABLE SELECT ANY TABLE INSERT ANY TABLE

Crear roles Modificar cualquier rol en la base de datos Borrar cualquier rol de la base de datos Conceder cualquier rol de la base de datos Crear un segmento de rollback Modificar un segmento de rollback Borrar un segmento de rollback

Conectarse a la base de datos Ejecutar el comando alter session para cambiar parmetros de entorno Conectarse a la base de datos que haya sido arrancada con el comando STARTUP RESTRICT Crear una secuencia en el propio esquema Crear una secuencia bajo cualquier secuencia Modificar cualquier secuencia de la base de datos Borrar cualquier secuencia de la base de datos Utilizar cualquier secuencia de la base de datos Crear rplicas de tablas remotas en el propio esquema Crear rplicas de tablas remotas bajo cualquier esquema Modificar cualquier rplica de la base de datos Borrar cualquier rplica de la base de datos Crear sinnimos en el esquema propio Crear sinnimos bajo cualquier esquema Borrar cualquier sinnimo de la base de datos Ejecutar el comando ALTER SYSTEM Crear una tabla en el esquema propio Crear tablas bajo cualquier esquema Modificar la estructura de cualquier tabla de la base de datos Borrar cualquier tabla de la base de datos Realizar una exportacin de cualquier tabla de la base de datos Bloquear cualquier tabla o vista de la base de datos Comentar cualquier tabla de la base de datos Realizar consultas de cualquier tabla de la base de datos Realizar inserciones en cualquier tabla de la base de datos

Administracin de Oracle (V1.01)

Pg. 123

Aubay Espaa - Formacin

UPDATE ANY TABLE DELETE ANY TABLE TABLESPACE CREATE TABLESPACE ALTER TABLESPACE MANAGE TABLESPACE DROP TABLESPACE UNLIMITED TABLESPACE TRIGGER CREATE TRIGGER CREATE ANY TRIGGER ALTER ANY TRIGGER DROP ANY TRIGGER USER CREATE USER BECOME USER ALTER USER DROP USER VIEW CREATE VIEW CREATE ANY VIEW DROP ANY VIEW

Realizar actualizaciones en cualquier tabla de la base de datos Realizar borrados de filas de cualquier tabla de la base de datos Crear un tablespace en la base de datos Modificar tablespaces Poder poner un tablespace OFF/ON LINE, y ejecutar el comando ALTER TABLESPACE BEGIN/END BACKUP Eliminar tablespaces Utilizar cantidades de espacio ilimitado en cualquier tablespace de la base de datos Crear un disparador en el esquema propio Crear disparadores bajo cualquier esquema de la base de datos Modificar cualquier disparador de la base de datos Borrar cualquier disparador de la base de datos Crear un usuario Convertirse de forma temporal en otro usuario Modificar cualquier usuario de la base de datos Eliminar a un usuario Crear una vista en el esquema propio Crear vistas bajo cualquier esquema Borrar cualquier vista de la base de datos

La sintaxis utilizada para revocar privilegios del sistema es la siguiente: REVOKE { privilegio | rol } FROM { <user_name>|rol|PUBLIC } Donde: Privilegio: Especifica el privilegio del sistema que se quiere revocar. Rol: Especifica el nombre del rol que se quiere revocar. PUBLIC: Revoca el privilegio del sistema a todos los usuarios de la base de datos.

13.1.1 Vistas Mostrar Privilegios del Sistema


Las vistas que muestran informacin de los privilegios del sistema son: DBA_SYS_PRIVS SESSION_PRIVS

DBA_SYS_PRIVS Esta vista muestra todos los privilegios del sistema otorgados a los roles y a los usuarios de la base de datos. Los campos de esta vista son:

Administracin de Oracle (V1.01)

Pg. 124

Aubay Espaa - Formacin

GRANTEE PRIVILEGE ADMIN OPTION SESSION_PRIVS Esta vista muestra los privilegios actuales de la sesin, tanto los otorgados directamente como los roles activados al usuario. Esta vista contiene el campo PRIVILEGE.

13.2 PRIVILEGIOS DE OBJETO


Cada privilegio de objeto que se otorga autoriza a un usuario al que se otorga, derecho de acceso a que se realice alguna operacin en el objeto. La sintaxis utilizada para otorgar privilegios de objeto es la siguiente: GRANT { privilegio [(columna)] | ALL } ON <user_name>|rol|PUBLIC } [WITH GRANT OPTION] Donde: Privilegio: Especifica el privilegio de objeto que se quiere otorgar. Columna: Especifica la columna de una tabla o una vista. ALL: Otorga todos los privilegios al objeto al que se haya otorgado WITH GRANT OPTION Rol: Especifica el nombre del rol que se quiere otorgar. PUBLIC: Otorga el privilegio del sistema a todos los usuarios de la base de datos. WITH ADMIN OPTION: Permite que el usuario al que se otorga el derecho de acceso a que conceda el privilegio o rol a otros usuarios o roles. [esquema.]objeto TO {

A continuacin se muestra una tabla con los privilegios de objeto en una base de datos Oracle: PRIVILEGI O ALTER DELETE EXECUTE INDEX INSERT REFERENCES SELECT UPDATE ALL SENTENCIA SQL PERMITIDA ALTER objeto (tabla o vista) DELETE FROM objeto (tabla o vista) EXECUTE objeto (procedimiento o funcin) CREATE INDEX ONM objeto (slo tablas) INSERT INTO objeto (tabla o vista) Sentencia CREATE o ALTER TABLE que tenga una restriccin de integridad de clave ajena (FOREIGN KEY) sobre un objeto (slo tablas) SELECT..FROM objeto (tabla, vista) o sentencias SQL sobre secuencias UPDATE objeto (tabla o vista) Todos los privilegios anteriores

La sintaxis utilizada para revocar privilegios de objeto es la siguiente: REVOKE { privilegio | all } ON [esquema.]objeto FROM { <user_name>|rol|PUBLIC } [CASCADE CONSTRAINTS]

Administracin de Oracle (V1.01)

Pg. 125

Aubay Espaa - Formacin

Donde: Privilegio: Especifica el privilegio de objeto que se quiere revocar. ALL: Revoca todos los privilegios al objeto al que se haya otorgado WITH GRANT OPTION Rol: Especifica el nombre del rol que se quiere revocar. CASCADE CONSTRAINTS: Elimina las restricciones de integridad referencial.

13.2.1 Vistas Mostrar Privilegios de Objetos


Las vistas que muestran informacin de los privilegios de objetos son: DBA_TAB_PRIVS DBA_COL_PRIVS

DBA_TAB_PRIVS Esta vista muestra todos los privilegios de objetos otorgados a los roles y a los usuarios de la base de datos. Los campos de esta vista son: GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRANTABLE

DBA_COL_PRIVS Esta vista muestra todos los privilegios de objetos sobre columnas otorgados a los roles y a los usuarios de la base de datos. Los campos de esta vista son: GRANTEE OWNER TABLE_NAME COLUMN_NAME GRANTOR PRIVILEGE GRANTABLE

Administracin de Oracle (V1.01)

Pg. 126

Aubay Espaa - Formacin

14 GESTIN DE ROLES
Los Roles son grupos especificados de privilegios que se otorgan a los usuarios o a otros roles. Su objeto es facilitar la gestin de los privilegios en la base de datos Se otorgan y revocan con los mismos comandos que se utilizan para otorgar y revocar los privilegios del sistema. Se pueden otorgar y revocar a cualquier usuario o rol. Pueden estar formados tanto por privilegios del sistema como privilegios de objetos. Se pueden activar y desactivar a cada usuario al que se haya otorgado el rol. Pueden precisar de una contrasea para su activacin. El nombre de cada rol debe ser nico entre los nombres de los usuarios y nombres de roles existentes. No los posee nadie, esto es, no estn en ningn esquema. Sus descripciones se almacenan en el diccionario de datos.

14.1 CREACIN, MODIFICACIN, ASIGNACIN Y BORRADO DE ROLES


14.1.1 Creacin de Roles
La sintaxis para crear un rol es la siguiente: CREATE ROLE <name_rol> [NOT IDENTIFIED | IDENTIFIED {BY <password> | EXTERNALLY}] Donde: <name_rol>: Es el nombre del rol. NOT IDENTIFIED: Indica que no es necesario ningn tipo de verificacin cuando se activa el rol. IDENTIFIED: Indica que es necesario la verificacin cuando se activa la fila. BY <password>: Proporciona la contrasea que el usuario debe especificar cuando se activa el rol. EXTERNALLY: Indica que el usuario debe estar autorizado por un servicio externo como puede ser el sistema operativo.

14.1.2 Modificacin de Roles


Slo se puede modificar un rol para cambiar su mtodo de autentificacin. La sintaxis para modificar un rol es la siguiente:

Administracin de Oracle (V1.01)

Pg. 127

Aubay Espaa - Formacin

ALTER ROLE <name_rol> [NOT IDENTIFIED | IDENTIFIED {BY <password> | EXTERNALLY}]

14.1.3 Asignacin de Roles


Para otorgar un rol a un usuario se utiliza la misma sintaxis que se utiliza para otorgar un privilegio del sistema a un usuario: GRANT <name_role> TO <name_user> [WITH ADMIN OPTION] Igualmente si se desea revocar un rol de un usuario, se utiliza la misma sintaxis que se usa paras revocar un privilegio del sistema de un usuario: REVOKE <name_role> FROM <name_user>

14.1.4 Borrado de Roles


Para eliminar un rol de la base de datos se debe utilizar la siguiente sintaxis: DROP ROLE <name_role> Cuando se borra un rol de la base de datos, el servidor Oracle lo revoca de todos los usuarios y roles a los que se haba otorgado y lo elimina de la base de datos. Para borrar un rol es preciso tener el privilegio DROP ANY ROLE.

14.1.5 Uso de Roles Predefinidos


Los roles contenidos en la siguiente tabla se definen automticamente al crear una base de datos Oracle: Nombre de Rol CONNECT Descripcin Concede al usuario los siguientes privilegios: ALTER SESSION, CREATE DATABASE LINK, CREATE SEQUENCE, CREATE SESSION, CREATE SYNONYM, CREATE TABLE, CREATE VIEW. Este rol se crea con el fichero sql.bsq Concede al usuario los siguientes privilegios: CREATE PROCEDURE,CREATE SEQUENCE, CREATE TABLE, CREATE TRIGGER. Se crea con el fichero sql.bsq y al usuario se le concede el privilegio UNLIMITED TABLESPACE de forma explcita y no como parte del rol Concede al usuario todos los permisos del sistema con la opcin WITH ADMIN OPTION y con UNLIMITED TABLESPACE de forma explcita. Se crea con el fichero sql.bsq Concede al usuario los siguientes privilegios: SELECT ANY TABLE, BACKUP ANY TABLE, INSERT, DELETE, UPDATE. Se crea con el fichero catexp.sql Concede al usuario los siguientes privilegios: BECOME USER. Se crea con el fichero catexp.sql

RESOURCE

DBA EXP_FULL_DATABASE IMP_FULL_DATABASE

Administracin de Oracle (V1.01)

Pg. 128

Aubay Espaa - Formacin

DELETE_CATALOG_ROLE EXECUTE_CATALOG_ROL E SELECT_CATALOG_ROLE

Este rol permite borrar todos los paquetes del diccionario de datos Este rol permite ejecutar todos los paquetes del diccionario de datos Este rol permite consultar todas las tablas y vistas del diccionario de datos

14.2 ACTIVACIN Y DESACTIVACIN DE ROLES


Se puede a los usuarios activar o desactivar de forma temporal o permanente los privilegios asociados con los roles. Para activar un rol, primero se debe otorgar dicho role al usuario. Cuando se activa un rol, el usuario podr utilizar los privilegios otorgados a ese rol. Si se desactiva un rol, el usuario no podr utilizar los privilegios asociados con ese rol a menos que ese privilegio se otorgue directamente al usuario o a otro rol activado para ese usuario. La activacin y desactivacin de los roles a un usuario se puede realizar de dos formas: De forma explcita con el comando SET ROLE. De forma global en la creacin del usuario con el comando ALTER USERDEFAULT ROLE.

La sintaxis que se utiliza para activar y desactivar los roles de forma explcita es la siguiente: SET ROLE {<name_role> [ IDENTIFIED BY password ] | ALL [EXCEPT <name_role] | NONE } Donde: <name_role>: Es el nombre del rol. IDENTIFIED BY password: Proporciona la contrasea cuando se activa el rol. ALL: Activa todos los roles otorgados al usuario actual, excepto los que enumere la clusula EXCEPT. (Esta opcin no se podr usar para activar roles con contraseas). NONE: Desactiva todos los roles en la sesin actual del usuario.

14.3 VISTAS MOSTRAR INFORMACIN DE ROLES


Las vistas que muestran informacin sobre los roles de la base de datos son: DBA_ROLES DBA_ROLE_PRIVS ROLE_ROLE_PRIVS DBA_SYS_PRIVS ROLE_SYS_PRIVS ROLE_TAB_PRIVS SESSION_ROLES

DBA_ROLES Muestra todos los roles existentes en la base de datos. Los campos de esta vista son:

Administracin de Oracle (V1.01)

Pg. 129

Aubay Espaa - Formacin

ROLE PASSWORD_REQUIRED DBA_ROLE_PRIVS Muestra la lista de roles que se otorgan a los usuarios y a los roles. Los campos de esta vista son: GRANTEE GRANTEED_ROLE ADMIN_OPTION DEFAULT_ROLE

ROLE_ROLE_PRIVS Muestra los roles que se otorgan a los roles. Los campos de esta vista son: ROLE GRANTED_ROLE ADMIN_OPTION

DBA_SYS_PRIVS Muestra los privilegios de sistema que se otorgan tanto a los usuarios como a roles. Los campos de esta vista son: GRANTEE USERNAME (usuario actual) PRIVILEGE ADMIN_OPTION

ROLE_SYS_PRIVS Muestra los privilegios del sistema que se otorgan a los roles. Los campos de esta vista son: ROLE PRIVILEGE ADMIN_OPTION

ROLE_TAB_PRIVS Muestra privilegios de tablas que se otorgan a los roles. Los campos de esta vista son: ROLE OWNER TABLE_NAME COLUMN_NAME PRIVILEGE GRANTABLE

Administracin de Oracle (V1.01)

Pg. 130

Aubay Espaa - Formacin

SESSION_ROLES Muestra una lista de roles que el usuario tiene activados actualmente. El campo de esta vista es: ROLE

EJEMPLOS Un ejemplo de consulta para mostrar los privilegios otorgados a los usuarios y a roles: SQL> SELECT role, password_required FROM dba_roles; Un ejemplo de consulta que enumera los privilegios de tabla asignados a roles: SQL>SELECT * FROM ROLE_TAB_PRIVS WHERE OWNER=<name_user> AND TABLE_NAME=<table_name>;

Administracin de Oracle (V1.01)

Pg. 131

Aubay Espaa - Formacin

15 UTILIDADES: IMPORT, EXPORT, SQL*LOADER


Las utilidades Export e Import permiten mover datos entre bases de datos Oracle y dentro de una base de datos Oracle a diferentes tablespaces o usuarios, o reorganizar los datos para obtener un rendimiento y almacenamiento ms eficaz. La utilidad export se puede utilizar para hacer una copia lgica de definiciones de objetos y datos en un fichero binario del sistema operativo. La utilidad import puede leer ficheros del sistema operativo creados por la utilidad export y copiar las definiciones de los objetos y los datos en una base de datos Oracle. La utilidad import no puede leer ficheros de texto o ficheros creados en cualquier otro formato. La utilidad SQL*Loador es una herramienta de Oracle para pasar datos desde cualquier fuente de datos a una base de datos Oracle, en formato de texto plano. Uso de Export e Import Reorganizacin de tablas: o Una tabla puede contener muchos bloques con una gran cantidad de espacio libre. o Una tabla puede contener muchas filas migradas. o Una tabla puede contener muchos bloques vacos por debajo del lmite superior. o Para minimizar la contencin o reducir la fragmentacin. Mover datos de un usuario a otro usuario. Mover datos entre bases de datos Oracle. Migrar a una plataforma de sistema operativo distinta. Migrar a una versin de Oracle diferente. Este mtodo puede no ser admitido para mover datos de una versin de Oracle posterior a una versin de Oracle anterior. Realizar copias de seguridad lgica.

15.1 EXPORT
La sintaxis que se utiliza para realizar la exportacin es la siguiente: $ORACLE_HOME/bin/exp [keyword=] {value | (value, value . . .) } Donde keyword son palabras clave que se explican en la siguiente seccin y value es el valor asignado a la palabra clave. La utilidad Export proporciona tres modos de exportacin: Tabla Usuario Base de Datos

Administracin de Oracle (V1.01)

Pg. 132

Aubay Espaa - Formacin

15.1.1 Modo Tabla


Todos los usuarios pueden usar el modo tabla para exportar sus propias tablas, y los usuarios con privlegios pueden exportar tablas de otros usuarios. El uso de este modo exporta: La definicin de la tabla. Los datos de la tabla. Los ndices de la tabla. Los disparadores de la tabla. Las restricciones de la tabla.

15.1.2 Modo Usuario


La exportacin en este modo funciona de forma diferente dependiendo si el usuario que ejecuta la exportacin tiene privilegios: Un usuario con privilegios puede exportar objetos propiedad de cualquier usuario, en este caso los objetos exportados son: o Todos los objetos propiedad del usuario, excepto los ndices y disparadores propiedad del usuario pero que estn en tablas propiedad de otros usuarios. o Los disparadores e ndices creados por otros usuarios que estn en las tablas del usuario. Los usuarios sin privilegios slo pueden exportar objetos de su propiedad y este modo no incluir ningn ndice o disparador creado por otros usuarios en las tablas propiedad de este usuario.

15.1.3 Modo Base de Datos Completa


Todos los objetos de la base de datos, excepto aquellos propiedad del usuario SYS son exportados al usar este mtodo. Este modo requiere que el usuario que realice la exportacin tenga asignado el role EXP_FULL_DATABASE.

15.1.4 Parmetros de la utilidad Export


En la siguiente tabla se muestran algunos de los parmetros ms utilizados al realizar la exportacin. Palabra clave USERID BUFFER COMPRESS Por Defecto Especfico del S.O. Y Significado Nombre y contrasea de usuario. Tamao del buffer que se utilizar para almacenar las filas recuperadas antes de escribirlas al fichero de exportacin. Un valor Y especifica que durante la importacin, el tamao de la extensin inicial se definir con un valor igual al tamao actual del segmento. Un valor N har que se conserven los

Administracin de Oracle (V1.01)

Pg. 133

Aubay Espaa - Formacin

CONSISTENT

CONSTRAINTS DIRECT FEEDBACK FILE FULL GRANTS HELP INDEXES LOG OWNER PARFILE RECORDLENGT H ROWS STATISCS TABLES

Y N 0 Expdat.dmp N Y N Y NULL

Especfico del S.O. Y ESTIMATE

tamaos de extensiones actuales. Un valor de Y especifica que toda la operacin de exportacin se realizar en una transaccin de slo lectura. Expor intentar obtener una imagen de lectura consistente de todos los objetos exportados. Un valor de N especificar que slo hay que mantener la consistencia a nivel de tabla. Un valor de Y especifica que las restricciones se van a exportar con la tabla. Un valor de N hace que las restricciones no se exporten. Un valor de Y especificar una ruta de acceso directa que se utiliza para la exportacin. Un valor de N usa la ruta de acceso convencional. Especifica un entero para solicitar que se muestre un punto cuando se importen n filas. El valor por defecto suprime la presentacin. Nombre del fichero de exportacin. Un valor de Y especifica la exportacin de la base de datos completa. Un valor Y especifica que se exporten todas las concesiones de los objetos. Un valor Y muestra una lista de parmetros y su significado. Este parmetro no se combina con otros parmetros. Este parmetro indica si se desea exportar los ndices. El nombre del fichero que almacena todos los mensajes de la exportacin. Los nombres de los usuarios para la exportacin a nivel de usuario. Especifica el nombre del fichero que contiene una lista de parmetros de exportacin. El tamao del registro de salida. Un valor de Y especifica que los datos se van a exportar. Espefica el mtodo de anlisis que se utiliza en importacin. Schema.table para la exportacin en modo tabla. OWNER=<user_name>

la

Slo uno de los parmetros FULL=Y, TABLES=[schema.]<table_name> puede ser especificado.

Si se especifica la ruta de acceso directa (DIRECT=Y), el parmetro CONSISTENT no se puede definir como Y. Para una gua completa de los parmetros se puede consultar el captulo Export del manual de Oracle Utilities.

Administracin de Oracle (V1.01)

Pg. 134

Aubay Espaa - Formacin

15.2 IMPORT
La sintaxis que se utiliza para realizar la importacin es la siguiente: $ORACLE_HOME/bin/imp [keyword=] {value | (value, value . . .) } Donde keyword son palabras clave que se explican en la siguiente seccin y value es el valor asignado a la palabra clave. Los objetos tabla se importan conforme se leen del fichero de exportacin. El fichero de exportacin contiene objetos con el siguiente orden: 1. 2. 3. 4. 5. 6. Definiciones de tipo. Definiciones de tabla. Datos de tabla. ndices de tabla. Restricciones de integridad, vistas, procedimientos y disparadores. ndices de bitmap, funcionales y de dominio.

Esta secuencia del fichero de exportacin impide que los datos sean rechazados debido al orden en que se importan las tablas. Tambin se impide que se arranquen disparadores redundantes sobre los mismo datos. Algunos objetos como los procedimientos almacenados, pueden invalidarse en la importacin por importarse antes de objetos a los que hacen referencia. Se debe comprobar los objetos con STATUS=INVALID y recompilarlos. Si se importan datos sobre tablas existentes, el orden de importacin puede provocar fallos de integridad referencial. Por este motivo se recomienda desactivar las restricciones referenciales para importar datos sobre una tabla existente. Dichas restricciones se pueden volver a activar despus de completarse la importacin. Las tablas se importarn en el mismo tablespace desde el que se exportaron. Sin embargo, si el tablespace ya no existe o si el usuario no tiene la cuota necesaria, la importacin crear la tabla sobre el tablespace por defecto del usuario. Si un usuario es incapaz de acceder al tablespace por defecto, la tabla no se importar.

15.2.1 Parmetros de la utilidad Import


Palabra clave USERID BUFFER COMMIT Por Defecto Especfico del S.O. N Significado Nombre y contrasea de usuario. Tamao en bytes del buffer al que se transfieren las filas de datos. Un valor de Y especifica que import debera validar despus de cada insercin. Por defecto, import valida slo antes de cargar cada tabla. Si ocurriese algn error se deshace todo lo

Administracin de Oracle (V1.01)

Pg. 135

Aubay Espaa - Formacin

FEEDBACK FILE FROMUSER FULL GRANTS HELP IGNORE

0 Expdat.dmp NULL N Y N N

INDEXES LOG PARFILE RECORDLENGT H ROWS SHOW

Y NULL

Especfico del S.O. Y N

TABLES TOUSER

NULL NULL

hecho antes de continuar. Al especificar este parmetro como Y se evita un crecimiento excesivo de los segmentos de rollback. Especifica un entero para solicitar que se muestre un punto cuando se importen n filas. El valor por defecto suprime la presentacin. Nombre del fichero de importacin. Una lista de usuarios cuyos objetos van a ser importados. Un valor de Y especifica una importacin de base de datos completa. Un valor Y especifica que se importen todas las concesiones de los objetos. Un valor Y muestra una lista de parmetros y su significado. Este parmetro no se combina con otros parmetros. Si el valor se define como Y, import pasa por alto los errores de creacin de objetos cuando intenta crear objetos de base de datos. En este caso import contina sin notificar el error. Para tablas el valor Y hace que las filas se importen sobres las tablas existentes y no mostrando mensajes de error. Un valor de N hace que se notifiquen los errores y la tabla se ignora si todava existe. Errores como los del sistema operativo, de base de datos y de SQL no se ignoran y pueden parar el procesamiento. Un valor de Y hace que se importen los ndices El nombre del fichero que almacena todos los mensajes de la importacin. Especifica el nombre del fichero que contiene una lista de parmetros de importacin. El tamao del registro de entrada. Este slo es necesario si los datos se exportaron en un sistema operativo con un tamao de registro distinto. Un valor de Y especifica que los datos se van a importar. Si el valor es Y, el contenido del fichero de exportacin se enumera en pantalla y no se importa. Las sentencias SQL incluidas en la exportacin se muestran en el orden en que la importacin las ejecutar. Si este valor es Y los nicos parmetros que se pueden definir son FROMUSER, TOUSER FULL y TABLES Designa las tablas que se van a importar. Una lista de nombres de usuario sobre los que se va a importar sus objetos.

Slo uno de los parmetros FULL=Y, FROMUSER-TOUSER o TABLES=[schema.]<table_name> puede ser especificado. Para una gua completa de los parmetros se puede consultar el captulo Import del manual de Oracle Utilities.

Administracin de Oracle (V1.01)

Pg. 136

Aubay Espaa - Formacin

15.3 SQL*LOADER
La herramienta de Oracle SQL*Loador est diseada para realizar carga de datos desde ficheros externos sobre tablas de bases de datos Oracle. Presenta las siguientes caractersticas: Puede cargar datos desde mltiples ficheros de datos. Puede cargar datos dentro de mltiples tablas durante al misma sesin de carga. Puede seleccionar los datos que desea cargar. Puede manipular datos antes de que sean insertados usando funciones SQL. Puede generar secuencias de valores clave sobre columnas especficas. Puede cargar datos Objetos, Colecciones y datos LOBs. Es una utilidad compatible con la utilidad de carga de DB2.

Para acceder a esta herramienta se debe ejecutar el comando $ORACLE_HOME/bin/sqlldr Los componentes bsicos de SQL*Loador se muestran en el siguiente grfico:

Fig. 15.1 Los parmetros con los que se puede invocar la herramienta SQL*Loader se muestran en la siguiente tabla: Parmetro USERID CONTROL Descripcin Usuario propiertario de la tabla que se va a cargar, o que tiene acceso a dicha tabla, es requerido por Oracle. Nombre del fichero que describe el formato del fichero de entrada Valor Defecto NULL NULL

Administracin de Oracle (V1.01)

Pg. 137

Aubay Espaa - Formacin

LOG BAD DATA DISCARD DISCARDMA X SKIP LOAD ERRORS ROWS SILENT DIRECT PARFILE PARALLEL READSIZE

de datos para la tabla Oracle. Escribe la salida del comando SQL*Loador en un fichero de log. Si no se indica nada tomar el nombre del fichero de control con extensin .log Nombre del fichero donde se escriben las filas del fichero de entrada que han sido rechazadas durante la carga. Si no se indica nada tomar el nombre del fichero de control con extensin .bad Nombre del fichero de datos Si en la carga se utiliza un filtro, los ficheros que no cumplan dicho filtro se guardarn en el fichero indicado en esta opcin. Si no se utiliza no crea ningn fichero de descarte. Nmero mximo de registros a ser descartados. Si se especifica un nmero positivo Oracle salta a la fila especificada, e inicia la carga a partir del registro que se encuentra inmediatamente despus del indicado. Si se especifica un nmero positivo, Oracle cargar dicho nmero exacto de filas. Nmero de errores permitidos Identifica el nmero de filas a leer desde el fichero de datos antes de salvar los datos en la base de datos Elimina los mensajes durante el arranque de la utilidad SQL*Loador (header, feedback,errors, discards, partitions, all Usa un path directo Nombre del fichero que contiene los parmetros pasados a la utilidad SQL*Loador Cuando se usa esta opcin, se ejecutan mltiples sesiones, cargando los datos simultneamente. Las tablas destino no deben de tener ndices. Especifica en bytes el tamao del buffer de lectura

NULL NULL NULL NULL ALL 0 ALL 50 ALL NULL FALSE NULL FALSE 65536

15.3.1 Formato del Fichero de Control


El formato del fichero de control es el siguiente: load data infile <nombre del fichero de datos> into table [ insert | append | replace | truncate ] <nombre de la tabla destino> (campo_1 position(<entero>:<entero>) tipo de dato, (campo_2 position(<entero>:<entero>) tipo de dato, (campo_n position(<entero>:<entero>) tipo de dato) En la lnea INTO TABLE se puede indicar la accin a realizar en la tabla segn el modificador seleccionado: Insert: es el valor por defecto, e indica que la tabla estar vaca cuando comience la carga.

Administracin de Oracle (V1.01)

Pg. 138

Aubay Espaa - Formacin

Append: Aade nuevas filas a los contenidos existentes de la tabla. Replace: Borra las filas de la tabla y carga las nuevas filas. Truncate: Se comporta igual que Replace.

Ejemplo Supongamos que se quiere realizar la siguiente carga con las opciones: Nombre de Usuario: frieda Contrasea: frieda Fichero de Control: bruce.ctl Load: Todos los registros Parallel: SI Direct: No

El formato del fichero de control bruce.ctl puede ser el siguiente: Load data Infile person.dat Into table personal When clssn <> CR4 (first_name position(01:14) char, surname position(15:28) char, clssn position(29:36) char, hire_date position(37:42) date YYYYMMDD) $ORACLE_HOME/bin/sqlldr frieda/frieda control=bruce.ctl parallel=true

Administracin de Oracle (V1.01)

Pg. 139

Aubay Espaa - Formacin

16 PRCTICAS
16.1 TEMA 2: COMPONENTES DE LA ARQUITECTURA ORACLE
1. Un usuario intenta conectarse a una base de datos Oracle y recibe el error ORA-01034 ORACLE not available. Cul de las siguientes causas puede ser el error? a. El usuario introdujo una contrasea no vlida b. El usuario introdujo un nombre de usuario no vlido c. La instancia a la que se conecta el usuario no est ejecutndose d. La versin de Oracle a la que se est conectando no est instalada. 2. Un usuario ejecuta un comando SQL para actualizar una fila de una tabla de la base de datos. Qu proceso ejecuta esta sentencia? a. Proceso de usuario b. Proceso de Servidor c. DBWR d. LGWR 3. Para la pregunta anterior. Dnde est el cambio que realiz el proceso identificado en la pregunta anterior? a. Fichero de Datos b. Cach de Buffers de la base de datos c. Shared Pool d. Fichero de Parmetros 4. Cul a. b. c. d. 5. Cul a. b. c. d. de los siguientes ficheros almacena segmentos de rollback ? Ficheros de redo log Ficheros de control Fichero de Datos Fichero de Parmetros de las siguientes reas de memoria no es una parte de la SGA? Cach de buffers de la base de datos PGA Buffer de Redo Log Shared Pool

6. Cul de las siguientes reas de memoria se utiliza para almacenar en cach la informacin del Diccionario de Datos a. Cach de buffers de la base de datos b. PGA c. Buffer de redo log d. Shared Pool

Administracin de Oracle (V1.01)

Pg. 140

Aubay Espaa - Formacin

7. Cundo un usuario ejecuta la sentencia commit, en cul de los siguientes ficheros se registran los cambios antes de que el servidor Oracle devuelva un mensaje de commit completado al usuario? a. Fichero de Redo Log b. Fichero de Control c. Fichero de Datos d. Fichero de Parmetros 8. Determinar el tamao de la cach de buffers de una base de datos 9. Determinar el tamao de la SGA

16.2 TEMA 3: GESTIN DE UNA INSTANCIA ORACLE


1. Arrancar y Montar una instancia de base de datos Oracle 2. Arrancar y Abrir una instancia de base de datos Oracle 3. Parar una Instancia de base de datos Oracle en modo Normal 4. Parar una Instancia de base de datos Oracle en modo Inmediato 5. Parar una Instancia de base de datos Oracle en modo Abort 6. Identificar el nombre de la base de datos, el nombre de la instancia y el tamao de los bloques de la base de datos 7. Enumerar el nombre y tamao de los ficheros de datos, ficheros redo log y ficheros de control 8. Determinar el nmero mximo de cursores permitidos en la base de datos 9. Arrancar y Abrir una instancia de base de datos Oracle con un fichero de parmetros diferente al de por defecto

16.3 TEMA 4: CREACIN DE UNA BASE DE DATOS ORACLE


1. Escribir uno o varios scripts para crear una base de datos Oracle, con la siguiente configuracin: a. Nombre de la Base de Datos BD<xx>. b. Un Fichero de control nombrado control01.ctl y ubicado en un path donde el usuario oracle del sistema operativo pueda escribir. c. Dos grupos de ficheros de redo log, cada uno con un miembro de 150K, denominados redo0101.log y redo0201.log y ubicado en un path donde se vayan a ubicar los ficheros de datos. d. Para cada grupo, el nmero mximo de grupos de ficheros log y de miembros de ficheros log es de cinco.

Administracin de Oracle (V1.01)

Pg. 141

Aubay Espaa - Formacin

e. Un fichero de datos de 20M, denominado system01.dbf y ubicado en un path donde se vayan a ubicar los ficheros de datos. f. Un mximo de 30 ficheros de datos que se pueden crear en la base de datos. g. Un nmero mximo de 100 ficheros redo log. h. Juego de caracteres WE8ISO8859PI i. Ubicar los ficheros de trazas sobre directorios bdump y cdump y ubicado en un path donde el usuario oracle del sistema operativo pueda escribir.

16.4 TEMA 5: DICCIONARIO DE DATOS


1. Consultar las vistas V$DATABASE, V$THREAD y V$PARAMETER para identificar el nombre de la base de datos, el nombre de la instancia y el tamao del bloque de la base de datos. 2. Consultar la vista V$DATAFALE para obtener el nombre y tamao de los ficheros de datos. 3. Consultar la vista DBA_DATA_FILES para obtener el nombre de los ficheros de datos que forman parte del tablespace SYSTEM. 4. Consultar la vista DBA_FREE_SPACE para obtener la cantidad de espacio libre disponible en la base de datos. 5. Consultar la vista DBA_SEGMENTS para obtener la cantidad de espacio real ocupado por la base de datos. 6. Consultar la vista DBA_USERS para obtener una lista de usuarios creados en la base de datos.

16.5 TEMA 6: GESTIN DE TABLESPACES Y FICHEROS DE DATOS


1. Cree un tablespace permanente DATA01<user> y ubiquelo en la ruta donde se encuentran el resto de los ficheros de datos. El tamao de dicho tablespace que sea de 2MB. 2. Cree un tablespace permanente INDX01<user> y ubiquelo en la ruta donde se encuentran el resto de los ficheros de datos. El tamao de dicho tablespace que sea de 2MB. 3. Modifique el nombre del fichero asociado al tablespace INDX01<user>.

Administracin de Oracle (V1.01)

Pg. 142

Aubay Espaa - Formacin