Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Administracin de Oracle
Cliente: Dirigido a:
Aubay
Alumnos del curso de Administracin de Oracle
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: Fecha:
Nombre: Fecha:
20/07/2004
Pg. 2
CONTROL DE VERSIONES
VERSIN
1.00 1.01
FECHA DE CAMBIO
16/06/2004 20/07/2004
Pg. 3
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
4.2
Pg. 4
4.3 5 5.1
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
5.2 5.3 5.4 6 6.1 6.2 6.3 6.4 6.5 6.6 7 7.1 7.2
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
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
8.3.1
GESTIN DE TABLAS............................................................................................81
Pg. 5
9.1 9.2
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
Tipos de Datos Escalares .......................................................................................... 82 Recopilaciones ........................................................................................................ 85 Tipos de Datos de Relacin ....................................................................................... 85
........................................................................................82
9.4
9.5 9.6 10
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
10.2
CLASIFICACIN FSICA.........................................................................................96
10.3
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
10.5 11 11.1
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
Pg. 6
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
Vistas Mostrar Privilegios del Sistema.................................................................... 124 Vistas Mostrar Privilegios de Objetos..................................................................... 126
................................................................................... 121
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....................................................................................
Modo Tabla ....................................................................................................... Modo Usuario .................................................................................................... Modo Base de Datos Completa ............................................................................. Parmetros de la utilidad Export...........................................................................
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
Pg. 7
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.
Referencia Versin
Internet Internet Gua de Estudio Internet
Fecha
Pg. 8
Notacin
Descripcin
Pg. 9
Pg. 10
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:
Pg. 11
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.
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.
Pg. 12
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.
Pg. 13
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.
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.
Pg. 14
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.
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.
Pg. 15
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.
Pg. 16
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.
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:
Pg. 17
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.
Pg. 18
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.
Pg. 19
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.
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.
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.
Pg. 20
Pg. 21
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.
Pg. 22
Pg. 23
Pg. 24
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.
Pg. 25
3. Aplicacin de las transacciones no validadas por los procesos de servidor a medida que acceden a los datos bloqueados.
Pg. 26
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.
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.
Pg. 27
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
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:
Pg. 28
control_files
= <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
Pg. 29
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.
Pg. 30
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;
Pg. 31
Para obtener una lista completa de estas vistas y de la descripcin de las columnas se puede consultar el documento Oracle Reference.
Pg. 32
Pg. 33
Pg. 34
Pg. 35
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.
Pg. 36
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.
Pg. 37
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
Pg. 38
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
Pg. 39
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.
Pg. 40
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.
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
Pg. 41
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.
Pg. 42
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.
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,
Pg. 43
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.
Pg. 44
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
Pg. 45
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
Pg. 46
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.
Pg. 47
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.
Pg. 48
@<ORACLE_HOME>/sqlplus/admin/pupbld.sql @<ORACLE_HOME>/rdbms/admin/dbmspipe.sql La ejecucin de estos ficheros crear un diccionario de datos completamente funcional.
Pg. 49
Archivo de Datos
Pg. 50
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.
Pg. 51
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.
Pg. 52
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.
Pg. 53
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.
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.
Pg. 54
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.
Pg. 55
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.
Pg. 56
Un ejemplo de creacin de un tablespace temporal: CREATE TEMPORARY TABLESPACE tbs_1 TEMPFILE 'file_1.f' EXTENT MANAGEMENT LOCAL UNIFORM SIZE 16M;
Pg. 57
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.
Pg. 58
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.
Pg. 59
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.
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.
Pg. 60
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.
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.
Pg. 61
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
Pg. 62
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);
Pg. 63
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.
Pg. 64
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.
Pg. 65
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.
Pg. 66
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%.
Pg. 67
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.
Oracle recomienda no modificar los valores por defecto de los parmetros de simultaneidad.
Pg. 68
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).
Pg. 69
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.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.
Pg. 70
asociados a algn segmento de datos no tienen porque compartir el mismo tablespace, es ms, se recomienda crear un tablespace especfico para los ndices.
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.
Pg. 71
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
Pg. 72
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.
Pg. 73
Pg. 74
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.
Pg. 75
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.
Pg. 76
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
Pg. 77
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
Pg. 78
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>;
La vista V$ROLLNAME contiene los campos: NAME: Indica el nombre del segmento de rollback. USN: Indica el nmero del segmento de rollback.
Pg. 79
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,
Pg. 80
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.
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.
Pg. 81
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:
Pg. 82
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.
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
Pg. 83
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.
Pg. 84
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.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.
Pg. 85
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.
Pg. 86
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,
Pg. 87
deptno
NUMBER(2)
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)
Pg. 88
Nota: El valor para el tamao medio de la fila se puede estimar con el comando: ANALIZE TABLE <NOMBRE_TABLA>
Pg. 89
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.
Pg. 90
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.
Pg. 91
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.
Pg. 92
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.
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
Pg. 93
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;
Pg. 94
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.
Pg. 95
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;
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
Pg. 96
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.
Pg. 97
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.
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.
Pg. 98
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
Pg. 99
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.
Pg. 100
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.
Pg. 101
50)
[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:
Pg. 102
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.
Pg. 103
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
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]
Pg. 104
[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;
Vista DBA_INDEXES Esta vista contiene una lista de todos los ndices de la base de datos. Sus campos ms representativos son:
Pg. 105
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;
Pg. 106
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.
Pg. 107
CHECK
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:
Pg. 108
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.
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.
Pg. 109
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.
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.
Pg. 110
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.
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
Pg. 111
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)
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
Pg. 112
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.
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.
Pg. 113
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
Pg. 114
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;
Pg. 115
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
Pg. 116
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.
Pg. 117
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.
Pg. 118
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.
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
Pg. 119
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;
Pg. 120
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.
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:
Pg. 121
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
Pg. 122
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
Pg. 123
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.
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:
Pg. 124
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.
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]
Pg. 125
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.
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
Pg. 126
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.
Pg. 127
RESOURCE
Pg. 128
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
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.
DBA_ROLES Muestra todos los roles existentes en la base de datos. Los campos de esta vista son:
Pg. 129
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
Pg. 130
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>;
Pg. 131
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
Pg. 132
Pg. 133
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
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
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.
Pg. 134
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.
Pg. 135
0 Expdat.dmp NULL N Y N N
Y NULL
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.
Pg. 136
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
Pg. 137
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
Pg. 138
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
Pg. 139
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
Pg. 140
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
Pg. 141
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.
Pg. 142