+ All Categories
Home > Documents > Introducción aOracle

Introducción aOracle

Date post: 29-Mar-2016
Category:
Upload: raul-gonzalez
View: 244 times
Download: 1 times
Share this document with a friend
Description:
Introducción a Oracle
Popular Tags:
127
ING NATIONALE-NEDERLANDEN Departamento de Informática - Sistemas 11/03/2012 Introducción a la administración de Oracle C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_1 80B11D.doc Página 1 de 127 Introducción a la administración de Oracle
Transcript
Page 1: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 1 de 127

Introduccióna la administración de Oracle

Page 2: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 2 de 127

Page 3: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 3 de 127

Indice

1. INTRODUCCIÓN 7

2. ARQUITECTURA DE ORACLE 8

2.1. Introducción a la estructura de Oracle 8

2.2. Estructuras de Memoria 102.2.1. SGA. Área Global del Sistema 10

2.2.1.1. Los Buffers de la Base de Datos (Database Buffer) 112.2.1.2. Los Buffers de Redo Log 122.2.1.3. La Zona Compartida (Shared Pool) 122.2.1.4. Large Pool 142.2.1.5. Java Pool 14

2.2.2. Área Global de Procesos (PGA) 142.2.3. Áreas de Código de Software 152.2.4. Sort Areas (Áreas de Ordenación) 152.2.5. Memoria Virtual 15

2.3. Estructura de Procesos Background 162.3.1.1. DBWR. DataBase WRiter 162.3.1.2. LGWR. LoG WRiter 172.3.1.3. CKPT. CheKPoinT Process. 182.3.1.4. SMON. System MONitor 182.3.1.5. PMON. Process MONitor 182.3.1.6. RECO. RECOverer Process 182.3.1.7. ARCH. ARCHiver 182.3.1.8. LOCKn. LOCK Process 192.3.1.9. Dnnn. Dispatcher Process 192.3.1.10. Snnn. Servidor Compartido. 19

2.4. Gestión de procesos servidor-usuario 192.4.1. Arquitectura Multi-Threaded 19

2.5. Funcionamiento Interno del Gestor 21

3. ESTRUCTURA DE BASE DE DATOS EN DISCO 22

3.1. Ficheros de Inicialización 22

3.2. Ficheros de Control 243.2.1. Añadir nuevos ficheros de control 24

3.3. Ficheros de datos (Tablespaces) 253.3.1. Tablespaces de System 263.3.2. Tablespaces de datos de usuario 26

3.3.2.1. Crear un tablespace 263.3.2.2. Ampliar el tamaño de un tablespace 273.3.2.3. Control de acceso al tablespace 283.3.2.4. Cambio de los archivos 293.3.2.5. Supresión de un TABLESPACE 293.3.2.6. Asignación de un TABLESPACE a un Usuario 29

3.3.3. Tablespaces temporales 303.3.4. Tablespaces de ROLLBACK/UNDOTABS 30

Page 4: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 4 de 127

3.3.4.1. Gestión de undotabs (Oracle9) 313.3.4.2. Gestión de un Segmento de ROLLBACK (Oracle 8) 35

3.4. Ficheros de Redo Log 383.4.1. Redo Log Online 38

3.4.1.1. Creación Inicial de los ficheros de Redo Log 383.4.1.2. Añadir nuevo ficheros ficheros Redo Log 393.4.1.3. Renombrar ficheros de Redo Log 393.4.1.4. Borrar ficheros de Redo Log 40

3.4.2. Redo Log Archivados 403.4.3. Cambio del Modo de Archivado de la Base de Datos 41

3.5. Ficheros de diagnóstico 433.5.1. Ficheros de alertas 433.5.2. Ficheros sobre procesos en background 453.5.3. Ficheros core 453.5.4. Ficheros sobre sesiones de usuario 45

4. EL DICCIONARIO DE DATOS 47

4.1. Vistas estáticas y dinámicas del diccionario de datos 47

4.2. Creación del Diccionario de Datos ORACLE. 504.2.1. Ficheros de Comandos Ejecutables Requeridos 504.2.2. Ficheros de Comandos Adicionales 51

5. OBJETOS EN LA BASE DE DATOS 53

5.1. Tablas 535.1.1. Tablas particionadas. 535.1.2. Tablas tipo índice. 54

5.2. Vistas. 555.2.1. Vistas materializadas 55

5.3. Indices. 565.3.1. Gestión de los índices 57

5.3.1.1. Análisis de los índices 575.3.1.2. Identificando índices no usados 57

5.3.2. ¿Cuándo una Columna es Candidata a Estar Indexada? 585.3.3. Indice B* Tree. 585.3.4. Indice Bit Map. 59

5.4. Sinónimos y Secuencias 60

5.5. Triggers. 61

5.6. Constraints. Comprobación de integridad. 62

5.7. DB Links. 63

5.8. Los Index Cluster. 64

5.9. Los Hash Cluster. 65

5.10. Los Snapshot y los Snapshot Log. 66

Page 5: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 5 de 127

5.11. Perfiles, Roles y Grants. 67

5.12. Procedimientos, Paquetes y Funciones. 68

5.13. Vistas sobre objetos. 69

6. ESTRUCTURAS DE ALMACENAMIENTO: SEGMENTOS 70

6.1. Bloque de datos (Database block) 726.1.1. Gestión automática de los bloques de datos 736.1.2. Configuración manual 74

6.2. Información sobre segmentos/bloques 75

7. ARRANQUE Y PARADA DE LA BASE DE DATOS. 76

7.1. Arranque de la Base de Datos. 767.1.1. Arrancar la Instance 767.1.2. Montar la Base de Datos 767.1.3. Abrir la Base de Datos 767.1.4. Otras Alternativas de Arranque: 76

7.2. Parada de la Base de Datos. 787.2.1. Shutdown Normal 787.2.2. Shutdown Immediate 787.2.3. Shutdown Abort 79

8. PARAMETRIZACIÓN DE ORACLE 80

8.1. Uso de Pfile o Spfile 80

9. SEGURIDAD EN LA BASE DE DATOS 81

9.1. Seguridad y Privilegios del Administrador (DBA) 819.1.1. Privilegios SYSOPER y SYSDBA 81

9.2. Acceso a la Base de Datos 839.2.1. Creación y Gestión de Usuarios 83

9.2.1.1. Creación de un Usuario 839.2.1.2. Modificación y borrado de un usuario 859.2.1.3. Visualización de Información de Usuarios 859.2.1.4. Eliminar una Sesión de Usuario 859.2.1.5. Gestión de contraseñas 86

9.3. Control de Privilegios 889.3.1. Privilegios del Sistema 88

9.3.1.1. Concesión de privilegios de sistema 889.3.1.2. Anulación de privilegios de sistema 899.3.1.3. Visualización de Privilegios del Sistema 89

9.3.2. Privilegios Sobre Objetos 919.3.2.1. Concesión de Privilegios Sobre Objetos 919.3.2.2. Diferencias entre WITH GRANT / WITH ADMIN OPTION 929.3.2.3. Supresión de Privilegios Sobre Objetos 929.3.2.4. Visualizar Privilegios Sobre Objetos 93

Page 6: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 6 de 127

9.4. Definición de Roles 949.4.1. Beneficios de los Roles 949.4.2. Creación de Roles 959.4.3. Modificación de un Rol 959.4.4. Activar / Desactivar Roles 969.4.5. Establecer el Rol por Defecto 969.4.6. Roles Predefinidos 969.4.7. Roles Especiales OSOPER y OSDBA 979.4.8. Visualizar Información Sobre Roles 97

9.5. Los Perfiles. Método de control de recursos de la B.D. 989.5.1. Creación de Perfiles 999.5.2. Asignación De Perfiles A Usuarios 999.5.3. Eliminar un Perfil 999.5.4. Activar y Desactivar Perfiles 1009.5.5. Visualizar la Información acerca de Perfiles 100

9.6. Otras opciones de seguridad 1019.6.1. Seguridad a nivel de columna. 1019.6.2. Seguridad a nivel de fila. 101

10. AUDITORÍA DE LA BASE DE DATOS 102

10.1. Tipos de Auditoria 10210.1.1. Auditoria de Sentencias 102

10.1.1.1. Desactivación de Auditoria de Sentencias 10410.1.2. Auditoria de Utilización de Privilegios 105

10.1.2.1. Desactivación de Auditoria de Utilización de Privilegios 10710.1.3. Auditoría Sobre Objetos 108

10.1.3.1. Desactivar la Auditoria Sobre Objetos 111

10.2. Monitorizar la Tabla de Auditoria 112

10.3. Manejar las Tablas de Traza de Auditoria 113

10.4. Visualizar la Informacion de la Auditoria 114

11. APÉNDICE A - CREACIÓN DE LA BASE DE DATOS. 115

11.1. Pasos de creación 11511.1.1. Definir las variables a nivel de sistema operativo. 11511.1.2. Creación del fichero de parámetros "init.ora". 11611.1.3. Conexión a sqlplus a Oracle con SQLplus 11711.1.4. Ejecución de los comandos de creación de la base de datos 117

11.1.4.1. Creación inicial con CREATE DATABASE 11711.1.4.2. Generación de las tables del diccionario de datos 11811.1.4.3. Creación de los tablespaces de Usuario 11911.1.4.4. Creación de usuarios y concesión de permisos 11911.1.4.5. Modificar fichero listener.ora 119

12. APÉNDICE B – SELECCIÓN DE CONSULTAS 121

12.1. Información sobre tablas (datos e indices) 121

12.2. Información sobre Database Performance Tuning 126

Page 7: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 7 de 127

1. Introducción

Esta introducción expone las responsabilidades de la persona que administra un Servidor de Base deDatos Oracle. Una base de datos Oracle puede manejar gran cantidad de información y de usuarios,por lo tanto, debe haber una persona o grupo de personas, que controlen y dirijan el sistema. Eladministrador de la base de datos es esa persona.

Si la base de datos maneja mucha información o muchos usuarios, las tareas de administraciónpueden dividirse entre varios administradores. Las responsabilidades del administrador son:

- Instalar y actualizar el servidor Oracle y las herramientas de desarrollo.- Planificar la estructura de la Base de Datos. Tanto en diseño lógico y físico.- Controlar el almacenamiento de los datos y planificar el crecimiento de los mismos.- Crear las estructuras primarias de almacenamiento de la base de Datos (tablespaces) hasta que

los desarrolladores diseñen las aplicaciones.- Crear los objetos primarios (tablas, vistas e índices) hasta que los desarrolladores comiencen a

diseñar las aplicaciones.- Modificar las estructuras creadas, si es necesario, partiendo de la información que proporcionan

los desarrolladores.- Mejorar los tiempos de respuesta y controlar el rendimiento.- Creación y mantenimiento de usuarios. Seguridad del sistema.- Controlar y monitorizar el acceso de usuarios a la base de Datos.- Planificar la estrategia de Backup y recuperación.- Realizar los backups y las recuperaciones.- Contactar con el distribuidor para problemas técnicos que no pueda resolver.- Identificar versiones de software y mantenerlo. Conocer que es una versión, qué es una release,

qué es un parche, etc.

Page 8: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 8 de 127

2. Arquitectura de Oracle

2.1. Introducción a la estructura de Oracle

La arquitectura de una instalación Oracle está compuesta de cuatro elementos básicos:

Áreas de Memoria.- Principalmente la llamada SGA (System Global Area o Area Global delSistema). Buffers de memoria compartida que Oracle toma al sistema operativo. Su tamaño lodetermina el fichero de inicialización de la base de datos llamado init.ora.

Procesos.- Son los encargados de gestionar el correcto funcionamiento de la base de datosy de las peticiones de los usuarios. Existen 2 tipos de procesos:

o Procesos de usuario, por ejemplo sqlplus, sqlforms...o Procesos background o procesos Oracle como DBWR, LGWR, etc...

Ficheros en disco.- La información del usuario (así como la propia de Oracle) se almacenafinalmente en ficheros de disco. Según la finalidad de los datos gestionados se diferencianentre diversos tipos de ficheros que veremos a los largo de este manual. Caben destacar losficheros de datos (contienen la información propia de los usuarios), ficheros de control(mantienen información sobre el estado y funcionamiento de la base de datos), ficheros deredo log (encargados de mantener la integridad de la información de la base de datos), etc.

Aplicaciones.- Incluye tanto los binarios propios de Oracle como aquellas herramientascomplementarias (Oracle Enterprise Manager, Sqlplus, SQL*Loador, etc.)

Ficheros de Parámetros

Data Dict.Cache

LibraryCache

Java Pool Large Pool

Ficheros de Password

Ficheros de DatosFicheros de Control

Ficheros de Redo Log

Ficheros de Archive

FICHEROS DE CONTROL YPARAMETRIZACIÓN FICHEROS DE DATOS FICHEROS DE

RECUPERACIÓN

PMON DBWR0 LGWR ARCH0SMON RECO CKPT

UGA

Estructura física en Disco(BASE DE DATOS)

Estructura Virtual en Memoria y Procesos Background de Oracle(INSTANCIA)

Shared Pool

DatabaseBuffer Cache

Redo LogBuffer Cache

Procesosen Background

System Global AreaProcesos de

Usuario

Procesos delServidor

PGA

VISION GENERAL DE LAS ESTRUCTURAS DE ORACLE

Areas deMemoria

Procesos

Ficheros

LEYENDA

Existen dos terminos de Oracle que conviene definir:

Page 9: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 9 de 127

Instancia.- Engloba el conjunto de procesos backgroun de Oracle y la SGA. Base de Datos.- Hace referencia a la estructura física (ficheros de disco). Una instancia se

encarga de gestionar la información almacenada en la base de datos.

Una base de datos Oracle es un conjunto de objetos tratado como una unidad. Una base de datospuede estar abierta (accesible), o cerrada (no accesible). En situaciones normales, una base de datosestá accesible y preparada para su utilización. Algunas veces, para realizar tareas de administraciónespecíficas, la base de datos no está accesible para los usuarios.

No debemos olvidar que una instalación Oracle contempla tres aspectos:

Estructuras. Son objetos definidos que almacenan la información de una base de datos. Elacceso a las estructuras y a los datos contenidos en ellas se realiza mediante operaciones.

Operaciones. Las operaciones son las acciones que nos permiten acceder y manipular losdatos y las estructuras. Las operaciones en una base de datos suelen ajustarse a una seriede reglas de integridad predefinidas.

Reglas de Integridad. Son las leyes que rigen las operaciones que permiten acceder a losdatos y manipularlos.

Page 10: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 10 de 127

2.2. Estructuras de Memoria

Oracle utiliza la memoria para almacenar la siguiente información:

El código de los programas que se están ejecutando. Información acerca de las sesiones conectadas, y si están o no activas. Los datos necesarios durante la ejecución de un programa. Por ejemplo, el estado de una

consulta cuyas filas han sido ya recuperadas. Información acerca de bloqueos internos de estructuras en memoria.

Las estructuras básicas en memoria asociadas con ORACLE son:

El Área Global del Sistema (SGA): Área Global de Procesos (PGA). Áreas de código software. Áreas de Ordenación.

2.2.1. SGA. Área Global del Sistema

La SGA es un grupo de estructuras de memoria compartida direccionadas por ORACLE. Contienendatos e información de control. Si varios usuarios están conectados de forma concurrente a lainstancia esa información es compartida. A la SGA se la denomina Área Global del Sistema o ÁreaGlobal Compartida (shared).

La suma de la SGA y de los procesos constituyen lo que se denomina una Instancia. Oracle reservaautomáticamente la memoria para la SGA cuando se arranca la instancia.

La SGA es una estructura compartida y además se puede escribir en ella. Son los procesos durantela ejecución de ORACLE los que escriben en ella. La información es la SGA está dividida en lassiguientes áreas:

Buffers de la Base de datos (Database buffer cache)

Page 11: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 11 de 127

Buffers de Redo Log. Shared Pool Large Pool Java Pool. Otras informaciones referentes a la comunicación entre procesos o colas.

Parte de la SGA contiene información general sobre el estado de la base de datos y la instancia, estainformación puede ser accedida por distintos procesos de oracle: esta zona es conocida como FixedSGA. En esta zona no se almacenan datos de usuarios.

Se puede configurar la SGA de forma dinámica. Al hacerlo de esta manera podremos cambiar losvalores de las distintas zonas (buffer cache, shared pool, etc) sin tener que reiniciar la instancia. Eltamaño máximo que puede llegar a tomar del sistema operativo viene controlado por el parámetrosiguiente: SGA_MAX_SIZE. Para un rendimiento óptimo la SGA debería estar totalmente enmemorial real. Si utiliza parte de la memoria virtual implicaría lecturas y escrituras a disco quepenalizarían en gran medida el rendimiento.

El tamaño deseado de las distintas áreas internas de la SGA determinan el tamaño final de la misma.Entre otros parámetros cabe destacar:

DB_CACHE_SIZE Tamaño del cache.LOG_BUFFER Número de bytes reservados para el redo log buffer.SHARED_POOL_SIZE Tamaño en bytes del área compartida.LARGE_POOL_SIZE Tamaño en bytes del Large Pool. Por defecto es 0.

Podemos ver los tamaños asignados:

SQL> SHOW SGA;Total System Global Area 5252292296 bytesFixed Size 749256 bytesVariable Size 2600468480 bytesDatabase Buffers 2634022912 bytesRedo Buffers 17051648 bytes

2.2.1.1. Los Buffers de la Base de Datos (Database Buffer)

Cuando se intenta acceder a información de la base de datos esta se sube a una zona de la SGAdenominada Database Buffer Cache. Los buffers en memoria son una copia de los bloques ORACLEque se encuentran en los ficheros de datos (los asociados a tablespaces). Los buffers de datos loscomparten todos los usuarios conectados a una B.D.

Los buffer en cache están organizados en dos listas: la lista de buffers sucios, y la lista de menosrecientemente utilizados (LRU). Un buffer sucio es un buffer modificado, pero que todavía no hapodido ser escrito en disco. Un buffer menos recientemente utilizado se encuentra en una listallamada LRU que mantiene buffers sucios, buffers libres o no accedidos, y buffers “pinned”. Un buffer“pinned” es un buffer que está siendo accedido actualmente. Cuando un proceso accede a un buffer,el proceso mueve el buffer a una lista de “más recientemente utilizado” (MRU), o lo que es lo mismo,al final de la lista de LRU.

Cuando un proceso necesita acceder a un bloque que no se encuentra en memoria, el proceso debede leer el/los bloques de los ficheros de datos en disco. Si no encuentra sitio en memoria, baja losbuffers sucios a disco, utilizando una estructura multi-bloque, y escribe primero las entradaspendientes de commit en los segmentos de rollback.

El proceso encargado de escribir de los buffers de base de datos a los ficheros de datos es el DBWR(DataBase WRiter).

Page 12: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 12 de 127

El tamaño de grupo de buffers de la base de datos, viene determinado por el parámetro deinicialización de la B.D. (init.ora) DB_BLOCK_BUFFERS=n. El tamaño de un buffer es el equivalentea un bloque ORACLE, por lo tanto, es dependiente del sistema operativo, y sólo puede cambiarseantes de crear la base de datos. El nombre del parámetro es el DB_BLOCK_SIZE.

En consecuencia, el tamaño total del grupo de buffers de la base de datos es DB_BLOCK_SIZE *DB_BLOCK_BUFFERS.

2.2.1.2. Los Buffers de Redo Log

Los buffers de Redo Log son una zona de memoria circular que retiene información acerca deTODOS los cambios que se producen en la Base de Datos.

Las entradas de Redo contiene la información necesaria para reconstruir los cambios realizados en labase de datos mediante operaciones de INSERT, UPDATE, DELETE, CREATE, ALTER o DROP.Las entradas de Redo se utilizan para recuperar la base de datos, si es necesario. La informaciónalmacenada en estos buffer se copian en los ficheros de Redo Log (ver más abajo) cuando:

- Se produce un commit.- Cuando estan cerca de llenarse.- Cuando la información es mayor de 1 Mb.- Mediante la ejecución de comandos de administrador.

El proceso encargado de escribir de los buffers de Redo Log en memoria a el/los ficheros de RedoLog en disco es el LGWR (LoG WRiter).

El tamaño de la zona de buffers de Redo Log (en bytes), lo determina un parámetro de inicialización(init.ora) llamado LOG_BUFFER. Normalmente, un valor alto en este parámetro, reduce laentrada/salida a ficheros de Log, sobre todo si las transacciones son grandes o numerosas. El valorpor defecto es cuatro veces el valor del bloque ORACLE en la instalación.

2.2.1.3. La Zona Compartida (Shared Pool)

La zona compartida contiene información acerca de entradas del diccionario de datos en memoria ylas llamadas áreas de contexto o áreas de SQL.

Esta porción de la SGA contiene tres áreas principales: library cache, dictionary cache y buffers paraejecución paralela de mensajes.

El tamaño total de la “shared pool” está determinada por el parámetro SHARED_POOL_SIZE. Elvalor por defecto es de 64Mb en plataformas de 64 bits. El tamaño se define para todo el conjunto nopudiendo parametrizarse las distintas áreas de la Shared Pool.

Library Cache

Esta zona de memoria es utilizada por Oracle para realizar el análisis de las sentencias SQL de losusuarios. Oracle representa cada sentencia SQL que se ejecuta con una parte compartida (“sharedSQL area”) y con una parte privada (“private SQL area”). Oracle reconoce cuando dos usuarios estánejecutando una sentencia idéntica y reutiliza la parte compartida para ambos usuarios. Sin embargo,cada usuario mantiene una copia separada de la sentencia en el área privada.

El área compartida es una zona de memoria que contiene la sentencia analizada y el plan deejecución. El tamaño de la zona compartida se calcula cuando la sentencia se analiza y depende dela complejidad de la misma. El área de SQL compartida se encuentra siempre en la llamada zonacompartida.

Page 13: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 13 de 127

El área privada es una zona de memoria que contiene datos tales como la información acerca de lasvariables y los buffers en tiempo de ejecución. Cada sesión de usuario que realiza sentencias SQLtiene su propia área de SQL privada. Algunas áreas de SQL privadas, pueden estar asociadas a lamisma zona compartida.

El área privada se divide a su vez en dos: el área persistente y el área de ejecución.

El área persistente contiene información interna acerca de variables, y persiste a travésde las ejecuciones. El tamaño es constante y depende del número de variables y decolumnas especificadas en la sentencia.

El area de Ejecución contiene la información necesaria que se utiliza cuando la sentenciase está ejecutando. El tamaño depende de la complejidad de la sentencia y del tamañode las filas procesadas por la sentencia. Normalmente el área de ejecución es mayorpara INSERT, UPDATE y DELETE que para una SELECT. Sin embargo, el área de laSELECT no se libera nada más ejecutarse, si no hasta que se recuperan todas las filas ose cancela la consulta.

Un área privada de SQL continúa existiendo hasta que se cierra el cursor. Cuando se libera un áreade ejecución porque una sentencia ha finalizado, generalmente el área persistente permanece a laespera, y sólo se libera cuando todas las aplicaciones cierran todos los cursores que no van a serutilizados.

El número máximo de áreas de SQL privadas está limitado por el parámetro de inicialización (init.ora)OPEN_CURSORS. El valor por defecto es 50. Un cursor es un gestor o puntero del área de SQLprivada.

El manejo tamaño de las áreas compartidas es por defecto es de 3.5 Mb y viene limitada por elparámetro de inicialización SHARED_POOL_SIZE.

Cuando un usuario lanza una sentencia SQL Oracle procede de la siguiente manera:

- Verifica si la sentencia está en memoria (gets)- Encuentra la sentencia en memoria (pins) en dos posibles estados:

No ha sido analizada (se denomina softparse) Ha sido analizada (situación ideal)

- No encuentra la sentencia en memoria por lo que debe: Subirla a memoria Analizarla (Hardparse)

La subida a memoria y el posterior análisis consume tiempo de proceso por lo que la situación ideales que la sentencia ya esté en memoria y analizada (ver manual de Optimización).

Dictionary Cache

El Diccionario de Datos es (como ya veremos) una colección de tablas y vistas que contienen datossobre la base de datos, su estructura y los usuarios. Oracle accede con tanta frecuencia a estainformación que tiene dos localizaciones especiales en memoria para su acceso y análisis. Una deesas localizaciones es el llamado “Data dictionary cache” (también conocico como row cache) y laotra es la ya conocida Library Cache.

La función de la Dictionary Cache y su gestión por parte de Oracle es semejante a la descrita en laLibrary Cache. La principal diferencia consiste en que la DC se almacenan tanto la sentencia SQLcomo los datos de la consulta.

User Global Area

La UGA contiene información sobre conexiones cuando trabajamos con Oracle Shared Server y no seha configurado la zona de memoria Large Pool.

Page 14: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 14 de 127

2.2.1.4. Large Pool

Opcionalmente se puede configurar una zona de memoria (dentro de la SGA) denominada Large poolpara proveer un área grande de memoria para:

- Sesiones cuando se utiliza Oracle Shared Server.- Procesos de Servidor de entrada/salida (I/O) muy pesados.- Operación de backup y restore.

2.2.1.5. Java Pool

Esta zona de memoria se reserva para la ejecución de procesos Java. El tamaño es definido en bytesmediante el parámetro JAVA_POOL_SIZE. En Oracle 9i el valor por defecto es de 24M.

2.2.2. Área Global de Procesos (PGA)

El área Global de Procesos (PGA) es una zona de información y de control de los procesos deusuario o de procesos Oracle (llamados background). La PGA se direcciona internamente por Oraclecuando un proceso de usuario se conecta a la B.D. y crea una sesión, aunque varía dependiendo delsistema operativo y de la configuración. Cuando el proceso termina la memoria utilizada se libera.

La PGA es memoria no compartida, es decir el accesos es exclusivo para el proceso que la hacreado. Para cada proceso servidor, se genera una PGA. El tamaño de la PGA es específico de cadaS.O., y no crece dinámicamente. Algunos parámetros afectan al tamaño de la PGA, estos son:

OPEN_LINKS. DB_FILES. LOG_FILES.

La PGA esta dividida en varias zonas:

Stack space. Siempre está contenida en la PGA, independientemente de la configuración. Esla memoria que retiene información de las variables de la sesión o sobre arrays de filas.

Información de la Sesión. Zona de memoria donde se sitúa información como por ejemplo,áreas de SQL privadas. Si la configuración es multi-threaded, esta zona se sitúa en la SGA.

Sort area.- Usada para ordenaciones requeridas por sentencias SQL. Cursor State.- Indica el estado de proceso de las sentencias SQL usadas por la sesión.

Page 15: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 15 de 127

2.2.3. Áreas de Código de Software

Son partes de la memoria utilizados para almacenar código que es o va a ser ejecutado y no tienenada que ver con los programas de usuario (pueden ser los ejecutables de las herramientas). Eltamaño de estas áreas es estático, sólo cambia cuando el software se actualiza o se reinstala.

Las áreas de software se instalan en modo sólo-lectura y pueden instalarse en modo compartido ono compartido. Normalmente Oracle lo instala compartido, para incrementar el rendimiento. Algunasutilidades pueden instalarse compartidas (Forms o Plus) y otras no pueden.

2.2.4. Sort Areas (Áreas de Ordenación)

Cualquier ordenación requiere espacio en memoria. Los segmentos de memoria donde ORACLEordena la información son las llamadas áreas de ordenación (sort areas). El tamaño de un área deordenación depende de la cantidad de información que se esté ordenando, pero nunca puedeexceder al límite impuesto por el parámetro de inicialización expresado en bytes SORT_AREA_SIZE.EL valor por defecto depende del S.O.

Si no le cabe toda la información en memoria, ORACLE lo divide en piezas pequeñas llamadas “runs”y lo envía a disco a una zona temporal. Cuando la ordenación de las piezas termina, fusiona dichaspiezas y muestra el resultado. Si ocurre esto, el espacio reservado para el área de ordenación puededecrecer para liberar memoria, hasta el límite impuesto en el parámetro de inicialización (en bytes)SORT_AREA_RETAINED_SIZE. Su valor por defecto es el mismo que SORT_AREA_SIZE y su valormínimo es 0.

2.2.5. Memoria Virtual

En algunos sistemas operativos Oracle utiliza la memoria virtual. La memoria virtual es unacaracterística de algunos sistemas operativos que aparentan tener más memoria de la que enrealidad poseen, y mayor flexibilidad para utilizar la memoria principal. Esta memoria simula memoriacombinando la memoria Real o principal y la memoria secundaria (generalmente es espacio endisco).

Normalmente, la memoria virtual se utiliza para almacenar código de aplicaciones. En el caso de laSGA, es preferible que se mantenga en memoria principal o real.

Page 16: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 16 de 127

2.3. Estructura de Procesos Background

A continuación vamos a analizar los distintos tipos de procesos background (procesos de Oracle) quepuede haber en una base de datos y su función. Los tipos de procesos existentes son:

DBWR. DataBase Writer. LGWR. LoG WRiter. CHPT. ChecKPoinT process. SMON. System Monitos. PMON. Process MONitor. ARCH. ARCHiver. RECO. RECOver process. LCKn. Lock process. Dnnn. Dispatcher. Snnn. Shared Server.

Cada proceso interacciona con distintas partes de la base de datos.

FLU

JOE

NM

EM

OR

IA

FLU

JOE

ND

ISC

O

2.3.1.1. DBWR. DataBase WRiter

Es el proceso encargado de escribir los buffers de datos menos recientemente utilizados de la SGA, alos ficheros de datos en disco. El DBWR se encarga de que los procesos de usuario puedanencontrar siempre buffers libres, y que los datos que más se utilicen estén siempre en memoria. Estolo consigue mediante al algoritmo LRU.

Las condiciones en las que el DBWR escribe a disco son las siguientes:

Cuando ocurre un punto de comprobación o checkpoint.

Page 17: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 17 de 127

Cuando un proceso servidor mueve un buffer a la lista de buffers ”sucios” y descubre que nopuede hacerlo porque la lista ha llegado a su longitud máxima. La longitud de la lista estálimitada a la mitad del valor del parámetro de inicialización DB_BLOCK_WRITE_BATCH.

Cuando el proceso de usuario busca un buffer libre y no lo encuentra. Cuando ocurre un tiempo de espera excedido (timeout), por inactividad. Esto ocurre cada tres

segundos.

El acontecimiento llamado punto de comprobación (checkpoint) ocurre cuando el proceso DBWRescribe todos los buffers (validados y no validados) de la SGA a disco, y se implementan por lassiguientes razones:

Asegurar que los datos en memoria y que ya están en los ficheros de Redo Log se escriben adisco.

Asegurar que si ocurre un fallo de CPU o similar, la recuperación partiendo de los ficheros deRedo Log se realiza a partir de dicho punto de comprobación.

Un punto de comprobación ocurre cuando:

Se llena el Redo Log activo. Es obligatorio para no perder información. Se llega al límite establecido por el parámetro LOG_CHECKPOINT_INTERVAL, que fuerza

un checkpoint basándose en el número de buffers modificados desde el último punto decomprobación.

Se llega al límite establecido por el parámetro LOG_CHECKPOINT_TIMEOUT, que fuerza aun punto de comprobación cada “n” segundos. Se utiliza cuando los ficheros de Redo Logson grandes y hay pocas transacciones o son pequeñas.

Cuando comienza un backup online sobre un tablespace. Cuando un administrador pone un tablespace offline, de forma NORMAL o TEMPORARY. En

este caso el checkpoint se produce sólo sobre los buffers pertenecientes a el fichero/s que sepone offline.

Cuando se produce un SHUTDOWN de la base de datos con las opciones NORMAL oIMMEDIATE.

Cuando el administrador fuerza un checkpoint con el comando ALTER SYSTEM.

2.3.1.2. LGWR. LoG WRiter

Es el proceso que se encarga de escribir de los buffers de Redo Log, a los ficheros de Redo Log endisco. El LGWR escribe:

Un registro de commit, cada vez que un proceso de usuario valida una transacción. Buffers de Redo Log cada tres segundos. Los buffers de Redo Log cuando se encuentran a un tercio de su capacidad. Buffers de Redo Log cada vez que el DBWR escribe buffers modificados a disco.

El proceso LGWR puede escribir a un único fichero de Redo Log (actual), o a varios si estáconfigurado en espejo. Si uno de los ficheros espejo se encuentra dañado o está inaccesible, elLGWR genera un fichero de traza con la señal ALERT. Si todos los espejos de un grupo estáninaccesibles o dañados, el proceso LGWR falla.

Si el proceso CKPT no está activo, el LGWR es también el responsable de registrar los puntos decomprobación (checkpoints) que se producen y marcar las cabeceras de los ficheros de datos conesta información.

Page 18: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 18 de 127

2.3.1.3. CKPT. CheKPoinT Process.

Cada vez que se produce un punto de comprobación, las cabeceras de todos los ficheros de datosdeben actualizarse con esta información. Normalmente, este trabajo lo realiza el LGWR. En algunoscasos, este trabajo extra puede degradar el rendimiento del sistema (cuando hay muchos ficherosasociados a tablespaces).

En estos casos, puede ser conveniente activar el proceso CKPT, para separa el trabajo de escriturade Redo Log, y el trabajo de registro de comprobación. El proceso CKPT no escribe buffers de datosa disco, esta operación la realiza siempre el DBWR.

Para activar el proceso CKPT, es necesario indicar en el fichero de inicialización de la base de datos(init.ora) el parámetro CHECKPOINT_PROCESS = TRUE (por defecto FALSE)

2.3.1.4. SMON. System MONitor

Este proceso es el encargado de recuperar los procesos y la memoria (la instance) en el momento delarranque de la B.D. También es el encargado de limpiar segmentos temporales que no se utilizan yde unificar extensiones libres contiguas, para conseguir mayores bloques de espacio libre disponible.

SMON “se despierta” de forma regular para comprobar si se le necesita.

2.3.1.5. PMON. Process MONitor

Es el proceso encargado de recuperar procesos de usuarios que fallan. También es el procesoencargado de liberar recursos adquiridos por los procesos de usuario. Por ejemplo, se encarga deliberar bloqueos mutuos.

El PMON comprueba el status de los procesos del dispatcher y de los servidores compartidos, y losrestaura si están inhibidos (sólo ORACLE puede matarles).

Al igual que el SMON, el PMON se despierta de manera regular para comprobar si es necesario, o sies requerido por algún proceso de usuario.

2.3.1.6. RECO. RECOverer Process

Este proceso se utiliza para resolver fallos que afecten a transacciones distribuidas. El proceso RECOde un nodo se conecta automáticamente a otra base de datos en la que se produce una transaccióndistribuida dudosa. Cuando la conexión entre los nodos involucrados se restablece, el proceso RECOautomáticamente resuelve todas las transacciones que no han podido realizarse anteriormente.

Si el proceso RECO intenta establecer comunicación con un nodo remoto, y el nodo remoto no estádisponible, o la conexión por la red no puede establecerse, el proceso RECO se queda en espera eintenta conectarse de nuevo tras un intervalo de tiempo. Cada vez que hay un nuevo intento deconexión, el proceso RECO aumenta el intervalo de espera.

El proceso RECO está presente, si en el parámetro DISTRIBUTED_TRANSACTIONS es mayor de 0.Por defecto, sí arranca.

2.3.1.7. ARCH. ARCHiver

El proceso ARCH copia, cuando se han llenado los redo logs online, a el dispositivo cinta o discodesignado. El proceso ARCH sólo está activo si la base de datos está en modo ARCHIVELOG y elarchivado automático está activo.

Page 19: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 19 de 127

2.3.1.8. LOCKn. LOCK Process

Activo solamente cuando se utiliza la opción Parallel Server. Entonces, aparecen n procesos Lock (deLCK0, ... LCK9) que se utilizan para bloquear recursos entre instances.

2.3.1.9. Dnnn. Dispatcher Process

Sólo aparece en la configuración multi-threaded. Es el encargado de recoger las peticiones que leenvían los LISTENER de los usuarios, y colocarlas en una cola en la SGA, para que la resuelva unproceso servidor compartido. Una vez que el servidor resuelve la petición, envía los resultados a otracola de respuestas en la SGA, de donde el dispatcher devolverá la información al usuario.

Su número puede modificarse.

2.3.1.10. Snnn. Servidor Compartido.

Son los procesos, que en entornos multi-threaded, resuelven las peticiones pendientes en las colasen la SGA, y devuelve los resultados a otras colas de respuestas, también en SGA.

Su número puede modificarse.

2.4. Gestión de procesos servidor-usuario

Una instancia tiene dos tipos de procesos: Procesos servidores y Procesos de usuario oherramientas. En un entorno multi-usuario la configuración y la conexión entre procesos y códigopuede sufrir variaciones:

La conexión entre aplicación o proceso de usuario y el servidor o código Oracle, se establecemediante un único proceso. Es la llamada configuración de Tarea Simple (SINGLE TASK).

La conexión entre aplicación o proceso de usuario y el servidor o código Oracle, se establecemediante dos procesos (el de usuario y el servidor). Es la llamada configuración de TareaDoble (TWO TASK).

El proceso de usuario y el proceso servidor se ejecutan por separado, pero cada proceso deusuario NO genera un proceso servidor dedicado a atender su petición, sino que hay unaserie de SERVIDORES COMPARTIDOS para todas las conexiones de usuarios. Es lallamada configuración Multi-Threaded.

2.4.1. Arquitectura Multi-Threaded

Esta arquitectura permite soportar más usuarios con los mismos recursos del sistema operativo.Permite que varios usuarios se conecten a la base de datos sin generar un proceso servidordedicado, sino a través de un servidor compartido.

1) El proceso listener detecta una conexión multi-threaded y lo envía a un proceso DISPATCHER.2) El proceso dispatcher coloca la petición en una cola en la SGA, para que la resuelva un proceso

servidor compartido.3) El servidor compartido disponible resuelve la petición y la deja en una cola de respuestas en la

SGA.4) De la cola de respuestas en la SGA, el proceso dispatcher devuelve la información solicitada al

usuario.

Page 20: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 20 de 127

El número de procesos servidores compartidos se ajusta de manera dinámica si Oracle detectaesperas. El número de dispatchers (y el de servidores compartidos) puede aumentarse utilizandoSQL*DBA o el comando ALTER SYSTEM. En algunos casos no es posible utilizar una conexiónmulti-threaded, como en el arranque, en la parada o en recuperaciones ante fallos. En estos casoshace falta un proceso servidor dedicado.

Para configurar una arquitectura multi-threaded hacen falta los siguientes procesos:

Un proceso oyente (listener), que conecta la petición del usuario con el dispatcher. Uno o varios procesos dispatcher. Uno o varios procesos servidores.

Los parámetros de inicialización (init.ora) que afectan a la configuración son:

MTS_SERVERS = números de servidores compartidos que arrancan con la B.D. MTS_MAX_SERVERS = número máximo de servidores compartidos que pueden ejecutarse

simultáneamente. MTS_DISPATCHERS = número de procesos dispatcher que arrancan con la B.D. MTS_MAX_DISPATCHERS = número máximo de dispatchers que pueden ejecutarse

simultáneamente. MTS_LISTENER = configuración del proceso oyente.

En la configuración multi-threaded, la información de la sesión del usuario se encuentra en la SGA.

Page 21: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 21 de 127

2.5. Funcionamiento Interno del Gestor

Describiremos las distintas operaciones que pueden realizar los usuarios y cómo esto afecta alfuncionamiento y a la arquitectura del gestor.

- SELECT .- Se comprueba que la información se encuentra en el buffer de datos en laSGA. Si los buffers no están en la SGA, se leen desde el disco y se llevan a memoria,utilizando lectura multibloque. Si el bloque de datos está siendo modificado, se debereconstruir la información basándose en los segmentos de rollback.

- UPDATE.- Se comprueba que la información se encuentra en el grupo de buffers de labase de datos en la SGA, y si no están se leen desde el disco a SGA mediante lecturamulti-bloque. Se bloquea el registro si es necesario. Se comprueba si la información derollback se encuentra en la SGA. Si no es así, se lee la información del segmento derollback en disco y se lleva a memoria. A continuación, el valor del dato antes de sermodificado se escribe en los buffers de rollback situados en el área de buffers de datosde la SGA. También se copia el valor del dato antiguo sobre los buffers de redo log. Seescribe el nuevo valor del dato sobre los buffers de datos en la SGA. También se escribeel nuevo valor del dato en los buffers de Redo log.

- COMMIT.- Se escribe un registro de commit en los buffers de Redo Log. Se obliga alproceso Log Writer a escribir la información desde los buffers de redo log a los ficherosde Redo Log en disco. Se notifica al usuario que la transacción se ha validado. A estaoperación se la denomina validación rápida o “fast commit”. Los registros de múltiplestransacciones que pidan validación a la vez, se las agrupa en una sola entrada/salida.

La utilización del “fast commit” se realiza por ser más eficiente que la escritura en ficheros de datos.La información se graba en Redo Log para asegurar que los datos están REALMENTE escritos enalgún sitio. La grabación REAL es “diferida”. La grabación diferida consiste en:

- Los buffers del grupo de buffers de la base de datos (datos y rollback) menosrecientemente utilizados, se escriben a disco (a los ficheros asociados a los tablespaces)para dejar sitio en memoria para nueva información.

- Se escribe siempre primero el segmento de rollback a disco y luego los datos. Lagrabación es multi-bloque.

- Este tipo de grabaciones consigue que varias modificaciones se realicen en un mismobuffer antes de escribirse físicamente a disco.

Page 22: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 22 de 127

3. Estructura de base de datos en DiscoLos siguientes ficheros en disco forman parte de una base de datos ORACLE:

Ficheros de Inicialización. Ficheros de Control. Ficheros de contraseñas. Ficheros de datos (Tablespaces).

o Datos de Usuarioo Temporaleso Rollback / Undotabs

Ficheros de Redo Log. Ficheros de Archive Log

3.1. Ficheros de Inicialización

La base de datos Oracle necesita para su creación y posterior funcionamiento un fichero deinicialización donde se configuran algunos parámetros básicos para su funcionamiento (a lo largo deldocumento nos referiremos al fichero init.ora cuando hagamos referencia a este fichero deinicialización)

Oracle tiene definidos unos valores por defecto para la mayor parte de sus parámetros deconfiguración. Si queremos utilizar un valor distinto desde el momento del arranque debemosincluirlos en este ficheros de Inicialización.

Hasta la versión 8 existía un fichero de inicialización (init.ora) modificable desde cualquier editor. Pornorma se denominaba init<SID>.ora y se situaba en el directorio ORACLE_HOME/dbs. Este ficheroera conocido como pfile.

A partir de la versión 9 se recomienda el uso de un nuevo fichero que sólo se puede modificarmediante comandos de Oracle. Este fichero se denomina spfile y se guarda en el mismo directoriocon el formado spfile<SID>.ora.

Durante el proceso de creación de la base de datos se utiliza un fichero pfile. Una vez creada la basede datos se debe generar el fichero spfile:

SQL> CREATE SPFILE=/ora/dbs/spfileDWH.ora FROM PFILE=/ora/dbs/pfileDWH.ora

También podemos recrear el pfile a partir del spfile. De hecho es aconsejable que cada vez quemodifiquemos algún parámetro en el spfile actualicemos automáticamente el fichero pfile:En el siguiente ejemplo modificamos parámetros de la base de datos forzándolos para que actualiceel spfile, inmediatamente después regeneramos el fichero pfile.

SQL> ALTER SYSTEM SET DB_CACHE_SIZE=117440512 SCOPE=SPFILE;SQL> ALTER SYSTEM SET PGA_AGGREGATE_TARGET=251624 SCOPE=SPFILE;

SQL> CREATE PFILE=/ora/dbs/pfileDWH.ora FROM SPFILE=/ora/dbs/spfileDWH.ora

En el proceso de arranque de la base de datos podemos indicarle si el arranque es desde el ficheropfile (obligatorio la primera vez) o desde el spfile (a partir de la primera vez lo hara desde aquí si nose indica nada) Por ejemplo:

Page 23: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 23 de 127

SQL> STARTUP MOUNT PFILE=/oracle9/dbs/pfileDWH.ora

En el siguiente cuadro mostramos un ejemplo de fichero pfile. Entre los datos más importantes seincluye el nombre de la Instancia y la localización de los ficheros de control (ver más adelante), y losde trazas, así como el área de rollback (ver más adelante)

/oracle920/dbs/initPREPSBL7.ora#-------------------------------------------------------------db_name = PREPSBL7instance_name = PREPSBL7service_names = PREPSBL7db_block_size = 8192db_files = 1024

optimizer_features_enable = 8.1.7compatible = "9.2.0"

control_files = ("/oradata9/PREPSBL7/system/ctl01PREPSBL7.ctl","/oradata9/PREPSBL7/datos/ctl02PREPSBL7.ctl","/oradata9/PREPSBL7/indices/ctl03PREPSBL7.ctl")

background_dump_dest = /oradata9/PREPSBL7/system/bdumpcore_dump_dest = /oradata9/PREPSBL7/system/cdumpuser_dump_dest = /oradata9/PREPSBL7/system/udumpmax_dump_file_size = 10000

log_archive_start = falselog_archive_dest_1 = "location=/oradata9/arch1"log_archive_format = PREPSBL7_arch_%t_%s.arc

log_checkpoint_interval = 1000000000log_checkpoint_timeout = 3600

#-------------------------------------------------------------audit_trail = trueremote_login_passwordfile = nonemax_enabled_roles = 30#-------------------------------------------------------------sql_trace = FALSEtimed_statistics = trueprocesses = 300session_cached_cursors = 50open_cursors = 1500optimizer_mode = RULEopen_links = 4

db_cache_size=419430400shared_pool_size = 367001600large_pool_size = 157286400log_buffer = 1153433sort_area_size = 2097152sort_area_retained_size = 4194304

_DB_BLOCK_HASH_BUCKETS = 63920nls_sort=binarydb_file_multiblock_read_count = 8

pga_aggregate_target = 209715200workarea_size_policy=AUTOparallel_automatic_tuning=FALSEdb_writer_processes=3dbwr_io_slaves=0

undo_management = autoundo_tablespace = undotbs

Page 24: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 24 de 127

3.2. Ficheros de Control

Es un fichero binario (oracle.ctl) asociado a una única BD que se crea al crear la BD y se abre cuando searranca una instancia. No es editable y debe estar siempre accesible ya que Oracle lo actualizaconstantemente. Los nombres de los ficheros de control están especificados en el parámetroCONTROL_FILES del fichero de inicialización.

Guarda, entre otras cosas, información de arranque y parada, información sobre nombres de losficheros asociados a la B.D., nombre y fecha de creación de la B.D., la secuencia de fichero de RedoLog actual (ver más adelante), información sobre puntos de comprobación (checkpoint), etc. Estaúltima información la registra normalmente en el fichero de control los procesos background CKPT oLGWR.

Se deben tener, al menos, dos copias del fichero de control, cada una almacenada en dos discosdistintos. Oracle mantiene sincronizados de forma automática cada una de las copias de estosficheros. Si un fichero de control se daña, la base de datos se para. En el caso de tener una copia delfichero de control, podemos arrancarla con esta copia, de otra manera, se hace imposible elarranque.

Con la base de datos abierta se pueden realizar copias de los ficheros de control.

En formato binario:

SQL > ALTER DATABASE BACKUP CONTROLFILE TO ‘<fichero>’;

En fomato texto guardado en el directorio udump (ver más adelante):

SQL > ALTER DATABASE BACKUP CONTROLFILE TO TRACE;

Este ultimo caso es conveniente ya que con podríamos necesitar la información contenida en elfichero de control (parámetros, nombres de los ficheros de control y de datos, etc) en caso derecuperación de una base de datos (ver manual sobre copia y restauración de Oracle)

3.2.1. Añadir nuevos ficheros de control

Si queremos añadir nuevos ficheros de control para nuestra base de datos debemos seguir lossiguientes pasos:

1. Indicar al fichero de inicialización la ruta del nuevo fichero de control. Si es spfile:

SQL > ALTER SYSTEM SET CONTROL FILES=’ruta/nombre.ctl’ SCOPE=SPFILE; Si es pfile:

Se modifica el fichero con un editor para añadir la nueva ruta.2. Si la base de datos está abierta, cerrarla.3. Se hace una copia física (desde sistema operativo) de uno de los antiguos al nuevo.4. Arrancar la base de datos.

Page 25: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 25 de 127

3.3. Ficheros de datos (Tablespaces)

Como su nombre indica los ficheros de datos serán ficheros de sistema operativo en los que Oraclealmacenará datos. Pueden ser datos de usuario (usuarios de aplicación o system), temporales (paraprocesos de ordenación) o de consistencia (rollback/undotabs).

Los ficheros de datos se agrupan en unidades lógicas denominadas Tablespaces. En una base dedatos Oracle tiene que existir como mínimo un tablespace (system) que contiene la información deldenominado diccionario de datos de Oracle (ver más adelante) Por tanto tendrá que existir comomínimo un fichero de datos. El tablespace system siempre existe y se generará al realizar la creaciónde la base de datos. Normalmente durante el proceso de creación inicial se generaran otrostablespaces adicionales (TEMP, RBS, TOOLS, etc.) independientemente de los tablespaces quealmacenaran la información de los usuarios.

Cada tablespace podrá estar compuesto por uno o más ficheros de datos. La suma de la capacidadde los ficheros asociados a un tablespace es el total de su capacidad de almacenamiento, mientrasque la suma de todos los ficheros asociados a los tablespaces indica la capacidad de la Base deDatos.

El número máximo de ficheros de datos que puede haber, viene limitado por el parámetro de creaciónde la B.D. MAXDATAFILES. Es dependiente del S.O. y puede modificarse con CREATECONTROLFILE.

Al tratarse de una unidad lógica normalmente se utiliza como forma de agrupar la informaciónasociada a una aplicación para simplificar las operaciones de administración de la Base de Datos. Eshabitual diferencias las estructuras de datos y de índices en tablespaces diferentes.

La estructura lógica en tablespace nos permite una mejor gestión y distribución de la informaciónalmacenada por la base de datos.

Se puede diferenciar en tres grupos principales de tablespaces según los datos almacenados en losficheros de datos asociados (datafiles)

Tablespaces de datos de usuario y system. Tablespaces para datos temporales (ordenaciones) Tablespaces de Rollback/Undotabs (para mantener la integridad de la información).

Entre las tablas del diccionario de datos (ver más adelante) asociadas a los tablespaces cabendestacar las siguientes:

TABLA CONTENIDODBA_TABLESPACES Descripción de todos los tablespaces de la base de datos

DBA_DATA_FILES Información acerca de los ficheros del sistema operativoasociados a los tablespaces de la base de datos

USER_TS_QUOTASDBA_TS_QUOTAS

Ambas contienen información sobre las cuotas de espaciodefinidas para el usuario USER_xxx que realiza la consulta,o para todos los usuarios de la base de datos DBA_xxx

La reserva de espacio realizada por los tablespaces pude seguir dos métodos diferentes. Cuando secrea un tablespace se decide cual de los sistemas va a seguir siendo un valor que no puede sercambiado posteriormente.

Tablespaces gestionados localmente

Page 26: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 26 de 127

Es la opción por defecto de Oracle 9. En este caso los tablespaces mantienen una estructura debitmap en cada datafile donde ser guarda una lista de los bloques usados y libres del datafile. Cuandouna extensión es reservada o liberada Oracle cambia el valor del bitmap para indicar el nuevo estadodel bloque. Estos cambios no generan procesos de rollback ya que no suponen la actualización deninguna tabla en el diccionario de datos.

Esta forma de gestión tiene ciertas ventajas sobre la gestión por diccionario:

- La gestión local optimiza el uso de bloques adjuntos lo que evita la fragmentación dentro deldatafile.

- La gestión local permite una mejor utilización del espacio de los tablespaces.

El tamaño de las extensiones de los tablespaces manejados localmente pueden ser determinadasautomáticamente por el sistema. Alternativamente se puede definir que todas las extensiones tenganel mismo tamaño anulando las opciones de almacenamiento de los objetos individuales.

Tablespaces gestionados por diccionario

En este caso Oracle utiliza una serie de tablas del diccionario de datos para gestionar la informaciónsobre las extensiones libres y usadas.

3.3.1. Tablespaces de System

Cada base de datos Oracle contine un tablespace denominado SYSTEM que siempre está onlinecuando la base de datos está abierta. En este tablespace Oracle guarda las tablas del diccionario dedatos para toda la base de datos, estas tablas se crean durante el proceso de creación de base dedatos mediante la ejecución de scripts predefinidos de Oracle.

En este tablespace se guardan tanto las tablas utilizadas por Oracle como las vistas que el gestorcrea para el uso por parte de los usuarios (preferentemente el usuario system). Podemos diferenciasentre:

- Dinámicas.- Empiezan por V$ y se actualizan continuamente.- Estáticas.- Se actualizan en el arranque de la base de datos o tras la ejecución de ciertas

sentencias.

3.3.2. Tablespaces de datos de usuario

La información de los usuarios se almacenará en tablespaces definidos especialmente para ello. Noes conveniente usar el tablespace de system para el almacenamiento de información de usuario.

3.3.2.1. Crear un tablespace

El comando SQL para la creación de nuevos tablespaces es el siguiente:

SQL> CREATE TABLESPACE < tablespace > DATAFILE ‘<localización_fichero>’ SIZETAMAÑO [cláusula de almacenamiento];

Un ejemplo sería:

SQL> CREATE TABLESPACE almacen DATAFILe ‘/diskb2/almacen1.dbf’ SIZE 2m;

En el momento de la creación del tablespace se le debe indicar el directorio, nombre y el tamaño delfichero entre comillas. En el ejemplo, tenemos el tablespace ALMACEN con un fichero de 2 Mbytesasociado y sin contenido de ningún tipo. Todavía no se han creado objetos en él. La cláusula de

Page 27: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 27 de 127

almacenamiento permite especificar los valores sobre la gestión del espacio por parte de Oracle encaso de que no hayamos definido que lo gestione de forma automática el propio Oracle.

Cuando creamos un tablespace gestionado localmente podemos utilizar la clausula SEGMENTSPACE MANAGEMENT para indicar como queremos que maneje los segmentos libres y usados.Podemos escoger entre:

AUTO.- En este caso maneja la información mediante el uso de bitmaps. Un mayor o menorespacio disponible en un bloque de datos es reflejado en el bitmap. Esto permite a Oracle manejar elespacio libre de torma más automática.

MANUAL.- Esta opción le indica a Oracle que use una lista de espacio libre. Son listas debloques que tienen espacio libre para la inserción de filas. Es el valor por defecto.

En el siguiente ejemplo creamos un tablespace gestionado localmente y de forma automática.

SQL> CREATE TABLESPACE prueba LOGGINGDATAFILE '/oradata9/DWHDESA/datos/prueba1.dbf' SIZE 500MEXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

En el siguiente indicados que el espacio de los segmentos va a ser igual para todos los objetos (eneste caso 1024Kb)

SQL> CREATE TABLESPACE prueba LOGGINGDATAFILE '/oradata9/DWHDESA/datos/prueba1.dbf' SIZE 500MEXTENT MANAGEMENT LOCAL UNIFORM SIZE 1024KSEGMENT SPACE MANAGEMENT AUTO;

La modificación de un tablespace puede realizarse por varios motivos, añadir ficheros, cambiar denombre a un fichero asociado, cambiar los parámetros de asignación de espacio por defecto, ponerloonline u offline.

3.3.2.2. Ampliar el tamaño de un tablespace

Si necesitamos ampliar el tamaño de un tablespace podemos hacerlo bien añadiendo un nuevofichero al mismo como en el ejemplo anterior.

SQL> ALTER TABLESPACE alma ADD DATAFILE ‘/dskc/al2.dbf’ SIZE 2m [REUSE]

La opción REUSE especifica que si el fichero a añadir o a crear existe, se reutilizará para estetablespace, perdiendo su contenido anterior.

También podemos conseguir aumentando el tamaño de alguno de los ficheros existentes. En estecaso no utilizamos la sentencia “ALTER TABLESPACE” sino “ALTER DATABASE”.

Veamos un ejemplo:

SQL> ALTER DATABASEDATAFILE '/oradata9/DWHTEST/admin/dba/DWHTEST_perfstat01.dbf'RESIZE 110M;

Crecimiento dinámico de un TABLESPACE

Se puede dejar que ORACLE gestione su crecimiento de forma dinámica utilizando la cláusulaAUTOEXTEND. Esta cláusula se aplica a los ficheros físicos que corresponden al tablespace demodo individual. Es posible tener, para el mismo tablespace, ficheros con crecimiento dinámico yficheros de tamaño fijo.

Page 28: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 28 de 127

Para definir un fichero de datos asignado a un tablespace con crecimiento dinámico, en el momentode su creación debemos utilizar:

SQL> CREATE TABLESPACE < tablespace > DATAFILE ‘<fichero>’ SIZE <tamaño>AUTOEXTEND ON NEXT <tamaño> MAXSIZE <tamaño>;

La opción [ NEXT <tamaño>K|M ] indica el espacio en disco a tomar cuando sea necesaria una nuevaextensión.

La opción [ MAXSIZE tamaño K|M|UNLIMITED ] indica el tamaño permitido. Con MAXSIZEUNLIMITED no hay limitación de espacio, es la opción por defecto.

La activación o desactivación del crecimiento dinámico sobre ficheros existentes, se realiza a travésde la sentencia ALTER DATABASE. La vista del diccionario FILEXT$ informa sobre los ficheros dedatos con la característica de AUTOEXTEND activada.

3.3.2.3. Control de acceso al tablespace

Si queremos evitar el acceso a un tablespace concreto dejando el resto de la base de datos accesibletenemos varias opciones.

SQL> ALTER TABLESPACE < tablespace >OFFLINE [NORMAL | INMEDIATE | TEMPORARY] ;

Las tres opciones para poner un tablespace offline son:

Normal.- Significa que la información relativa a los datos del tablespace que se encuentre enmemoria será escrita a los ficheros. Es la opción por defecto. Esta opción NO puede utilizarsesi el disco está inaccesible o el fichero ha desaparecido.

Temporary.- Si el tablespace tiene varios ficheros asociados y alguno de ellos está accesible,escribirá parte de la información relativa al tablespace en memoria al fichero en cuestión. Laperteneciente al fichero o disco no accesible, la llevará a los ficheros de Redo Log. Pararealizar esta operación, la base de datos está en un modo especial llamado archivelog.

Immediate. Llevará TODA la información relativa al tablespace a los ficheros de REDO LOG(aunque hay ficheros asociados accesibles). Para realizar esta opción, la base de datos debeestar en el modo archivelog, siendo éste el método más drástico.

Para volver a dar acceso:

SQL> ALTER TABLESPACE < tablespace > ONLINE ;

El tablespace system no puede estar offline, porque contiene información que afecta alfuncionamiento de toda la base de datos. Sólo se encuentra offline cuando la base de datos estáparada.

Otra opción sería la de convertirlo en un tablespace de solo lectura. Cuando creamos un tablespace,siempre se crea como de escritura-lectura. Para modificarlo, usamos la sentencia:

SQL> ALTER TABLESPACE < tablespace >READ ONLY;

Este tipo de tablespace no puede ser modificado, por lo que no es necesario repetir backups.

No es posible crear o modificar tablas e índices contenidos en un tablespace de sólo lectura. Sólopodremos eliminar completamente los objetos incluidos a través de sentencias DROP.

Para restablecer la capacidad de escritura, utilizamos la sentencia:

Page 29: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 29 de 127

SQL> ALTER TABLESPACE < tablespace > READ WRITE;

3.3.2.4. Cambio de los archivos

Es posible cambiar la posición de los archivos (datafiles) que forman parte de un tablespace.

Procederemos a poner el tablespace offline:

SQL> ALTER TABLESPACE <nombre_tablespace> OFFLINE;

Después se copiara el archivo/s a su nuevo destino mediante comandos de sistema operativo. Porseguridad se recomienda realizar una copia (no un cortar) Para ello es necesario copiar (no borrar nicortar) el antiguo fichero y pegar con el nombre que queramos en el directorio deseado.

Una vez copiados los ficheros se indicará el nuevo destino desde la base de datos y activamos eltablespace.

SQL> ALTER TABLESPACE <tablespace> RENAME DATAFILE<ruta_fichero_viejo> TO <ruta_fichero_nuevo> ;

SQL> ALTER TABLESPACE < tablespace > ONLINE;

Una vez verificado el correcto funcionamiento de la nueva estructura podemos proceder a borrar losficheros originales.

3.3.2.5. Supresión de un TABLESPACE

Para eliminar un tablespace de una base de datos, primero se debe poner offline, y despuéseliminarlo. La secuencia de acciones sería:

SQL> ALTER TABLESPACE <tablespace> OFFLINE ;

SQL> DROP TABLESPACE < tablespace> [INCLUDING CONTENTS];

La opción INCLUDING CONTENTS permite eliminar un tablespace incluso si está online y tienecontenido. Si ocurre cualquiera de estas dos circunstancias y no se indica esta opción, el sistemaprovoca un error.

El gestor de base de datos ORACLE crea ficheros, pero NO los elimina a nivel se S.O. Por lo tanto,en el caso del borrado o renombrado de un tablespace, hay que combinar comandos ORACLE conlos propios del S.O. para liberar espacio o para renombrar ficheros.

3.3.2.6. Asignación de un TABLESPACE a un Usuario

Cuando un usuario crea un objeto y se omite el lugar de creación, éste se crea en el tablespace pordefecto asignado al usuario. Esta asignación la realiza el administrador en el momento de creación omodificación del usuario.

SQL> CREATE | ALTER USER <usuario> DEFAULT TABLESPACE <tablespace>;

Se pueden establecer cuotas de almacenamiento de objetos para evitar que un usuario consumademasiados recursos. Las sentencias son:

SQL> ALTER USER <usuario> QUOTA <tamaño> [UNLIMITED] ON <tablespace>;

Page 30: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 30 de 127

3.3.3. Tablespaces temporales

Un tablespace temporal sólo puede contener objetos temporales, creados y gestionados por el gestorORACLE para resolver operaciones de ordenación. Normalmente debe realizar la operación enmemoria, pero si no le cabe, la genera en disco, en estos segmentos temporales. Algunasoperaciones que pueden generar estros segmentos son:

- CREATE INDEX.- SELECT ... ORDER BY | GROUP BY | DISTINCT | UNION | INTERSECTION | MINUS.- Combinaciones no indexadas.- Algunas subconsultas.

Por ejemplo, una consulta que contiene la cláusula DISTINCT, una expresión GROUP BY y unaORDER BY, requiere tres segmentos temporales. Si la aplicación con la que trabajamos utilizafrecuentemente las operaciones indicadas arriba, el administrador debería ajustar el parámetro deinicialización de la base de datos SORT_AREA_SIZE.

Para definirlo, utilizamos el siguiente comando:

SQL> CREATE TABLESPACE <nombre> TEMPORARYDATAFILE ‘<fichero>’ SIZE <tamaño>;

La conversión de un tablespace ya creado como de tipo temporal, se realiza con la sentencia:

SQL> ALTER TABLESPACE <nombre> TEMPORARY;

Los segmentos temporales se borran cuando la operación que los ha creado finaliza.

Las características de almacenamiento de un segmento temporal son las indicadas en DEFAULTSTORAGE del tablespace en el que se crean. El tablespace por defecto de TODOS los usuarios de labase de datos es SYSTEM. Se recomienda crear uno específico con esta finalidad para disminuir laentrada/salida al tablespace SYSTEM.

Un administrador puede, con los comandos CREATE y ALTER USER y la opción TEMPORAYTABLESPACE “nombre”, asignar el tablespace donde el sistema direccionará los segmentostemporales generados por las operaciones del usuario.

SQL> ALTER USER usuario TEMPORARY TABLESPACE nombre;

3.3.4. Tablespaces de ROLLBACK/UNDOTABS

El gestor de Oracle utiliza las áreas de rollback de forma interna para almacenar la imagen de losdatos antes de ser modificados por una transacción. Permiten efectuar la restauración de lastransacciones no validadas (comando rollback). También se usan para mantener y asegurar laconsistencia en lectura. También se utilizan durante la recuperación después de fallos del proceso,CPU o disco.

A partir de la versión Oracle 9 se sustituyen los tradicionales segmentos de Rollback por los deUndotabs. La finalidad es la misma, siendo su principal diferencia la mejor gestión por parte de Oraclede los segmentos de Undotabs.

Los segmentos de rollback no están accesibles para que los usuarios o administradores de la base dedatos accedan a ellos. Sólo el gestor ORACLE puede leer y escribir en ellos. El propietario de unsegmento de rollback es siempre SYS, independientemente del usuario que haya realizado lacreación.

Page 31: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 31 de 127

ORACLE mantiene una tabla de transacciones para cada rollback segment de la base de datos. Cadatabla es una lista de todas las tracciones que utilizan el segmento de rollback asociado y las entradasrealizadas para cada cambio realizado por las transacciones.

Los segmentos de rollback escriben primero la imagen anterior del dato, antes de permitir cualquiercambio. Para cada transacción, cada cambio nuevo se agrupa con el anterior. Si se necesitadeshacer la transacción, los cambios en la lista se aplican a los bloques de datos, con el fin deconseguir restaurar la información.

Algo parecido ocurre cuando ORACLE necesita generar consistencia en lectura. Se utiliza lainformación almacenada en los segmentos de rollback desde un punto en el tiempo.

Cada vez que comienza una transacción de usuario, dicha transacción es asignada a un segmento derollback. Las transacciones son asignadas por ORACLE al primer segmento de rollback disponible,cuando se ejecuta el primer comando. Las transacciones de solo-lectura (que solo contenganconsultas) no se asignan a ningún segmento de rollback a no ser que se especifique la sentencia SETTRANSACTION READ ONLY.

El reparto de transacciones, hemos indicado que lo realiza el gestor siguiendo una fórmula. Si sedesea asignar una transacción a un segmento de rollback, puede indicarse con la sentencia SETTRANSACTION USE ROLLBACK SEGMENT.

Una transacción escribe datos en un ÚNICO segmento de rollback, pero puede estar en más de unaextensión de ese mismo segmento. Para crecer el segmento de rollback utiliza la “técnica del anillo”.Cuando una transacción se valida (commit), la información del segmento rollback se versiona, perono se destruye de forma inmediata. La información permanece en el segmento de rollback para crearvistas de consistencia en lecturas con datos de consultas que hayan empezado antes de que sevalide la transacción.

Para asegurar que la información contenida en los segmentos de rollback esté disponible el mayortiempo posible para las vistas mencionadas, las extensiones de los segmentos se escriben demanera secuencial. Cuando la última extensión de un segmento comienza a estar llena, ORACLEcontinúa escribiendo por la primera extensión del segmento.

3.3.4.1. Gestión de undotabs (Oracle9)

A partir de la versión 9 los datos de UNDO son gestionados mediante un UNDO Tablespace. Seránecesario por tanto reservar un tablespace por instancia con suficiente espacio dependiendo de lacarga de la misma. El servidor Oracle se encargará de gestionar automaticamente el mantenimientode los "undo data" a partir del tablespace UNDO.

Los segmentos creatos siguen la siguiente denominación

_SYSSMUn$ (_SYSSMU1$, _SYSSMU2$ ...)

Es necesario indicar dos parámetros en el fichero de inicialización:

UNDO_MANAGEMENTUNDO_TABLESPACE

Si sólo existe un tablespace UNDO en la base de datos el UNDO_MANAGEMENT debe ser puesto aAUTO.

El UNDO_MANAGEMENT determina el modo de undo de la base de datos. Puede ser AUTO oMANUAL y debe ser indicado en el fichero de inicialización ya que no puede ser cambiado de formadinámica una vez que la base de datos está arrancada.

Page 32: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 32 de 127

En modo AUTO la base de datos requiere de un tablespace UNDO. EN modo MANUAL (valor pordefecto) se puede gestionar los undo segments como en la versiones previas de Oracle.

El parámetro UNDO_TABLESPACE indica el nombre del tablespace a ser usado. Este parámetropuede ser indicado en el fichero de inicialización o alterado de forma dinámica usando el comandoALTER SYSTEM.

SQL> ALTER SYSTEM SET UNDO_TABLESPACE = UNDOTBS;

El parámetro UNDO_RETENTION controla el tiempo que se mantiene la información en el área deUNDO para la consistencia de lecturas. El retener los datos mucho tiempo en el UNDO tablespacepuede requerir un area muy grande. El valor se indica en segundos y puede ser modificado de formadinámica con el comando ALTER SYSTEM. Por ejemplo, si queremos indicar una retención de 15minutos:

SQL> ALTER SYSTEM SET UNDO_RETENTION=900;

Si el tamaño del tablespace UNDO es demasiado pequeño puede ser que los datos no se conserventodo el tiempo indicado en el parámetro anterior.

Gestión de los tablespaces de UNDO

Se puede crear el tablespace UNDO en la creación inicial de la base de datos o con posterioridad.

SQL> CREATE DATABASE XXXX.....UNDO TABLESPACE UNDO1 DATAFILE '/RUTA/UNDO1.DBF'SIZE 100M AUTOEXTEND ON;

SQL> CREATE UNDO TABLESPACE UNDO2DATAFILE '/RUTA/UNDO2.DBF' SIZE 100M;

En la base de datos puede existir más de un tablespace de UNDO pero sólo uno puede estar activo.

Si durante la creación de la base de datos el parámetro UNDO_MANAGEMENT esta a AUTO y no seincluye la creación del tablespace UNDO el servidor crea un UNDO tablespace con el nombreSYS_UNDOTBS. El fichero por defecto se denominará ‘dbu1<oracle_sid.dbf' y se localizará en$ORACLE_HOME/dbs con un tamaño dependiente del sistema operativo y con la opciónAUTOEXTEND a ON.

Como en otros tablespaces Oracle permite diversas modificaciones mediante el comando ALTERTABLESPACE.

- Añadir nuevos datafiles.- Renombrar.- Marcar para principio/fin de backup.- Etc.

Si tenemos varios tablespaces de undo podemos cambiar de uno a otro (recordemos que sólo puedeestar uno activo)

SQL> ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS2;

Borrado de un tablespace de UNDO

Podemos borrar un tablespace de undo mediante el comando DROP.

SQL> DROP TABLESPAE UNDOTBS2;

Page 33: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 33 de 127

Para realizar el borrado dicho tablespace no puede estar activo por lo que debemos:

- Activar otro tablespace de UNDO.- Verificar que todas las transacciones almacenadas en el tablespace que queremos borrar

han sido completadas.

Para verificar que todas las transacciones han sido completadas contamos con la siguiente consulta:

SQL> SELECT A.NAME,B.STATUSFROM V$ROLLNAME A, V$ROLLSTAT BWHERE A.NAME IN (SELECT SEGMENT_NAME FROM DBA_SEGMENTS

WHERE TABLESPACE_NAME = 'UNDOTBS2')AND A.USN = B.USN;

NAME STATUS----------------------- ----------------------SYSSMU4$ PENDING OFFLINE

Cuando la consulta no devuelva ninguna transacción entonces podremos proceder al borrado deltablespace.

Si alguna transacción ha quedado pendiente y por tanto no dispone del area de UNDO definida serecibe el siguiente error:

ORA-1555 snapshot too old.

Determinar el tamaño óptimo de tablespace UNDO

Para calcular el tamaño del UNDO tablespace debemos contar con tres datos:

- UNDO_RETENTION en segundos (UR)- Número de bloques de uno data generados por segundo (UPS)- Overhead varies basado en el db_block size (DBS)

A partir de esos tres valores podemos calcular el tamaño mediante la siguiente fórmula::

UNDOSPACE= [ UR * (UPS * DBS) ] + (DBS * 24)

Los valores UR y DBS puede ser conseguidos a partir del fichero de inicialización. El tercero (UPS) seobtendrá mediante una consulta a la base de datos. El número de bloques UNdo generados porsegundo pueden ser obtenidos a partir de la tabla de estadísticas de UNDO (V$UNDOSTAT)

La siguiente formula calcula el numero total de bloques generados y divide el valor por el tiempoanalizado en segundos.

SQL> SELECT (SUM(UNDOBLKS) / SUM ((END_TIME - BEGIN_TIME) * 86400)) UPSFROM V$UNDOSTAT;

UPS----------------.000058788

Page 34: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 34 de 127

La siguiente consulta nos devuelve el tamaño necesario para el tablespace UNDO.

SQL> SELECT (UR * (UPS * DBS )) + (DBS * 24) AS "BYTES"FROM (SELECT VALUE AS URFROM V$PARAMETERWHERE NAME = 'UNDO_RETENTION'),(SELECT (SUM(UNDOBLKS)/SUM ((END_TIME - BEGIN_TIME ) * 86400))AS UPSFROM V$UNDOSTAT),(SELECT VALUE AS DBSFROM V$PARAMETERWHERE NAME = 'DB_BLOCK_SIZE');

BYTES----------394063.03

Para obtener los resultados más fiables se debería realizar la consulta durante un periodo de cargaelevada en el sistema.

Uso de cuotas

Se pueden definir cuotas de uso mediante el el valor UNDO_POOL. Cuando un grupo excede eselímite se envía un error no se pueden realizar nuevas transacciones hasta que se completan ointerrumpen las actuales.

El error sería:

ORA-30027: "Undo quota violation - failed to get %s (bytes)"Cause: The amount of undo assigned to the consumer group

of this session has been exceeded.Action: Ask DBA to increase undo quita, or wait until other

transactions commit before proceeding.

Información sobre los segmentos de UNDO

Contamos con la vista del diccionario

DBA_ROLLBACK_SEGS

SQL> SELECT SEGMENT_NAME,OWNER,TABLESPACE_NAME,STATUSFROM DBA_ROLLBACK_SEGS;

SEGMENT_NAME OWNER TABLESPACE_NAME STATUS------------------------ ------ ---------------------------------------------------- -----------SYSTEM SYS SYSTEM ONLINE_SYSSMU1$ PUBLIC UNDOTBS1 ONLINE_SYSSMU2$ PUBLIC UNDOTBS1 ONLINE_SYSSMU3$ PUBLIC UNDOTBS1 ONLINE_SYSSMU4$ PUBLIC UNDOTBS1 ONLINE_SYSSMU5$ PUBLIC UNDOTBS1 ONLINE

La información sobre los segmentos offline sólo puede obtenerse con esta tabla. La vista dinámicasque veremos a continuación sólo dan información sobre segmentos online.

V$ROLLNAME V$ROLLSTATV$UNDOSTAT V$SESSIONV$TRANSACTION

Page 35: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 35 de 127

Mediante la unión de las vistas V$ROLLNAME y V$ROLLSTAT podemos otener estadísticas sobrelos segmentos de UNDO actualmente usados en la instancia.

SQL> SELECT N.NAME, S.EXTENTS, S.RSSIZE, S.HWMSIZE,S.XACTS, S.STATUSFROM V$ROLLNAME N, V$ROLLSTAT SWHERE N.USN = S.USN;

NAME EXTENTS RSSIZE HWMSIZE XACTS STATUS--------------------------------------------------------------------------------------------------SYSTEM 7 442368 442368 0 ONLINE_SYSSMU1$ 3 1163264 1163264 0 ONLINE_SYSSMU2$ 3 1163264 1163264 0 ONLINE_SYSSMU3$ 3 1163264 1163264 0 ONLINE_SYSSMU4$ 2 114688 114688 0 ONLINE_SYSSMU5$ 2 114688 114688 0 ONLINE

Mediante las vistas V$TRANSACTION y V$SESSION podemos revisar el uso de los segmentos deundo de las transacciones activas.

SQL> SELECT S.UERNAME, T.XIDUSN, T.UBAFIL,T.UBABLK, T.USED_UBLKFROM W$SESSION S, V$TRANSACTION TWHERE S.SADDR = T.SES_ADDR;

USERNAME XIDUSN UBAFILUBABLK USER_UBLK----------- ------- ------ ------ ---------HR 2 2 5005 1

3.3.4.2. Gestión de un Segmento de ROLLBACK (Oracle 8)

La creación se realiza mediante el siguiente comando:

SQL> CREATE ROLLBACK SEGMENT nombre_segmentoTABLESPACE nombre_tablespaceSTORAGE ( INITIAL x NEXT x MINEXTENTS x MAXEXTENTS x OPTIMAL x );

Si no se especifica la opción TABLESPACE el segmento de rollback se creará en el tablespaceSYSTEM (aunque este no sea el tablespace por defecto del usuario).

La información sobre los segmentos de rollback disponibles se encuentran en la vista del diccionariode datos DBA_ROLLBACK_SEGS. También se puede encontrar información adicional en las tablasde rendimiento dinámico V$ROLLNAME y V$ROLLSTAT.

Se puede necesitar modificar la estructura o el estado de un segmento de rollback (por ejemploaumentar el número máximo de extensiones). Cuando se crea un segmento adicional, éste NO estádisponible de forma inmediata. Para hacerlo accesible es necesario utilizar el comando ALTERROLLBACK SEGMENT ONLINE, comando que activa de forma dinámica el nuevo segmento.

SQL> ALTER ROLLBACK SEGMENT nombre_segmento ONLINE|OFFLINESTORAGE ( NEXT x MAXEXTENTS x OPTIMAL x );

Independientemente de lo anterior, se debe incluir el nuevo segmento de rollback en el parámetroROLLBACK_SEGMENTS del fichero de arranque de la base de datos init.ora. Si sólo realizamos laoperación anterior, cada vez que cerremos y arranquemos la base de datos, ORACLE sólo activa(pone ONLINE) los segmentos de rollback que se mencionen en dicho parámetro.

Page 36: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 36 de 127

Para eliminar un segmento de rollback, debe estar inactivo para asegurarnos de que el sistema noenvía transacciones. Así pues haremos lo siguiente:

SQL> ALTER ROLLBACK SEGMENT nombre_segmento OFFLINE;SQL> DROP ROLLBACK SEGMENT nombre_segmento;

Posteriormente deberemos eliminar el segmento de rollback borrando el parámetro de inicializaciónROLLBACK_SEGMENTS.

Tamaño Óptimo de un Segmento de ROLLBACK

El tamaño óptimo de un segmento de rollback se especifica con el comando CREATE/ALTERROLLBACK SEGMENT. Al comenzar a escribir en un segmento, éste tiene su tamaño óptimo. Si unatransacción requiere extensiones adicionales y no puede reutilizar ninguna, se la asignan. Latransación continúa escribiendo información de una extensión a otra. ORACLE compara el tamañoactual del segmento con el indicado en el parámetro OPTIMAL. Si el segmento de rollback es mayorque el especificado como óptimo, y la siguiente extensión está inactiva, ORACLE desasigna lasextensiones inactivas hasta llegar a un tamaño lo más cercano posible (nunca menor) al indicadocomo óptimo.

El gestor libera primero las extensiones más antiguas, paro mantiene el máximo tiempo posible las deconsistencia en lectura. El tamaño óptimo de un segmento de rollback NO PUEDE SER MENOR quela combinación de ( INITIAL + NEXT + NEXT + ... hasta MINEXTENTS ).

En actualizaciones de larga duración se recomienda usar segmentos de rollback con valores grandesen los parámetros de OPTIMAL y NEXT. En consultas largas, el tamaño de los parámetros anterioresdeben ser grandes. En sistemas transaccionales, o donde sean frecuentes las actualizaciones yconsultas cortas, el tamaño de estos parámetros deben ser pequeños. Para reducir el tamaño de unsegmento de rollback de forma manual, utilizamos la sentencia:

SQL> ALTER ROLLBACK SEGMENT nombre_seg SHRINK TO tamaño;

El Segmento de ROLLBACK SYSTEM

Una base de datos no puede arrancar si no puede acceder al menos a un segmento de rollback.Cada base de datos tiene un juego propio de segmentos de rollback. El segmento de rollbackSYSTEM se crea durante el proceso de instalación o durante la creación manual (CREATEDATABASE) en el tablespace SYSTEM. Sus parámetros asociados son los del tablespace donde secrea. Este segmento de rollback NO puede borrarse NUNCA.

Si en la base de datos se realizan operaciones de manipulación contra objetos que NO hayan sidocreadas en el tablespace SYSTEM y sólo se tiene el segmento de rollback SYSTEM, se produce unerror: “CANNOT USE ROLLBACK SEGMENT SYSTEM FOR NON SYSTEM TABLESPACE”. Estesegmento de rollback creado durante la instalación, sólo puede trabajar contra objetos del tablespaceSYSTEM, o utilizando comandos DDL, o DCL.

Estados de los Segmentos de ROLLBACK

El estado de un segmento de rollback determina si pueden llevarse a cabo transacciones, si requiereacciones por parte del administrador de la base de datos, etc. Los posibles estados son los querefleja la columna STATUS de la vista DBA_ROLLBACK_SEGS y pueden ser los siguientes:

- OFFLINE.- El segmento NO contiene datos de transacciones activas e impide que selleven transacciones a él.

- ONLINE.- El segmento está disponible para recibir transacciones o bien contiene datosde transacciones activas.

- NEEDS RECOVERY.- Es un segmento de rollback que contiene datos no validados y queno pueden deshacerse, porque los ficheros involucrados en la transacción están

Page 37: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 37 de 127

inaccesibles o corruptos. Un segmento en estado de “NEEDS RECOVERY” puede serborrado por un DBA, mientras que en estado “PARTY AVAILABLE” no, y lastransacciones dudosas implicadas debe resolverlas el DBA manualmente, o bien elproceso background RECO automáticamente.

- PARTY AVAILABLE.- Contiene datos de transacciones dudosas. Aparece en entornosdistribuidos. Son transacciones distribuidas que no ha podido resolver.

- INVALID.- El segmento de rollback ha sido borrado. El espacio que este segmento derollback tomó al tablespace, puede ser reutilizado por otro.

- DIFERRED.- Cuando un tablespace se pone en offline, y las transacciones sobre él nopueden deshacerse, ORACLE genera automáticamente un segmento de rollback diferidoen el tablespace SYSTEM. Este segmento de rollback desaparece cuando el tablespacese pone ONLINE, o se recupera con RECOVER TABLESPACE.

El Comando SET TRANSACTION

Se puede asignar un segmento de rollback a una transacción específica con el comando SETTRANSACTION USE ROLLBACK SEGMENT. Si no se especifica este comando, ORACLE enviará latransacción a cualquier segmento activo, independientemente del tamaño de la misma. De estemodo, podemos:

- Enviar transacciones pequeñas que contengan transacciones DML afectando a pocosdatos a segmentos de rollback pequeños.

- Enviar transacciones de sólo-lectura de larga duración y de modificaciones que afecten agran cantidad de datos a segmentos de rollback grandes.

SQL>SET TRANSACTION USE ROLLBACK SEGMENT nombre_segmento;

El estado habitual del sistema para las transacciones es READ-WRITE, pero se puede forzar laconsistencia en lectura con el comando SET TRANSACTION y la opción READ ONLY. Después deque una transacción se establezca con el modo sólo-lectura, las siguientes consultas de latransacción sólo visualizan los cambios validados ANTES de que la transacción comenzara. Este tipode comando se usa mucho en la creación de informes que trabajan contra varias tablas, mientras queotros usuarios acceden a estas tablas y modifican datos en ellas. En una transacción READ ONLY,se permiten los siguientes comandos:

SELECT (excepto con la opción FOR UPDATE). LOCK TABLE. SET ROLE. ALTER SESSION. ALTER SYSTEM.

Una transacción de modo lectura se libera con COMMIT. Esta validación no afecta a los datos, loúnico que hace es liberar la transacción sólo-lectura.

Page 38: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 38 de 127

3.4. Ficheros de Redo Log

Cada base de datos posee dos o más ficheros de Redo Log, cuya misión es registrar todos loscambios que se realizan en la misma. Si se produce un fallo, y los cambios todavía no se encuentranen los ficheros de datos, los cambios se obtienen a través de los ficheros de log. Son ficheros críticospara la protección, contra fallos, de la base de datos. Para proteger a los propios ficheros de RedoLog, ORACLE permite tener Redo Log en espejo, que son copias múltiples de los ficheros en distintosdiscos.

El tamaño mínimo de estos ficheros de 50K. No todos tienen porque tener el mismo tamaño. Lasunidades de trabajo de los ficheros de redo log son los bloques del S.O. no los bloques de Oracle.Este detalle tiene importancia al especificar el parámetro del init.ora LOG_CHECKPOINT_INTERVAL yaque habrá que especificarlo en bloques del S.O.

La información contenida en estos ficheros sólo se usa en caso de fallo. Al proceso de aplicación delos ficheros de redo log durante una operación de recuperación se le llama “hacia delante” (rollingforward).

3.4.1. Redo Log Online

Estos ficheros son imprescindibles para el funcionamiento de la base de datos por lo que se debendefinir en el proceso de creación de la misma (se pueden añadir más a posteriori) Se crean en formade grupo (con uno o más miembros) y debe haber un mínimo de dos grupos.

El máximo absoluto se indica en cláusula MAXLOGFILES en la creación de la Base de datos, y elmáximo actual viene indicado en el parámetro LOG_FILES del fichero init.ora.

El proceso LGWR es el encargado de escribir desde los buffers de memoria (Redo Log Buffer Cache)a los ficheros en disco. Su uso es cíclico. Se empieza a escribir por el primero. Al llenarse se pasa aescribir sobre el segundo y así de manera sucesiva. Al llenar el último de los ficheros de Redo Log, sepasa a escribir sobre el primero. Cada vez que un fichero de log se llena, se le asigna un número desecuencia para identificarle.

3.4.1.1. Creación Inicial de los ficheros de Redo Log

Como veremos más adelante en el proceso inicial de creación de la base de datos se incluyen varioscomponentes imprescindibles; entre ellos están los ficheros de redo log. En el siguiente cuadro semuestra un ejemplo de creación inicial.

CREATE DATABASE PRUEBA……………..LOGFILE

GROUP 1 ('/Oracle/oradata/PRUEBA/redo2/redoPRUEBA_11.log','/Oracle/oradata/PRUEBA/redo3/redoPRUEBA_21.log' ) size 100 M,

GROUP 2 ('/Oracle/oradata/PRUEBA/redo3/redoPRUEBA_12.log','/Oracle/oradata/PRUEBA/redo1/redoPRUEBA_22.log' ) size 100 M,

GROUP 3 ('/Oracle/oradata/PRUEBA/redo1/redoPRUEBA_13.log','/Oracle/oradata/PRUEBA/redo2/redoPRUEBA_23.log' ) size 100 M;

Como podemos ver se han creado tres grupos con dos miembros cada uno de ellos. Se especifica laruta de los ficheros y el tamaño deseado para cada uno de ellos (en el ejemplo 100 Mbs)

La tabla V$LOGFILE nos da información sobre los redo log de la base de datos.

Page 39: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 39 de 127

SQL> SELECT * FROM V$LOGFILE;

GROUP# STATUS TYPE MEMBER---------- ------- ------- ------------------------------------------

1 ONLINE /oradata9/DWHDESA/admin/redo1/redo1_g1.dbf1 ONLINE /oradata9/DWHDESA/datos1/redo2/redo1_g2.dbf1 ONLINE /oradata9/DWHDESA/datos1/redo2/redo1_g3.dbf2 ONLINE /oradata9/DWHDESA/admin/redo1/redo2_g1.dbf2 ONLINE /oradata9/DWHDESA/datos1/redo2/redo2_g2.dbf2 ONLINE /oradata9/DWHDESA/datos1/redo2/redo2_g3.dbf

Por otro lado mediante la tabla V$LOG podemos ver el estado de los redo log.

SQL> SELECT GROUP#,SEQUENCE#,ARCHIVED,STATUS FROM V$LOG;

GROUP# SEQUENCE# ARCHIVED STATUS---------- ---------- ------------------------------------- ---------- --- ----------------

1 139 NO INACTIVE2 140 NO CURRENT3 138 NO INACTIVE

El status puede ser:

CURRENT.- indica el redo actualmente en uso.INACTIVE.- no esta en uso ni tiene datos.ACTIVE.- contiene datos.

Podemos forzar el cambio de redo de la siguiente manera:

SQL> ALTER SYSTEM SWITCH LOGFILE;

3.4.1.2. Añadir nuevo ficheros ficheros Redo Log

Podemos añadir tanto un nuevo grupo (cada grupo debe tener como mínimo dos miembros):

SQL> ALTER DATABASE ADD LOGFILE GROUP <número del grupo>(‘ruta del fichero1’, ‘ruta del fichero2’) SIZE <valor> <K|M>;

O añadir un nuevo miembro (toma el tamaño de los otros miembros):

SQL> ALTER DATABASE ADD LOGFILEMEMBER ‘ruta del fichero1’ TO GROUP <número del grupo>;

3.4.1.3. Renombrar ficheros de Redo Log

Podemos necesitar cambiar los ficheros de Redo Log de lugar. En ese caso deberemos:

- Parar la base de datos.- Copiar físicamente los ficheros a su nueva ubicación.

# cp /u03/logs/log1a.log /u04/logs/log1a.log# cp /u03/logs/log1b.log /u05/logs/log1b.log

- Arrancar la base de datos pero sin abrir y cambiar el destino de los ficheros de redorenombrándolos.

Page 40: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 40 de 127

SQL> STARTUP MOUNT;SQL> ALTER DATABASE RENAME FILE '/u3/logs/log1a.log' TO ‘/u4/oradata/log1a.log';SQL> ALTER DATABASE RENAME FILE '/u4/logs/log1b.log' TO '/u5/oradata/log1b.log';

- Abrir la base de datos.

SQL> ALTER DATABASE OPEN;

3.4.1.4. Borrar ficheros de Redo Log

Podemos borrar tanto miembros como grupos de ficheros de Redo Log.

SQL> ALTER DATABASE DROP LOGFILE GROUP 4;

SQL> ALTER DATABASE DROP LOGFILE MEMBER '/oracle/dbs/log3c.rdo';

Hay que tener cuidado que los ficheros que se borren no se estén utilizando en ese momento o que yase han archivado si se está trabajando en el modo ARCHIVELOG.

3.4.2. Redo Log Archivados

Opcionalmente y una vez llenos, los ficheros de Redo Log se pueden archivar a un dispositivo cinta, oa otro disco para una posterior recuperación. El proceso ARCH es el encargado de copiar el ficherode log lleno al lugar indicado antes de comenzar a escribir el siguiente. Se copian como ficherosoffline.

La presencia o no de ficheros de Redo Log archivados se determina por el modo en el que seencuentra la base de datos:

ARCHIVELOG. Los ficheros se redo log llenos se archivan antes de ser reutilizadoscíclicamente.

NOARCHIVELOG. Los ficheros de log no se archivan.

La diferencia entre ambas consiste en que una base de datos en modo archivelog puede recuperarsetanto ante fallos de instance (memoria y procesos), como ante fallos de disco (pérdida de ficheros ofallos de disco). En modo noarchivelog sólo puede recuperarse ante fallos de la instance. Para poderrealizar backups On Line es necesario que la base de datos esté en modo ARCHIVELOG.

MODO CARATERISTICAS IMPLICACIONES

NOARCHIVELOG

Los Redo Log se utilizan de maneracíclica.

Se permite recuperar hasta el momento delerror en caso de fallo de la Instance.

Un fichero de Redo log puede ser utilizadoinmediatamente después de que seproduzca un punto de comprobación(checkpoint).

Si un tablespace no está disponible, no sepuede continuar trabajando hasta que seelimine el tablespace, o se recupere de unbackup TODA la Base de datos.

Los Redo Log se sobreescriben, por lotanto, la recuperación en caso de fallo delmedio, sólo es posible desde el últimobackup completo offline.

En caso de fallo se recupera del último backupcompleto hasta la fecha del backup, o bien delúltimo export completo de la B.D.

ARCHIVELOG

Los Redo Log no son reutilizados hastaque el ARCH no haya copiado el ficherode Redo offline a su destino.

Se permite recuperar hasta el momento delerror en caso de fallo de la Instancia y delmedio.

Los cambios producidos en la base dedatos están disponibles por más tiempo.

Se permite realizar una copia de seguridadcon la base de datos funcionando (online).Recuperar hasta el momento del fallo (Onlineu Offline dependiendo de la parte dañada)Recuperar la Base de Datos:- Hasta un punto específico en el tiempo- Hasta un fichero Log archivado en concreto- Hasta un SCN (System Commit Number).

Page 41: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 41 de 127

3.4.3. Cambio del Modo de Archivado de la Base de Datos

Los requerimientos para trabajar en modeo archivelog son:

- La base de Datos debe estar en modo ARCHIVELOG.- El proceso background ARCH debe estar activo.- Se deben tener mayores recursos hardware para que el archivado no degenere el

rendimiento de la Base de Datos.

Con el comando “ARCHIVE LOG LIST” podemos comprobar en qué modo se encuentra la Base deDatos. Vemos a continuación la salida de este comando en una base de datos con el modo dearchivelog activado y en otra desactivado.

SQL> ARCHIVE LOG LISTDatabase log mode Archive ModeAutomatic archival EnabledArchive destination /oradata9/GESPROD/archOldest online log sequence 155Next log sequence to archive 157Current log sequence 157

SQL> ARCHIVE LOG LISTDatabase log mode No Archive ModeAutomatic archival DisabledArchive destination /oracle/920/dbs/archOldest online log sequence 133Current log sequence 135

Los valores indican:

- Database Log Mode.- Modo actual de archivado.- Automatic archival.- Estatus del proceso ARCH- Archive Destination.- Directorio/dispositivo donde se copian los ficheros de log.- Oldest online log sequence.- La última secuencia de fichero de Redo Log archivado.- Next log sequence to archive.- Siguiente secuencia de fichero de Redo Log a archivar.

Esta opción sólo se visualiza si la Base de Datos está en modo ARCHIVELOG.- Current log sequence.- Secuencia de fichero de Redo Log en el que se está escribiendo

actualmente. Coincide con el siguiente a archivar.

El modo ARCHIVELOG o NOARCHIVELOG de una base de datos puede indicarse en el momento dela creación con el comando CREATE DATABASE. Por defecto si se omite, su valor esNOARCHIVELOG. También puede cambiarse posteriormente con el comando ALTER DATABASE.

Para cambiar al modo Archivelog debemos modificar diversos parámetros de Oracle.

En el init.ora

LOG_ARCHIVE_START = TRUELOG_ARCHIVE_DEST_1 = "location=/oradata/arch1"LOG_ARCHIVE_FORMAT = PRODSBL7_arch_%t_%s.arc

En el fichero spfile:

SQL> ALTER SYSTEM SET LOG_ARCHIVE_START=TRUE SCOPE=SPFILE;SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = "location=/oradata/arch1"

SCOPE=SPFILE;SQL> ALTER SYSTEM SET LOG_ARCHIVE_FORMAT = PROD_arch_%t_%s.arc

SCOPE=SPFILE;

Page 42: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 42 de 127

Con estas tres parámetros indicamos la activación del archivado, el directorio de destino (puedenponerse varios destinos con lo que generariamos un “mirror” de los ficheros de archive) y el formatode los ficheros generados.

Para cambiar el modo de la Base de Datos de NOARCHIVELOG a modo ARCHIVELOG la Base deDatos debe estar MONTADA pero no ABIERTA.

SQL> STARTUP mount;SQL> ALTER SYSTEM ARCHIVE LOG START;SQL> ALTER DATABASE ARCHIVE LOG;SQL> ALTER DATABASE OPEN;

Podemos forzar en cualquier momento que copie la información en los ficheros de archive:

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

Page 43: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 43 de 127

3.5. Ficheros de diagnóstico

Oracle mantiene una estructura de ficheros de diagnóstico que nos permite seguir el funcionamientode la instancia así como identificar posibles errores en su funcionamiento.

Existen cuatro grupos de ficheros según el tipo de diagnóstico:

- Ficheros de alertas (bdump)- Ficheros sobre procesos en background (bdump)- Ficheros de core (cdump)- Ficheros sobre sesiones de usuario (udump)

En el fichero de configuración (init.ora) se indica la ruta donde se almacen los ficheros. Normalmentese crean bajo la siguiente escrutura.

$ORACLE_HOME/admin/<instancia>/bdump$ORACLE_HOME/admin/<instancia>/cdump$ORACLE_HOME/admin/<instancia>/udump

3.5.1. Ficheros de alertas

El los ficheros de alertas (bdump) se recogen los datos principales de la gestión diaria de la instancia.En el fichero alert_INSTANCIA.log se van recogiendo los procesos habituales como parada yarranque de la base de datos, uso de los ficheros de redo log, etc.

Como vemos en el siguiente ejemplo nos indica el arranque y muestra los parámetros deinicialización de la instancia.

Starting up ORACLE RDBMS Version: 9.2.0.8.0.System parameters with non-default values:

processes = 400timed_statistics = TRUEshared_pool_size = 369098752sga_max_size = 2099320608large_pool_size = 167772160nls_sort = binarydbwr_io_slaves = 0control_files = /oradata9/SBLPROD/admin/ctrl1/SBLPROD_ctl01.ctl, /oradata9/SBLPROD/datos1/ctrl2/

SBLPROD_ctl02.ctl, /oradata9/SBLPROD/ind1/ctrl3/SBLPROD_ctl03.ctldb_block_size = 8192db_writer_processes = 3db_cache_size = 419430400_db_block_hash_buckets = 63929compatible = 9.2.0log_archive_start = FALSElog_archive_dest = /oradata9/SBLPROD/archlog_archive_format = SBLPROD_arch_%t_%s.arclog_buffer = 1153536log_checkpoint_interval = 1000000000log_checkpoint_timeout = 3600db_files = 1024db_file_multiblock_read_count= 8undo_management = AUTOundo_tablespace = undotbsmax_enabled_roles = 30remote_login_passwordfile= NONEinstance_name = SBLPRODservice_names = SBLPRODsession_cached_cursors = 50utl_file_dir = /home/ora92/uti/canaldirecto, /home/ora92/uti/migracionbackground_dump_dest = /oracle/920/admin/SBLPROD/bdumpuser_dump_dest = /oracle/920/admin/SBLPROD/udump

Page 44: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 44 de 127

max_dump_file_size = 10000core_dump_dest = /oracle/920/admin/SBLPROD/cdumpopen_links = 4optimizer_features_enable= 8.1.7sort_area_size = 2097152sort_area_retained_size = 4194304db_name = SBLPRODopen_cursors = 1500optimizer_mode = RULEparallel_automatic_tuning= FALSEpga_aggregate_target = 209715200workarea_size_policy = AUTO

PMON started with pid=2, OS id=897066DBW0 started with pid=3, OS id=884836DBW1 started with pid=4, OS id=880708DBW2 started with pid=5, OS id=872676LGWR started with pid=6, OS id=864508CKPT started with pid=7, OS id=856184SMON started with pid=8, OS id=901142RECO started with pid=9, OS id=438376Fri Feb 2 16:24:23 2007ALTER DATABASE MOUNTFri Feb 2 16:24:27 2007Successful mount of redo thread 1, with mount id 2643370039Fri Feb 2 16:24:27 2007Database mounted in Exclusive Mode.Completed: ALTER DATABASE MOUNTFri Feb 2 16:24:27 2007ALTER DATABASE OPENFri Feb 2 16:24:27 2007Wed Mar 7 08:47:07 2007ARC0: Evaluating archive log 2 thread 1 sequence 5819ARC0: Beginning to archive log 2 thread 1 sequence 5819Creating archive destination LOG_ARCHIVE_DEST_1:'/oradata9/SBLPROD/arch/SBLPROD_arch_1_5819.arc'ARC0: Completed archiving log 2 thread 1 sequence 5819Wed Mar 7 08:48:11 2007Thread 1 advanced to log sequence 5821Wed Mar 7 08:48:11 2007ARC0: Evaluating archive log 3 thread 1 sequence 5820Wed Mar 7 08:48:11 2007ARC0: Beginning to archive log 3 thread 1 sequence 5820Creating archive destination LOG_ARCHIVE_DEST_1:'/oradata9/SBLPROD/arch/SBLPROD_arch_1_5820.arc'ARC0: Completed archiving log 3 thread 1 sequence 5820Wed Mar 7 08:53:14 2007Thread 1 advanced to log sequence 5822

Current log# 2 seq# 5822 mem# 0: /oradata9/SBLPROD/admin/redo1/SBLPROD_redo2_g1.dbfCurrent log# 2 seq# 5822 mem# 1: /oradata9/SBLPROD/datos1/redo2/SBLPROD_redo2_g2.dbfCurrent log# 2 seq# 5822 mem# 2: /oradata9/SBLPROD/ind1/redo3/SBLPROD_redo2_g3.dbf

En el fichero de alert también se guardan distintos errores producidos en al operativa normal de labase de datos. En el siguiente ejemplo se indica el error producido e incluye la sentencia que lo hamotivado.

Tue Feb 6 15:19:05 2007ORA-01555 caused by SQL statement below (Query Duration=9789 sec, SCN: 0x0001.ab57903e):Tue Feb 6 15:19:05 2007SELECT

T13.CONFLICT_ID,T13.LAST_UPD,T13.CREATED,T11.CONFLICT_ID,T11.PAR_ROW_I

Tue Feb 6 15:27:20 2007Thread 1 advanced to log sequence 1939

Current log# 1 seq# 1939 mem# 0: /oradata9/SBLPROD/admin/redo1/SBLPROD_redo1_g1.dbfCurrent log# 1 seq# 1939 mem# 1: /oradata9/SBLPROD/datos1/redo2/SBLPROD_redo1_g2.dbfCurrent log# 1 seq# 1939 mem# 2: /oradata9/SBLPROD/ind1/redo3/SBLPROD_redo1_g3.dbf

Tue Feb 6 15:27:20 2007

Page 45: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 45 de 127

3.5.2. Ficheros sobre procesos en background

En el directorio indicado por el parámetro BACKGROUND_DUMP_DEST se almacenan ficheros detrazas relacionados con los procesos background de Oracle (dbw, arc, etc.) Normalmente se indica elmismo directorio (bdump) que el de alertas visto con anterioridad. El formato de los ficheros es:

<INSTANCIA>_<NOMBRE PROCESO>_<PID>.trc

Si guarda información sobre la instancia SBLPROD, del proceso DBW1 con número de proceso124566 el fichero creado sería “sblprod_dbw1_124566.trc”:

Dump file /oracle/920/admin/SBLPROD/bdump/sblprod_dbw1_124566.trcOracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit ProductionWith the Partitioning optionJServer Release 9.2.0.8.0 - ProductionORACLE_HOME = /oracle/920System name: AIXNode name: spa01Release: 3Version: 5Machine: 00CBA21C4C00Instance name: SBLPRODRedo thread mounted by this instance: 1Oracle process number: 3Unix process pid: 1507574, image: oracle@spa01 (DBW0)

*** 2007-03-02 23:02:28.760*** SESSION ID:(2.1) 2007-03-02 23:02:28.745Warning: lio_listio returned EAGAINPerformance degradation may be seen.Warning: lio_listio returned EAGAINPerformance degradation may be seen.*** 2007-03-06 16:26:03.030Warning: lio_listio returned EAGAINPerformance degradation may be seen.Warning: lio_listio returned EAGAINPerformance degradation may be seen.Warning: lio_listio returned EAGAINPerformance degradation may be seen.

3.5.3. Ficheros core

En el directorio indicado por el parámetro CORE_DUMP_DEST (normalmente cdump) se almacenanlos ficheros de core generados por Oracle.

3.5.4. Ficheros sobre sesiones de usuario

En el directorio indicado por el parámetro USER_DUMP_DEST (normalmente udump) se almacenanlos ficheros de seguimiento de sesiones de usuarios (estadísticas, errores, etc) El formato de losficheros es:

<INSTANCIA>_ora_<PID>.trc

Si guarda información sobre la instancia SBLPROD, del proceso 1605718 el fichero creado sería“sblprod_ora_1605718.trc”:

Dump file /oracle/920/admin/SBLPROD/udump/sblprod_ora_1605718.trcOracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit ProductionWith the Partitioning optionJServer Release 9.2.0.8.0 - ProductionORACLE_HOME = /oracle/920System name: AIX

Page 46: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 46 de 127

Node name: spa01Release: 3Version: 5Machine: 00CBA21C4C00Instance name: SBLPRODRedo thread mounted by this instance: 1Oracle process number: 78Unix process pid: 1605718, image: oracle@spa01 (TNS V1-V3)

*** SESSION ID:(248.54) 2007-03-06 13:09:47.723Warning: I/O request got either EINTR or EAGAINWarning: I/O request got either EINTR or EAGAINWarning: I/O request got either EINTR or EAGAIN

La activación del análisis de una sesión se puede realizar de tres maneras distintas:

- Mediante el comando ALTER SESSION SET SQL_TRACE=TRUE;- Ejecutanto el procedimiento dbms_system.SET_SQL_TRACE_IN_SESSION- A nivel de instancia con el parámetro de inicialización SQL_TRACE=TRUE

Page 47: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 47 de 127

4. El Diccionario de DatosEl diccionario de datos es un conjunto de tablas que contienen información sobre todos los objetosque posee una determinada base de datos, así como las relaciones existentes entre los mismos.Incluye dos tipos de objetos:

Tablas base.- guardan información sobre la base de datos. Son los primeros objetos creadosen cualquier base de datos Oracle. Son creados automáticamente cuando el servidor ejecuta el scriptsql.bsq en el momento de la creación de la base datos. Sólo el servidor de Oracle puede escribir enesas tablas. No se accede a ellas directamente, almacenando la información en muchas ocasionesen forma críptica.

Vistas del diccionario de datos.- Estas vistas permite el acceso a la informaciónalmacenada en las tablas anteriores. Son creadas cuando se ejecuta el script catalog.sql.

El diccionario de datos contiene:

- La definiciones de todos los objetos de la base de datos (tablas, índices, etc.)- Espacio reservador y actualmente usado por los objetos.- Valores por defecto de las columnas.- Información sobre integridad.- Usuarios de Oracle.- Privilegios y roles asignados a los distintos usuarios.- Información sobre auditoria.

La información del diccionario de datos es utilizada de tres formas principales:

- Por el servidor Oracle para manejar información sobre usuarios, objetos y estructurasde almacenamiento.

- El servidor Oracle modifica dicha información cuando se ejecutan sentencias DDL.- El DBA y los usuarios pueden consultar el diccionario de datos para obtener

información sobre el estado de la base de datos.

Las vistas del diccionario de datos pueden ser estáticas o dinámicas, en los siguientes apartadosveremos unas y otras.

4.1. Vistas estáticas y dinámicas del diccionario de datos

Según la información contenida y los usuarios que pueden acceder a ella podemos agrupar las vistasestáticas del diccionario de datos en tres niveles:

DBA_xxx.- contienen la información de todos los esquemas de la base de datos.ALL_xxx.- incluyen información sobre todos los objetos accesibles por el usuario actual.USER_xxx.- tienen información sobre los objetos de los que el usuario es propietario.

DBA_xxx Todos los objetos de la base de datos

ALL_xxx Objetos accesibles por el usuario actual

USER_xxx Objetos propiedad del usuario

Page 48: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 48 de 127

Si realizaramos la siguientes sentencias desde el usuario system (usado por el DBA) o por un usuariopropietario de un esquema (en el ejemplo Siebel en DWH desarrollo) el resultado sería el recogido enla tabla:

SQL> SELECT COUNT(*) FROM DBA_OBJECTS;SQL> SELECT COUNT(*) FROM ALL_OBJECTS;SQL> SELECT COUNT(*) FROM USER_OBJECTS;

USUARIO DBA_xxx ALL_xxx USER_xxxSystem 10426 10376 410Siebel ORA-00942: Table or view does not exit 7679 4205

Como puede verse system tiene acceso a las tres vistas mientras que el usuario siebel no puedeacceder a las vistas de DBA.

Listado de vistasNOMBRE DESCRIPCION

ACCESIBLE_COLUMNS Columnas de todas las tablas, vistas y agrupamientosACCESIBLE_TABLES Tablas y vistas accesibles por el usuarioAUDIT_ACTIONS Acciones auditablesALL_CATALOG Tablas, vistas, sinónimos, secuencias accesibles por el usuarioALL_CATALOG_COMMENTS Comentarios en las columnas de las tablas y vistas accesiblesALL_COL_GRANTS Privilegios en las columnas para las cuales el usuario es el propietario, el que da el

permiso, el que lo recibe o bien existe un privilegio públicoALL_COL_GRANTS_MADE Privilegios sobre columnas otorgados por el usuarioALL_COL_GRANTS_RECD Privilegios recibidos en las columnas por el usuarioALL_DB_LINKS Enlaces de la BD accesibles por el usuarioALL_INDEXES Descripción de los índices en las tablas accesibles por el usuarioALL_IND_COLUMNS Columnas de índices en tablas accesiblesALL_OBJECTS Objetos disponibles por el usuarioALL_SEQUENCES Descripción de las secuencias propiedad del usuarioALL_SYNONYMS Todos los sinónimos accesibles por el usuarioALL_TABLES Descripción de tablas accesibles por el usuarioALL_TAB_AUDIT_OPTS Opciones auditables de las tablas Y vistas accesiblesALL_TAB_COLUMNS Columnas de todas las tablas, vistas y agrupamientosALL_TAB_GRANTS_MADE Privilegios del usuario y sus objetosALL_TAB_GRANTS_RECD Privilegios sobre tablas que recibe el usuarioALL_USERS Información sobre los usuarios de la BDALL_VIEWS Texto de definición de las vistas accesibles por el usuarioAUDIT_ACTIONS Códigos de acciones y descripción de cada códigoCONSTRAINT_COLUMNS Información sobre las columnas accesibles en las definiciones de restricciónCONSTRAINT_DEFS Definición de restricciones en tablas accesiblesDICTIONARY Definición de tablas y vistas del Diccionario de DatosDICT_COLUMNS Descripción de las columnas de las tablas y vistas del Diccionario de DatosTABLE_PRIVILEGES Privilegios en los objetos a los que el usuario tiene accesoUSER_AUDIT_CONNECT Entradas de auditoría para las sesiones de los usuariosUSER_AUDIT_TRAIL Entradas de auditoría para las sesiones de los usuariosUSER_CATALOG Tablas, vistas, sinónimos, secuencias accesibles por el usuarioUSER_CLUSTERS Descripción de los agrupamientos que son propiedad del usuarioUSER_CLU_COLUMNS Correspondencia de las columnas de tabla sobre las columnas del agrupamientoUSER_COL_COMMENTS Comentarios en las columnas de tablas y vistas del usuarioUSER_COL_GRANTS Privilegios en aquellas columnas de las que el usuario es propietario, el que dio

privilegio o bien lo recibióUSER_COL_GRANTS_MADE Todos los privilegios en las columnas de los objetos creados por el usuarioUSER_COL_GRANTS_RECD Privilegios en todas las columnas sobre las que el usuario haya recibido privilegiosUSER_DB_LINKS Enlaces de la BD creados por el usuarioUSER_EXTENTS Extensiones creadas por el usuarioUSER_FREE_SPACE Extensiones creadas por el usuarioUSER_INDEXES Descripción de los índices que son propiedad del usuarioUSER_IND_COLUMNS Columnas indexadas en las tablas que son propiedad del usuarioUSER_OBJECTS Objetos que son propiedad del usuarioUSER_SEGMENTS Situación de todos los segmentos de la BDUSER_SEQUENCES Descripción de las secuencias creadas por el usuarioUSER_SYNONYMS Descripción de los sinónimos del usuario

Page 49: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 49 de 127

USER_TABLES Descripción de las tablas creadas por el usuarioUSER_TABLESPACES Descripción de espacios de tabla accesiblesUSER_TAB_AUDIT_OPTS Opciones de auditoría para tablas y vistas propiedad del usuarioUSER_TAB_COLUMNS Columnas de las tablas, vistas y agrupamientos del usuarioUSER_TAB_COMMENTS Comentarios en las tablas y vistas del usuarioUSER_TAB_GRANTS Privilegios en los objetos creados por el usuario y en los que dio o recibió privilegioUSER_TAB_GRANTS_MAD Privilegios en los objetos creados por el usuarioUSER_TAB_GRANTS_RECD Privilegios recibidos por el usuario en todos los objetosUSER_USERS Información sobre los usuarios activosUSER_VIEWS Vistas creadas por el usuario

El servidor Oracle registra la actividad de la base de datos en una serie de vistas dinámicas. Estastablas virtuales existen en memoria mientras la base de datos está en funcionamiento para reflejar lascondiciones en tiempo real de las operaciones de la base de datos. Actúan como fuentes deinformación en memoria y sobre los ficheros de control.

Estas vistas comienzan con V$...

Page 50: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 50 de 127

4.2. Creación del Diccionario de Datos ORACLE.

El diccionario se crea automáticamente con la generación de la B.D. El diccionario de datos seactualiza posteriormente de manera interna por el gestor Oracle. Cada operación DDL, DCL o DML,provoca entradas en el diccionario. NUNCA se actualiza de forma explícita por parte del usuario.

Tanto los usuarios como el administrador pueden consultar información en el diccionario de datosutilizando para ello la sentencia SELECT con cualquiera de sus opciones.

Para saber las vistas que puede acceder un usuario en un momento dado se puede consultar la vistaDICTIONARY, que describe los objetos del diccionario de datos que están a disposición del usuario.

El diccionario de datos reside en el espacio de tabla (TABLESPACE) SYSTEM y estará disponiblesiempre que la base de datos lo esté.

Durante la creación, el parámetro de inicialización INIT_SQL_FILES determina que ficheros decomandos se ejecutan para crear el diccionario. El formato de este parámetro y su valor por defecto,es dependiente del S.O. o de si la creación de la base de datos se realiza manualmente o mediante elproceso de instalación.

Estos ficheros de comandos, realizan las siguientes tareas:

- Definir el tablespace SYSTEM y el segmento de rollback SYSTEM.- Definir las tablas básicas del diccionario de datos en el tablespace SYSTEM. Para cada tabla y

columna del diccionario se genera un comentario para documentación.- Carga información en algunas de las tablas del diccionario.- Se crean las vistas del diccionario de datos.- Se crean los sinónimos.- Se le concede al usuario PUBLIC acceso sobre los sinónimos.

El diccionario de datos se almacena en memoria principal (SGA) para que el sistema lo pueda consultarcon mayor rapidez y aumentar de esta forma el rendimiento. Los parámetros de almacenamiento deldiccionario están indicados en el fichero init.ora y comienzan todos por DC_*. Cuando no hay espaciopara todos los objetos del diccionario en memoria principal se traspasarán a memoria secundaria los quelleven más tiempo sin ser referenciados (algoritmo LRU)

4.2.1. Ficheros de Comandos Ejecutables Requeridos

FICHERO OPCIÓNREQUERIDA DESCRIPCIÓN

SQL.BSQ Ninguna

Crea las tablas verdaderas del diccionario de datos (el resto son vistas, etc.),por ejemplo, UET$ o IND$. Estas tablas no se encuentran documentadas.Este fichero se ejecuta SIEMPRE aunque no se modifique el parámetroINIT_SQL_FILES.

CATALOG.SQL Ninguna

Crea las vistas y sinónimos públicos del diccionario de datos. Tambiénconcede permisos de acceso (GRANT) a todo el mundo a dichas vistas ysinónimos. Este fichero genera también llamadas a los ficherosCATAUDIT.SQL, CATEXP.SQL y CATLDR.SQL

CATAUDIT.SQL Ninguna Crea las vistas y tablas de auditoria. Lo ejecuta CATALOG.SQL. Estas tablaspueden borrarse ejecutando CATNOAUD.SQL.

CATEXP.SQL Ninguna Crea las tablas necesarias para Export e Import incrementales. Lo ejecutaCATALOG.SQL

CATLDR.SQL Ninguna Crea las tablas y vistas de SQL*Loader. Lo ejecuta CATALOG.SQL

CATPARR.SQL Parallel Crea las tablas neceasrias para mantener la información de Parallel ServerOption.

CATTRUST.SQL Trusted Estructuras necesarias para trabajar con Oracle Server Trusted

Page 51: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 51 de 127

CATPROC.SQL Procedural

Ejecuta los ficheros necesarios para trabajar con opción procedural:CATPRC.SQL, CATSNAP.SQL, CATRPC.SQL, STANDARD.SQL,DBMSUTIL.SQL, DBMSSNAP.SQL, DBMSALRT.SQL, DBMSLOCK.SQL,DBMSOTPT.SQL, DBSMPIPE.SQL, DBMSDESC.SQL

CATPRC.SQL Procedural Crea las estructuras del diccionario de datos para almacenar procedimientos,paquetes y disparadores de base de datos. Ejecutado por CATPROC.SQL

CATSNAP.SQL ProceduralDistributed

Crea las estructuras del diccionario de datos para el mantenimiento dereplicas (snapshots). Lo ejecuta CATPROC.SQL y requiere CATPRC.SQL

CATRPC.SQL ProceduralDistributed

Crea las vistas del diccionario de datos necesarias para el mantenimiento deuna base de datos distribuida. Lo ejecuta CATPROC.SQL y requiereCATPRC.SQL

STANDARD.SQL Procedural Crea los paquetes PL/SQL necesarios para trabajar con Procedural Option.Lo ejecuta CATPROC.SQL y requiere CATPRC.SQL

DBMSSTDX.SQL Procedural Extensión del fichero STANDARD.SQL. Lo ejecuta CATPROC.SQL yrequiere STANDARD.SQL

PIPIDL.SQL Procedural Crea paquetes PL/SQL necesarios para trabajar con Procedural Option. Loejecuta CATPROC.SQL y requiere DBMSSTDX.SQL

PIDIAN.SQL Procedural Crea paquetes PL/SQL necesarios para trabajar con Procedural Option. Loejecuta CATPROC.SQL y requiere DBMSSTDX.SQL

DIUTIL.SQL Procedural Crea paquetes PL/SQL necesarios para trabajar con Procedural Option. Loejecuta CATPROC.SQL y requiere PIDIAN.SQL

PISTUB.SQL Procedural Crea paquetes PL/SQL necesarios para trabajar con Procedural Option. Loejecuta CATPROC.SQL y requiere DIUTIL.SQL

DBMSUTIL.SQL Procedural Crea utilidades que se invocan desde los procedimientos. Lo ejecutaCATPROC.SQL y requiere PISTUB.SQL

DBMSSNAP.SQL ProceduralDistributed

Crea procedimientos para la administración de replicas (snapshots). Loejecuta CATPROC.SQL y requiere CATSNAP.SQL

DBMSALRT.SQL Procedural Permite a usuarios y aplicaciones manejar alertas. Lo ejecutaCATPROC.SQL y requiere PISTUB.SQL

DBMSLOCK.SQL Procedural Permite a los usuarios utilizar el procedimiento LOCK. Lo ejecutaCATPROC.SQL y requiere PISTUB.SQL

DBMSMAIL.SQL Procedural

Permita a usuarios y aplicaciones enviar mensajes a través de Oracle*Mail.Lo ejecuta CATPROC.SQL y requiere PISTUB.SQL. Se puede ejecutardesde la B.D. donde se envían los mensajes y para recibirlos se debeejecutar UTLMAIL.SQL

DBMSOTPT.SQL Procedural Permite a los desarrolladores de aplicaciones recibir entrada/salida desdeprocedimientos. Lo ejecuta CATPROC.SQL y requiere PISTUB.SQL

DBSMPIPE.SQL Procedural Permita establecer comunicaciones entre sesiones. Lo ejecutaCATPROC.SQL y requiere PISTUB.SQL

DBMSDESC.SQL Procedural Crea un paquete que permite definir los argumentos y devolver valore de unprograma. Lo ejecuta CATPROC:SQL y requiere PISTUB.SQL

El parámetro INIT_SQL_FILES puede utilizarse para especificar otros ficheros que deben serejecutados durante la creación de la base de datos.

Oracle proporciona ficheros adicionales que pueden utilizarse en la administración de la B.D. y queson los siguientes:

4.2.2. Ficheros de Comandos Adicionales

FICHERO OPCIÓNREQUERIDA LO EJECUTA DESCRIPCIÓN

CATALOG6.SQL Ninguna SYS Crea las vistas del diccionario de datos de versión 6CATBLOCK.SQL Ninguna SYS Crea la vista BLOCKING_LOCKS que muestra los

bloqueos existentes en el sistemaCATDBSYN.SQL Ninguna Usuarios con

acceso al DDCrea sinónimos privados para las vistas DBA deldiccionario

CATEXP6.SQL Ninguna SYS Crea las vistas para utilizar el Export de Version 6.CATNOAUD.SQL Ninguna SYS Borra de la B.D. las vistas de auditoria generadas por

CATAUDIT.SQLCATNOPRC.SQL Ninguna SYS Borra de la B.D. las estructuras generadas por

CATPRC.SQLCATSTAT.SQL Ninguna SYS Ejecuta el comando ANALYZE sobre el diccionario de

datos para permitir la utilización del optimizador decostes en los accesos mediante SQL interno. Debeejecutarse periódicamente para actualizar las

Page 52: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 52 de 127

estadísticas. Si se tiene opción procedural puedeutilizarse desde el paquete ANALYZE_SCHEMA.

UTLBSTAT.SQL Ninguna Todo usuario Comienza la recogida de estadísticas para realizar unajuste de la B.D. Finaliza con UTLESTAT.SQL

UTLCHAIN.SQL Ninguna SYS Crea la tabla CHAINED_ROWS para almacenar lasalida del comando ANALYZE con la opción LISTCHAINED ROWS

UTLDTREE.SQL Prodecural Todo usuario Crea las tablas y vistas que muestran las dependenciasentre los objetos de un usuario

UTLESTAT.SQL Ninguna Todo usuario Finaliza la recogida de estadísticas que comenzó conUTLBSTAT.SQL

UTLEXCPT.SQL Ninguna Todo usuario Crea la tabla EXCEPTIONS que se utiliza para activarrestricciones de integridad.

UTLEXP6.SQL Ninguna SYS Muestra la lista de objetos que no se han exportadoprocedentes de un Export version 6 via SQL*Net

UTLDIDXS.SQL Ninguna Todo usuario Visualiza los resultados de haber ejecutado los ficherosUTLIDXSS.SQL y UTLIDXSO.SQL.

UTLOIDXS.SQL Ninguna Todo usuario Ejecuta UTLIDXSS.SQL sobre múltiples columnas.UTLLOCKT.SQL Ninguna SYS Muestra un gráfico en formato árbol de las esperas para

adquirir bloqueos.UTLMAIL.SQL Ninguna SYS Permite a Oracle*Mail recibir mensajes desde

procedimientos. Se requiere que en la B.D. desde la quese envían los mensajes se haya ejecutadoDBMSMAIL.SQL

UTLMONTR.SQL Ninguna SYS Concede privilegio de acceso a PUBLIC a las tablas derendimiento utilizadas por la opción Monitor de la utilidadSQL*DBA

UTLSAMPL.SQL Ninguna Todo usuario Crea las tablas de ejemplo, como EMP y DEPT y elusuario SCOTT.

UTLSIDXS.SQL Ninguna Todo usuario Calcula la selectividad de una columna y comprueba sise ha creado un índice sobre dicha columna y si esteíndice es apropiado.

UTLXPLAN.SQL Ninguna Todo usuario Crea la Tabla PLAN_TABLE, que permite mostrar lasalida del comando EXPLAIN PLAN.

Page 53: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 53 de 127

5. Objetos en la base de datos

5.1. Tablas

Las tablas o relaciones son las unidades básicas de almacenamiento. Se corresponden con elmodelado de un determinado concepto y sus columnas representan las propiedades que el conceptomodelado posee.

Los principales tipos de columna son:

TIPO VALORES ALMACENADOSNUMBER Almacena datos de tipo numérico.CHAR(N) Almacena cadenas de caracteres hasta un máximo de N caracteres,

siendo N <= 2000. Siempre reserva los N caracteres indicados en ladefinición de la columna.

VARCHAR2(N) Almacena cadenas de caracteres hasta un máximo de N caracteres,siendo N <= 4000. Reserva sólo los caracteres necesarios paraalmacenar la cadena.

DATE Ocupa un tamaño fijo de 7 bytes y almacena una fecha desde elsegundo hasta el siglo.

LONG Almacena cadenas de caracteres hasta un máximo de 2 Gb.BLOB Binary Large Object. Almacena en formato binario hasta un máximo

de 4 Gb.CLOB Character Large Object. Almacena en formato ascii hasta un máximo

de 4 Gb.BFILE Ficheros binarios externos. El tamaño está limitado por el Sistema

Operativo

5.1.1. Tablas particionadas.

Las tablas particionadas nos permiten dividir la información de una tabla por un criterio definido.El criterio de partición es muy importarte para optimizar el rendimiento. Los tipos de columnas másindicadas para particionar una tabla son las numéricas y las de tipo DATE. Particionar por la columnade la clave primaria también es una buena elección.

En el cuadro vemos un ejemplo de división de unas tablas.

SQL> ALTER TABLE SIEBEL.W_NNE_PERSON_FX SPLITPARTITION PERSON_FX_RESTO AT(20070801) INTO(PARTITION PERSON_FX_20070701 TABLESPACE DATOSD,PARTITION PERSON_FX_RESTO TABLESPACE DATOSD);

SQL> ALTER TABLE SIEBEL.W_NNE_ASSET_FX SPLITPARTITION ASSET_FX_RESTO AT(20070801) INTO(PARTITION ASSET_FX_20070701 TABLESPACE DATOSD,PARTITION ASSET_FX_RESTO TABLESPACE DATOSD);

SQL> ALTER TABLE SIEBEL.W_NNE_VENCIMIENTO_F SPLITPARTITION VENCI_RESTO AT(20070801) INTO(PARTITION VENCI_20070701 TABLESPACE DATOSD,PARTITION VENCI_RESTO TABLESPACE DATOSD);

Page 54: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 54 de 127

5.1.2. Tablas tipo índice.

Una tabla organizada por índices mantiene todos los datos dentro de una estructura de árbol B*. Elíndice de B*Tree está basado en la clave primaria de la tabla. Los bloques hoja de esta estructuracontienen las columnas no clave, en lugar del ROWID. Por ello, el uso de una tabla organizada poríndice elimina la necesidad de tener dos segmentos separados, la tabla y el índice.

Una tabla organizada por índice difiere de una tabla normal en los aspectos siguientes:

- ROWID puede identificar únicamente una fila de una tabla regular, mientras que las filas en unatabla organizada por índices es identificada por su clave primaria.

- Una tabla regular puede tener varios índices que almacenen el ROWID correspondiente al índicede los valores clave. Dado que una tabla organizada por índice no tiene ROWID, los índicessecundarios no pueden ser creados en este tipo de tablas.

- Cuando la exploración completa se hace de una tabla regular, el orden en el que las filas sondevueltas no es predecible. Exploraciones totales de una tabla organizada por índices devuelvelas filas en una secuencia de clave primaria.

- Una tabla organizada por índices tolera todas las restricciones excepto las únicas.- Una tabla organizada por índices no puede participar en una transacción distribuida (a través de

DB Links) ni ser particionada.

Page 55: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 55 de 127

5.2. Vistas.

Las vistas se podrían definir como consultas almacenadas en tablas del diccionario de datos. Losdatos de dichas consultas no están almacenados en ninguna parte, de forma que cada vez que sequiere acceder a dichos datos Oracle realiza la consulta sobre la que está definida la vista.

Existen dos tipos de vistas:

- Vistas de Proyección: Definidas sobre una única tabla, y que no contenga las cláusulas GROUPBY, DISTINCT o columnas definidas por expresiones. En estas vistas se pueden realizarselecciones, inserciones, actualizaciones y borrados.

- Vistas de Selección: El resto. Sobre estas vistas la única instrucción DML (Data ManipulationLanguage) que se puede realizar es la Select.

Las vistas son también un mecanismo muy importante de cara a la seguridad de los datos según severá en el tema de Seguridad en la Base de Datos.

5.2.1. Vistas materializadas

En este caso los datos de la vista están fisicamente almacenados en una estructura propia de la vista.Oracle mantiene de forma automática la consistencia de sus datos.

Page 56: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 56 de 127

5.3. Indices.

Los índices son mecanismos de almacenamiento diseñados para acceder de forma rápida a lainformación. Su finalidad es mejorar el acceso a los datos. Mejoran el rendimiento en consultas(SELECT) y pueden ralentizar en actualizaciones (UPDATE y DELETE). Hay dos restricciones deintegridad referencial (UNIQUE y PRIMARY KEY), que generan de forma implícita la creación de uníndice.

Cada índice ocupa un segmento independiente del segmento de datos. El índice puede estar en untablespace distinto al tablespace de los datos, inclusive es conveniente, porque ayuda a mejorar elrendimiento de acceso al disminuir el riesgo de contención en disco.

Los índices pueden ser simples o compuestos (concatenados) de hasta 16 columnas. Para utilizar uníndice en una búsqueda debe estar incluida la llamada parte conductora, que es la primera columnamencionada en la creación del índice compuesto.

Normalmente, un índice se crea después de insertar datos en una tabla, excepto:

- Cuando sea el índice asociado a una restricción UNIQUE o PRIMARY KEY y, al indicar larestricción, no se especificó la cláusula DISABLE.

- Cuando se desea mantener las comprobaciones de unicidad antes de insertar los datos.

SQL> CREATE [UNIQUE] INDEX nombre_índiceON tabla ( col1 [, col2, coln] ) TABLESPACE nombre_tablespace;

Si se omite la cláusula STORAGE en el momento de la creación del índice, los valores por defectoson:

- Si la tabla está vacía en el momento de crear el índice, toma el DEFAULT STORAGE deltablespace en el que se crea el índice.

- Si la tabla en la que se crea el índice está llena y ocupa MENOS de 25 bloques, toma unaextensión de este tamaño.

- Si la tabla en la que se crea el índice está llena y ocupa MÁS de 25 bloques, toma paralos valores de INITIAL y NEXT del 50% del tamaño de la tabla.

Se pueden modificar los parámetros de almacenamiento del segmento de índices con el comandoALTER INDEX indicando la nueva cláusula STORAGE.

Las filas que tengan todas las columnas indexadas a NULL no tiene entrada en el árbol de índices.Los comandos siguientes borran índices, y devuelven el espacio al tablespace donde fueron creados:

DROP TABLE nombre_tablaDROP INDEX nombre_índiceTRUNCATE TABLE nombre_tablaTRUNCATE INDEX nombre_índice DROP STORAGEALTER TABLE nombre_tabla DROP/DISABLE PRIMARY KEYALTER TABLE nombre_tabla DROP/DISABLE UNIQUE (columna)

Por defecto, todas las entradas de índices se clasifican antes de crear el índice, por lo que senecesita un espacio temporal lo suficientemente grande como para contener la ordenación previa a lacreación.

Page 57: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 57 de 127

5.3.1. Gestión de los índices

Podemos utilizar la opción REBUILD para recrear los índices:

SQL> ALTER INDEX <nombre_indice> REBUILD TABLESPACE <tablespace>;

Podemos de esta manera cambiar el índice a otro tablespace, mejorar el uso del espacio al liberas lasentradas borradas, etc.

También podriamos reconstruir los indices en modo ONLINE para reducir el bloqueo de la tabla.

SQL> ALTER INDEX <indice> REBUILD ONLINE;

5.3.1.1. Análisis de los índices

Podemos analizar los índices para analizar una posible corrupción de los bloques. Este análisis noverifica que los datos se correspondan con los de la tabla origen.

SQL> ANALYZE INDEX [esquema].indice VALIDATE STRUCTURE;

Una vez ejecutado el comando se consulta la vista INDEX_STATS.

SQL> SELECT BLOCKS, PCT_USED, DISTINCT_KEYSLF_ROWS, DEL_LF_ROWSFROM INDEX_STATS;

BLOCKS PCT_USED LF_ROWS DEL_LF_ROWS---------------------------------------------------------------------------------------25 11 14 0

Si la relación entre DEL_LF_ROWS y LF_ROWS es superario al 30% es conveniente reorganizar elíndice.

5.3.1.2. Identificando índices no usados

Para activar la monitorización del uso de los índices:

SQL> ALTER INDEX esquema.indice MONITORING USAGE;

Para para la monitorización:

SQL> ALTER INDEX esquema.indice NOMONITORING USAGE;

La información queda reflejada en la vista V$OBJECT_USAGE

SQL> DESC V$OBJECT_USAGE;

Name Null? Type----------------------------------------- -------- ----------------------------INDEX_NAME NOT NULL VARCHAR2(30)TABLE_NAME NOT NULL VARCHAR2(30)MONITORING VARCHAR2(3)USED VARCHAR2(3)START_MONITORING VARCHAR2(19)END_MONITORING VARCHAR2(19)

Page 58: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 58 de 127

En el campo USED se indica YES o NO según se haya utilizado o no el índice durante el tiempo deanálisis.

5.3.2. ¿Cuándo una Columna es Candidata a Estar Indexada?

CANDIDATA:- Debe tener valores únicos.- Siempre se hacen búsquedas acotadas o por rangos de valores (between,<>, etc.)- La búsqueda recupera MENOS del 10 ó 15% de las filas.- Si la columna indexada puede contener nulos, realizar las búsquedas con COL_indexada

> 0 y no con COL_indexada IS NULL.

NO CANDIDATA:- La columna contiene pocos valores distintos. Por ejemplo, la columna SEXO.- Hay muchos valores nulos y la búsqueda se realiza usando IS NOT NULL.- Es una columna tipo LONG o LONG RAW que no pueden indexarse.

5.3.3. Indice B* Tree.

Es la estructura de índice por defecto.

El nivel superior es el bloque de cabecera (Header Block). A continuación hay uno o como máximodos niveles (para indices muy grandes) de Branch Blocks. La parte inferior tiene los bloques de hojas(Leaf Blocks) en donde se almacenan los valores de los ROWID de las filas sobre las que seconstruye el índice. Por tanto la máxima profundidad de estos índices es cuatro. La siguientefigura muestra la estructura de un índice:

Una labor del administrador es tener los índices bien balanceados (o sea, que todas las ramas tenganel mismo peso). Para ello hay dos posibilidades:

- Borrar y volver a crear el índice (los datos se obtienen de la columna de la tabla)- Se puede reconstruir el índice con el comando REBUILD (los datos del nuevo índice se

obtienen del antiguo antes de que este sea borrado)

El coste de mantenimiento del índice se reduce mucho si el índice se hace sobre una columnasiempre ascendente (poblada mediante una secuencia). Un índice es tanto más selectivo cuanto másvalores distintos tenga la columna sobre la que se indexa, y menos restrictivo o eficiente sobrecolumnas con muchos valores repetidos.

< 100

BloquesdeDatosROWIDsROWIDs

Ramas (1-2 niveles)

Hojas

> 10

Cabecera

10 - 100

Page 59: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 59 de 127

5.3.4. Indice Bit Map.

Se emplean para indexar columnas con muy pocos valores distintos (“se crea un índice de un solo bit”para cada uno de estos posibles valores) y son útiles si en las condiciones del WHERE hay variascolumnas con índices bitmap (la mezcla de bitmap se realiza a través de operaciones de bits que sonmuy eficientes). En estos casos son más flexibles (no importa el orden) y rápidos que un índiceconcatenado.

Son tanto más útiles cuanto más grande sea la tabla (son índices muy útiles en sistemas DSS o datawarehouse)

Oracle es incapaz de bloquear a nivel de bit, por lo tanto la modificación de una columna que tengaun índice bitmap no solo provocará en bloqueo de dicha fila, sino que además se bloquearán todaslas filas que tengan los datos del índice bitmap en el mismo bloque que la que se modifica.

Este tipo de índice no es nada bueno cuando se consulta por un rango de valores o la columna tienemuchos valores distintos.

Page 60: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 60 de 127

5.4. Sinónimos y Secuencias

Los sinónimos son alias de objetos de la Base de Datos. Son útiles por ejemplo para acceder a unatabla sin tener que estar anteponiendo el nombre del usuario propietario de la tabla.

SQL> CREATE PUBLIC SYNONYM <identificador> FOR <usuario.tabla>

Por otro lado las secuencias son contadores. Cuando creamos una secuencia le podemos indicar elvalor inicial, el incremento, el máximo valor o decir que la secuencia sea circular. Para obtener elsiguiente valor de una secuencia haremos:

SQL> SELECT <nombre_secuencia>.NEXTVAL FROM DUAL;

Si queremos obtener el valor actual cambiaremos NEXTVAL por CURRVAL.

Page 61: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 61 de 127

5.5. Triggers.

Los triggers o disparadores es código PL/SQL que se ejecuta antes o después de:

- de una Inserción y/o Actualización y/o Borrado- de las filas de una determinada tabla,- y bien una vez por sentencia, o por cada una de las filas sobre las que se actúa.

Además, es posible fijar condiciones de disparo en la propia definición del trigger, como por ejemplo,el valor de una determinada columna de la fila que se inserta sea mayor que 100.

Los triggers son muy útiles por ejemplo para la replicación de datos, la realización de cálculosautomáticos y la desnormalización (crear información redundante para agilizar las consultas).

El código PL/SQL de los triggers no puede contener sentencias que afecten al control de lastransacciones con son las sentencias commit, rollback o savepoint.

Page 62: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 62 de 127

5.6. Constraints. Comprobación de integridad.

Las constraints o restricciones son limitaciones al valor de los datos. Las podemos clasificar en:

- Primary Key.- Designa una columna o combinación de columnas como la clave primaria de unatabla.

- Foreign Key.- Designa una columna o combinación de columnas como la clave externa de unatabla

- Unique.- Designa una columna o combinaciones de columas como únicas.- Not Null.- Especifica que la columna no puede contener valores nulos.- Check Constraints. Especifica una condición que cada fila de la tabla debe satisfacer.

Los estados de las restricciones son:

- Disable Novalidate: La definición de la constraint permanece en el diccionario de datos pero noes verificada al manipular los datos de la tabla.

- Disable Validate: En este estado no se permiten moficiaciones sobre las columnas conrestricciones.

- Enable Novalidate: En este estado cualquier modificación de las columnas restringidas esvalidada y, por tanto, los nuevos datos que violan la restricción no pueden ser introducidos. Noobstante, la tabla puede contener datos que no son válidos.

- Enable Validate: En este estado cualquier modificación de las columnas restringidas es validadoy, por tanto, los nuevos datos que violan la restricción no pueden ser introducidos. No se puedeactivar esta restricción si existen datos que no cumplen las limitaciones establecidas.

Por otro lado las constraints o restricciones pueden ser:

- Inmediatas: Si son obligadas al final de cada sentencia DML- Diferidas: Si son obligadas al final de la transacción.

La definición como inmediata o diferida puede ser realizada mediante:

- Con la opción SET CONSTRAINTS.- De esta manera podemos marcar las constraints comoDEFERRED o IMMEDIATE para la transacción concreta. Por ejemplo:

SQL> SET CONSTRAINT constrainst IMMEDIATE;SQL> SET CONSTRAINTS ALL DEFERRED;

- Mediante el comando ALTER SESSION.- En este caso la modificación afecta a la sesión:

SQL> ALTER SESSION SET CONSTRAINT=DEFERRED;

Page 63: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 63 de 127

5.7. DB Links.

Los DataBase Links son enlaces hacia otras Bases de Datos Oracle. La comunicación entre bases dedatos se realiza a través del protocolo de Oracle SQL*Net o Net8. No es necesario que tengan lamisma versión de Oracle.

Si parámetro global_names del fichero init.ora esta a true entonces el nombre del DB Link debe ser elmismo que el de la instancia a la que se conecta. Si está a false entonces el nombre puede sercualquiera.

SQL> CREATE PUBLIC DATABASE LINK <nombre_dblink>CONNECT TO <usuario> IDENTIFIED BY <contraseña>USING <sid_destino>;

SQL> CREATE PUBLIC DATABASE LINK LINK_PRUEBACONNECT TO DAGOBRA IDENTIFIED BY XXXXXXUSING 'DAGOBRA';

Database link created.

SQL> SELECT * FROM ALL_DB_LINKS;

OWNER DB_LINK USERNAME HOST CREATED-------------------------------------------------------------------------------------------------------------PUBLIC LINK_PRUEBA DAGOBRA 22/12/2003 16:33:22

Es importante que el servidor donde esta la base de datos origen tenga referenciado en el ficherotnsnames.ora la base de datos destino.

Page 64: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 64 de 127

5.8. Los Index Cluster.

Los cluster son mecanismos para almacenar filas de distintas tablas en el mismo segmento. Estastablas han de tener en común alguna columna. Esta columna se tomará como cluster key, de formaque todas las filas de las tablas que tengan el mismo valor de la columna común se almacenaránconjuntamente. La utilización de estos cluster puede mejorar el rendimiento de las consultas quehagan un join de las tablas que forman el cluster.

El cluster es transparente para el programador que sigue viendo las tablas que forman el clustercomo tablas individuales.

Algunas de las desventajas de utilizar un cluster son:

El acceso a una única tabla del cluster es más lento. (El full scan de la tabla también esmás lento).

Las inserciones son más lentas al requerir mayor esfuerzo. La mejora en el rendimiento de los joins puede ser mínima.

Page 65: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 65 de 127

5.9. Los Hash Cluster.

El término hashing se refiere a la transformación del valor de una clave en una dirección dealmacenamiento. En Oracle, los valores de la clave primaria (primary key) son transformados en hashkey. Las filas con el mismo valor de hash key se almacenan conjuntamente.

Los hash cluster minimizan el número de bloques a los que se accede para localizar la fila. En uníndice B*-Tree hay que acceder a 3, 4 o 5 bloques, mientras que en el hash cluster con el acceso aun bloque podría ser suficiente.

Si se implementa un hash cluster hay que ser muy cuidadoso con los parámetros de almacenamiento.Hay que prever el número filas que pueden dar valores iguales de la hash key e indicarlo en elparámetro HASHKEYS. El parámetro SIZE determina el número de valores de hash key que sepueden almacenar en cada bloque. Para cada uno de los valores de la hash key se reserva el mismoespacio (HASHKEY * espacio del bloque/SIZE).

Si se reserva espacio de más el espacio se desaprovechará, habrá gran separación entre las filas yse degradará el rendimiento cuando se haga un full table scan. Si se reserva espacio de menos seránecesario encadenar nuevos bloques para almacenar las filas que no entran en el espacio reservado.

Sería bueno utilizar un hash cluster si se cumple que:

- La mayor parte de los accesos se hacen a través de igualdades con la cluster key.- Raramente se consulta por un rango de valores.- Raramente se hace un full scan.- El tamaño de la tabla permanece bastante constante. Si no es así habría que reconstruir el hash

cluster periódicamente.

Page 66: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 66 de 127

5.10. Los Snapshot y los Snapshot Log.

Mientras que en las vistas lo que se almacena es la definición de una select, los snapshot almacenan las filas quedevuelve una select. La estructura de almacenamiento es la misma que la de un Index Cluster.

Lógicamente, los datos del snapshot se tienen que refrescar periódicamente para que no se quedentotalmente obsoletos. El tiempo y la forma de refresco se fijan en la creación del snapshot. Lassentencias consultar un snapshot son las mismas que para consultar una tabla o una vista.

Como se puede apreciar snapshot no garantiza una total actualización de los datos, pero paraalgunas aplicaciones esto no es crítico, y se compensa con la mayor rapidez de acceso a los datos(principalmente en consultas con joins sobre tablas muy grandes).

Existen dos formas de realizar el refresco de los snapshot. Realizar de nuevo toda la consulta (FullRefresh) o, en el caso de tener un snapshot sobre una única tabla, tener un fichero asociado a dichatabla que nos indique las filas que han cambiado desde el último refresco. Este fichero es el SnapshotLog y al mecanismo de refresco se le denomina Fast Refresh.

La utilización de un snapshot log ralentiza las operaciones DML que se efectúan sobre dicha tabla. Acambio agiliza el proceso de refresco del snapshot siempre que el porcentaje de filas que hancambiado no sea muy elevado (si han cambiado más de un 40% de las filas se tarda menos haciendoun full refresh)

Si se va a realizar una carga masiva sobre una tabla con un snapshot asociado, es convenienteborrar el snapshot log (si lo hubiese), borrar el snapshot, realizar la carga y luego crear de nuevo elsnapshot y el snapshot

Page 67: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 67 de 127

5.11. Perfiles, Roles y Grants.

Estos tipos de objetos se ven en el tema de Seguridad en la Base de Datos.

Page 68: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 68 de 127

5.12. Procedimientos, Paquetes y Funciones.

Oracle permite tener código PL/SQL almacenado en la propia Base de Datos. Además de laseguridad de tener almacenado el código el la Base de datos, es posible almacenar únicamente elcódigo rapeado (wrapped), de forma que sólo se tenga el código ejecutable y no el fuente.

Para que un usuario que no sea propietario del paquete PL/SQL pueda ejecutarlo debe tener elGRANT execute sobre dicho paquete.

Page 69: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 69 de 127

5.13. Vistas sobre objetos.

Al igual que una vista representa una tabla virtual, una vista de objetos u Object View representa unatabla de objetos virtual. Cada fila en este tipo de vistas es un objeto, con sus atributos y métodospropios.

Las vistas sobre objetos son útiles modelos de datos relacionales puedan tener por encima una capabasada en Object View que permitan que esos datos del modelo relacional tengan apariencia de unmodelo orientado a objetos de cara principalmente a interactuar con lenguajes o herramientas deprogramación orientadas a objeto.

El procedimiento para una Object View es el siguiente:

1. Definir un tipo de objeto, donde cada atributo del tipo se corresponda a una columna existente deuna tabla relacional.

2. Escribir la select que especifica cómo extraer los datos de las tablas relacionales.3. Especificar un valor único, basado el los atributos de las tablas seleccionadas, que haga de

Object Identifier (OID) para poder crear referencias (REFs) a los objetos de la vista. Normalmentese suele utilizar una clave primaria existente.

4. Escribir los triggers INSTEAD OF para de esta forma poder actualizar los datos de la vista.

Page 70: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 70 de 127

6. Estructuras de almacenamiento: segmentosEn una base de datos ORACLE, toda la información está almacenada en segmentos. Un segmentoestá compuesto de extensiones o unidades lógicas de almacenamiento utilizada para guardarinformación en bloques contiguos. Existen 4 tipos de segmentos:

- Segmentos de Datos. Son aquellos tipos de segmentos en los que se almacena lainformación referente a tablas.

- Segmentos de Índices. Son aquellos en los que se almacena información o entradas deíndices. Si una columna de una tabla está indexada, se generan dos tipos de segmentos,de datos para la tabla, y otro de índices para la columna indexada. Inclusive pueden estaren distintos tablespaces.

- Segmentos de ROLLBACK. Un segmento de rollback es una porción de la base dedatos que guarda el seguimiento de las transacciones que se llevan a cabo en la base dedatos, para poder deshacerlas bajo ciertas circunstancias (a petición del usuario o porfallo de la transacción,...). También se usan para mantener la consistencia en lectura.

- Segmentos Temporales. Los segmentos temporales son espacio que ORACLE toma ala base de datos cuando, por ejemplo, una sentencia para ejecutarse necesita unaordenación temporal (order by). Los segmentos temporales se crean de forma implícitacuando se requieren y se destruyen al terminar la sentencia que los solicitó.

Puede haber distintos tipos de segmentos combinados en un tablespace. El segmento está contenidoen su totalidad en un tablespace, pero puede estar en varios archivos asociados a un mismotablespace. Cuando se borra un segmento, el espacio se devuelve al tablespace en el que fuecreado.

Cada segmento posee un conjunto de parámetros de almacenamiento que controla su ocupacióninicial y su crecimiento posterior. Estos valores se definen el los comandos:

CREATE/ALTER TABLESPACE ... DEFAULT STORAGE ...CREATE/ALTER TABLE ... STORAGE ...CREATE/ALTER INDEX ... STORAGE ...CREATE/ALTER ROLLBACK SEGMENT... STORAGE ...

En el caso de configuración manual (ver más adelante) los valores de los parámetros indicados anivel de tablespace, se toman en cuenta si no se especifican a nivel de objeto (tabla, índice, rollbacksegment)

Un segmento está compuesto de una o varias extensiones. Una extensión es una unidad lógica dealmacenamiento formada por un número de bloques ORACLE o bloque lógicos contiguos. Cadasegmento tiene una cabecera que contiene información acerca del tipo de segmento almacenado yde sus extensiones. La vista DBA_EXTENTS permite consultar la lista de las extensiones utilizadas.

Los comandos DROP TABLE, TRUNCATE TABLE, DROP INDEX, TRUNCATE INDEX permitenliberar bloques asignados a los segmentos. DROP TABLE, TRUNCATE TABLE borran también lossegmentos de índices asociados a la tabla sobre la que se realiza la operación.

ORACLE guarda, por cada tablespace, una lista de los bloques libres existentes. Cuando se añadeun archivo al tablespace (ALTER TABLESPACE ADD DATAFILE), todos los bloques que contiene elnuevo fichero se añaden a la lista de bloques del tablespace. La lista de bloques libres del tablespacese almacena en el Diccionario de Datos en la vista DBA_FREE_SPACE.

Si es necesario asignar un a nueva extensión para un segmento del tablespace, se busca en la listade bloques libres del tablespace un hueco de espacio libre que sea lo suficiente grande como para

Page 71: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 71 de 127

contener la extensión. Si no se encuentra un hueco libre con tamaño suficiente, se muestra el errorORA-1547 ‘failed to allocate extent of size <tamaño> in tablespace <nombre_tablespace>’.

NO todos los parámetros de almacenamiento son válidos para todos los tipos de segmentos. Losparámetros comunes son los determinados o referidos a tamaño y número de extensiones. Hayparámetros que sólo pueden aplicarse en un tipo de segmento en concreto.

Las cláusulas de almacenamiento comunes son:

PARAMETRO DESCRIPCION DEFECTO MÍNIMO

INITIAL Tamaño de la extensión inicial asignada en el momento decreación del segmento.

5 bloques dedatos

2 bloques dedatos

NEXT Tamaño de la siguiente extensión a asignar cuando se agotaINITIAL. En sucesivas asignaciones el tamaño de NEXT NO seráel indicado en este parámetro, sino igual al último NEXTmultiplicado por (1+PCTINCREASE/100).

5 bloques dedatos.

1 bloques dedatos.

MAXEXTENTS Máximo número de extensiones, incluyendo la primera, que puedeocupar el segmento.

Según el S.Operativo

1 extensión

MINEXTENTS Número de extensiones asignadas en el momento de la creacióndel segmento. Esto nos permite reservar espacio, inclusive si nohay espacio contiguo disponible. Para los segmentos de rollback,por defecto, es como mínimo 2.

1 extensión 1 extensión

PCTINCREASE Porcentaje en el que crecerá la siguiente extensión antes de quese asigne, con respecto a la anterior asignada. Si PCTINCREASEes 0, todas las extensiones tienen el mismo tamaño. Lossegmentos de rollback siempre es 0 y no deben especificarse.

50 (%) de laanterior.

0 (%) de laanterior.

FREELISTGROUPS

Número de grupo de free lists para una tabla o índice. Sólo utilizareste parámetro con Parallel Server Option. Sólo puedeespecificarse en la sentencia CREATE TABLE.

1 grupo. 1 grupo.

FREELIST Número de free lists por grupo de free lists para tabla o índice.Sólo puede especificarse en sentencias CREATE TABLE oCREATE INDEX.

1 grupo 1 grupo.

El máximo en todos los casos es dependiente del sistema operativo.

Page 72: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 72 de 127

6.1. Bloque de datos (Database block)

El bloque de base de datos es la unidad mínima de almacenamiento (de I/O) y está formado por unoo más bloques de sistema operativo.

El valor por defecto se especifíca con el parámetro DB_BLOCK_SIZE

Debemos conocer la estructura de un bloque de datos ORACLE. Los objetos están compuestos deextensiones, y las extensiones son conjuntos de bloques lógicos contiguos. Los bloques de cada tipode segmentos son distintos. A continuación se define la estructura de un bloque de datos o deíndices.

Estructura de un Bloque de DatosCABECERA (84 a 107 bytes)

ENTRADAS DE TRANSACCIÓN(23 bytes/transacción)

DIRECTORIO DE FILAS (2 BYTES POR FILA)

ESPACIO LIBRE

AREA DE DATOS

La cabecera (block header) contiene entre otros datos una directorio de la tabla y de las filas, einformación sobre las transacciones que afectan a las filas dentro del bloque. La cabecera crece dearriba hacia abajo. El área de datos contiene las filas dentro del bloque y crece de abajo hacia arriba.Finalmente, el espacio libre queda en medio del bloque permitiendo crecer tanto la cabecera como elárea de datos. Los cambios y borrados de datos pueden producir cierta fragmentación dentro delbloque.

Existe la posibilidad de determinar tamaños y límites para el espacio ocupado por los distintoselementos de un bloque de datos. Los parámetros de almacenamiento que se pueden definiradicionalmente para un segmento de datos son los siguientes:

PARAMETRO DESCRIPCION DEFECTO

PCTFREE Porcentaje de espacio en un bloque reservado para lasmodificaciones de los datos existentes en dicho bloque. Si no sereserva este espacio, el crecimiento de una fila puede provocarque ésta se tenga que repartir entre varios bloques ORACLE, loque perjudica el rendimiento de ENTRADA/SALIDA.

10 %

PCTUSED Porcentaje de espacio ocupado por debajo del cual se puedeninsertar nuevas filas en el bloque. Si la ocupación es superior nose permite la inserción de nuevas filas, sólo se puede modificar lasya existente.

INITTRANS Cantidad de espacio inicial que se reserva y predirecciona parauna entrada de transacción, y poder acceder a filas que estén enlos mismos bloques de datos concurrentemente. Se reserva en lacabecera del segmento.

1(*23 bytes) en bloque dedatos y 2(*23 bytes) enbloques de índices.

MAXTRANS Si existen transacciones múltiples que pueden acceder de formaconcurrente a los mismos bloques, es necesaria para cada una deellas una entrada de transacción. MAXTRANS limita el número detransacciones concurrentes en un bloque.

Dependiente del S.O.,pero no más de 255.

El funcionamiento combinado de PCTFREE y PCTUSED sería de la siguiente manera. Suponiendoque PCTFREE = 20 y PCTUSED = 40

Page 73: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 73 de 127

1. Se insertan filas hasta ocupar un 80 % del bloque. El bloque puede contener en ese 20%libre, únicamente modificaciones de filas ya insertadas en él.

2. Las actualizaciones sobre las filas existentes utilizan el espacio libre reservado. No seadmiten nuevas inserciones hasta que el porcentaje de uso caiga por debajo del 40%marcado por PCTUSED.

3. Cuando el porcentaje de uso cae por debajo del 40% pueden insertarse nuevas filas en elbloque.

Existen dos tipos de sentencias que devuelven espacio a los bloques de datos: DELETE y UPDATE,siempre que el último cambie valores existentes por unos menores. El espacio liberado por estassentencias estará disponible para los siguientes INSERTS si se cumplen las condiciones:

- El INSERT está en la misma transacción que la sentencia que libera espacio (despuésdel DELETE/UPDATE).

- Si la sentencia INSERT está en una transacción y la sentencia que libera espacio en otra(ejecutadas por distintos usuarios), el INSERT puede utilizar el espacio disponibleDESPUÉS de que la 1ª sentencia ejecute COMMIT y sólo si el espacio es necesario.

En la siguiente tabla se pueden ver las ventajas y desventajas de tener tamaños de PCTFREE /PCTUSED grandes o pequeños.

PARAMETRO TAMAÑO POSITIVO NEGATIVO

PCTFREE

PEQUEÑO

Útil para tablas que no sufren apenasmodificaciones. La consecuencia directa esque reservo menos espacio paraactualizaciones, y permite que lasinserciones rellenen mejor el espacio, con elconsiguiente ahorro de espacio, más datosen menos bloques.

Mayor coste de reorganizacióndentro del bloque para liberarespacio contiguo. Incrementa elcoste de las consultas, ya que lasactualizaciones pueden provocarque una fila esté dividida en variosbloques.

GRANDE

Reserva más espacio en actualizaciones.Disminuye el coste de la reorganización,pues el espacio suele estar contiguo. Mejorael rendimiento en consultas porque no hayencadenamiento ni división de las filas.

Requiere más espacio para insertarla misma cantidad de datos

PCTUSED

PEQUEÑO

Reduce el coste del procesamiento en lasinserciones y actualizaciones. El bloque nose mueve continuamente a la lista debloques libres al no descender el límiteutilizado por debajo de PCTUSED.

Bloques menos llenos. Incrementael espacio no utilizado.

GRANDE

Mejora le eficiencia en la utilización delespacio

Incrementa el coste deprocesamiento de INSERT yUPDATE, porque tiene que ircontinuamente a comprobar si esun bloque candidato.

Existen dos métodos para la gestión de los bloques de datos y su parametrización:

- Gestión automática.- Configuración manual.

6.1.1. Gestión automática de los bloques de datos

Con este método es el gestor de Oracle el que se encarga automáticamente de la gestión delespacio. Se caracteriza por:

- La información sobre el espacio libre y usado se almacena mediante bitmaps en vez delistas.

- Es más facil de gestionar.- Optimiza el uso del espacio- Mejora el rendimiento en operaciones de INSERT concurrentes.- No puede usarse en tablespaces con objetos LOBs.

Page 74: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 74 de 127

- Parámetros como PCTUSED son gestionados automáticamente.

La gestión automáticamente de los segmentos debe indicarse a nivel de tablespace y sólo puederealizarse sobre tablespaces gestionados localmente (no por diccionario).

SQL> CREATE TABLESPACE formaciónDATAFILE ‘/oradata/SBLFOR/datos/formacion1.dbf’ SIZE 100MEXTENT MANAGEMENT LOCAL UNIFORM SIZE 64KSEGMENT SPACE MANAGEMENT AUTO;

6.1.2. Configuración manual

Para la configuración manual del espacio contamos con la clausula STORAGE usada en lacreación/modificación de un objeto. A modo de ejemplo vamos a determinar como se implementan enlas tablas (los segmentos de datos son el almacenamiento lógico para una tabla)

Con el comando CREATE TABLE podemos crear una tabla, que es la estructura básica de una basede datos. En el momento de la creación se puede especificar la siguiente información:

- Definiciones de columnas (tipos de datos y longitud).- Restricciones de Integridad.- Características de almacenamiento del objeto. Dónde se almacena y cuánto ocupa.

SQL> CREATE TABLE esquema.nombre_tabla (COL1 tipo_dato_col1 (longitud) [restriccion_int],COL2 tipo_dato_col2 (longitud) [restriccion_int],COL3 tipo_dato_col3 (longitud) [restriccion_int],...COLn tipo_dato_coln (longitud) [restriccion_int][, declaración opcional de más restricciones de integridad] )STORAGE ( INITIAL valor

NEXT valorMINEXTENTS valorMAXEXTENTS valorPCTINCREASE valorPCTFREE valorPCTUSED valorINITTRANS valorMAXTRANS valor

TABLESPACE ....;

A excepción de INITIAL y MINEXTENTS, todos los parámetros de asignación de espaciopueden modificarse (ALTER TABLE...) después de crear el objeto. Estos nuevos valores seránválidos a partir de la siguiente asignación de extensiones al segmento.

Por cada segmento, ORACLE guarda una lista de bloques libres que se guarda en el bloquede cabecera del segmento. Cuando no hay bloques libres en la lista, se asigna una nueva extensión.Cuando es asignada, se añaden todos los bloques a la lista de bloques libres del segmento.

Si al borrar o actualizar registros se cumplen las circunstancias explicadas anteriormente, lacantidad de espacio en uso de un bloque desciende por debajo del límite marcado por PCTUSED, seañade el bloque a la lista de los libres para ese segmento. Significa que un bloque puede sercandidato a inserciones sin estar completamente vacío.

El equilibrio entre PCTFREE y PCTUSED evitará la fragmentación, facilitará la gestión ymejorará el rendimiento de la Base de Datos.

Page 75: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 75 de 127

6.2. Información sobre segmentos/bloques

Existen diversas vistas para obtener información sobre el uso de segmentos, bloques,extensiones,etc.

DBA_SEGMENTSDBA_EXTENTSDBA_FREE_SPACE

La vista DBA_SEGMENTS nos permite obtener el numero de extensiones y bloques reservadas porun segmento.

SQL> SELECT SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME,EXTENTS, BLOCKS

FROM DBA_SEGMENTSWHERE OWNER='GENLOGS7';

SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME EXTENTS BLOCKS------------------------------------------------------------------------------------------------------------------------------G_LOG_ATTRS TABLE GENLOGS7 111 40960G_LOG_SCHEMA_INFO TABLE GENLOGS7 1 8G_LOG_MESSAGES_OLD TABLE GENLOGS7 64 8192G_LOG_MESSAGES TABLE GENLOGS7 64 8192PK_G_LOG_ATTRS INDEX GENLOGS7 105 34816G_LOG_ATTRS1 INDEX GENLOGS7 107 36864G_LOG_ATTRS2 INDEX GENLOGS7 111 40960

La vista DBA_EXTENTS nos muestra las extensiones utilizadas por un segmento dado.

SQL> SELECT EXTENT_ID,FILE_ID,BLOCK_ID,BLOCKSFROM DBA_EXTENTSWHERE OWNER='GENLOGS7'AND SEGMENT_NAME='G_LOG_ATTRS';

EXTENT_ID FILE_ID BLOCK_ID BLOCKS------------------------------------------------------------------

0 4 145 81 4 8865 8

.........................................109 4 171017 1024110 4 175113 1024

La vista DBA_FREE_SPACE nos permite ver las extensiones libres por tablespace.

SQL> SELECT TABLESPACE_NAME,COUNT(*),MAX(BLOCKS), SUM(BLOCKS)

FROM DBA_FREE_SPACEGROUP BY TABLESPACE_NAME;

TABLESPACE_NAME COUNT(*) MAX(BLOCKS) SUM(BLOCKS)------------------------------ ---------- ----------- ----------------------------------GENCFG7 1 8656 8656GENLOGS7 4 71672 80096SYSTEM 1 7568 7568UNDOTBS 10 125736 127832USERS 1 12392 12392

Page 76: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 76 de 127

7. Arranque y Parada de la Base De Datos.

7.1. Arranque de la Base de Datos.

El arranque de una B.D. Oracle requiere tres etapas que veremos diferenciadas. Si queremospodemos indicar a Oracle que las realice todas seguidas:

$ sqlplus “/ as sysdba”

SQL> STARTUP;

7.1.1. Arrancar la Instance

En esta parte del arranque se generan los procesos background.

Se crea la SGA. Sus dimensiones se basan en el fichero de inicialización init.ora o en el fichero spifle.

$ sqlplus “/ as sysdba”

SQL> STARTUP NOMOUNT;Oracle Instance started.

7.1.2. Montar la Base de Datos

En esta parte del proceso de arranque se producen la conexión al/los archivo/s de control. En esteestado se puede:

Cambiar el modo de archivado de la B.D. Renombrado de archivos de Redo Log o del asociado al tablespace SYSTEM. Crear, modificar o suprimir nuevos Redo Log o grupos de Redo Log.

SQL> ALTER DATABASE MOUNT;Database mounted.

7.1.3. Abrir la Base de Datos

En esta parte de proceso abren todos los ficheros asociados a los tablespaces y los ficheros de RedoLog. La B.D. está accesible para todos los usuarios. Si es necesaria una recuperación (por un fallo deluz o CPU), se produce en este momento.

SQL> ALTER DATABASE OPEN;Database opened.

7.1.4. Otras Alternativas de Arranque:

Arranque solo para usuarios con el privilegio RESTRICTED SESSION.

SQL> STARTUP RESTRICT;

Page 77: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 77 de 127

Oracle permite poner la base de datos en modo restringido de forma dinámica:

SQL> ALTER SYSTEM ENABLE/DISABLE RESTRICTED SESSION;

Después de poner la base de datos en modo restringido puede ser necesario “matar” las distintassesiones antes de realizar last areas administrativas previstas.

Necesitamos obtener los valores SID y SERIAL# de la vista v$SESSION que identifican a las distintassesiones. Una vez obtenidos dichos valores procederemos a matar las sesiones de la siguientemanera:

SQL> ALTER SYSTEM KILL SESSION ‘SID, SERIAL#’;

Arranque forzado

SQL> STARTUP FORCE;

Arranque con un fichero de parámetros distinto al habitual o localizado en una situación diferente adonde se encuentra por defecto.

SQL> STARTUP PFILE=/directorio/nuevo_fichero_init.ora;

También podemos abrir la base de datos en modo READ ONLY. Si lo hacemos de esta manerapodemos:

- Evitar cualquier modificación por parte de los usuarios.- El uso de redo log.

SQL> ALTER DATABASE OPEN READ ONLY;

Page 78: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 78 de 127

7.2. Parada de la Base de Datos.

La parada de una B.D. Oracle se realiza mediante el comando SHUTDOWN.

7.2.1. Shutdown Normal

Espera a que los usuarios conectados actualmente finalicen TODAS las operaciones.

Evita nuevas conexiones. Los usuarios que intentan conectarse reciben el mensaje "Shutdown inprogress".

Cierra y desmonta la B.D. Cierra la SGA para los procesos background.

No necesita recuperación al arrancar de nuevo.

$ sqldba lmode=y

SQLDBA> connect INTERNAL

Connected.

SQLDBA> shutdown NORMAL;

Database Closed.Database Dismounted.Oracle Instance Shutdown.

7.2.2. Shutdown Immediate

Espera a que las transacciones actuales se completen

Evita nuevas transacciones y nuevas conexiones. Los usuarios que intentan conectarse o los que yaestán conectados al intentar realizar una nueva transacción reciben el mensaje "Shutdown inprogress".

El proceso PMON finaliza las sesiones no activas y realiza ROLLBACK de aquellas transaccionesque no estén validadas.

Cierra y desmonta la B.D. Cierra la SGA para los procesos background.

No necesita recuperación al arrancar de nuevo.

$ sqldba lmode=y

SQLDBA> connect INTERNAL

Connected.

SQLDBA> shutdown IMMEDIATE;

Database Closed.Database Dismounted.Oracle Instance Shutdown.

Page 79: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 79 de 127

7.2.3. Shutdown Abort

Parada drástica, no espera a que los usuarios conectados actualmente finalicen sus transacciones. Elusuario conectado recibe el mensaje "No logged on".

No se realiza ROLLBACK de las transacciones pendientes.

Cierra y desmonta la B.D. Cierra la SGA para los procesos background.

SI necesita recuperación al arrancar de nuevo.

$ sqldba lmode=y

SQLDBA> connect internal

Connected.

SQLDBA> shutdown ABORT;

Database Closed.Database Dismounted.Oracle Instance Shutdown.

Page 80: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 80 de 127

8. Parametrización de OracleEn el documento de optimización de Oracle veremos en detalle este apartado.

8.1. Uso de Pfile o Spfile

Para indicar el arranque de una manera o de otra:

SQL> startup pfile=/home/app/oracle/9.0.2/dbs/initPRODSBL7.ora

SQL> startup spfile=/home/app/oracle/9.0.2/dbs/ spfilePRODSBL7.ora

Si no se le indica nada arranca como la última vez.

Para actualizar uno desde el otro

SQL> CREATE PFILE FROM SPFILE;SQL> CREATE PFILE=/ruta/fichero.ora FROM SPFILE;

SQL> CREATE SPFILE FROM PFILE;SQL> CREATE SPFILE=/ruta/fichero.ora FROM PFILE;

Ejemplos de cambio de parámetros con actualización del fichero spfile;

SQL> ALTER SYSTEM SET large_pool_size=16777216 SCOPE=SPFILE;SQL> ALTER SYSTEM SET parallel_automatic_tuning=FALSE SCOPE=SPFILE;SQL> ALTER SYSTEM SET db_writer_processes=3 SCOPE=SPFILE;

Si queremos actualizar el valor exclusivamente para la sesión del usuario:

SQL> ALTER SYSTEM SET large_pool_size=16777216 SCOPE=MEMORY;

Page 81: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 81 de 127

9. Seguridad en la Base de Datos

9.1. Seguridad y Privilegios del Administrador (DBA)

Para realizar las tareas de administración se necesitan privilegios adicionales en la base de datos yprobablemente en el sistema operativo. El administrador de la base de datos tiene que tener un usuariodel sistema operativo para poder acceder a la base de datos. Este usuario del sistema operativo tieneque tener unos privilegios especiales (p.e. en UNIX debe pertenecer al grupo de usuarios con privilegiosde administrador: DBA) para poder ejecutar opciones privilegiadas de la herramienta SVRMGRL que setratará más adelante.

Existe un rol predefinido (ver roles más adelante) llamado DBA que se crea con cada base de datosOracle. Este role contiene TODOS los privilegios del sistema. Sólo debe concederse a superusuarios.

Existen dos usuarios, creados al instalar la Base de Datos, los cuales tienen concedido el rol DBA.Estos usuarios son:

- SYS cuya password inicial es CHANGE_ON_INSTALL. Todas las tablas y vistas del diccionariode datos son propiedad de este usuario. El mantenimiento de la integridad del diccionario logestiona internamente Oracle. En muchas bases de datos esta prohibida la entrada a través deeste usuario.

- SYSTEM cuya password inicial es MANAGER. Tiene todos los privilegios del sistema al igual queSYS. Bajo la identidad de este usuario se suelen instalar las tablas utilizadas por las herramientasOracle, tales como Forms, Reports, Plus. No conviene que los usuarios mezclen tablas deaplicaciones con tablas de herramientas.

En cualquier caso, y para prevenir accesos no deseados al diccionario de datos o a las tablas deherramientas, es conveniente cambiar las passwords de estos usuarios.

9.1.1. Privilegios SYSOPER y SYSDBA

Oracle cuenta con el mismo dispositivo de seguridad para las operaciones que vaya a realizar con labase de datos (arranque y parada). Para ello, deberá utilizar los privilegios del sistema SYSOPER ySYSDBA. Para que un usuario pueda conectar desde el sistema operativo con esos privilegios debeexistir un archivo de contraseñas del sistema operativo.

El archivo de contraseñas se crea con la utilidad ORAPWD, cuyas sentencias necesarias semuestran en el siguiente ejemplo:

$ orapwd file=<nombre_del_fichero> password=<contraseña> entries=<usuarios>.

Donde:

File.- Nombre del fichero (obligatorio) conviene que sea orapwSID.Password.- Contraseñas para SYS e INTERNAL (obligatorio).Entries.- Número máximo de DBA (opcional).

Además hay que modificar el parámetro REMOTE_LOGIN_PASSWORD_FILE de la base de datosque puede tener uno de los siguientes valores:

- NONE: Si se permiten conexiones no seguras.

Page 82: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 82 de 127

- EXCLUSIVE: Las conexiones SYSOPER y SYSDBA permitidas por defecto a los usuariosSYS e INTERNAL. estos privilegios se pueden dar a cualquier usuario que tengapermisos de conexión a la base de datos.

- SHARED: El archivo de contraseñas podrá ser utilizado por más de una instancia dentrode la misma máquina. El inconveniente es que no se podrán añadir nuevos usuarios alarchivo de contraseñas ya que sólo permitirá realizar operaciones seguras sobre la basede datos con las cuentas SYS e INTERNAL.

Page 83: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 83 de 127

9.2. Acceso a la Base de Datos

El principal propósito de la Seguridad de la Base de Datos es permitir o evitar que los usuariosaccedan a objetos y proteger la información evitando que los usuarios ejecuten comandos quepuedan dañarla. En este capítulo se verá cómo controlar el acceso y la utilización de una B.D. Oracle.Antes de comenzar, vamos a ver unos conceptos que nos serán necesarios:

Usuario.- Persona que accede a la Base de Datos.

Esquema.- Colección de objetos propiedad de un usuario. Se pueden crear para agruparcomandos de creación de objetos.

Privilegio.- Permiso para realizar una operación determinada. Veremos cómo se conceden ysuprimen. A los privilegios que controlan las sentencias SQL que puede ejecutar un usuario,se les llama Privilegios del Sistema. A los privilegios que controlan las operaciones quepueden efectuarse sobre un objeto específico, se les llama Privilegios sobre Objetos. Losprivilegios del sistema tienen prioridad sobre los privilegios sobre objetos.

Roles.- Conjunto de Privilegios (sobre objetos o del sistema). Se utilizan para facilitar eltrabajo del administrador. Un rol puede contener a otro rol.

Quotas.- Control de espacio en disco que un usuario puede utilizar. Se asignan en elmomento de crear o modificar al usuario. Estos controles se aplican sobre los tablespaces yvan asociados al usuario, no al rol.

Perfiles.- Control de recursos del sistema disponibles para los usuarios. Veremos cómocrearlos, modificarlos, activarlos y eliminarlos.

9.2.1. Creación y Gestión de Usuarios

El administrador es la persona encargada de crear usuarios en la base de datos, y de darles unnombre de usuario y una clave de acceso que, en principio, es completamente independiente de ladel sistema operativo. El administrador también concede privilegios del sistema a los usuarios, comopor ejemplo, el de conexión a la B.D. También es el usuario encargado de gestionar cuotas de disco yperfiles de consumo de recursos.

En las aplicaciones, son los propietarios de las aplicaciones y sus objetos (el propietario de tablas,índices o procedimientos) los que deciden quién manipula los datos y qué tipo de operacionespueden realizar sobre ellos (por ejemplo, pueden actualizar datos de una tabla pero no borrar filas).

Los usuarios finales sólo necesitan privilegios sobre objetos. A nivel del sistema basta con tenerprivilegio de conexión. Tampoco necesitan cuotas de ocupación.

9.2.1.1. Creación de un Usuario

La creación de un usuario puede llevarse a cabo desde SQL*Plus.

SQL> CREATE USER <nombre> IDENTIFIED BY <contraseña>DEFAULT TABLESPACE <nombre>TEMPORARY TABLESPACE <nombre>;

En el ejemplo creamos un usuario dándole una contraseña.

Al indicar el default tablespace le decimos donde se almacenaría cualquier objeto creado por ese

Page 84: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 84 de 127

usuario (salvo que en la ejecuación de los comandos create table, create index… se indique locontrario) En caso de no ponerse el tablespace por defecto sería system; siempre hay queevitar que objetos de usuarios se creen en dicho tablespace.

Con temporary tablespace indicamos donde se llevarán a cabo las sentencias SQL que requierenespacio en disco para realizar una ordenación o fusión. Como en el caso anterior si no se indicanada, por defecto es el tablespace SYSTEM.

Conexiones a través del Sistema Operativo

Podemos definir usuarios que se conecten directamente a la base de datos sin tener que poner suusuario/clave al acceder a las herramientas Oracle. En este caso la validación se realiza a través delnombre de usuario y contraseña a nivel de sistema operativo. Se debe crear, a nivel de Oracle, unusuario con el mismo nombre que el del sistema operativo, precedido de una cadena identificativacon la opción IDENTIFIED EXTERNALLY al crearlo.

SQL> CREATE USER <cadena_caracteres><usuario> IDENTIFIED EXTERNALLY;

Por ejemplo:

SQL> CREATE USER ops$jramirez IDENTIFIED EXTERNALLY;

El usuario puede ahora ejecutar desde el prompt del sistema operativo el siguiente comando:

$ sqlplus /

El usuario entra en la herramienta sin tener que introducir una palabra de paso ni el nombre deusuario.

El administrador también pudo establecer la conexión automática de la siguiente forma:

SQL> CREATE USER ops$jramirez IDENTIFIED BY telefono;

En esta ocasión el usuario puede conectarse a Oracle de dos formas diferentes:

Desce su cuenta de sistema operativo:

$ sqlplus /

Desde otra cuenta de sistema operativo:

$ sqlplus ops$jramirez/telefono

Estas conexiones son apropiadas para usuarios finales, dado que se saltan un nivel de seguridad. Elparámetro que establece cual es la cadena de caracteres que indica una conexión automática es eldel init.ora OS_AUTHENT_PREFIX, y su valor por defecto es la cadena “OPS$”, pero puedemodificarse y el resultado sería el siguiente:

OS_AUTHENT_PREFIX USERNAME“OPS$” OPS$jramirez“XYZ” XYZjramirez

“” jramirez (*)

(*) En este último caso es obligatorio al crear el usuario en la Base de Datos especificar en la cláusulaIDENTIFIED el valor EXTERNALLY. Es la única forma que tiene la B. D. de saber que es un usuariode conexión automática.

Page 85: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 85 de 127

9.2.1.2. Modificación y borrado de un usuario

Se permite modificar un usuario ya existente para cambiar ciertas características asociadas a dichousuario, por ejemplo:

Contraseña. La identificación a través del Sistema Operativo. El tablespace por defecto. El tablespace temporal. La cuota sobre algún tablespace. Perfil. Rol/Roles por defecto. Estos sólo se pueden asignar después de que el usuario ha sido creado (no pueden darse desde el comando Create)

Por ejemplo:

SQL> ALTER USER manuel IDENTIFIED BY gazpachoDEFAULT TABLESPACE datosb;

Los cambios no afectan, si el usuario se encuentra conectado a la sesión activa. Se harán efectivos apartir de la siguiente conexión. Los usuarios pueden cambiarse su propia palabra de paso con elcomando GRANT.

Podemos eliminar un usuario que no esté conectado en ese momento a la base de datos. Si esteusuario es propietario de algún objeto se debe especificar la opción cascade que fuerza laeliminación de todos los objetos propiedad del usuario.

9.2.1.3. Visualización de Información de Usuarios

La información acerca de los usuarios que existen en la base de datos se encuentra almacenada enel Diccionario de Datos. La información del Diccionario de Datos incluye información sobre:

Todos los usuarios de la B.D. El tablespace por defecto para crear tablas, índices, etc. de cada usuario. El tablespace utilizado para almacenamiento temporal. Información sobre cuotas de usuario.

Las tablas del diccionario de datos desde las que podemos extraer información sobre los usuariosson preferentemente:

TABLAS INFORMACION CONTENIDAUSERS_USERS Información sobre los usuarios actualmente conectado.ALL_USERS Resumen de los usuarios definidos en la base de datos.

DBA_USERS Información detallada sobre todos los usuarios definidos en la basede datos. Incluye la contraseña encriptada.

USER_TS_QUOTAS

Información sobre las cuotas asignadas al usuario actual. Cuando enla cuota aparece un –1, significa que ésta es ilimitada. Si aparecieseun 0, indicaría que tiene cuota ilimitada pero que la ha recibido através de un ROL, no se le ha puesto a ilimitada directamente.

DBA_TS_QUOTAS Información sobre las cuotas de todos los usuarios.V$SESSION Información sobre las sesiones de usuario en la base de datos.

9.2.1.4. Eliminar una Sesión de Usuario

En este punto vamos a comprobar cómo se puede eliminar una sesión de usuario dentro de la base

Page 86: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 86 de 127

de datos, sin tener que recurrir al Sistema Operativo. Eliminando una sesión de usuario se puede:

Prevenir que el usuario ejecute llamadas a la B.D. Liberar los recursos bloqueados.

Se debe eliminar una sesión de usuario cuando:

Un usuario retenga recursos que otro usuario necesita urgentemente. El Administrador necesite realizar un shutdown de la base de datos. En este último caso,

el DBA puede realizar un shutdown con la opción IMMEDIATE, que le evitará tener quematar las sesiones de los usuarios.

Si la sesión del usuario está realizando alguna actividad, ésta debe completarse antes de eliminar lasesión. Por ejemplo, si está realizando un rollback de una transacción, Oracle espera hasta que laactividad se completa.

La sintaxis es:

SQL> ALTER SYSTEM KILL SESSION ‘<sid>,<serial>’;

Donde SID es el número Identificativo del Sistema para el usuario y SERIAL es el número de serie delusuario dado por Oracle.

En el siguiente ejemplo comenzamos por averiguar la información sobre las sesiones de los usuarios.

SQL> SELECT SID,SERIAL#,USERNAME,STATUSFROM V$SESSION;

ID SERIAL# USERNAME STATUS----- ------------ ----------------- -----------6 1 SYS ACTIVE7 9 SYSTEM ACTIV9 30 MARTA ACTIVE

SQL> ALTER SYSTEM KILL SESSION ‘9,30’;

9.2.1.5. Gestión de contraseñas

La gestión de las contraseñas por parte de Oracle nos permite entre otros aspectos:

- Bloqueo de cuentas después de un número de conexiones erróneas.- Definición de tiempo de vida de las contraseñas con obligación de cambiarla tras el

periodo definido.- Histórico de contraseñas para evitar la repetición de contraseñas antiguas.- Etc.

Oracle bloqueará un usuario que supere el número de intentos de conexión erróneos indicados en elparámetro FAILED_LOGIN_ATTEMPTS. La cuenta se desbloqueara cuando se supere el tiempoindicado en el parámetro PASSWORD_LOCK_TIME.

Mediante el comando ALTER USER podemos bloquear o desbloquear una cuenta.

Existen otros parámetros que nos permiten gestionar las contraseñas:

PASSWORD_LIFE_TIME.- Tiempo en días después del cual la contraseña expira.PASSWORD_GRACE_TIME.- Tiempo de gracia en días para cambiar la contraseñadespués de la primera conexión correcto tras expirar la contraseña.

Page 87: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 87 de 127

PASSWORD_REUSE_TIME.- Número de días antes de que una contraseña puede serreutilizada.PASSWORD_REUSE_MAX.- Número máximo de veces que una contraseña puede serreutilizada.

Si queremos dar unos valores para todos los usuarios procederemos a modificar el perfil DEFAULT(ver más adelante) con las nuevas limitaciones:

SQL> ALTER PROFILE defaultFAILED_LOGIN_ATTEMPTS 5PASSWORD_LIFE_TIME 60PASSWORD_GRACE_TIME 5;

También podemos crear un perfil (ver más adelante) con la configuración de contraseñas deseadapara asignarselo a los usuarios:

SQL> CREATE PROFILE contra_5 LIMITFAILED_LOGIN_ATTEMPTS 3PASSWORD_LOCK_TIME UNLIMITEDPASSWORD_LIFE_TIME 30PASSWORD_GRACE_TIME 10;

Uso de la contraseña encriptada

Podemos obtener, por ejemplo, la contraseña encriptada.

SQL> select USERNAME,PASSWORD from dba_users;

USERNAME PASSWORD------------------------------ ------------------------------PERFSTAT AC98877DE1297365JUAN A786B8559AC37CA8DBSNMP E066D214D5421CCCSYSTEM D4DF7931AB130E37SYS 09237DB1F0F230CD

Conociendo ese valor podemos cambiar la contraseña a un usuario y volver a dejar después sucontraseña original aunque la desconozcamos. La forma de poner la contraseña teniendo el valorencriptado es:

SQL> ALTER USER juan IDENTIFIED BY VALUES ‘A786B8559AC37CA8’;

Page 88: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 88 de 127

9.3. Control de Privilegios

Un privilegio es el derecho a realizar un tipo de operación sobre la Base de Datos o sobre un objetocontenido en la misma. El control del Administrador respecto a los privilegios debe ser:

Permitir al usuario el derecho a realizar un tipo de operación en concreto (por ejemplo,posibilidad de crear tablas o disparadores en la base de datos).

Activar o restringir el acceso y cambio de los datos (por ejemplo, poder seleccionar yborrar filas de una tabla propiedad de otro usuario).

Activar o restringir la posibilidad de realizar cambios en la estructura de la base de datos(como alterar un tablespace o crear un usuario).

Conceder privilegios a un usuario o a un rol de manera individual. Conceder privilegios a todos los usuarios de la base de datos (PUBLIC).

Se pueden definir dos tipos de privilegios:

SISTEMA.- Realizar una acción en particular (Create view), o realizar una operación enparticular sobre un tipo de objeto en particular (Create any view).

OBJETO.- Realizar una operación en particular sobre una tabla, vista, función o paqueteespecífico/a.

Para mejorar el mantenimiento y la gestión de privilegios pueden utilizarse roles, que son grupos oconjuntos de privilegios relacionados.

9.3.1. Privilegios del Sistema

Los privilegios del sistema permiten a los usuarios realizar una operación en particular o una clase deoperación en particular. En general, un privilegio del sistema es el derecho a realizar un tipo decomando. Existen los siguientes subtipos:

En el esquema de un usuario:Por ejemplo, el privilegio de crear una tabla/vista o secuencia en el esquema propiedaddel usuario.

Sobre todos los objetos de un tipo específico:Por ejemplo, el privilegio de crear tablas bajo el esquema de cualquier usuario sin tenerque realizar una conexión bajo su identidad. O por ejemplo, el derecho a actualizar oborrar filas de CUALQUIER tabla de la B.D.

En el sistema o a usuarios:Por ejemplo, crear un usuario, un tablespace, o crear una sesión para conectarse a laB.D.

Como acabamos de observar, un privilegio del sistema no es específico de un esquema o de un tipode estructura. Son específicos de una operación en particular o de una clase de operación sobre untipo de objeto o de estructura en particular.

9.3.1.1. Concesión de privilegios de sistema

La concesión de un privilegio (tanto del sistema, como sobre objetos) se realiza con el comandoGRANT.

Page 89: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 89 de 127

SQL> GRANT <privilegio> TO <usuario> [WITH ADMIN OPTION];<rol>, <rol> <public>

Como vemos en la sintaxis se puede asignar un privilegio de sistema o ul rol. Estos se puedenasignar a un usuario concreto o a un rol o a todos los usuarios de la base de datos.

La claúsula WITH ADMIN OPTION es opcional y permite al receptor del privilegio o rol transmitir loque se le ha concedido a otros usuarios/roles. También, si se concede un rol con WITH ADMINOPTION, se permite que el receptor pueda borrarlo o modificarlo.

Veamos algunos ejemplos:

Conceder al usuario SARA el privilegio de conectarse a la Base de Datos y de crear tablas en supropio esquema:

SQL> GRANT CREATE SESSION, CREATE TABLE TO sara;

Conceder al usuario Sara la posibilidad de modificar la estructura de cualquier tabla de la Base deDatos:

SQL> GRANT ALTER ANY TABLE TO sara;

9.3.1.2. Anulación de privilegios de sistema

Si queremos suprimir los privilegios del sistema (o de objeto) a un usuario o a un rol usaremos elcomando REVOKE. Un privilegio del sistema puede suprimirlo otro usuario distinto al que lo hayaconcedido. Los privilegios que se conceden o suprimen se hacen efectivos inmediatamente.

SQL> REVOKE <privilegio> FROM <usuario>;<rol>, <rol> <public>

Suprimir el privilegio de crear vistas y crear sinónimos al usuario PEPE:

SQL> REVOKE CREATE VIEW, CREATE SYNONYM FROM pepe;

Suprimir el privilegio de modificar usuarios al rol ADMINISTRA:

SQL> REVOKE ALTER USER FROM administra;

9.3.1.3. Visualización de Privilegios del Sistema

Se puede utilizar la vista DBA_SYS_PRIVS para visualizar los privilegios concedidos a los usuariosy/o roles. Por ejemplo para comprobar los privilegios del sistema concedidos al usuario PEPE y al rolADMINISTRA:

SQL> SELECT * FROM DBA_SYS_PRIVSWHERE GRANTEE_NAME IN (‘pepe’,’administra’)ORDER BY GRANTEE_NAME;

GRANTEE_NAME PRIVILEGE ADM------------------------ --------------- -------ADMINISTRA ALTER TABLESPACE NOADMINISTRA CREATE TABLESPACE NOADMINISTRA ALTER USER NOADMINISTRA CREATE USER NOADMINISTRA MANAGE TABLESPACE NO

Page 90: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 90 de 127

PEPE CREATE SESSION NOPEPE CREATE SYNONYM NOPEPE CREATE TABLE NOPEPE CREATE VIEW NO

Tabla de Privilegios del SistemaGRUPO COMANDO DESCRIPCIÓNANALYZE analyze any Analizar cualquier tabla, agrupación o índice de la base de datos.

AUDIT audit any Auditar cualquier objeto de la B.D.audit system Activar y desactivar la auditoría de privilegios o de sentencias.

CLUSTER

create cluster Crear una agrupación en el esquema propio.create any cluster Crear agrupaciones bajo cualquier esquema.alter any cluster Modificar cualquier agrupación de la B.D.drop any cluster Borrar cualquier agrupación de la B.D.

DATABASE alter database Modificar la B.D. Añadir ficheros a los tablespaces, siempre que setengan privilegios del sistema operativo.

DATABASE LINKcreate database link Crear enlaces de B.D. privados en el esquema propio.create public database link Crear enlaces de B.D. públicosdrop public database link Borrar enlaces de B.D. públicos.

INDEX create any index Crear índices sobre cualquier tabla en cualquier esquema.alter/drop any index Modificar/Borrar cualquier índice de la B.D.

PRIVILEGE grant any privilege Conceder cualquier privilegio del sistema (no sobre objetos).

PROCEDURE

create procedure Crear un procedimiento en el esquema propio.create any procedure Crear procedimientos bajo cualquier esquema.alter any procedure Modificar cualquier procedimiento de la B.D.drop any procedure Borrar cualquier procedimiento de la B.D.execute any procedure Ejecutar cualquier procedimiento de la B.D.

PROFILEcreate profile Crear perfiles.alter/ drop profile Modificar/Borrar cualquier perfil de la B.Dalter resource cost Calcular los costes de los recursos usados en todas las sesiones.

ROLEcreate role Crear roles.alter / drop any role Modificar/Borrar cualquier rol en la B.D.grant any role Conceder cualquier rol de la B.D.

ROLLBACKSEGMENT

create rollback segment Crear un segmento de rollback.alter /drop rollbacksegment

Modificar/Borrar un segmento de rollback.

SESSION

create session Conectarse a la B.D.alter session Ejecutar ALTER SESSION para cambiar parámetros de entorno.restricted sess ion Conectarse a una B.D. que haya sido arrancada con el comando

STARTUP RESTRICT (OSOPER y OSDBA lo tienen).SNAPSHOT create snapshot Crear réplicas de tablas remotas en el esquema propio.

create any snapshot Crear réplicas de tablas remotas bajo cualquier esquema.alter any sanpshot Modificar cualquier réplica de la B.D.drop any snapshot Borrar cualquier réplica de la B.D.

SYNONYM create synonym Crear sinónimos en el esquema propio.create any synonym Crear sinónimos bajo cualquier esquema.create public synonym Crear sinónimos públicosdrop any synonym Borrar cualquier sinónimo de la B.D.

SYSTEM alter system Ejecutar el comando ALTER SYSTEMTABLE create table Crear una tabla en el esquema propio.

create any table Crear tablas bajo cualquier esquema.alter any table Modificar la estructura de cualquier tabla de la B.D.drop any table Borrar cualquier tabla de la B.D.export any table Realizar una exportación incremental de cualquier tabla de la B.D.lock any table Bloquear cualquier tabla o vista de la B.D.comment any table Comentar cualquier tabla, vista o columna del diccionario de datos.select any table Realizar consultas de cualquier tabla de la B.D.insert any table Realizar inserciones en cualquier tabla.update any table Realizar actualizaciones en cualquier tabla de la B.D.delete any table Realizar borrados de filas de cualquier tabla de la B.D.

TABLESPACE create tablespace Crear un tablespace en la B.D. Añadir ficheros al sistema operativovía Oracle (se deben tener privilegios a nivel del sistema operativo.

alter tablespace Modificar tablespaces.alter manage tablespace Poder poner un tablespace off/online o begin/end backup.drop tablespace Eliminar un tablespace.unlimited tablespace Utilizar cantidades de espacio ilimitadas en cualquier tablespace.

Page 91: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 91 de 127

TRIGGER create trigger Crear un disparador en el esquema propio.create any trigger Crear disparadores bajo cualquier esquema.alter any trigger Modificar cualquier disparador de la B.D.drop any trigger Borrar cualquier disparador de la B.D.

USER create user Crear un usuario.become user Convertirse de forma temporal en otro usuario.alter/drop user Modificar/Eliminar cualquier usuario de la B.D.

VIEW create view Crear una vista en el esquema propio.create any view Crear vistas bajo cualquier esquema.drop any view Borrar cualquier vista de la B.D.

9.3.2. Privilegios Sobre Objetos

Un privilegio sobre objeto concede a un usuario o rol el derecho de ejecutar una acción particularsobre una tabla, vista, secuencia o procedimiento almacenado en concreto. El propietario de unobjeto (el que lo crea) adquiere automáticamente TODOS los privilegios sobre él.

Los tipos de privilegios varían según el objeto sobre el que se concedan:

PRIV. OBJETO TABLA VISTA SECUENCIA PROCEDIMIENTOALTER X XDELETE X XEXECUTE XINDEX X*

INSERT X XREFERENCES X*

SELECT X X* * XUPDATE X X

(*) El privilegio NO puede concederse a un rol.

(**) El privilegio PUEDE concederse también a réplicas de tablas (snapshots).

El privilegio de UPDATE puede concederse a nivel de columna. Si no se indica nada en el comandoGRANT todas las columnas de la tabla indicada serán actualizables. Si después del nombre de latabla, se indica la columna o columnas entre paréntesis, sólo podrán actualizarse dichas columnas enla tabla.

PRIVILEGIO SENTENCIAS SQL PERMITIDASALTER ALTER objeto (tabla o secuencia)DELETE DELETE FROM (tabla o vista)

EXECUTE EXECUTE objeto (procedimiento o función). Referenciar variablespúblicas.

INDEX CREATE INDEX ON objeto (sólo tablas).INSERT INSERT INTO objeto (tabla o vista).

REFERENCESSentencia CREATE o ALTER TABLE que lleve la definición de unarestricción de integridad de clave ajena (FOREIGN KEY) sobre un objeto(sólo tablas).

SELECT SELECT … FROM objeto (tabla, vista, réplica) o sentencias SQLutilizando generadores de secuencia

UPDATE UPDATE objeto (tabla o vista).ALL TODOS los privilegios anteriormente mencionados.

9.3.2.1. Concesión de Privilegios Sobre Objetos

La concesión de un privilegio (tanto del sistema, como sobre objetos) se realiza con el comandoGRANT.

Page 92: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 92 de 127

SQL> GRANT <privilegio_objeto> <(columna)>ON <esquema> <objeto> TO <usuario> [WITH GRANT OPTION];

<rol><public>

Se especifíca la columna cuando se conceden los privilegios INSERT, REFERENCES o UPDATE. Siconcediendo estos privilegios se omite el/los nombre/s de la/s columna/s, se conceden los privilegiossobre todas las columnas de la tabla.

La claúsula WITH GRANT OPTION permite al receptor del privilegio transmitirlo a otros usuarios. Elreceptor del privilegio debe ser un usuario o PUBLIC. GRANT OPTION no puede concederse sobreroles.

Veamos algunos ejemplos:

Conceder privilegios de select sobre la tabla CONTA al usuario JUAN y al rol DESA:

SQL> GRANT SELECT ON CONTA TO juan,desa;

Conceder el privilegio insertar en las columnas EMPNO, ENAME, DEPTNO, y el de actualizar sólo enla columna ENAME de la tabla EMP al usuario JUAN:

SQL> GRANT INSTER (empno,ename,deptno) UPDATE (ename) ON emp TO juan;

9.3.2.2. Diferencias entre WITH GRANT / WITH ADMIN OPTION

Se concede un privilegio del sistema con WITH ADMIN OPTION con el fin de que el receptor pueda,a su vez, conceder o suprimir ese privilegio a otros usuarios. Los privilegios que pueden concedersecon la opción WITH ADMIN OPTION sólo pueden ser privilegios del sistema (nunca privilegios sobreobjetos). Igualmente, puede concederse un privilegio del sistema con WITH ADMIN OPTION a un rol(excepto el privilegio UNLIMITED TABLESPACE).

La supresión de un privilegio concedido con WITH ADMIN OPTION no es en cadena. Por ejemplo, Aconcede a B el privilegio CREATE USER con la opción WITH ADMIN OPTION. B se lo concede a C.A decide suprimir el privilegio a B, y C continúa manteniendo el privilegio.

Se concede un privilegio sobre objeto con WITH GRANT OPTION con el fin de que el receptor pueda,a su vez, conceder o suprimir ese privilegio a otros usuarios. Los privilegios que pueden concedersecon la opción WITH GRANT OPTION sólo pueden ser privilegios sobre objetos.

No puede concederse un privilegio sobre objeto con WITH GRANT OPTION a un rol, pero sídirectamente al usuario.

La supresión de un privilegio concedido con WITH GRANT OPTION es en cadena. Por ejemplo, Aconcede a B el privilegio SELECT ON EMP con la opción WITH GRANT OPTION. B se lo concede aC. A decide suprimir el privilegio a B, y C NO continúa manteniendo el privilegio.

9.3.2.3. Supresión de Privilegios Sobre Objetos

Para suprimir privilegios sobre objetos también se utiliza el comando REVOKE.

SQL> GRANT <privilegio_objeto> ON <esquema>.<objeto><all> FROM <usuario> [CASCADE CONSTRAINTS]<rol> <public>

Page 93: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 93 de 127

La claúsula CASCADE CONSTRAINTS elimina todas las restricciones de integridad referencial quehayan sido definidas utilizando el privilegio REFERENCES. Si no se indica esta opción, y hayrestricciones en otras tablas apuntando a la indicada en REVOKE, se produce un error.

Ejemplos:

Suprimir todos los privilegios que tenga el usuario JUAN sobre la tabla CONTABILIDAD:

SQL> REVOKE ALL ON contabilidad FROM pepe;

9.3.2.4. Visualizar Privilegios Sobre Objetos

Se puede visualizar la información sobre los privilegios concedidos sobre un objeto consultando eldiccionario de datos.

Vistas del Diccionario de Datos DisponiblesQUIENPUEDE TABLA DESCRIPCIÓN

DBA DBA_TAB_PRIVS Todos los privilegios sobre objetos de la B.D.DBA_COL_PRIVS Todos los privilegios sobre columnas de la B.D.

USUARIOPROPIETARIO

USER_TAB_PRIVS Privilegios sobre objetos de los que el usuario es propietario,concesor, o receptor del privilegio.

USER_TAB_PRIVS_MADE Todos los privilegios sobre objetos propiedad del usuario.USER_TAB_PRIVS_RECD Privilegios sobre objetos de los que el usuario es el receptor.

USER_COL_PRIVS Privilegios sobre columnas de las que el usuario espropietario, concesor, o receptor del privilegio.

USER_COL_PRIVS_MADE Todos los privilegios sobre columnas propiedad del usuario.USER_COL_PRIVS_RECD Privilegios sobre columnas de los que el usuario es receptor.

TODOS

ALL_TAB_PRIVS Privilegios sobre objetos para los que el usuario o PUBLIC sonlos receptores del privilegio.

ALL_TAB_PRIVS_MADE Privilegios del usuario y privilegios sobre objetos propiedad delusuario.

ALL_TAB_PRIVS_RECD Privilegios sobre objetos para los que el usuario o PUBLIC esel receptor.

TABLE_PRIVILEGES Privilegios sobre objetos que el usuario es propietario,concesor, o receptor del privilegio, o PUBLIC es el receptor.

ALL_COL_PRIVS Privilegios sobre columnas para los que el usuario o PUBLICes el receptor.

ALL_COL_PRIVS_MADE Privilegios sobre columnas para las que el usuario es elpropietario o el concesor del privilegio.

ALL_COL_PRIVS_RECD Privilegios sobre columnas para las que el usuario o PUBLICson receptores del privilegio.

COLUMN_PRIVILEGESPrivilegios sobre columnas de las que el usuario espropietario, concesor, o receptor del privilegio, o PUBLIC es elreceptor.

Por ejemplo:

SQL> SELECT * FROM DBA_TAB_PRIVS;

GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRA-------------- ----------- -------------------- --------------- --------------- ------PUBLIC SYS V_$SGA SYS SELECT YESVENTAS JULIA EMP JULIA SELECT NOPEPE MANOLO DEPT MANOLO SELECT NOJUAN MANOLO DEPT MANOLO DELETE YES

Page 94: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 94 de 127

9.4. Definición de Roles

Los roles son grupos de privilegios que se utilizan para simplificar la supervisión y gestión de unaBase de Datos. Los roles pueden concederse a un usuario o a otro rol. Pueden estar compuestos deprivilegios del sistema o de privilegios sobre objetos. No son propiedad de nadie ni están en elesquema de ningún usuario, puesto que no son objetos. Las definiciones acerca de roles sealmacenan en el diccionario de datos. Pueden activarse y desactivarse temporalmente si se desea.Pueden requerir password para activarse.

CONCESIÓN DE PRIVILEGIOS SIN ROLES

USUARIOS

PRIVILEGIOS

CONCESIÓN DE PRIVILEGIOS CON ROLES

USUARIOS

ROL

PRIVILEGIOS

9.4.1. Beneficios de los Roles

Como principales ventajas de los roles podemos indicar:

Reducen la cantidad de concesiones de privilegios.- Se pueden conceder muchos privilegios con una única sentencia.- Si se necesita dar de alta a un nuevo usuario, no se necesita recordar todos los

privilegios individuales que requiere.

Gestión dinámica de privilegios.- Se puede cambiar el privilegio de un rol si cambia el aplicativo/responsabilidad.- Pueden cambiarse privilegios de usuarios múltiples cambiando solamente un privilegio de

un rol.

Page 95: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 95 de 127

Mejora del rendimiento.- Menos privilegios individuales implica menos código a almacenar.

9.4.2. Creación de Roles

Para crear un rol, se utiliza el comando CREATE ROLE:

SQL> CREATE ROL <rol> NOT IDENTIFIEDIDENTIFIED BY <clave>IDENTIFIED EXTERNALLY;

La claúsula NOT IDENTIFIED indica que Oracle no requiere password para activar el rol. Es laopción por defecto.

IDENTIFIED indica que Oracle requiere una password para activarlo. Con “by clave” se indica la clavede activación del rol. Mientras que con EXTERNALLY Oracle verifica que el acceso del usuariogestionándolo a través de una utilidad del sistema operativo.

Veamos algunos ejemplos:

Crear un rol llamado CONTABILIDAD al que posteriormente deberemos concederle los privilegiosnecesarios para trabajar con los objetos de la aplicación.

SQL> CREATE ROLE contabilidad;SQL> GRANT SELECT, UPDATE, INSERT, DELETE ON apuntes_contables TO

contabilidad;

Crear un rol USUFINAL. Posteriormente se deben conceder los privilegios del sistema necesariospara que pueda conectarse a la base de datos.

SQL> CREATE ROLE usufinal;SQL> GRANT CREATE SESSION TO usufinal;

Crear un rol SUPERUSU para que un usuario que realiza tareas de administración, con una clave quesea AYUDA.

SQL> CREATE ROLE superusu IDENTIFIED BY ayuda;SQL> GRANT CREATE USER, ALTER USER,MANAGE TABLESPACE TO superusu;

Conceder roles a usuarios.

SQL> GRANT contabilidad, usufinal TO pepe;SQL> GRANT superusu TO carmen;

9.4.3. Modificación de un Rol

Para modificar las características de un rol, se utiliza el comando ALTER ROLE.

Modificar el rol SUPERUSU para que no necesite clave para activarlo.

SQL> ALTER ROLE superusu NOT IDENTIFIED;

Se puede limitar el número de roles activos para un usuario. Al usuario se le pueden conceder N rolespero en el momento de conectarse a la base de datos tener activos sólo cierto número, por ejemplo

Page 96: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 96 de 127

N-3. La opción de indicar el número de roles activos en el momento de la conexión se establece conALTER USER DEFAULT ROLE. Si el usuario desea activar alguno de los roles concedidosposteriormente, puede hacerlo con el comando SET ROLE.

9.4.4. Activar / Desactivar Roles

Se pueden activar roles concedidos previamente pero no activos con el comando SET ROLE con lassiguientes ventajas:

Los privilegios contenidos en roles desactivados no están disponibles para los usuarios. Pueden requerir password o una autorización del sistema operativo para activarlos. El comando SET ROLE activa sólo los roles indicados y desactiva los que estuvieran

habilitados en ese momento. Se pueden activar desde: SQL*Plus y SQL*Dba, desde los Precompiladores, desde

FORMS o MENU, PL/SQL, procedimientos almacenados y disparadores de B.D.

Entre las opciones podemos destacar:

- Rol.- Indica el rol a activar para la sesión actual. Todos los roles que no se indican sedesactivan.

- ALL EXCEPT.- Activa todos los roles que el usuario tenga concedidos menos los indicadosen la cláusula EXCEPT. Los roles indicados en la cláusula EXCEPT se deben conceder deforma directa al usuario, nunca a través de otro rol. Tampoco puede utilizarse esta opciónpara roles con password que se han concedido de forma directa al usuario.

- NONE.- Desactiva todos los roles para la sesión del usuario.

Activar el rol SUPERUSU con su password.

SQL> SET ROLE superusu IDENTIFIED BY ayuda;

Activar todos los roles concedidos al usuario actual menos SUPERUSU.

SQL> SET ROLE ALL EXCEPT superusu;

9.4.5. Establecer el Rol por Defecto

Se puede establecer con qué roles activos se conecta un usuario a la B.D. Se indica con el comandoALTER USER (no puede indicarse con CREATE USER).

Modificar al usuario CONTA7 e indicar que su rol por defecto es CONTABILIDAD.

SQL> ALTER USER conta7 DEFAULT ROLE contabilidad;

Modificar al usuario CONTA7 e indicar que no tiene ningun rol por defecto.

SQL> ALTER USER conta7 DEFAULT ROLE NONE;

9.4.6. Roles Predefinidos

Existen una serie de roles predefinidos en Oracle. Algunos de ellos se utilizan por compatibilidad conversiones anteriores de Oracle. Se pueden conceder y suprimir privilegios y roles a estos rolespredefinidos.

Page 97: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 97 de 127

NOMBRE DEL ROL PRIVILEGIOS CONCEDIDOS CON EL ROLCONNECT ALTER SESSION, CREATE CLUSTER, CREATE DATABASE LINK, CREATE

SEQUENCE, CREATE SESSION, CREATE SYNONYM, CREATE TABLE,CREATE VIEW.

RESOURCE CREATE CLUSTER, CREATE PROCEDURE, CREATE SEQUENCE, CREATETABLE, CREATE TRIGGER.

DBA Todos los privilegios del Sistema con la opción WITH ADMIN OPTION.EXP_FULL_DATABASE SELECT ANY TABLE, BACKUP ANY TABLE, INSERT, DELETE, y UPDATE en

las tablas SYS.INCVID, SYS.INCFIL y SYS.INCEXP.IMP_FULL_DATABASE BECOME USER.

9.4.7. Roles Especiales OSOPER y OSDBA

Existen dos roles especiales, OSOPER y OSDBA que se utilizan para realizar operaciones sobre laBase de Datos cuando el diccionario de datos no está operativo (cuando la base de datos no estámontada). Se crean con la finalidad de proteger la utilización de INTERNAL, o de utilizar INTERNALcon accesos restringidos.

Estos roles se activan a través del sistema operativo y su definición depende del mismo.

ROL DESCRIPCIÓNOSOPER Permite al usuario realizar STARTUP, SHUTDOWN, ALTER DATABASE OPEN/MOUNT,

ALTER DATABASE BACKUP CONTROLFILE, ALTER TABLESPACE BEGIN/ENDBACKUP, ARCHIVE LOG y RECOVER. También contiene el privilegio RESTRICTEDSESSION.

OSDBA Contiene todos los privilegios del sistema con WITH ADMIN OPTION y también el rolOSOPER. Sólo con este rol se puede ejecutar el comando CREATE DATABASE.

9.4.8. Visualizar Información Sobre Roles

Para visualizar los usuarios que tienen roles concedidos, y todos los privilegios que contiene un rol,se deben utilizar las siguientes tablas del diccionario de datos.:

VISTA DESCRIPCIÓNROLE_SYS_PRIVS Información sobre privilegios del sistema concedidos a roles.ROLE_TAB_PRIVS Privilegios sobre tablas concedidos a roles.ROLE_ROLE_PRIVS Roles concedidos a otros Roles.SESSION_ROLES Roles activos en la sesión de usuario.USER_ROLE_PRIVS Roles concedidos al usuario.DBA_SYS_PRIVS Descripción de los privilegios del sistema concedidos a usuarios o roles.DBA_ROLES Todos los roles existentes en la Base de Datos.

Page 98: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 98 de 127

9.5. Los Perfiles. Método de control de recursos de la B.D.

Se pueden utilizar perfiles para controlar los siguientes puntos de consumo de una B.D.:

Tiempo de CPU. Operaciones de Entrada/Salida. Tiempo de Inactividad. Tiempo de Conexión. Espacio en Memoria. Sesiones concurrentes.

Los perfiles pueden crearse, modificarse y borrarse. Cuando se crea un perfil está inactivo y el DBAdebe de activar la utilización de perfiles, bien para toda la base de datos, o bien el usuario para susesión.

Se puede hacer un cálculo o límite compuesto (composite limit) de consumo de recursos. Lainformación acerca de perfiles se almacena en el diccionario de datos.

Los perfiles se utilizan para restringir la utilización de recursos y evitar que un único usuario consumademasiados recursos o durante demasiado tiempo un recurso. Son fáciles de crear y asignar. Sonuna ayuda para la B.D. con muchos usuarios porque manejan grupos de usuarios.

Pueden activarse a nivel de sesión, a nivel de llamada, o ambos:

Si se excede un límite a nivel de sesión:

1. La transacción se deshace (rollback).2. Todas las sentencias anteriores se deshacen.3. Sólo se permiten las sentencias de COMMIT o ROLLBACK.4. No puede continuar trabajando en esa sesión.

Si se excede un límite a nivel de llamada:

1. Se interrumpe el procesamiento de la sentencia.2. La sentencia se deshace (rollback).3. Las sentencias anteriores permanecen intactas.4. La sesión de usuario continúa conectada.

En el siguiente cuadro se recojen algunos de los mensajes que emite oracle si se excede un límite derecursos.

CODIGO MENSAJEORA-02390 exceeded COMPOSITE_LIMIT, you are being logged offORA-02391 exceeded simultaneous SESSIONS_PER_USER limit, maximum # sessionsORA-02392 exceeded session limit on CPU usage, you are being logged offORA-02393 exceeded call limit on CPU usageORA-02394 exceeded session limit on IO usage, you are being logged offORA-02395 exceeded call limit on IO usageORA-02396 exceeded maximum idle time, please connect againORA-02397 exceeded PRIVATE_SGA limit, you are being logged offORA-02399 exceeded maximun connect time, you are being logged off

En el siguiente cuadro recojemos los recursos que podemos controlar.

Page 99: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 99 de 127

RECURSO DESCRIPCIÓN

RecursosControlables

a Nivel deSesión

CPU_PER_SESSION Tiempo total de consumo de CPU en centésimas de segundo.SESSIONS_PER_USER Máximo número de sesiones concurrentes para a cada usuario.CONNECT_TIME Tiempo real máximo de conexión permitido expresado en minutos.IDLE_TIME Periodos máximos de inactividad permitidos (en minutos)LOGICAL_READS_PER_SESSION Número máximo de bloques de datos (lecturas físicas y lógicas).PRIVATE_SGA Cantidad de espacio privado en bytes en la SGA. (Sólo MTS).

RecursosControlables

a Nivel deLlamada

CPU_PER_CALL Tiempo total de consumo de CPU en centésimas de segundos enun llamada a la B.D.

LOGICAL_READS_PER_CALL Número máximo de bloques de datos en una llamada (lecturasfísicas y lógicas).

9.5.1. Creación de Perfiles

La creación de perfiles se realiza con CREATE PROFILE.

Por ejemplo, crear el perfil DESARROLLO que especifique un número máximo de sesionesconcurrentes de 5, tiempo de CPU ilimitado para una llamada, y un tiempo máximo de inactividad de1 hora:

SQL> CREATE PROFILE desarrollo LIMITSESSIONS_PER_USER 5CPU_PER_CALL UNLIMITEDIDLE_TIME 60;

9.5.2. Asignación De Perfiles A Usuarios

La asignación de un perfil de consumo de recursos a un usuario, puede realizarse en el momento dela creación del usuario con el comando CREATE USER, o bien a posteriori con el comando ALTERUSER.

Al crear el usuario MARTA asignarle el perfil DESARROLLO.

SQL> CREATE USER marta IDENTIFIED BY sergioDEFAULT TABLESPACE datosTEMPORARY TABLESPACE tempPROFILE desarrollo;

Modificar el usuario PEPE para asignarle el nuevo perfil BAJO_CONSUMO.

SQL> ALTER USER pepePROFILE bajo_consumo;

9.5.3. Eliminar un Perfil

Se puede eliminar un perfil de la B.D. con el comando DROP PROFILE.

Por ejemplo, eliminar el perfil DESARROLLO y asignar el perfil DEFAULT a todos los usuarios que lotuvieran.

SQL> DROP PROFILE desarrollo CASCADE;

La opción CASCADE desasigna el perfil de un usuario y le asigna de forma automática el perfilDEFAULT (que no puede borrarse). Esta opción debe ser utilizada para usuarios que ya tengan unperfil previamente asignado. El nuevo perfil se hace efectivo a partir de la siguiente sesión.

Page 100: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 100 de 127

9.5.4. Activar y Desactivar Perfiles

En el momento de crear un perfil, éste NO queda activado a menos que se haya indicado que el límiteal consumo de recursos está activo. La activación de límites puede realizarse de dos formas:

Mediante el parámetro RESOURCE_LIMIT (indicado en init.ora)

- Activa o desactiva el uso de perfiles. Si se modifica debe rearrancarse la B.D.- Un valor TRUE comprueba la limitación de recursos.- Un valor FALSE (por defecto) NO comprueba los límites de recursos.

Con el comando ALTER SYSTEM

- Activa o desactiva la utilización de perfiles.- Se mantienen hasta que se realiza un shutdown de la Base de Datos, o hasta que se

ejecuta de nuevo con un valor diferente.- La ventaja de este comando es que no hay que rearrancar la Base de Datos.

Activar la utilización de perfiles en una B.D.

SQL> ALTER SYSTEM SET RESOURCE_LIMIT = TRUE;

9.5.5. Visualizar la Información acerca de Perfiles

Consultando el diccionario de datos podemos extraer información sobre los perfiles y sus límites. Lastablas con información acerca de perfiles son las siguientes:

DBA_USERS USER_RESOURCE_LIMITS DBA_PROFILES

SQL> SELECT USERNAME, PROFILE FROM SYS_DBA_USERS;

USERNAME PROFILE----------------- -------------SYS DEFAULTSYSTEM DEFAULTCARMEN DEFAULTMARTA DESARROLLOPEPE DESARROLLOJUAN DESARROLLO

SQL> SELECT * FROM USER_RESOURCE_LIMITS;

RESOURCE_NAME LIMIT-------------------------- --------COMPOSE_LIMIT UNLIMITEDSESSIONS_PER_USER 7CPU_PER_SESSION UNLIMITEDCPU_PER_CALL UNLIMITEDLOGICAL_READS_PER_SESSION UNLIMITEDLOGICAL_READS_PER_CALL UNLIMITEDIDLE_TIME 30CONNECT_TIME UNLIMITEDPRIVATE_SGA UNLIMITED

Page 101: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 101 de 127

9.6. Otras opciones de seguridad

9.6.1. Seguridad a nivel de columna.

Para garantizar la seguridad de los datos de ciertas columnas de una tabla se utilizan las vistas. Se creauna vista de la tabla que no contenga las columnas que deseamos que sean ocultas a un cierto usuario ydespués se le conceden privilegios sobre la vista y no sobre la tabla.

El propietario de una vista puede conceder a otros usuarios privilegios sobre la vista de la misma maneraque lo hace con las tablas, aunque estos privilegios por las características de las vistas, se reducen a lossiguientes:

DELETE INSERT SELECT UPDATE UPDATE (col1,...,coln)

Para poder borrar, insertar, actualizar a través de una vista ésta debe cumplir que sea una vista deproyección.

Se garantiza la seguridad a nivel de columna autorizando el acceso a la vista y no a la tabla.

9.6.2. Seguridad a nivel de fila.

Para garantizar la seguridad de los datos de ciertas filas de una tabla se utilizan las vistas. Se crea unavista de la tabla que no contenga las filas que deseamos que sean ocultas a un cierto usuario y despuésse le conceden privilegios sobre la vista y no sobre la tabla.

SQL> CREATE VIEW libros_españoles ASSELECT * FROM libro WHERE cod_pais = 34;

SQL> GRANT SELECT ON libros_españoles TO SCOTT;

SQL> CONNECT SCOTT/TIGER

SQL> SELECT * FROM libros_españoles;

Las vistas se pueden crear con la opción de comprobación ("with check option") que asegura quelas actualizaciones efectuadas a través de la vista afecten sólo a las filas que cumplen las condiciones derecuperación de la vista.

Esto quiere decir que no pueden actualizarse filas ocultas a un usuario a través de una vista y asíse garantiza la seguridad de estos datos ocultos.

Page 102: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 102 de 127

10. Auditoría de la Base de DatosUna auditoria puede ayudar a resolver fechas y tiempos de acceso de usuarios no autorizados a laBase de Datos. Hay varios tipos de actividades sospechosas:

Un usuario que intenta conectarse a la B.D. utilizando distintas combinaciones de usuario ypassword.

Los intentos de acceso a una tabla confidencial. Intentos de ejecución de comandos de creación o borrado de objetos.

El diccionario de datos Oracle contiene una tabla llamada SYS.AUD$ que contiene los registros deauditoria.

Para generar registros en las tablas de auditoria no basta con utilizar el comando AUDIT que veremosa continuación. Es necesario activar la escritura en las tablas de auditoria activando al parámetro deinicialización (en el fichero "init.ora") AUDIT_TRAIL, que puede tener los siguientes valores:

- NONE.- La auditoria de la base de datos esta desactivada por defecto (Equivalente aFALSE)

- OS.- Permite que la auditoria del S.O. acceda a Oracle y escriba información acerca de loque ocurre en la base de datos.

- DB.- Activa la auditoria de B.D. Es el equivalente a TRUE

10.1. Tipos de Auditoria

Existen tres tipos de auditoria de B.D. que pueden realizarse:

Auditoria de sentencias SQL (p.e. CREATE TABLE). Auditoria de utilización de privilegios (p.e. SELECT ANY TABLE). Auditoria de acceso a objetos (SELECT PEPE.emp).

10.1.1. Auditoria de Sentencias

Puede dividirse en dos categorías:

Auditoria de sentencias DDL. Sentencias que afectan a estructuras (create, alter, etc.) y quefuerzan un commit automático)

Auditoria de sentencias DML. Sentencias que afectan a datos (update, insert, etc.) y quenecesitan de un commit explícito.

La auditoria de sentencias puede realizarse para un usuario concreto o para todos los usuarios de labase de datos.

Las sentencias SQL dentro de un bloque PL/SQL se auditan de forma individual cuando se ejecuta elbloque.

Para ejecutar los comandos AUDIT y NOAUDIT es necesario tener el privilegio AUDIT SYSTEM.

La sintaxis sería:

SQL > AUDIT <opciones_auditoria> BY <usuario> BY SESSION/ACCESSWHENEVER SUCCESFUL/NOT SYCCESFULL;

Page 103: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 103 de 127

Donde:

- <opciones_auditoria>.- Especifica la sentencia/s SQL que se desea auditar (ver cuadromás abajo).

- BY usuario.- Indica que se quieren auditar las sentencias SQL requeridas para elusuario/s indicados. Si se omite, la auditoria se realiza para todos los usuarios de la basede datos.

- BY SESSION.- Provoca que Oracle inserte un único registro resumen en la tabla deauditoria aunque la sentencia se ejecute varias veces en la misma sesión.

- BY ACCESS.- Provoca la escritura de un registro en las tablas de auditoria cada vez quela sentencia se ejecuta. Cuando se especifican auditorias de sentencias DDL o deprivilegios del sistema, la auditoria por defecto es por accesos. Cuando se auditan sobreobjetos o sentencias DML, la auditoria por defecto es por sesión.

- WHENEVER SUCCESSFUL.- Se realiza la auditoria cuando la sentencia auditadaconcluye satisfactoriamente

- WHENEVER NOT SUCCESSFUL.- Se realiza la auditoria cuando la sentencia auditadano concluye satisfactoriamente.

Las opciones de auditoria de sentencias que pueden utilizarse con el comando AUDIT/NO AUDIT, semuestran a continuación:

OPCIÓN SENTENCIA SQL AUDITADA

*ALTER SEQUENCE ALTER SEQUENCE secuenciaALTER SYSTEM ALTER SYSTEM*ALTER TABLE ALTER TABLE tablaCLUSTER CREATE CLUSTER, ALTER CLUSTER, TRUNCATE CLUSTER, DROP CLUSTER*COMMENT TABLE COMMENT ON tabla, vista, réplica, columnaDATABASE LINK CREATE DATABASE LINK, DROP DATABASE LINK*DELETE TABLE DELETE FROM tabla, vista*EXECUTE PROCEDURE Llamadas a procedimientos y funciones*GRANT PROCEDURE GRANT privilegio ON procedimiento, REVOKE privilegio FROM procedimiento*GRANT SEQUENCE GRANT privilegio ON secuencia, REVOKE privilegio FROM secuencia*GRANT TABLE GRANT privilegio ON tabla, vista, réplica, REVOKE privilegio FROM tabla, vista, réplicaINDEX CREATE INDEX, ALTER INDEX, DROP INDEX*INSERT TABLE INSERT INTO tabla, vista*LOCK TABLE LOCK TABLE tabla, vistaNOT EXISTS Todas las sentencias SQL que provocan un error al no encontrar un dato.

PROCEDURECREATE [or REPLACE] FUNCTION, CREATE [or REPLACE] PACKAGE, CREATE [orREPLACE] PROCEDURE, CREATE [or REPLACE] PACKAGE BODY, DROP FUNCTION,DROP PACKAGE, DROP PROCEDURE

PUBLIC DATABASE LINK CREATE PUBLIC DATABASE LINK, DROP PUBLIC DATABASE LINKPUBLIC SYNONYM CREATE PUBLIC SYNONYM, DROP PUBLIC SYNONYMROLE CREATE ROLE, ALTER ROLE, SET ROLE, DROP ROLEROLLBACK SEGMENT CREATE/ALTER/DROP ROLLBACK SEGMENT*SELECT SEQUENCE Referenciar a un generador de secuencia*SELECT TABLE SELECT ... FROM tabla, vista, réplicaSEQUENCE CREATE SEQUENCE, DROP SEQUENCESESSION Conexiones y desconexionesSYNONYM CREATE SYNONYM, DROP SYNONYMSYSTEM AUDIT AUDIT, NOAUDITSYSTEM GRANT GRANT priv_sistema TO usuario/rol, REVOKE priv_sistema FROM usuario/rolTABLE CREATE TABLE, ALTER TABLE, DROP TABLE, TRUNCATE TABLETABLESPACE CREATE TABLESPACE ,ALTER TABLESPACE, DROP TABLESPACE

TRIGGER CREATE TRIGGER, ALTER TRIGGER ENABLE o DISABLE, ALTER TABLE con lascláusulas ENABLE, DISABLE o DROP

USER CREATE USER, ALTER USER, DROP USER*UPDATE TABLE UPDATE tabla,vistaVIEW CREATE [or REPLACE] VIEW, DROP VIEW

Page 104: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 104 de 127

Y algunas auditorias especiales de sentencia:

OPCIÓN SENTENCIA SQL AUDITADACONNECT SESSION

RESOURCE ALTER SYSTEM, CLUSTER, DATABASE LINK, PROCEDURE, ROLLBACK SEGMENT,SEQUENCE, SYNONYM, TABLE, TABLESPACE, VIEW

DBA SYSTEM AUDIT, PUBLIC DATABASE LINK, PUBLIC SYNONYM, ROLE, SYSTEM GRANT, USERALL Todas las opciones de sentencia indicadas anteriormente excepto las marcadas con un asterisco

En el siguiente ejemplo se pretende auditar todas las sentencias CREATE/ALTER/DROP USER, serealicen satisfactoriamente o no, pero por acceso.

SQL> AUDIT USER BY ACCESS ;

Si queremos auditar todos los intentos de conexión/desconexión a la base de datos.

SQL> AUDIT CONNECT;

Para consultar las opciones de auditoria de sentencias activas, debemos consultar la vista deldiccionario DBA_STMT_AUDIT_OPTS:

SQL> COL user_name FORMAT A15SQL> COL audit_option FORMAT A30SQL> SELECT user_name, audit_option, success, failure

FROM sys.DBA_STMT_AUDIT_OPTS ;

USER_NAME AUDIT_OPTION SUCCESS FAILURE------------------- ------------------------ ------------------- -------------------

USER BY ACCESS BY ACCESSSESSION BY SESSION BY SESSION

Las opciones de auditoria de sentencia que se especifican en el comando AUDIT, se aplicansolamente a las siguientes y no a la actual.

Si se omite la cláusula WHENEVER, Oracle audita tanto si la sentencia se ejecuta satisfactoriamentecomo si no (SUCCESSFUL Y NOT SUCCESSFUL).

10.1.1.1. Desactivación de Auditoria de Sentencias

Se puede desactivar la auditoria de sentencias utilizando el comando NOAUDIT.

SQL > AUDIT <opciones_auditoria> BY <usuario>WHENEVER SUCCESFUL/NOT SUCCESFUL;

Donde:

- <opciones_auditoria>.- Especifica la sentencia/s SQL para la se que se deseadesactivar la auditoria.

- BY usuario.- Interrumpe la auditoria a ese usuario/s a partir de las siguientes sesiones.Si se omite, Oracle interrumpe la auditoria para todos los usuarios de la B.D..

Page 105: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 105 de 127

- WHENEVER SUCCESSFUL.- Interrumpe la auditoria de la sentencia que concluyasatisfactoriamente.

- WHENEVER NOT SUCCESSFUL.- Interrumpe la auditoria que genera un error Oracle.

Si se omite la cláusula WHENEVER, la auditoria se interrumpe para ambos casos (SUCCESSFUL yNOT SUCCESSFUL).

Para desactivar la auditoria sobre las sentencias CREATE/ALTER USER cuando resultadosatisfactorio:

SQL> NOAUDIT create user, alter userWHENEVER SUCCESSFUL ;

Si queremos desactivar la auditoria sobre conexiones cuando den un resultado erróneo:

SQL> NOAUDIT connectWHENEVER NOT SUCCESSFUL ;

Para consultar las opciones de auditoria de sentencias activas, consultar la vista del diccionarioDBA_STMT_AUDIT_OPTS:

SQL> COL user_name FORMAT A15SQL> COL audit_option FORMAT A30SQL> SELECT user_name, audit_option, success, failure

FROM sys.DBA_STMT_AUDIT_OPTS ;

USER_NAME AUDIT_OPTION SUCCESS FAILURE------------------- ------------------------ ------------------- -------------------

USER NOT SET BY ACCESSSESSION BY SESSION NOT SET

10.1.2. Auditoria de Utilización de Privilegios

Se puede utilizar una auditoria selectiva para conocer como se están utilizando los privilegiosconcedidos. Esta auditoria se puede realizar sobre ciertos usuarios o para todos los de la base dedatos.

Puede auditarse cualquiera de los 80 privilegios del sistema.

SQL > AUDIT <priv_sistemas> BY <usuario>BY SESSION/ACCESSWHENEVER SUCCESFUL/NOT SUCCESFUL;

Donde:

- priv_sistema.- Indica el privilegio del sistema a auditar incluyendo la utilización desentencias SQL que requieran ese privilegio

- BY usuario.- Indica que se quieren auditar las sentencias SQL requeridas para elusuario/s indicados. Si se omite, la auditoria se realiza para todos los usuarios de la B.D.

- BY SESSION.- Provoca que Oracle inserte un único registro resumen en la tabla deauditoria aunque la sentencia se ejecute varias veces en la misma sesión.

- BY ACCESS.- Provoca la escritura de un registro en las tablas de auditoria cada vez quela sentencia se ejecuta. Cuando se especifican auditorias de sentencias DDL o de

Page 106: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 106 de 127

privilegios del sistema, la auditoria por defecto es por accesos. Cuando se auditan sobreobjetos o sentencias DML, la auditoria por defecto es por sesión.

- WHENEVER SUCCESSFUL.- Se realiza la auditoria cuando la sentencia auditada hayaconcluido satisfactoriamente.

- WHENEVER NOT SUCCESSFUL.- Se realiza la auditoria cuando la sentencia auditadaNO concluya satisfactoriamente.

Para consultar las opciones de auditoria de privilegios activas, consultar la vista del diccionarioDBA_PRIV_AUDIT_OPTS:

SQL> COL user_name FORMAT A15SQL> COL audit_option FORMAT A30SQL> SELECT user_name, audit_option, success, failure

FROM sys.DBA_STMT_AUDIT_OPTS ;

USER_NAME AUDIT_OPTION SUCCESS FAILURE------------------ --------------------------------------- --------------- -------------------

CREATE PUBLIC SYNONYM NOT SET BY ACCESSCREATE ROLE NOT SET BY ACCESS

Por ejemplo; si queremos auditar la utilización del privilegio SELECT ANY TABLE que genera unregistro de auditoria cada vez que el usuario especificado (en este caso MARTA), ejecute la sentenciaSELECT y necesite utilizar este privilegio. Si no se indica nada lo ejecutará salga bien o mal(SUCCESSFUL y NOT SUCCESSFUL) y por sesión.

SQL> AUDIT select any table BY marta;

Para consultar la información accedemos a la tabla SYS.DBA_STMT_AUDIT_OPTS

SQL> COL user_name FORMAT A15SQL> COL audit_option FORMAT A30SQL> SELECT user_name, PRIVILEGE

success, failureFROM sys.DBA_STMT_AUDIT_OPTS ;

USER_NAME PRIVILEGE SUCCESS FAILURE------------------ --------------------------------------- ------------------- -------------------

CREATE PUBLIC SYNONYM NOT SET BY ACCESSCREATE ROLE NOT SET BY ACCESS

MARTA SELECT ANY TABLE BY SESSION BY SESSION

Es necesario el privilegio AUDIT SYSTEM para realizar esta operación.

Si ahora el usuario MARTA ejecuta una sentencia SELECT contra una tabla que no es de supropiedad y sobre la que el propietario no le ha dado privilegio explícito de SELECT, tendrá queutilizar el privilegio SELECT ANY TABLE, y quedará registrado en las tablas de auditoria de lasiguiente forma:

SQL> SELECT * FROM pepe.DEPT2 ;

Puede consultarse la información generada en DBA_AUDIT_TRAIL

SQL> SELECT USERNAME, OWNER, OBJ_NAME, ACTION_NAME,SES_ACTIONS, PRIV_USED, RETURNCODEFROM SYS.DBA_AUDIT_TRAIL ;

Page 107: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 107 de 127

USER_NAME OWNER OBJ_NAME ACTION_NAME SES_ACTIONS PRIV_USED RETURNCODE------------------ ------------ ----------------- ---------------------- --------------------- ---------------------------- ----------------------MARTA PEPE DEPT2 SESSION REC ---------S--------- SELECT ANY TABLE 942

Cuando se está realizando una auditoria antes de comprobar la utilización de privilegios del sistema,se comprueban los privilegios del propietario y los privilegios sobre objetos del usuario. Si se audita lasentencia CREATE TABLE y la utilización del mismo privilegio, se registra una única entrada en lastablas de auditoria cada vez que se crea una tabla.

Por ejemplo, auditar la utilización de los privilegios AUDIT SYSTEM, GRANT ANY PRIVILEGE,ALTER TABLESPACE y MANAGE TABLESPACE:

SQL> AUDIT system, grant any privilege,alter tablespace, manage tablespace;

SQL> SELECT * FROM SYS.DBA_PRIV_AUDIT_OPTS ;

USER_NAME AUDIT_OPTION SUCCESS FAILURE------------------ --------------------------------------- ------------------- -------------------

AUDIT SYSTEM BY SESSION BY SESSIONALTER TABLESPACE BY SESSION BY SESSIONMANAGE TABLESPACE BY SESSION BY SESSIONGRANT ANY PRIVILEGE BY SESSION BY SESSION

Podriamos auditar todos los intentos del usuario CONTA3 de crear tablas en su propio esquema, sinimportar que el resultado de la operación sea satisfactorio o no.

SQL> AUDIT create table BY CONTA3 BY ACCESS ;

O auditar todos los intentos de CONTA3 de modificar cualquier tabla o procedimiento almacenado dela B.D. cuando el resultado de la operación sea satisfactorio.

SQL> AUDIT alter any table, alter any procedureBY CONTA3 BY ACCESSWHENEVER SUCCESSFUL;

SQL> SELECT * FROM SYS.DBA_PRIV_AUDIT_OPTS;

USER_NAME AUDIT_OPTION SUCCESS FAILURE------------------ --------------------------------------- ------------------- -------------------

AUDIT SYSTEM BY SESSION BY SESSIONALTER TABLESPACE BY SESSION BY SESSIONMANAGE TABLESPACE BY SESSION BY SESSIONGRANT ANY PRIVILEGE BY SESSION BY SESSION

CONTA3 CREATE TABLE BY ACCESS BY ACCESSCONTA3 ALTER ANY TABLE BY ACCESS NOT SETCONTA3 ALTER ANY PROCEDURE BY ACCESS NOT SET

Si se omite la cláusula WHENEVER, Oracle audita todos los intentos, ya sean satisfactorios o no.

Se pueden auditar TODOS los privilegios del sistema utilizando la opción ALL PRIVILEGES.

10.1.2.1. Desactivación de Auditoria de Utilización de Privilegios

Se puede desactivar la auditoria de privilegios utilizando el comando NOAUDIT.

SQL > NOAUDIT <priv_sistema> BY <usuario>WHENEVER SUCCESFUL/NOT SUCCESFUL;

Page 108: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 108 de 127

Donde:

- priv_sistema.- Especifica el privilegio del sistema para el que se desea desactivar laauditoria.

- BY usuario.- Interrumpe la auditoria a ese usuario/s a partir de las siguientes sesiones.Si se omite, Oracle interrumpe la auditoria para todos los usuarios de la B.D.

- WHENEVER SUCCESSFUL.- Interrumpe la auditoria de la sentencia que concluyasatisfactoriamente.

- WHENEVER NOT SUCCESSFUL.- Interrumpe la auditoria que genera un error Oracle.

Si se omite la cláusula WHENEVER, la auditoria se interrumpe para ambos casos (SUCCESSFUL yNOT SUCCESSFUL). Es necesario el privilegio del sistema SYSTEM AUDIT para ejecutar estecomando.

Para desactivar la auditoria de los intentos del usuario CONTA3 de crear tablas o índices en suesquema, ya sea el resultado satisfactorio o no.

SQL> NOAUDIT create table BY CONTA3 ;

Desactivar la auditoria con resultado satisfactorio de todos los intentos del usuario CONTA3 demodificar tablas, procedimientos, funciones o paquetes en cualquier esquema.

SQL> NOAUDIT alter any table, alter any procedureBY CONTA3 WHENEVER SUCCESSFUL;

Desactivar la auditoria de los privilegios AUDIT SYSTEM, GRANT ANY PRIVILEGE, ALTERTABLESPACE y MANAGE TABLESPACE:

SQL> NOAUDIT system, grant any privilege,alter tablespace, manage tablespace ;

10.1.3. Auditoría Sobre Objetos

Es la auditoría selectiva ejecutada contra un objeto especifico en un esquema determinado. Laauditoría sobre objetos puede realizarse en todas las sentencias DML (inclusive consultas) paracualquier objeto de la B.D., y además pueden auditarse todas las sentencias GRANT o REVOKEsobre cualquier objeto.

Los objetos auditables son los siguientes:

Tablas Vistas Generadores de Secuencia Paquetes Procedimientos almacenados Funciones almacenadas

Los procedimientos y funciones incluidas en un paquete no pueden auditarse de forma independiente.Algunos procedimientos y vistas pueden referenciar objetos de otra B.D., en este caso, los registrosde auditoria pueden generar información como resultado de la utilización de dichos objetos.

Page 109: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 109 de 127

Opciones de Auditoría Sobre Objetos

OPCION OBJETO TABLA VISTA SECUENCIA REPLICAPAQUETESFUNCIONES

PROCEDIMENTOSALTER X XAUDIT X X X X

COMMENT X XDELETE X X

EXECUTE XGRANT X X XINDEX X

INSERT X XLOCK X X

RENAME X X XSELECT X X X XUPDATE X X

Las opciones de auditoria sobre objetos se realizan para TODOS los usuarios de la B.D. Estasopciones no pueden indicarse solamente para ciertos usuarios.

Se puede activar la auditoria sobre objetos con el comando AUDIT.

SQL> AUDIT <opc_objeto> ON <objeto> BY SESSION/ACCESSWHENEVER SUCCESSFUL/NOT SUCCESSFUL;

Donde:

- Opc_objeto.- Indica el objeto sobre el que se va a realizar la auditoria. Puede ser uno ovarios/as tablas, vistas, secuencias, procedimientos, funciones, paquetes o réplicas.

- DEFAULT.- Establece las opciones especificadas para el objeto, como las opciones deauditoria por defecto para todos los objetos que se creen posteriormente.

- BY SESSION.- Provoca que Oracle inserte un único registro resumen en la tabla deauditoria para todas las operaciones del mismo tipo que se realicen sobre el objeto enuna única sesión.

- BY ACCESS.- Provoca la escritura de un registro en las tablas de auditoría cada vez quela sentencia auditada se ejecuta.

- WHENEVER SUCCESSFUL.- Se realiza la auditoria cuando la sentencia auditada hayaconcluido satisfactoriamente.

- WHENEVER NOT SUCCESSFUL.- Se realiza la auditoría cuando la sentencia auditadaNO concluya satisfactoriamente.

Si se omite la cláusula WHENEVER, la auditoria se realiza en ambas ocasiones (concluyasatisfactoriamente o no). Las opciones de auditoria activadas serán efectivas a partir de la siguientesesión. Para auditar un objeto, se debe ser su propietario o bien tener el privilegio del sistema AUDITANY.

Se puede utilizar la opción ALL para auditar TODAS las opciones vistas anteriormente.

Por ejemplo, podemos activar la auditoria sobre los intentos de ejecución del procedimientoCAMB_PRECIO para cada sesión:

SQL> AUDIT EXECUTE ON camb_precio BY SESSION ;

Page 110: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 110 de 127

Activar la auditoria sobre todos los intentos borrar filas en la tabla EMP.

SQL> AUDIT DELETE ON emp BY ACCESS ;

Activar la auditoria sobre los intentos de concesión de privilegios sobre la tabla EMP. Se creará unregistro por sesión sólo cuando la operación concluya satisfactoriamente.

SQL> AUDIT GRANT ON emp BY SESSION WHENEVER SUCCESSFUL ;

Auditar los intentos de concesión de privilegios sobre el procedimiento CAMB_PRECIO. Se creará unregistro sólo cuando la operación concluya satisfactoriamente.

SQL> AUDIT GRANT ON camb_precio WHENEVER SUCCESSFUL ;

Auditar los intentos de bloqueo sobre la tabla EMP. Se creará un registro sólo cuando la operaciónNO concluya satisfactoriamente.

SQL> AUDIT LOCK ON emp WHENEVER NOT SUCCESSFUL ;

Consultar la tabla USER_OBJ_AUDIT_OPTS para visualizar las opciones de auditoria activas

SQL> SELECT * FROM user_obj_audit_opts;

OBJECT_NAME

OBJECT_TYPE

ALT AUD COM DEL GRA IND INS LOC REN SEL

UPD REF EXE

--------------------- -------------------- ------- ------- ------- ------- ------- ----- ----- ------- ------- ----- ------ ------ ------CLIENTES TABLE - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / -DEPT TABLE - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / -EMP TABLE - / - - / - - / - A/A - / - - / - - / - - / A - / - - / - - / - - / - - / -ARTICULOS TABLE - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / -ORDEN TABLE - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / -PRECIOS TABLE - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / -PRODUCTO TABLE - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / -CAMB_PRECIO

PROCEDURE - / - - / - - / - - / - - / S - / - - / - - / - - / - - / - - / - - / - S/ S

Especificar la opción ALL para un objeto, en este caso para la tabla DEPT.

SQL> AUDIT all ON dept ;

Consutar la tabla USER_OBJ_AUDIT_OPTS para visualizar las opciones de auditoria activas.

SQL> SELECT * FROM user_obj_audit_optsWHERE object_name = ‘ DEPT ‘ ;

OBJECT_NAME

OBJECT_TYPE

ALT AUD COM DEL GRA IND INS LOC REN SEL

UPD REF EXE

----------------- ----------------- ------- ------- ------- ------- ------- ----- ----- ------- ------- ----- ------- ------- ------DEPT TABLE S / S S / S S / S S / S S / S S/

SS/S

S / S S / S S/S

S / S - / - - / -

Se pueden especificar opciones de auditoria para objetos que todavía NO han sido creados utilizandola opción DEFAULT. Esta opción permite asignar la auditoría a todos los objetos creadosposteriormente, y sobreescribe cualquier otra opción activa.

Por ejemplo, podriamos auditar todos los comandos ALTER, SELECT y RENAME que se ejecutencontra los objetos del usuario que todavía no han sido creados.

SQL> AUDIT alter, select, rename ON default ;

Page 111: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 111 de 127

Consultar la tabla ALL_DEF_AUDIT_OPTS para visualizar las opciones de auditoría activas.

SQL> SELECT * FROM all_def_audit_opts;

ALT AUD COM DEL GRA IND INS LOC REN SEL UPD REF EXE------- ------- ------- ------- ------- ----- ----- ------- ------- ----- ------- ------- ------S / S - / - - / - - / - - / - - / - - / - - / - S / S S / S - / - - / - - / -

10.1.3.1.Desactivar la Auditoria Sobre Objetos

Se puede desactivar la auditoria sobre objetos utilizando el comando NOAUDIT.

SQL> NOAUDIT <opc_obj> ON <objeto> WHENEVER SUCCESSFUL/NOT SUCCESSFUL;

Si se desea detener la auditoria sobre un objeto, es necesario ser el propietario del objeto o tener elprivilegio del sistema AUDIT ANY.

Por ejemplo, desactivar la auditoria sobre los intentos de ejecución del procedimientoCAMB_PRECIO.

SQL> NOAUDIT execute ON camb_precio ;

Desactivar la auditoria que controla los borrados de filas en la tabla EMP.

SQL> AUDIT delete ON emp ;

Desactivar la auditoria sobre los intentos de concesión de privilegios sobre la tabla EMP.

SQL> NOAUDIT grant ON emp;

Desactivar la auditoria sobre los intentos de concesión de privilegios sobre el procedimientoCAMB_PRECIO.

SQL> NOAUDIT grant ON camb_precio ;

Consultar la tabla USER_OBJ_AUDIT_OPTS para visualizar las opciones de auditoría activas.

SQL> SELECT * FROM user_obj_audit_opts;

OBJECT_NAME

OBJECT_TYPE

ALT AUD COM DEL GRA IND INS LOC REN SEL

UPD REF EXE

--------------------- -------------------- ------- ------- ------- ------- ------- ----- ----- ------- ------- ----- ------ ------ ------CLIENTES TABLE - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / -DEPT TABLE - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / -EMP TABLE - / - - / - - / - A/A - / - - / - - / - - / A - / - - / - - / - - / - - / -ARTICULOS TABLE - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / -ORDEN TABLE - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / -PRECIOS TABLE - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / -PRODUCTO TABLE - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / - - / -CAMB_PRECIO

PROCEDURE - / - - / - - / - - / - - / S - / - - / - - / - - / - - / - - / - - / - S/ S

Page 112: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 112 de 127

10.2. Monitorizar la Tabla de Auditoria

Se puede monitorizar el tamaño y el crecimiento de la traza de auditoria con el fin de no consumirexcesivo espacio en disco, y que la actividad de la base de datos no decrezca en rendimiento. Elcrecimiento de las tablas de traza de auditoria, depende de cuantas opciones de auditoria seanespecificadas y de con que frecuencia las opciones auditadas se ejecuten.

El tamaño máximo de la tabla de auditoría está determinado durante la creación de la B.D. en elfichero sql.bsq.

Para controlar el crecimiento de las tablas de auditoria, conviene activar la auditoría sólo cuando seanecesario. También es conveniente ser selectivo con las opciones que se especifican, y tener muchocontrol sobre las opciones de auditoria sobre objetos, que son las que más pueden sobrecargar elsistema. En cualquier caso, de forma periódica, es conveniente eliminar los registros de las tablas deauditoría, para lo cual se puede:

Borrar todas las filas de la tabla de auditoria. Borrar solamente ciertos registros seleccionados. Archivar previamente a borrar los registros de auditoria generados, a otra tabla de la B.D. o a

un fichero de S.O.

Borrar todos los registros de auditoria.

SQL>TRUNCATE TABLE sys.aud$ ;

Borrar todos los registros de auditoria que tengan más de tres meses

SQL>DELETE FROM sys.aud$WHERE TIMESTAMP < SYSDATE - 90;

Archivar en una tabla histórica los registros de auditoria de más de dos meses y borrarlos de la tablade la traza.

SQL>INSERT INTO historicoSELECT FROM sys.aud$ WHERE TIMESTAMP < SYSDATE - 60;

SQL>DELETE FROM sys.aud$WHERE TIMESTAMP < SYSDATE - 60;

Se puede realizar un export de la tabla AUD$ y llevar la información al fichero de exportación.

La tabla AUD$ es uno de los pocos objetos de SYS que puede manipularse directamente.

Page 113: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 113 de 127

10.3. Manejar las Tablas de Traza de Auditoria

Si hay muchas extensiones inutilizadas, se pude utilizar el comando TRUNCATE para liberarextensiones. Las etapas a seguir serían las siguientes:

1. Copiar los registros de auditoria que se desean conservar a una tabla temporal. Oexportar toda la información de auditoria a un fichero de S.O. (.dmp).

SQL>CREATE TABLE audtemporalSELECT FROM sys.aud$ WHRE TIMESTAMP > ‘31-DEC-98’;

$ EXP USERID=sys/clave TABLES=(aud$) FILE = expdat.dmp

2. Conectarse a la B.D. como INTERNAL.

3. Eliminar las filas de la tabla SYS.AUD$ con el comando TRUNCATE.

SQL> CONNECT INTERNAL ;Connected.SQL> TRUNCATE TABLE sys.aud$ ;SQL> AUDIT insert, update, delete ON sys.aud$ BY ACCESS ;

4. Volver a cargar los registros archivados en la etapa 1.

SQL>INSERT INTO aud$SELECT * FROM audtemporal ;

Si no se necesita ninguno de los registros archivados de las tablas de auditoria, omitir los pasos 1 y 4.

$ IMP USERID=sys/clave FILE=expdat.dmp IGNORE=Y

Recordar que Export e Import se ejecutan desde el prompt del sistema operativo.

Page 114: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 114 de 127

10.4. Visualizar la Informacion de la Auditoria

Para proteger la información de las tablas de auditoria, al administrador de la base de datos debetener precaución con el número de usuarios que poseen el privilegio DELETE ANY TABLE.

Las tablas de auditoria se generan durante la creación del diccionario de datos. El ficheroCATALOG.SQL genera una llamada a otro fichero llamado CATAUDIT.SQL

Si se desean eliminar de la base de datos puede ejecutarse (bajo el usuario sys) el ficheroCATNOAUD.SQL.

TABLAS DE AUDITORIA DESCRIPCIÓN

STMT_AUDIT_OPTION_MAP Tabla de descripciones de tipos de códigos de auditoría.AUDIT_ACTIONS Descripción de los tipos de acciones codificados en aud$.ALL_DEF_AUDIT_OPTS Opciones de auditoria por defecto.DBA_STMT_AUDIT_OPTS Opciones de auditoria de sentencia.DBA_PRIV_AUDIT_OPTS Opciones de auditoria de privilegios.DBA_OBJ_AUDIT_OPTS Opciones de auditoria sobre objetos.DBA_AUDIT_TRAIL Traza de auditoria del sistema.USER_AUDIT_TRAIL Traza de auditoria de usuarios.DBA_AUDIT_SESSION Registro de conexiones/desconexionesUSER_AUDIT_SESSION Registro de conexiones/desconexiones del usuarioDBA_AUDIT_STATEMENT Registros de auditoria de comandos GRANT, REVOKE, ALTER SYSTEM etc.

en el sistemaUSER_AUDIT_STATEMENT Igual al anterior pero para el usuarioDBA_AUDIT_OBJECT Toda la información referente a objetos de toda la B.D.USER_AUDIT_OBJECT Toda la información referente a objetos de toda la B.D. para el usuario actual.DBA_AUDIT_EXITS Todos los registros de EXISTS/NOT EXISTS

Page 115: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 115 de 127

11. Apéndice A - Creación de la Base de Datos.Para la creación de la base de datos utilizaremos el comando:

CREATE DATABASE

Antes de ejecutar el comando CREATE DATABASE demos tener claros los siguientes conceptos:

- Se deben tener planificadas las tablas e índices de las aplicaciones, además de estimarel espacio necesario.

- Planificar la estrategia de copias de seguridad para la nueva base de datos.- Seleccionar el conjunto de caracteres que se va a utilizar en la nueva B.D. Este es un

aspecto fundamental, ya que posteriormente no puede cambiarse, y sería necesarioRECREAR la base de datos en el caso de que quisiéramos utilizar un nuevo conjunto decaracteres.

11.1. Pasos de creación

Para proceder a la creación de la base de datos hay que realizar lo siguiente:

11.1.1. Definir las variables a nivel de sistema operativo.

Preferentemente se crea un fichero de inicialización (en NNE profile_SID)

Entre estas variables debemos destacar:

ORACLE_SID.- Contiene el nombre de la instancia.ORACLE_HOME.- Directorio de los ejecutables de oracle.ORACLE_BASE.- Directorio de la instalación de oracle.NLS_LANG.- Define el idioma a nivel de servidor (no de cliente)

Ejemplo de fichero de variablesORACLE_BASE=/oracle/920ORACLE_HOME=/oracle/920ORACLE_SID=GPCONFTNS_ADMIN=$ORACLE_HOME/network/adminDISPLAY=10.116.5.193:0.0LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:$ORACLE_HOME/rdbms/libLIBPATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32:/usr/lib:/libSHLIB_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252NLS_DATE_FORMAT="dd/mm/yyyy hh24:mi:ss"PATH=/opt/mpi/bin:/usr/bin:/opt/ansic/bin:/usr/ccs/bin:/usr/contrib/bin:/opt/nettladm/bin:/opt/fc/bin:/opt/fcms/bin:/opt/upgrade/bin:/opt/pd/bin:/usr/bin/X11:/usr/contrib/bin/X11:/opt/aCC/bin:/opt/CC/bin:/opt/langtools/bin:/opt/fortran/bin:/opt/fortran90/bin:/opt/fortran90/contrib/bin:/opt/perf/bin:/opt/OV/bin/OpC:/opt/pascal/bin:/opt/imake/bin:/opt/resmon/bin:/opt/pred/bin:/opt/hparray/bin:/opt/ignite/bin:/nne/bin/lsof:/opt/emc/SYMCLI64/V4.3.4/bin:/opt/graphics/common/bin:.ALERT=$ORACLE_HOME/admin/GPCONF/bdumpTEMP=/tmpTMP=/tmpTEMPDIR=/tmpTMPDIR=/tmpPATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$ORACLE_HOME/OPatch/perl_modules:/opt/perl/lib:/opt/perl/bin:/opt/perl/lib/5.6.1:$PATHPS1=`hostname`":920:"`echo $ORACLE_SID`">"export NLS_LANG TNS_ADMIN DISPLAY LD_LIBRARY_PATH ORACLE_HOME SHLIB_PATH PATHORACLE_SID ORACLE_BASEexport TMP TEMP TEMPDIR TMPDIR NLS_DATE_FORMAT ALERT

Page 116: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 116 de 127

11.1.2. Creación del fichero de parámetros "init.ora".

Es necesario tener este fichero para poder arrancar la instance. El nombre que tendrá el fichero y suubicación son dependientes del S.O.

Ejemplo de fichero de parámetros init.ora#-------------------------------------------------------------db_name = PREPSBL7instance_name = PREPSBL7service_names = PREPSBL7db_block_size = 8192db_files = 1024

optimizer_features_enable = 8.1.7compatible = "9.2.0"

control_files = ("/oradata9/PREPSBL7/system/ctl01PREPSBL7.ctl","/oradata9/PREPSBL7/datos/ctl02PREPSBL7.ctl","/oradata9/PREPSBL7/indices/ctl03PREPSBL7.ctl")

background_dump_dest = /oracle/920/admin/PREPSBL7/bdumpcore_dump_dest = /oracle/920/PREPSBL7/cdumpuser_dump_dest = /oracle/920/PREPSBL7/udumpmax_dump_file_size = 10000

log_archive_start = falselog_archive_dest_1 = "location=/oradata9/arch1"log_archive_format = PREPSBL7_arch_%t_%s.arc

log_checkpoint_interval = 1000000000log_checkpoint_timeout = 3600

#-------------------------------------------------------------audit_trail = trueremote_login_passwordfile = nonemax_enabled_roles = 30#-------------------------------------------------------------sql_trace = FALSEtimed_statistics = true

processes = 300session_cached_cursors = 50open_cursors = 1500optimizer_mode = RULEopen_links = 4

db_cache_size=419430400shared_pool_size = 367001600large_pool_size = 157286400log_buffer = 1153433sort_area_size = 2097152sort_area_retained_size = 4194304

_DB_BLOCK_HASH_BUCKETS = 63920nls_sort=binarydb_file_multiblock_read_count = 8

pga_aggregate_target = 209715200workarea_size_policy=AUTOparallel_automatic_tuning=FALSEdb_writer_processes=3dbwr_io_slaves=0

undo_management = autoundo_tablespace = undotbs

Page 117: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 117 de 127

En el fichero de parámetros se deben cambiar como mínimo los siguientes:

PARAMETRO DESCRICCIÓNDB_NAME Nombre de la base de datos.CONTROL_FILES Indicar la nueva situación de los ficheros de control múltiples que se

desean crear. Se recomienda tener como mínimo dos ficheros decontrol en discos distintos.

DB_BLOCK_SIZE El tamaño del bloque Oracle. Es dependiente del S.O. No puedecambiarse después.

DB_BLOCK_BUFFERS Indica el número de buffers de B.D. en el Area Global del Sistema(SGA). Puede modificarse posteriormente para aumentar elrendimiento.

PROCESSES Número máximo de procesos del S.O. que pueden estar conectados aOracle de forma concurrente.

ROLLBACK_SEGMENTS Si no se indica nada, genera un único segmento de rollback SYSTEM.Puede modificarse según se añaden nuevos segmentos de rollback.

BACKGROUND_DUMP_DEST Directorio con los ficheros de alertasCORE_DUMP_DEST Directorio para los ficheros con trazas del sistema.USER_DUMP_DEST Directorio para los ficheros con trazas de procesos de sesión.UNDO_TABLESPACE Nombre del segmento de UndotabsCONTROL_FILES Indica la situación de los ficheros de control.

Se deben crear los directorios indicados en los tres parámetros de DUMP.

# mkdir $ORACLE_HOME/admin/INSTANCIA/bdump# mkdir $ORACLE_HOME/admin/INSTANCIA/cdump# mkdir $ORACLE_HOME/admin/INSTANCIA/udump

11.1.3. Conexión a sqlplus a Oracle con SQLplus

Nos debemos conectar Oracle mediante la herramienta SQLPlus y desde allí arrancar la Instancia(SGA y procesos background) Debemos indicar e fichero init.ora.

$ . profile_DWHDESAdta01:920:DWHDESA>sqlplus "/ as sysdba"SQL>

SQL> STARTUP NOMOUNT pfile=/oracle920/dbs/initPREPSBL7.ora;Oracle Instance Started.

11.1.4. Ejecución de los comandos de creación de la base de datos

A partir de este momento comenzaremos a ejecutar los comandos propiamente dichos de creación dela base de datos. Normalmente se contará con scripts de creación para simplificar la misma. Aquíveremos algunos ejemplos.

11.1.4.1.Creación inicial con CREATE DATABASE

Inicialmente se utilizará el comando CREATE DATABASE que nos permitirá crear:

- El fichero asociado al tablespace SYSTEM.- Los Redo log con sus ficheros asociados.- El fichero de control de la base de la datos.- Dentro del tablespace SYSTEM genera:- El diccionario de datos.- El segmento de rollback SYSTEM.- Los usuarios SYS y SYSTEM.- Especifica el conjunto de caracteres utilizado para la creación.- Monta y abre la B.D., que queda lista para su utilización.

Page 118: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 118 de 127

CREATE DATABASE SBLPRODMAXINSTANCES 1MAXLOGHISTORY 1MAXLOGFILES 5MAXLOGMEMBERS 5MAXDATAFILES 100DATAFILE '/oradata9/SBLPROD/system/SBLPROD_system01.dbf' SIZE 1000M REUSEEXTENT MANAGEMENT LOCALDEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '/oradata9/SBLPROD/temp/SBLPROD_temp01.dbf'SIZE 2000M REUSEUNDO TABLESPACE "UNDOTBS" DATAFILE '/oradata9/SBLPROD/admin/undo/SBLPROD_undotbs01.dbf'SIZE 2000M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITEDCHARACTER SET WE8MSWIN1252NATIONAL CHARACTER SET AL16UTF16LOGFILE GROUP 1 ('/oradata9/SBLPROD/admin/redo1/SBLPROD_redo1_g1.dbf','/oradata9/SBLPROD/datos1/redo2/SBLPROD_redo1_g2.dbf','/oradata9/SBLPROD/ind1/redo3/SBLPROD_redo1_g3.dbf') SIZE 102400K,

GROUP 2 ('/oradata9/SBLPROD/admin/redo1/SBLPROD_redo2_g1.dbf','/oradata9/SBLPROD/datos1/redo2/SBLPROD_redo2_g2.dbf','/oradata9/SBLPROD/ind1/redo3/SBLPROD_redo2_g3.dbf') SIZE 102400K;

11.1.4.2.Generación de las tables del diccionario de datos

Una vez creada la base de datos debemos ejecutar algunos scripts de Oracle encargados de lacreación de los diversos objetos de la base de datos.

@/oracle/9.2.0.7/rdbms/admin/catalog.sql;@/oracle/9.2.0.7/rdbms/admin/catexp7.sql;@/oracle/9.2.0.7/rdbms/admin/catblock.sql;@/oracle/9.2.0.7/rdbms/admin/catproc.sql;@/oracle/9.2.0.7/rdbms/admin/catoctk.sql;@/oracle/9.2.0.7/rdbms/admin/owminst.plb;

connect SYSTEM/manager@/oracle/9.2.0.7/sqlplus/admin/pupbld.sql;

connect SYSTEM/managerset echo onspool /oracle/9.2.0.7/assistants/dbca/logs/sqlPlusHelp.log@/oracle/9.2.0.7/sqlplus/admin/help/hlpbld.sql helpus.sql;

Se puede ejecutar el paquete utlrp.sql para verificar el estado correcto de los objetos de la base dedatos (realiza una compilación de los mismos.

Al finalizar estos pasos deberemos crear el fichero de configuración spfile a partir del fichero init.oraoriginal.

connect /as sysdbaset echo onspool postDBCreation_PREPSBL7.log@$ORACLE_HOME/rdbms/admin/utlrp.sql;shutdown ;connect /as sysdbaset echo oncreate spfile='/home/oracle/9.0.2/dbs/spfile_PREPSBL7.ora' FROM

pfile='/home/oracle/9.0.2/dbs/initPREPSBL7.ora';startup ;

Page 119: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 119 de 127

11.1.4.3.Creación de los tablespaces de Usuario

En este punto procederemos a crear los tablespaces de usuario. Ya vimos con anterioridad que estosestarán compuestos por uno o más datafiles.

CREATE TABLESPACE "DATOS" LOGGING DATAFILE'/oradata9/SBLPROD/datos1/SBLPROD_datos01.dbf' SIZE 2000M REUSE,'/oradata9/SBLPROD/datos1/SBLPROD_datos02.dbf' SIZE 2000M REUSE,EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

CREATE TABLESPACE "DMDATOS" LOGGING DATAFILE'/oradata9/SBLPROD/datos1/SBLPROD_dmdatos01.dbf' SIZE 50M REUSEEXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

CREATE TABLESPACE "INDICES" LOGGING DATAFILE'/oradata9/SBLPROD/ind1/SBLPROD_indices01.dbf' SIZE 500M REUSEEXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

CREATE TABLESPACE "PERFSTAT" LOGGING DATAFILE'/oradata9/SBLPROD/admin/dba/SBLPROD_perfstat01.dbf' SIZE 500M REUSEEXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ;

11.1.4.4.Creación de usuarios y concesión de permisos

CREATE ROLE "CONSULTA_SIEBEL" NOT IDENTIFIED;GRANT CREATE SESSION TO CONSULTA_SIEBEL;

CREATE ROLE "SSE_ROLE" NOT IDENTIFIED;GRANT CREATE SESSION TO SSE_ROLE;

CREATE ROLE "PLUSTRACE" NOT IDENTIFIED;

CREATE USER "SIEBEL" PROFILE "DEFAULT" IDENTIFIED BY SIEBEL DEFAULT TABLESPACE "DATOS"TEMPORARY TABLESPACE "TEMPO" QUOTA UNLIMITED ON "DATOS" ACCOUNT UNLOCK;

CREATE USER "CARGADWH" PROFILE "DEFAULT" IDENTIFIED BY CARGADWH DEFAULT TABLESPACE"USERS" TEMPORARY TABLESPACE "TEMPO" QUOTA UNLIMITED ON "DATOS" ACCOUNT UNLOCK;

CREATE USER "POP" PROFILE "DEFAULT" IDENTIFIED BY POP DEFAULT TABLESPACE "DATOS"TEMPORARY TABLESPACE "TEMPO" ACCOUNT UNLOCK;

GRANT RESOURCE, SSE_ROLE TO SIEBEL;GRANT ALTER SESSION TO SIEBEL;GRANT CREATE ANY PROCEDURE TO SIEBEL;GRANT CREATE ANY TRIGGER TO SIEBEL;GRANT CREATE ANY VIEW TO SIEBEL;GRANT DATABASE LINK TO SIEBEL;GRANT UNLIMITED TABLESPACE TO SIEBEL;

GRANT CONSULTA_SIEBEL TO CARGADWH;GRANT EXP_FULL_DATABASE TO CARGADWH;GRANT CREATE PROCEDURE TO CARGADWH;GRANT CREATE SYNONYM TO CARGADWH;GRANT CREATE TABLE TO CARGADWH;

11.1.4.5.Modificar fichero listener.ora

En este punto procederemos a crear o modificar el fichero listener.ora con los valorescorrespondientes a la nueva instancia.

# LISTENER.ORA Network Configuration File: /oracle/920/network/admin/listener.ora# Generated by Oracle configuration tools.

LISTENER_DWHPROD =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = dpa01)(PORT = 1540))

Page 120: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 120 de 127

) ) )

SID_LIST_LISTENER_DWHPROD =(SID_LIST =(SID_DESC =(SID_NAME = DWHPROD)(ORACLE_HOME = /oracle/920)))

Para arrancar el proceso listener utilizaremos la utilidad lsnrctl.

$ lsnrctlLSNRCTL for IBM/AIX RISC System/6000: Version 9.2.0.8.0 - Production on 02-MAR-2007 10:36:17Copyright (c) 1991, 2006, Oracle Corporation. All rights reserved.Welcome to LSNRCTL, type "help" for information.

LSNRCTL> set current_listener listener_pruebaCurrent Listener is listener_pruebaLSNRCTL> startStarting /oracle/920/bin/tnslsnr: please wait...

TNSLSNR for IBM/AIX RISC System/6000: Version 9.2.0.8.0 - ProductionSystem parameter file is /oracle/920/network/admin/listener.oraLog messages written to /oracle/920/network/log/listener_prueba.logListening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=sppa01.nne.es)(PORT=1551)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=sppa01)(PORT=1551)))STATUS of the LISTENER------------------------Alias listener_pruebaVersion TNSLSNR for IBM/AIX RISC System/6000: Version 9.2.0.8.0 - ProductionStart Date 02-MAR-2007 10:36:24Uptime 0 days 0 hr. 0 min. 1 secTrace Level offSecurity ONSNMP OFFListener Parameter File /oracle/920/network/admin/listener.oraListener Log File /oracle/920/network/log/listener_prueba.logListening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=sppa01.nne.es)(PORT=1551)))Services Summary...Service "PRUEBA" has 1 instance(s).

Instance "PRUEBA", status UNKNOWN, has 1 handler(s) for this service...The command completed successfullyLSNRCTL>

Page 121: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 121 de 127

12. Apéndice B – Selección de consultas

12.1. Información sobre tablas (datos e indices)

Con las siguientes select podemos obtener diversa información sobre tablas.

Estructura de la tabla

COLUMN POS FORMAT 999 heading "POS"COLUMN PCT_FREE FORMAT A4 heading "Null"

SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH, NULLABLE, COLUMN_ID POSFROM SYS.DBA_TAB_COLUMNSWHERE OWNER = ‘SIEBEL’AND TABLE_NAME = ‘S_USER’ORDER BY COLUMN_ID;

Configuración Física

COLUMN PCT_FREE FORMAT 999 heading "%|Free"COLUMN PCT_INCREASE FORMAT 999 heading "%|Incr"COLUMN INITIAL_EXTENT FORMAT 999999999 heading "Init|Extent"COLUMN NEXT_EXTENT FORMAT 9999999999999 heading "Next|Extent"COLUMN MAX_EXTENTS FORMAT 999 heading "Max|Ext"COLUMN AVG_ROW_LEN FORMAT 99999 heading "Avg|Row|Len"

SELECT PCT_FREE, PCT_INCREASE, INITIAL_EXTENT,NEXT_EXTENT, MAX_EXTENTS, NUM_ROWS, AVG_ROW_LEN

FROM SYS.DBA_TABLESWHERE OWNER = ‘SIEBEL’AND TABLE_NAME = ‘S_USER’;

Máximo tamaño de una fila

SELECT SUM(DATA_LENGTH)FROM SYS.DBA_TAB_COLUMNSWHERE OWNER = ‘SIEBEL’ AND TABLE_NAME = ‘S_USER’;

Número de EXTENTS

COLUMN SEGMENT_NAME FORMAT A30 HEADING 'Table Name'COLUMN COUNTER FORMAT 9999 HEADING 'Number Of Extents Used'

SELECT SEGMENT_NAME, COUNT(*) COUNTERFROM SYS.DBA_EXTENTSWHERE OWNER = ‘SIEBEL’AND TABLE_NAME = ‘S_USER’GROUP BY SEGMENT_NAME;

Page 122: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 122 de 127

Tamaño físico en bytes

COLUMN TABSIZE FORMAT 999999999999 HEADING 'Table Size In Bytes'SELECT SEGMENT_NAME, SUM(BYTES) TABSIZE

FROM SYS.DBA_EXTENTSWHERE OWNER = ‘SIEBEL’AND SEGMENT_NAME = ‘S_USER’GROUP BY SEGMENT_NAME;

Indíces y las columnas asociadas

COLUMN OWNER FORMAT A8 heading "Index|Owner"COLUMN TABLE_OWNER FORMAT A8 heading "Table|Owner"COLUMN INDEX_NAME FORMAT A30 heading "Index Name"COLUMN COLUMN_NAME FORMAT A30 heading "Column Name"COLUMN COLUMN_POSITION FORMAT 9999 heading "Pos"BREAK ON CONSTRAINT_NAME SKIP PAGE

SELECT IND.OWNER,IND.TABLE_OWNER,IND.INDEX_NAME,IND.UNIQUENESS,COL.COLUMN_NAME,COL.COLUMN_POSITION

FROM SYS.DBA_INDEXES IND,SYS.DBA_IND_COLUMNS COL

WHERE IND.TABLE_NAME = upper('&&table')AND IND.TABLE_OWNER = upper('&&owner')AND IND.TABLE_NAME = COL.TABLE_NAMEAND IND.OWNER = COL.INDEX_OWNERAND IND.TABLE_OWNER = COL.TABLE_OWNERAND IND.INDEX_NAME = COL.INDEX_NAME;

Información de configuración física de los índicesCOLUMN OWNER FORMAT A8 heading "Index|Owner"COLUMN TABLE_OWNER FORMAT A8 heading "Table|Owner"COLUMN INDEX_NAME FORMAT A30 heading "Index Name"COLUMN COLUMN_NAME FORMAT A30 heading "Column Name"COLUMN COLUMN_POSITION FORMAT 9999 heading "Pos"COLUMN PCT_FREE FORMAT 999 heading "%|Free"COLUMN PCT_INCREASE FORMAT 999 heading "%|Incr"COLUMN INITIAL_EXTENT FORMAT 999999999 heading "Init|Extent"COLUMN NEXT_EXTENT FORMAT 999999999 heading "Next|Extent"COLUMN MAX_EXTENTS FORMAT 999 heading "Max|Ext"

SELECT IND.OWNER,IND.TABLE_OWNER,IND.INDEX_NAME,IND.UNIQUENESS,COL.COLUMN_NAME,COL.COLUMN_POSITION,IND.PCT_FREE,IND.PCT_INCREASE,IND.INITIAL_EXTENT,IND.NEXT_EXTENT,IND.MAX_EXTENTSFROM DBA_INDEXES IND,DBA_IND_COLUMNS COL

WHERE IND.TABLE_NAME = ‘S_USER’AND IND.TABLE_OWNER = ‘SIEBEL’AND IND.TABLE_NAME = COL.TABLE_NAMEAND IND.OWNER = COL.INDEX_OWNERAND IND.TABLE_OWNER = COL.TABLE_OWNERAND IND.INDEX_NAME = COL.INDEX_NAME;

Page 123: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 123 de 127

Información sobre las Non-Foreign Keys ConstraintsCOLUMN OWNER FORMAT A9 heading "Owner"COLUMN CONSTRAINT_NAME FORMAT A30 heading "Constraint|Name"COLUMN R_CONSTRAINT_NAME FORMAT A30 heading"Referenced|Constraint|Name"COLUMN DELETE_RULE FORMAT A9 heading "Del|Rule"COLUMN TABLE_NAME FORMAT A18 heading "Table Name"COLUMN COLUMN_NAME FORMAT A30 heading "Column Name"--COLUMN CONSTRAINT_TYPE FORMAT A4 heading "Type"--COLUMN POSITION ALIAS POS--COLUMN POSITION 9999 heading "Pos"COLUMN POSITION FORMAT 9999 heading "Pos"BREAK ON CONSTRAINT_NAME SKIP PAGE

SELECT COL.OWNER,COL.CONSTRAINT_NAME,COL.COLUMN_NAME,COL.POSITION,

-- CON.CONSTRAINT_TYPEDECODE (CON.CONSTRAINT_TYPE,

'P','primary','R','foreign','U','unique','C','check') "Type"FROM DBA_CONS_COLUMNS COL,DBA_CONSTRAINTS CON

WHERE COL.OWNER = upper('&&owner')AND COL.TABLE_NAME = upper('&&table')AND CONSTRAINT_TYPE <> 'R'AND COL.OWNER = CON.OWNERAND COL.TABLE_NAME = CON.TABLE_NAMEAND COL.CONSTRAINT_NAME = CON.CONSTRAINT_NAMEORDER BY COL.CONSTRAINT_NAME, COL.POSITION;

Show the Foreign Keys on this table pointing at other tables PrimaryKey Fields for referential Integrity purposes.

SELECT CON.OWNER,CON.TABLE_NAME, CON.CONSTRAINT_NAME,CON.R_CONSTRAINT_NAME, CON.DELETE_RULE,COL.COLUMN_NAME, COL.POSITION,

-- CON1.OWNER,CON1.TABLE_NAME "Ref Tab",CON1.CONSTRAINT_NAME "Ref Const"

-- COL1.COLUMN_NAME "Ref Column",-- COL1.POSITION--FROM DBA_CONS_COLUMNS COL,FROM DBA_CONSTRAINTS CON1,

DBA_CONS_COLUMNS COL,DBA_CONSTRAINTS CON

WHERE CON.OWNER = upper('&&owner')AND CON.TABLE_NAME = upper('&&table')AND CON.CONSTRAINT_TYPE = 'R'AND COL.OWNER = CON.OWNERAND COL.TABLE_NAME = CON.TABLE_NAMEAND COL.CONSTRAINT_NAME = CON.CONSTRAINT_NAME-- Leave out next line if looking for other Users with Foriegn Keys.AND CON1.OWNER = CON.OWNERAND CON1.CONSTRAINT_NAME = CON.R_CONSTRAINT_NAMEAND CON1.CONSTRAINT_TYPE IN ( 'P', 'U' );

Page 124: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 124 de 127

-- The extra DBA_CONS_COLUMNS will give details of refered tocolumns,-- but has a multiplying effect on the query results.-- NOTE: Could use temporary tables to sort out.--AND COL1.OWNER = CON1.OWNER--AND COL1.TABLE_NAME = CON1.TABLE_NAME--AND COL1.CONSTRAINT_NAME = CON1.CONSTRAINT_NAME;

Show the Foreign Keys pointing at this table via the recursive call to the Constraints table.

SELECT CON1.OWNER, CON1.TABLE_NAME,CON1.CONSTRAINT_NAME, CON1.DELETE_RULE,CON1.STATUS, CON.TABLE_NAME,CON.CONSTRAINT_NAME, COL.POSITION,COL.COLUMN_NAME

FROM DBA_CONSTRAINTS CON,DBA_CONS_COLUMNS COL,DBA_CONSTRAINTS CON1

WHERE CON.OWNER = upper('&&owner')AND CON.TABLE_NAME = upper('&&table')AND ((CON.CONSTRAINT_TYPE = 'P') OR (CON.CONSTRAINT_TYPE = 'U'))AND COL.TABLE_NAME = CON1.TABLE_NAMEAND COL.CONSTRAINT_NAME = CON1.CONSTRAINT_NAMEAND CON1.OWNER = CON.OWNERAND CON1.R_CONSTRAINT_NAME = CON.CONSTRAINT_NAMEAND CON1.CONSTRAINT_TYPE = 'R'GROUP BY CON1.OWNER, CON1.TABLE_NAME,N1.CONSTRAINT_NAME,

CON1.DELETE_RULE, CON1.STATUS, CON.TABLE_NAME,CON.CONSTRAINT_NAME, COL.POSITION,COL.COLUMN_NAME;

Show all the check ConstraintsSET HEADING OFFSELECT 'alter table ', TABLE_NAME, ' add constraint ',

CONSTRAINT_NAME, ' check ( ', SEARCH_CONDITION, ' ); 'FROM DBA_CONSTRAINTS

WHERE OWNER = ‘SIEBEL’AND TABLE_NAME = ‘S_USER’AND CONSTRAINT_TYPE = 'C';

Triggers asociados a la tabla

SET ARRAYSIZE 1SET LONG 6000000SELECT OWNER,

'CREATE OR REPLACE TRIGGER ',TRIGGER_NAME, DESCRIPTION, TRIGGER_BODY, '/'

FROM DBA_TRIGGERSWHERE OWNER = ‘SIEBEL’AND TABLE_NAME = ‘S_USER’;

Page 125: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 125 de 127

GRANTS realizados sobre la tabla y las columnasTabla

SELECT 'GRANT ', PRIVILEGE,' ON ',TABLE_NAME,' TO ', GRANTEE, ';'FROM DBA_TAB_PRIVSWHERE OWNER = upper('&&owner')AND TABLE_NAME = upper('&&table');

Columnas

SELECT 'GRANT ', PRIVILEGE, ' ( ', COLUMN_NAME,' ) ', ' ON ', TABLE_NAME, ' TO ', GRANTEE, ';'

FROM DBA_COL_PRIVSWHERE OWNER = upper('&&owner')AND TABLE_NAME = upper('&&table');

Page 126: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 126 de 127

12.2. Información sobre Database Performance Tuning

Measure the Buffer Cache Hit Ratio-- Get initial Buffer Hit Ratio reading...SELECT ROUND((1-(phy.value / (cur.value + con.value)))*100,2) "Cache Hit Ratio"FROM v$sysstat cur, v$sysstat con, v$sysstat phyWHERE cur.name = 'db block gets'AND con.name = 'consistent gets' AND phy.name = 'physical reads'

/-- Let's artificially increase the buffer hit ratio...DECLAREv_dummy dual.dummy%TYPE;

BEGINFOR I IN 1..1000 LOOPSELECT dummy INTO v_dummy FROM dual;

END LOOP;END;/-- Let's measure it again...SELECT ROUND((1-(phy.value / (cur.value + con.value)))*100,2) "Cache Hit Ratio"FROM v$sysstat cur, v$sysstat con, v$sysstat phyWHERE cur.name = 'db block gets'AND con.name = 'consistent gets' AND phy.name = 'physical reads'

/

Display database SGA statisticsDECLARE

libcac number(10,2);rowcac number(10,2);bufcac number(10,2);redlog number(10,2);spsize number;blkbuf number;logbuf number;

BEGINselect value into redlog from v$sysstatwhere name = 'redo log space requests';select 100*(sum(pins)-sum(reloads))/sum(pins) into libcac from v$librarycache;select 100*(sum(gets)-sum(getmisses))/sum(gets) into rowcac from v$rowcache;select 100*(cur.value + con.value - phys.value)/(cur.value + con.value) into bufcacfrom v$sysstat cur,v$sysstat con,v$sysstat phys,v$statname ncu,v$statname nco,v$statname nphwhere cur.statistic# = ncu.statistic#

and ncu.name = 'db block gets'and con.statistic# = nco.statistic#and nco.name = 'consistent gets'and phys.statistic# = nph.statistic#and nph.name = 'physical reads';

select value into spsize from v$parameter where name = 'shared_pool_size';select value into blkbuf from v$parameter where name = 'db_block_buffers';select value into logbuf from v$parameter where name = 'log_buffer';dbms_output.put_line('> SGA CACHE STATISTICS');dbms_output.put_line('> ********************');dbms_output.put_line('> SQL Cache Hit rate = '||libcac);dbms_output.put_line('> Dict Cache Hit rate = '||rowcac);dbms_output.put_line('> Buffer Cache Hit rate = '||bufcac);dbms_output.put_line('> Redo Log space requests = '||redlog);dbms_output.put_line('> ');dbms_output.put_line('> INIT.ORA SETTING');dbms_output.put_line('> ****************');dbms_output.put_line('> Shared Pool Size = '||spsize||' Bytes');dbms_output.put_line('> DB Block Buffer = '||blkbuf||' Blocks');dbms_output.put_line('> Log Buffer = '||logbuf||' Bytes');dbms_output.put_line('> ');iflibcac < 99 then dbms_output.put_line('Library Cache too low! Increase Shared Pool Size.');END IF;ifrowcac < 85 then dbms_output.put_line('Row Cache too low! Increase the Shared Pool Size.');END IF;

Page 127: Introducción aOracle

ING NATIONALE-NEDERLANDENDepartamento de Informática - Sistemas

11/03/2012 Introducción a la administración de Oracle

C:\Users\RAUL\AppData\Local\Temp\Framework\Introduccion_a_Oracle_180B11D.doc Página 127 de 127

ifbufcac < 90 then dbms_output.put_line('Buffer Cache too low! Increase DB Block Buffer.');END IF;ifredlog > 100 then dbms_output.put_line('*** HINT: Log Buffer value is rather low!');END IF;END;

Reports free memory available in the SGA

select name,sgasize/1024/1024 "Allocated (M)",bytes/1024 "Free (K)",round(bytes/sgasize*100, 2) "% Free"

from (select sum(bytes) sgasize from sys.v_$sgastat) s, sys.v_$sgastat fwhere f.name = 'free memory'/


Recommended