Sunteți pe pagina 1din 214

Administracin de

Base de Datos
ADMINISTRACIN DE BASE DE DATOS 2

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 3

Indce
Presentacin 5
Red de contenidos 7
Unidad de Aprendizaje 1
ARQUITECTURA Y GESTIN DE UNA INSTANCIA ORACLE 9
1.1 Tema 1 : Arquitectura y Gestin de una instancia Oracle 11
1.1.1 : Arquitectura de una base de datos Oracle 11
1.1.2 : Gestin de una Instancia Oracle 19
Unidad de Aprendizaje 2
ELABORACIN DE SENTENCIAS SQL Y DICCIONARIO DE DATOS 37
2.1 Tema 2 : Elaboracin de Sentencias SQL 39
2.1.1 : Introduccin a SQL 39
2.1.2 : Instrucciones DML y operadores 40
2.1.3 : Consultando dos o ms tablas 46
2.1.4 : Funciones predefinidas 48
2.2 Tema 3 : Diccionario de Datos 55
2.2.1 : Introduccin al Diccionario de Datos 55
2.2.2 : Estructura del Diccionario 55
2.2.3 : Uso del Diccionario de Datos 56
Unidad de Aprendizaje 3
SISTEMAS DE ARCHIVOS ORACLE 61
3.1 Tema 4 : Archivos de Control 63
3.1.1 : Administracin de los Archivos de Control 63
3.1.2 : Creacin de Archivos de Control 64
3.1.3 : Respaldo y recuperacin de un archivo de control 66
3.1.4 : Eliminacin de los archivos de control 67
3.2 Tema 5 : Mantenimiento de los Archivos Redo Logs 68
3.2.1 : Definicin de archivos OnLine Redo Logs 68
3.2.2 : Planeacion de los archivos OnLine Redo Logs 70
3.2.3 : Administracion de los archivos OnLine Redo Logs 71
3.3 Tema 6 : Gestin de Tablespaces y Datafiles 75
3.3.1 : Conceptos de almacenamiento 75
3.3.2 : Tablespace 77
3.3.3 : Datafile 84
3.3.4 : Definicin de Usuario, Privilegio y Rol 89
3.3.5 : Diccionario de Datos 91
3.3.6 : Otras caracteristicas 92
3.4 Tema 7 : Jerarqua de almacenamiento 95
3.4.1 : Introduccin 95
3.4.2 : Estructura Lgica de Almacenamiento en Oracle 97
3.4.3 : Relaciones entre las Estructuras de Almacenamiento 117
3.4.4 : Informacin del Diccionario de Datos 117

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 4

Unidad de Aprendizaje 4
GESTIN DE TABLAS E NDICES 119
4.1 Tema 8 : Tablas en Oracle 121
4.1.1 : Tipos de tablas 121
4.1.2 : Tablas Particionadas 124
4.1.3 : Tablas Agrupadas o Clustered 126
4.1.4 : Manejo de ndices 128
4.1.5 : ROWID-Tipo de datos 130
4.1.6 : Otras instrucciones que complementan la creacin de tablas 133
4.1.7 : Tablas externas 135
4.1.8 : Reorganizacin de tablas e ndices 143
4.1.9 : Diccionario de Datos 143
4.2 Tema 9 : Administracin de la Integridad 145
4.2.1 : Restricciones (Constraints) 145
4.2.2 : Administracin de la Integridad 148
4.2.3 : Creacion de constraints 148
4.2.4 : Recomendaciones para definir los constraints 150
4.2.5 : Habilitacin de los constraints 150
4.2.6 : Uso de la tabla EXCEPTIONS 151
4.2.7 : Obteniendo informacin del Diccionario de Datos 153
Unidad de Aprendizaje 5
MECANISMOS AVANZADOS DEL SERVIDOR 157
5.1 Tema 10 : Segmentos rollback (undo) 159
5.1.1 : Definicin de los Segmentos Rollback 159
5.1.2 : Estados de un Segmento Rollback 160
5.1.3 : Administracin de Segmentros Rollback 160
5.1.4 : Informacion del Diccionario de Datos 163
5.1.5 : Posibles Errores y Soluciones 163
5.1.6 : Configuracin de Disco para Segmentos Rollback 164
5.1.7 : Administracin de almacenamiento y objetos 165
5.1.8 : Importancia de los Segmentos Rollback 167
5.2 Tema 11 : Seguridad 169
5.2.1 : Niveles de Seguridad 169
5.2.2 : Implementacin de Seguridad 169
5.3 Tema 12 : Auditora 179
5.3.1 : Auditora de Seguridad 179
5.3.2 : Informacin de Auditora 182
5.4 Tema 13 : Respaldo y Recuperacin 184
5.4.1 : Respaldo (Backup) 184
5.4.2 : Tipos de Backup 185
5.4.3 : Tipos de Recuperacin 185
5.4.4 : Administracin del Backup 187
5.4.5 : Principios de Recuperacin 190
Unidad de Aprendizaje 6
SEGUIMIENTO Y OPYIMIZACIN DE SENTENCIAS SQL 199
6.1 Tema 14 : Seguimiento y Optimizacin de Sentencias SQL 201
6.1.1 : Optimizadores en Oracle 201
6.1.2 : Optimizador Basado en Costes 204

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 5

Presentacin
Administracin de Base de datos es un curso que pertenece a la lnea de base de
datos y se dicta en la carrera de Redes y Comunicaciones. Brinda un conjunto de
conocimientos y herramientas que permite a los alumnos implementar soluciones en
una BD Oracle que satisfacen necesidades de negocio, y asegura un buen
rendimiento y la alta disponibilidad de los datos.

Oracle Corporacin es el proveedor lder de software de gestin de informacin en el


mundo, y la segunda empresa independiente, ms grande del mundo, lder en
software.

Esta compaa ofrece bases de datos, servidores de aplicaciones, herramientas de


desarrollo y aplicaciones, junto con servicios de consultora, educacin y soporte en
ms de 145 pases de todo el mundo.

Durante los ltimos aos, el entorno de base de datos de Oracle se ha convertido en


una plataforma de base de datos ms importantes del mundo. Aunque el destino
principal de las bases de datos de Oracle son las grandes organizaciones o las
instituciones del gobierno que requieren capacidades masivas de procesamiento de
datos, Oracle ha ofrecido muchos productos nuevos que acercan el entorno de Oracle
a las Organizaciones ms pequeas.

El curso es eminentemente prctico que est centrado en actividades de


Administracin de Base de datos. En primer lugar, se inicia con el reconocimiento de la
arquitectura de una Base de datos Oracle (en el servidor) y con los pasos para activar
una Instancia. Posteriormente se revisan las vistas del Diccionario de Datos para tener
una mejor visibilidad y mejor administracin de la base de datos. En este punto se
refuerza los conocimientos en construccin de sentencias SQL. Luego se desarrolla
cada componente de almacenamiento (archivos de la BD) y se hace conocer las
buenas prcticas. Se contina con la creacin de objetos (tablas e ndices), pero
centrados en los casos de buen rendimiento de la base de datos. Luego, se analiza las
opciones de manejo de la integridad de la informacin, as como las transacciones de
los procesos de negocio. A esto se suma la presentacin y desarrollo de las
principales estrategias de respaldo y recuperacin. Finalmente, se exponen las
mejores prcticas para hacer seguimiento y afinar sentencias SQL.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 6

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 7

Red de contenidos

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 8

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 9

UNIDAD

1
ARQUITECTURA Y GESTIN DE
UNA INSTANCIA ORACLE
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al trmino de la unidad, los alumnos podrn enunciar los principales
componentes de la arquitectura fsica y lgica de una BD Oracle.

TEMARIO
1.1 Tema 1 : Arquitectura y Gestin de una instancia Oracle
1.1.1 : Arquitectura de una base de datos Oracle
1.1.2 : Gestin de una Instancia Oracle

ACTIVIDADES PROPUESTAS
Identificar los componentes de la Arquitectura Lgica y Fsica de una
base de datos Oracle
Identificar los procesos y estructuras de memoria que componen una
instancia de base de datos Oracle.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 10

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 11

1.1. ARQUITECTURA Y GESTIN DE DE UNA INSTANCIA


ORACLE

1.1.1. Arquitectura de una base de datos oracle

La arquitectura de ORACLE tiene tres componentes bsicos: las estructuras de


memoria para almacenar los datos y el codigo ejecutable, los procesos que corren el
sistema de bases de datos y las tareas de cada usuario conectado a la base de datos
y los archivos que sirven para el almacenamiento fsico, en disco, de la informacin de
la base de datos.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 12

1.1.1.1. Estructuras de memoria

Hay dos clases de memoria, una de ellas compartida por todos los usuarios
conectados y otra, dedicada al trabajo de cada uno de ellos.

El rea global del sistema SGA (system global area), es el rea compartida por todos
los usuarios y se divide en tres partes:

Fondo comn compartido (Shared pool), en ella mantiene el diccionario de datos


y las reas compartidas de las rdenes SQL que se solicitan para su
procesamiento.
rea de memoria rpida (Database buffer cache), donde mantiene los datos
trados por las rdenes SQL de los usuarios conectados a la base de datos.
rea de registros de rehacer (Redo log buffer), aqu se registran los cambios
hechos a la base de datos.

Por cada sesin de usuario, se crea tambin, en memoria, un rea especfica llamada
rea global de programa o PGA (program global area). Esta rea no se comparte con
las otras sesiones de usuario.

1.1.1.2. Archivos de la base de datos

Los archivos que maneja ORACLE se clasifican en cuatro grupos:

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 13

A. Los Archivos de Datos (Datafiles)

Estos archivos sirven para el almacenamiento fsico de las tablas, ndices y


agrupamientos (clusters), y procedimientos. Estos archivos, son los nicos que
contienen los datos de los usuarios de la base de datos.

Las unidades lgicas ms grandes manejadas por ORACLE, para el almacenamiento


de los datos, son llamadas espacios de tablas (tablespaces) que le permiten manejar
y controlar el espacio en los discos.

No es necesario que todos los espacios de tablas estn en un mismo disco. Cuando
se crean en distintos discos se busca un mejor desempeo y mejor manejo del
espacio de almacenamiento.

Una base de datos puede tener un solo espacio de tablas, pero, por las razones
anteriores, se recomienda varios espacios de tablas. Como mnimo, se debe tener un
espacio de tablas del sistema (SYSTEM), un espacio de tablas por cada aplicacin,
un espacio de tablas para los usuarios y otro espacio de tablas para los ndices.

EI espacio de tablas SYSTEM se crea automticamente cuando se crea una base de


datos. All se guardan los archivos de control y el diccionario de datos y toda la
informacin de los procedimientos almacenados.

EI DBA (Administrador de Base de Datos) puede crear un espacio de tablas con una
orden, como la siguiente:

CREATE TABLESPACE indices datafile discod/bd/datosl.dbf size 300m;

Los archivos de datos (datafiles) almacenan los datos del usuario. Se requiere como
mnimo uno para una base de datos.

Cuando se agote el espacio, un DBA tiene dos alternativas:

Adicionar un nuevo archivo de datos con la orden ALTER

ALTER TABLESPACE indices add datafile discod/bd/datos3.dbf size 150m

Crear un nuevo espacio de tablas como se mostr previamente.

En el momento de la creacin de una base de datos, el DBA debe planear o estimar


los requerimientos de almacenamiento y, tambin, el nombre, tamao y localizacin
de los archivos de datos, junto con el nmero mximo de archivos de datos permitido
para la base de datos.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 14

EI DBA puede crear varios espacios de tablas (tablespaces) en discos separados


para planear el crecimiento de la base de datos y hacer una mejor administracin de
la base de datos.

Un objeto de datos, por su parte, es una estructura lgica que puede ser una tabla, un
archivo de ndice, un archivo temporal, un archivo de deshacer o un cluster. Estos
objetos se almacenan fsicamente en segmentos que se componen de extensiones
(extents).

A su vez, una extensin est hecha de bloques que, de acuerdo con el sistema
operativo subyacente, puede tener un nmero determinado de bytes y que el DBA
especifica, en el momento de la creacin de la base de datos. EI tamao del bloque
es dependiente del sistema operativo y nunca puede ser menor al que ste maneja.

En una base de datos, pueden existir otros objetos que no contienen datos como las
vistas, los sinnimos y las secuencias. Sin embargo, todo objeto, independientemente
de si contiene datos o no, debe pertenecer a un esquema.

Por eso, una coleccin de objetos de un usuario se denomina esquema.

Un objeto se puede crear en un esquema de tres formas:

Si un usuario da una orden de creacin de un objeto, por defecto, el sistema lo


crea en su propio esquema.

Copiando el objeto de otro usuario (al nombre de un objeto siempre se le


antepone el nombre del esquema, por ejemplo juan.empleado) con una orden
como:

CREATE TABLE empleado as SELECT * from scott.emp;

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 15

Otro usuario lo crea para uno, como en la orden:

Create Table juan.proyecto (codigo number primay key, ..... )


Tablespace planeacion storage (initial 1000 next 1000 minextents 1
maxextentents 6 .... )

Reglas para el almacenamiento de objetos en la base de datos

Un objeto puede almacenarse en uno o ms archivos de datos (datafiles), pero en


un solo espacio de tablas (tablespace).

Dos objetos diferentes de un esquema pueden estar en distintos tablespaces.

Los objetos pueden almacenarse en mltiples discos. Por ejemplo, parte de


jane.emp es almacenado en el archivo de datos 1 sobre el disco A y parte en el
archivo de datos 2 sobre el disco B.

B. Archivos de control (Control Files)

Tienen la descripcin fsica y direccin de los archivos de la base de datos y de los


archivos de rehacer para el arranque correcto de la base de datos. En estos archivos
se especifican cules datafiles conforman la base de datos para poder tener acceso a
los datos o para poder recuperar la base de datos, ante una falla.

Los archivos de control se crean automticamente cuando se da una orden CREATE


DATABASE y no son editables, pues tambin se actualizan automticamente.

C. Archivos de rehacer (redo log files)

Tienen los cambios hechos a la base de datos para la recuperacin ante fallas o para
el manejo de las transacciones. Poseen los valores antes de una transaccin, la orden
ejecutada y, opcionalmente, el valor despus de la transaccin. EI principal propsito
de estos archivos es servir de respaldo de los datos en la memoria RAM. Este
conjunto de archivos debe estar conformado por dos grupos, como mnimo, y se
recomienda que cada grupo est almacenado en discos separados. EI DBMS utiliza la

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 16

tcnica de ir sobrescribiendo sobre la informacin ms vieja, cuando se agota el


espacio en estos grupos de archivos. Se puede decir que guarda las instrucciones
SQL que se van realizando en toda la base de datos.

D. Archivos fuera de lnea (archived files)

Son archivos opcionales donde se guarda informacin vieja de los archivos de


rehacer, muy convenientes para los respaldos de la base de datos.

1.1.1.3. Procesos

Los procesos son programas que se ejecutan para permitir el acceso a los datos. Los
procesos se cargan en memoria y son transparentes para los usuarios. Los procesos
se clasifican en tres grupos: procesos de base, de usuario y procesos servidores.

A. Procesos de Base o de Soporte

Los procesos de base (background) son los que se encargan de traer datos desde y
hacia la SGA, mejorando el desempeo al consolidar las tareas que son impartidas
por todos los usuarios. Cada proceso de base tiene su propia rea de memoria. Los
procesos de base o soporte son los siguientes:

DBWR: (Database writer) se encarga de manejar los buffers de memoria cache para
que los procesos del usuario siempre encuentren a algunos unos de ellos disponibles.
Es un proceso obligatorio que, adems, escribe los bloques de datos modificados por
los usuarios en los archivos de datos que componen la B.D cuando el proceso LGWR
le enva el mensaje de hacerlo.

LGWR: (Log writer) este proceso escribe datos desde la SGA a los archivos de
rehacer (redo log files) que sirven en caso de fallas en la instancia. Este proceso es
obligatorio y es el nico encargado de escribir y leer en estos archivos. El proceso de

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 17

llenado de estos archivos es circular, por lo tanto, antes de empezar a sobrescribir en


uno de ellos, se marca un punto de verificacin y LGWR enva la orden de escritura
en los datafiles al proceso DBWR. Cuando se cambia de uso de grupo de redo log
(archivo deshacer), se produce un SWITCH LOG

LCKn, Lock: (lock processes) El bloqueo es un proceso opcional. Efecta los


bloqueos entre instancias, en caso de ambientes con servidores paralelos (hasta con
10 servidores).

CKPT: (Check point) El punto de comprobacin es un proceso opcional que ocurre


cuando los usuarios conectados a la base de datos, hacen solicitudes de exmenes
de datos. Uno de los eventos que dispara a este proceso es el SWITCH LOG.

SNPn: (Snapshot process) se encarga de refrescar los snapshots o rplicas de tablas


que se usan, principalmente, en ambientes distribuidos.

SMON: (System monitor) recupera el sistema ante una falla de la instancia.

RECO: (Recovery) recupera ante las fallas, en una transaccin en ambientes


distribuidos.

ARCH: (Archive) copia los registros de rehacer de la RAM en archivos de datos


(archive redo logs) que permiten la recuperacin cuando se presentan fallas de los
medios magnticos.

PMON: (Process Monitor) recupera la instancia ante una falla de un proceso de


usuario; libera los recursos del proceso que fall.

B. Procesos del Usuario

Cuando un usuario se conecta a la base de datos, se crea un proceso de usuario que


se encarga de ejecutar el cdigo de aplicacin del usuario y manejar el perfil del
usuario con sus variables de ambiente. Los procesos de usuario no se pueden
comunicar directamente con la base de datos, nicamente, lo hacen a travs de
procesos servidores.

C. Procesos Servidores

Ejecutan las rdenes SQL de los usuarios y llevan los datos al database buffer
cache para que los procesos del usuario puedan tener acceso a los datos. Se
pueden tener distintas arquitecturas para trabajar en ORACLE, segn los tipos de
servidores: dedicados o multihilos.

Una configuracin dedicada significa que cada conexin de un usuario de Base de


Datos ser atendida exclusivamente por un proceso servidor. Una configuracin
multihilo (multithread) o compartida es cuando existe un nmero limitado de procesos
servidores que atienden a todas las conexiones de Bases de Datos existentes cuando
haya un requerimiento de por medio. En esta ltima configuracin, existen los
despachadores (dispatchers), que son los que ante algun requerimiento de sesin
asignan dicho trabajo a un proceso servidor disponible.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 18

1.1.1.4. Instancia de ORACLE

Se denomina instancia al conjunto de estructuras de memoria y procesos de fondo


que acceden los archivos de bases de datos. Es posible que una misma base de
datos sea accedida por mltiples instancias; cada una de ellas residiendo en una
mquina diferente (sta es la opcin de servidores paralelos de ORACLE).

Servidor de datos

Base de datos

Procesos

Instancia

Memoria

l sistema de bases de datos ORACLE, cuando inicia, sigue los pasos que se detallan a
continuacin:

1. Iniciar la instancia

Para hacer este paso, ORACLE lee el archivo de parmetros y configura la instancia,
con base en ellos. En ese momento, se crea la SGA y se activan los procesos de
base, pero an no se puede hacer nada.

2. Montar la base de datos

Consiste en preparar el sistema para su uso trayendo a la RAM el diccionario de


datos; es como poner el sistema en primera, listo para recibir algunas rdenes del
DBA.

3. Abrir la base de datos

En este momento se abren los archivos y los usuarios ya pueden tener acceso a los
datos.

De acuerdo cmo se defina la instancia, ORACLE, a travs de sus parmetros, puede


determinarse que tan poderoso y grande es el motor. Los parmetros se definen en el
archivo INIT.ORA. Entre ellos se pueden mencionar los siguientes:

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 19

db_block_buffers.- Nmero de bloques de bases de datos en la SGA. Existir un


buffer por cada bloque.

db_block_size.- tamano del bloque de la base de datos. shared_poo_size =


tamano del rea compartida shared pool, en bytes.

Adems, all se especifica el nmero de usuarios concurrentes, el nmero de


transacciones concurrentes y los nombres de los archivos de control para la base de
datos.

Estos parmetros se pueden ajustar durante el proceso de afinamiento porque ellos


inciden en el desempeo del sistema. Algunos de los parmetros son especficos a
una base de datos y, por lo tanto, deben ser cambiados antes de crear una base de
datos. Se incluyen en estos:

database_name.- = nombre de la base de datos.


db_block_size.- = tamano del bloque.

1.1.2. Gestin de una instancia Oracle

Para iniciar una instancia y abrir la base de datos, se debe conectar como SYSDBA e
introducir el comando STARTUP. A continuacin, Oracle Server leer el archivo de
parmetros de inicializacin y preparar la instancia de acuerdo con los parmetros de
inicializacin que contiene.

Existen tres productos de Oracle que puede utilizar para crear una instancia e iniciar
una base de datos:

1. SQL*PLUS.
2. Recovery Manager (RMAN).
3. Oracle Enterprise Manager (OEM).

Cualquiera que fuese la herramienta que utilizaremos para crear la instancia de Oracle
los pasos y comandos son siempre los mismos. La diferencia que encontraremos entre
una y otra herramienta es que mientras en el SQL*PLUS tendra que crear la instancia
y levantar la base de datos a travs del uso de comandos, en las otras dos
herramientas, slo tiene que hacer unos cuantos clicks para hacer lo mismo.

Ahora como el SQL*PLUS va a ser la herramienta que utilizaremos durante todo el


desarrollo del curso, entonces estos son los pasos para crear una instancia desde
SQL*PLUS e iniciar una base de datos:

Primero: Conectarse con un usuario que tenga el privilegio SYSDBA para crear la
instancia y levantar la base de datos. SYS es el usuario que inicialmente goza de este
privilegio cuando la base de datos ha sido creada recientemente (los detalles y niveles
de accesos que tiene cada uno de estos usuarios son tema de administracin de
usuarios). Utilizaremos al usuario SYS para poner en prctica la creacin de la
instancia. La clave del usuario SYS es CHANGE_ON_INSTALL

La sintaxis para conectarse como SYSDBA es la siguiente:

CONNECT usuario/clave[@cadena_conexin] AS SYSDBA

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 20

Ejemplo:

1. Conexin a la base de datos a travs del cuadro de dilogo del SQL*PLUS para
Windows:
SYS AS SYSDBA

2. Conexin a travs del uso de comandos:

SQL*Plus: Release 11.2.0.1.0 Production on Lun Ago 1 19:13:09 2011


Copyright (c) 1982, 2010, Oracle. All rights reserved.

SQL> CONNECT sys/change_on_install AS SYSDBA


Conectado a una instancia inactiva.

o tambin utilizando la cadena de conexin

SQL*Plus: Release 11.2.0.1.0 Production on Lun Ago 1 19:13:09 2011


Copyright (c) 1982, 2010, Oracle. All rights reserved.
SQL> CONNECT sys/change_on_install@cibertec AS SYSDBA
Conectado a una instancia inactiva.

Segundo: Crear la instancia e iniciar la base de datos.

SQL> STARTUP
Instancia ORACLE iniciada
Total System Global Area 118255568 bytes
Fixed Size 282576 bytes
Variable Size 83886080 bytes
Database Buffers 33554432 bytes
Redo Buffers 532480 bytes
Base de datos montada.
Base de datos abierta.

El comando STARTUP va acompaado de los siguientes parmetros:

STARTUP [ PFILE = init.ora ]


[ NOMOUNT ] [ MOUNT ]
[ RESTRICT ] [ FORCE ]
[OPEN [RECOVER] [base_de_datos]]

Nota: sta no es la sintaxis completa.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 21

Donde:
OPEN: Permite a los usuarios acceder a la base de datos

MOUNT: Monta la base de datos para ciertas actividades del DBA, aunque no
permite que el usuario acceda a la base de datos

NOMOUNT: Crea el SGA e inicia los procesos en segundo plano (background), pero
no permite que el usuario tenga acceso a la base de datos

PFILE (archivo de parmetros): Permite utilizar un archivo de parmetros de


inicializacin que no es por defecto para configurar la instancia

FORCE: Interrumpe la instancia en ejecucin antes de realizar un inicio normal.

RESTRICT: Slo permite que los usuarios con el privilegio RESTRICTED


SESSION accedan a la base de datos

RECOVER: Comienza la recuperacin de los medios fsicos cuando se inicia la


base de datos

1.1.2.1. Inicio de la instancia (NOMOUNT)

Una instancia slo se iniciara en la etapa NOMOUNT durante la creacin de la base


de datos o la nueva creacin de los archivos de control.

SQL> CONNECT sys/change_on_install@cibertec AS SYSDBA


Conectado a una instancia inactiva.

SQL> STARTUP NOMOUNT


Instancia ORACLE iniciada
Total System Global Area 118255568 bytes
Fixed Size 282576 bytes
Variable Size 83886080 bytes
Database Buffers 33554432 bytes
Redo Buffers 532480 bytes

El inicio de una instancia incluye las siguientes tareas:

Lectura del archivo de inicializacin desde ORACLE_HOME/database


Asignacin de SGA
Inicio de los procesos en segundo plano
Apertura del archivo alertSID.log y los archivos de rastreo

Estos son los comandos que necesitamos para iniciar la base de datos despus de
haber creado la instancia (montar y levantar la base de datos)

A. Montar la base de datos (mount)

SQL> ALTER DATABASE MOUNT ;


Base de datos montada

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 22

B. Abrir la base de datos (open)

SQL> ALTER DATABASE OPEN ;


Base de datos abierta

1.1.2.2. Montaje de la base de datos (MOUNT)

Para realizar operaciones de mantenimiento especficas, se inicia una instancia y se


monta una base de datos, pero sin abrirla.

Por ejemplo, la base de datos se debe montar, pero no abrir, durante las siguientes
tareas:

Cambio del nombre de los archivos de datos


Activacin y desactivacin de las opciones de archivado de archivos redo log
online
Recuperacin completa de la base de datos

El montaje de una base de datos incluye las siguientes tareas:

Asociacin de una base de datos a una instancia iniciada previamente


Ubicacin y apertura de los archivos de control especificados en el archivo de
parmetros
Lectura de los archivos de control con el fin de obtener los nombres y el estado de
los archivos de datos y los archivos redo log online. No obstante, no se realizan
comprobaciones para verificar la existencia de los archivos de datos y los archivos
redo log online en este momento.

SQL> CONNECT sys/change_on_install@cibertec AS SYSDBA


Conectado a una instancia inactiva.

SQL> STARTUP MOUNT


Instancia ORACLE iniciada
Total System Global Area 118255568 bytes
Fixed Size 282576 bytes
Variable Size 83886080 bytes
Database Buffers 33554432 bytes
Redo Buffers 532480 bytes
Base de datos montada.

Este es el comando que necesitamos para iniciar la base de datos despus de haber
montado la base de datos.

A. Abrir la base de datos (open)

SQL> ALTER DATABASE OPEN ;


Base de datos abierta

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 23

1.1.2.3. Apertura de la base de datos (OPEN)

El funcionamiento normal de la base de datos significa que se inicia una instancia y la


base de datos se monta y se abre. Durante el funcionamiento normal de la base de
datos, cualquier usuario vlido se puede conectar a la base de datos y realizar
operaciones tpicas de acceso a los datos.

La apertura de la base de datos incluye las siguientes tareas:

Apertura de los archivos de datos online


Apertura de los archivos redo log online

Si no aparece ninguno de los archivos de datos o archivos redo log online cuando se
intenta abrir la base de datos, Oracle Server devuelve un error.

Durante esta etapa final, Oracle Server comprueba que todos los archivos de datos y
archivos redo log online se puedan abrir y verifica la consistencia de la base de datos.
Si fuera necesario, el proceso en segundo plano de SMON inicia la recuperacin de la
instancia.

SQL> CONNECT sys/change_on_install@cibertec AS SYSDBA


Conectado a una instancia inactiva.

SQL> STARTUP
Instancia ORACLE iniciada
Total System Global Area 118255568 bytes
Fixed Size 282576 bytes
Variable Size 83886080 bytes
Database Buffers 33554432 bytes
Redo Buffers 532480 bytes
Base de datos montada.
Base de datos abierta.

A continuacin, se presentan algunas operaciones adicionales relacionadas al inicio de


una instancia de Oracle y el uso del Oracle Enterprise Manager

A. Uso de Oracle Enterprise Manager para Iniciar una Base de Datos

1. Ingresar al home page para administrar la base de datos.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 24

2. El Database Home Page indicar que la base de datos se encuentra detenida


("Down)

3. Dar clic en la opcin Startup para instanciar la base de datos

4. Aparecer la pgina que solicita el ingreso de credenciales. Se tiene dos


opciones:
Ingresar las credenciales del usuario de S.O administrador del servidor que instalo
el Oracle Database.
Ingresar las credenciales del usuario SYS

5. En la opcin Connect as, seleccionar SYSDBA

Aparecer una pagina de confirmacin, dar clic en Yes.


Se mostrar informacin indicando que la base de datos ha sido instanciada.

B. Apertura de la base de datos en modo Restringido (RESTRICT)

Una sesin restringida es til, por ejemplo, cuando se realiza el mantenimiento de la


estructura o una importacin o exportacin de la base de datos. La base de datos se
puede iniciar en modo restringido para que slo est disponible para los usuarios con
el privilegio RESTRICTED SESSION.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 25

La base de datos tambin se puede poner en modo restringido con el comando ALTER
SYSTEM:

ALTER SYSTEM [ {ENABLE|DISABLE} RESTRICTED SESSION ]

Donde:
ENABLE RESTRICTED SESSION: Permite conexiones futuras slo para los
usuarios que tienen el privilegio RESTRICTED SESSION
DISABLE RESTRICTED SESSION: Desactiva el privilegio RESTRICTED.

SQL> CONNECT sys/change_on_install@cibertec AS SYSDBA


Conectado a una instancia inactiva.
SQL> STARTUP RESTRICT
Instancia ORACLE iniciada
Total System Global Area 118255568 bytes
Fixed Size 282576 bytes
Variable Size 83886080 bytes
Database Buffers 33554432 bytes
Redo Buffers 532480 bytes
Base de datos montada.
Base de datos abierta.

Una vez colocada una instancia en modo restringido, puede que desee finalizar todas
las sesiones de usuario actuales antes de realizar las tareas administrativas. Esto es
posible mediante la ejecucin de:

ALTER SYSTEM KILL SESSION 'entero1, entero2'

Donde:
entero1: Valor de la columna SID en la vista V$SESSION
entero2: Valor de la columna SERIAL# en la vista V$SESSION

Nota: El identificador de sesin y el nmero de serie se utilizan para identificar una sesin como nica.
Esto garantiza que el comando ALTER SYSTEM KILL SESSION se aplique a la sesin correcta, aunque
el usuario se desconecte y una nueva sesin utilice el mismo identificador de sesin.

Efectos de la Terminacin de una Sesin: El comando ALTER SYSTEM KILL


SESSION provoca que el proceso en segundo plano PMON haga lo siguiente cuando
se ejecuta:

Hace rollback de la transaccin actual del usuario


Libera todos los bloqueos de tabla o de fila retenidos actualmente.
Libera todos los recursos reservados en ese momento por el usuario.

C. Apertura de una base de datos en modo de Slo Lectura (READ ONLY)

Una base de datos se puede abrir en modo de slo lectura, si no se ha abierto ya en


modo de lectura y escritura. Esta caracterstica es especialmente til para que una
base de datos en espera descargue de la base de datos de produccin el
procesamiento de la consulta.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 26

SQL> CONNECT sys/change_on_install@cibertec AS SYSDBA


Conectado a una instancia inactiva.

SQL> STARTUP OPEN READ ONLY


Instancia ORACLE iniciada
Total System Global Area 118255568 bytes
Fixed Size 282576 bytes
Variable Size 83886080 bytes
Database Buffers 33554432 bytes
Redo Buffers 532480 bytes
Base de datos montada.
Base de datos abierta.

D. Apertura de una base de datos especificando archivo parmetros (PFILE)

Para iniciar una instancia, Oracle Server lee el archivo de parmetros de inicializacin.
Existen dos tipos de archivos de parmetros de inicializacin:

El archivo de parmetros esttico, PFILE, que normalmente se denomina


initSID.ora.
El archivo de parmetros de servidor persistente, SPFILE, que normalmente se
denomina spfileSID.ora.

Contenido del Archivo de Parmetros de Inicializacin


Una lista de parmetros de instancia
El nombre de la base de datos a la que se ha asociado la instancia
Asignaciones para estructuras de memoria del SGA (rea Global del Sistema)
Instrucciones sobre qu hacer con los archivos redo log online llenos
Los nombres y las ubicaciones de los archivos de control
Informacin sobre segmentos de deshacer

SQL> CONNECT sys/change_on_install@cibertec AS SYSDBA


Conectado a una instancia inactiva.

SQL> STARTUP PFILE=d:\oracle\admin\pfile\mi_init.ora ;


Instancia ORACLE iniciada
Total System Global Area 118255568 bytes
Fixed Size 282576 bytes
Variable Size 83886080 bytes
Database Buffers 33554432 bytes
Redo Buffers 532480 bytes
Base de datos montada.
Base de datos abierta.

Pueden existir varios archivos de parmetros de inicializacin para una instancia con
el fin de optimizar el rendimiento en distintas situaciones. En ese sentido, cuando se
ejecuta el comando STARTUP, el orden de prioridad del uso del archivo de parmetros
es el siguiente:

Cuando se utiliza el comando STARTUP, se usa el archivo spfileSID.ora del


servidor para iniciar la instancia.
Si no se encuentra el archivo spfileSID.ora, se utilizar el archivo SPFILE por
defecto del servidor para iniciar la instancia.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 27

Si no se encuentra el archivo SPFILE por defecto, se utilizar el archivo


initSID.ora del servidor para iniciar la instancia.

Si se especifica el parmetro PFILE con STARTUP, se sustituye el comportamiento


por defecto.

1.1.2.4. Cierre de la Base de Datos

Cierre la base de datos para realizar copias de seguridad offline de sistema operativo
de todas las estructuras fsicas y para que, al reiniciar, entren en vigor los parmetros
de inicializacin estticos modificados.
Para cerrar una instancia, se debe conectar como SYSOPER o SYSDBA y utilizar el
siguiente comando:

SHUTDOWN [NORMAL | TRANSACTIONAL | IMMEDIATE | ABORT ]

A. SHUTDOWN Normal

El modo normal es el modo de cierre por defecto. El cierre normal de la base de


datos se lleva a cabo en las siguientes condiciones:

No se pueden realizar conexiones nuevas.


Oracle Server espera a que se desconecten todos los usuarios antes de finalizar
el cierre.
Los buffers de la base de datos y de redo se escriben en el disco.
Los procesos en segundo plano han terminado y se ha eliminado el SGA de la
memoria.
Oracle cierra y desmonta la base de datos antes de cerrar la instancia.
El siguiente inicio no requiere una recuperacin de la instancia.

SQL> CONNECT sys/change_on_install@cibertec AS SYSDBA


Conectado a una instancia inactiva.

SQL> SHUTDOWN
Base de datos cerrada.
Base de datos desmontada.
Instancia ORACLE cerrada.

B. SHUTDOWN TRANSACTIONAL

Un cierre transaccional evita que los clientes pierdan su trabajo. Un cierre


transaccional de la base de datos se lleva a cabo en las siguientes condiciones:

Ningn cliente puede iniciar una nueva transaccin en esta instancia particular.
Un cliente se desconecta cuando el cliente finaliza la transaccin en curso.
Una vez finalizadas todas las transacciones, se produce un cierre inmediato.
El siguiente inicio no requiere una recuperacin de la instancia.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 28

SQL> CONNECT sys/change_on_install@cibertec AS SYSDBA


Conectado a una instancia inactiva.

SQL> SHUTDOWN TRANSACTIONAL


Base de datos cerrada.
Base de datos desmontada.
Instancia ORACLE cerrada.

C. SHUTDOWN IMMEDIATE

El cierre inmediato de la base de datos se lleva a cabo en las siguientes condiciones:

No se finalizan las sentencias SQL actuales que est procesando Oracle.


Oracle Server no espera a que se desconecten los usuarios conectados en ese
momento a la base de datos.
Oracle hace rollback de las transacciones activas y desconecta a todos los
usuarios conectados.
Oracle cierra y desmonta la base de datos antes de cerrar la instancia.
El siguiente inicio no requiere una recuperacin de la instancia.

SQL> CONNECT sys/change_on_install@cibertec AS SYSDBA


Conectado a una instancia inactiva.

SQL> SHUTDOWN IMMEDIATE


Base de datos cerrada.
Base de datos desmontada.
Instancia ORACLE cerrada.

D. SHUTDOWN ABORT

Si las opciones de cierre NORMAL e IMMEDIATE no funcionan, se puede abortar la


instancia de base de datos actual. La interrupcin de una instancia se lleva a cabo en
las siguientes condiciones:

Se terminan inmediatamente las sentencias SQL actuales que Oracle Server est
procesando.
Oracle no espera a que se desconecten los usuarios conectados actualmente a la
base de datos.
Los buffers de la base de datos y de redo no se escriben en el disco.
No se hace rollback de las transacciones no validadas
La instancia se termina sin cerrar los archivos.
La base de datos no se cierra ni se desmonta.
El siguiente inicio requiere la recuperacin de la instancia, que se produce
automticamente.

Nota: No se recomienda realizar una copia de seguridad de una base de datos que tiene un estado
inconsistente.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 29

SQL> CONNECT sys/change_on_install@cibertec AS SYSDBA


Conectado a una instancia inactiva.

SQL> SHUTDOWN ABORT


Instancia ORACLE cerrada.

A continuacin, se presentan algunas operaciones adicionales relacionadas al inicio de


una instancia de Oracle y el uso del Oracle Enterprise Manager

A. Uso de Oracle Enterprise Manager para Cerrar una Base de Datos

Ingresar al home page para administrar la base de datos.

En la seccin General, dar clic en Shutdown

Aparecer la pgina que solicita el ingreso de credenciales. Ingresar con el


usuario SYS.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 30

Aparecer una pagina de confirmacin, dar clic en Yes.

Se mostrar informacin indicando que la base de datos est siendo detenida.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 31

ACTIVIDAD 1.- Configuracin de un cliente Oracle

En Oracle, esto se llama creacin de un nombre de servicio de red o una cadena de


conexin o un connect string o host string. Esto se hace despus de haber instalado
el software Oracle Cliente. Si se ha instalado el Oracle Server, implcitamente, se
tiene instalado tambin el Cliente Oracle.

Existen dos formas para crear un nombre de servicio de red en Oracle: manual o
mediante el uso de un asistente. En este curso, slo nos centraremos en crear un
nuevo nombre de servicio de red local mediante el uso del asistente (asistente de
configuracin de red), para ver ms detalles respecto a la conexin y configuracin de
redes consulte el manual del administrador Networking.

Asistente de Configuracin de Red (NET Configuration Assistant)

Estos son los pasos que debe seguir para establecer una conexin a la base de datos
a travs del asistente:

1. Ejecutando el asistente

En el grfico, se muestra la ubicacin del acceso directo al asistente.

2. Pantalla principal o bienvenida

En esta pantalla, elegimos el tipo de configuracin de red que vamos a realizar. Para
nuestro caso, elegimos la tercera opcin (configuracin del nombre del servicio de red
local). En el grfico, se muestra la ubicacin del acceso directo al asistente.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 32

3. Configuracin del Nombre del Servicio de Red

Cuando se instala el software de Oracle, se crea el archivo TNSNAMES.ORA con


algunos nombres de servicio de red de ejemplo que pueden ser utilizados como
plantillas. El asistente realiza los cambios en el archivo TNSNAMES.ORA como
agregar un nuevo nombre de servicio de red, eliminar uno existente, renombrar un
servicio de red o modificar los parmetros de un descriptivo. Los cambios hechos en
el archivo TNSNAMES.ORA son realizados si el test de conexin es satisfactorio.
Para nuestro caso, elegimos agregar para insertar un nuevo nombre de servicio en el
archivo TNSNAMES.ORA. Usted podr encontrar el archivo TNSNAMES.ORA dentro
del directorio del gestor de la base de datos: ../11.2.0/dbhome_1/Network/admin.

4. Seleccionar versin de la base de datos a acceder:

Ingreso de nombre de la base de datos a acceder: Aqu se ingresa el nombre de la


base de datos remota a la cual se desea acceder.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 33

5. Seleccionar el protocolo de red

6. Parmetro de conexin a travs del Protocolo TCP

Cada protocolo de red necesita de ciertos parmetros de conexin. En la pantalla


anterior, seleccionamos el protocolo TCP como el protocolo de comunicacin. Este
protocolo necesita del nombre de Host y de un puerto de comunicacin que, por
estndar, es el 1521.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 34

7. Test de conexin

Antes de registrar los datos al archivo TNSNAMESORA a travs del asistente,


debemos realizar una prueba de conexin para as probar si los parmetros
ingresados son los correctos o si hay algn otro problema de conexin.

El asistente siempre utiliza al usuario SYSTEM para realizar las pruebas de conexin.
Si SYSTEM no existiese, elija a otro usuario para realizar las pruebas de conexin,
haga un clic en el botn Cambiar conexin para cambiar de usuario.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 35

sta sera la vista del archivo TNSNAMES.ORA, despus de agregar el nuevo


nombre de servicio CIBERTEC:

Muchas veces, si se desea crear otro Servicio de Red, se acostumbra ir directamente


al archivo TNSNAMES.ORA, copiar una de las entradas, renombrarla y cambiar los
datos necesarios.

Por ejemplo, si se desea agregar un nuevo servicio de red, para que se pueda
conectar a una base de datos llamada cibertecx (en el campo SERVICE_NAME), que
reside en el servidor server_cibertec ( en el campo HOST ), se configurara de la
siguiente manera:

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 36

Autoevaluacin
1. Indique cual es la diferencia entre base de datos e instancia de base de datos.

2. Mencione y describa los componentes que conforman una instancia de base de


datos Oracle.

3. Si se ha perdido los control files, y se trata de levantar la Base de Datos, sta se


detiene (o se queda) en el estado:

a. Open
b. Open restrict
c. Mount
d. Nomount
e. N.A.

4. 2.- Si se ha perdido uno de los datafiles , y se trata de levaentar la Base de


Datos, sta se detiene (o se queda) en el estado:

a. Open
b. Open restrict
c. Mount
d. Nomount
e. N.A.

5. Explique en qu caso usted abrir la Base de Datos en modo RESTRICT.

6. En qu estado un usuario de Base de Datos NORMAL, se puede conectar a la


misma?

a. Open
b. Open restrict
c. Mount
d. Nomount
e. N.A.

7. Usted acaba de ingresar a un forum de DBAs, y por ah observa un comentario de


un DBA junior que dice que el SHUTDOWN ABORT es mucho ms rpido que
los dems tipos de SHUTDOWN. Qu opinara usted al respecto?

8. Cul es la secuencia lgica de estados cuando se levanta una Base de Datos?

a. open, shutdown,mount, nomount.


b. shutdown, nomount, mount , open.
c. shutdown, mount , nomount, open.
d. shutdown, mount , open, nomount.
e. shutdown, open, mount, nomount.

9. Explique la diferencia entre los diferentes tipos de SHUTDOWN.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 37

UNIDAD

2
ELABORACIN DE SENTENCIAS SQL Y
DICCIONARIOS DE DATOS
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al trmino de la unidad, el alumno desarrolla consultas que obtienen la informacin
solicitada, utilizando el diccionario de datos y las principales vistas de la Metadata de
la Base de Datos Oracle utilizando las mejores prcticas en la elaboracin de
sentencias SQL.

TEMARIO
2.1 Tema 2 : Elaboracin de Sentencias SQL
2.1.1 : Introduccin a SQL
2.1.2 : Instrucciones DML y operadores
2.1.3 : Consultando dos o ms tablas
2.1.4 : Funciones predefinidas
2.2 Tema 3 : Diccionario de Datos
2.2.1 : Introduccin al Diccionario de Datos
2.2.2 : Estructura del Diccionario
2.2.3 : Uso del Diccionario de Datos

ACTIVIDADES PROPUESTAS
Identificar las principales categoras de sentencias SQL
Ejecutar cada caso de sentencias DML
Utilizar las principales funciones predefinidas de una BD Oracle

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 38

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 39

2.1. INTRODUCCIN A SQL

2.1.1. Introduccin a SQL

El lenguaje estructurado de consulta (SQL) define cmo manipular los datos en


Oracle. En este curso, no se pretende ensear a detalle cada instruccin SQL de
Oracle. Se sobre entiende que el alumno conoce este lenguaje. Lo que s es
importante conocer, son algunas de las funcionalidades o diferencias propias que
Oracle ha adicionado a las instrucciones SQL para facilitar las operaciones de acceso
y manipulacin de datos. El SQL de Oracle est basado sobre los estndares de
ANSI (American National Standards Institute y la ISO (International Standards
Organization).

Las instrucciones SQL pueden dividirse en cinco categoras que se muestran a


continuacin:

Las instrucciones del lenguaje de manipulacin de datos (Data Manipulation


Language, DML) permiten cambiar o consultar los datos contenidos en una tabla
de la base de datos, pero no permiten cambiar la estructura de una tabla u otro
objeto.

Las instrucciones del lenguaje de definicin de datos (Data Definition Language,


DDL) permiten crear, borrar o modificar la estructura de un objeto del esquema.
Las instrucciones que cambian los permisos relativos a los objetos del esquema
tambin pertenecen al DDL.

Las instrucciones de control de transacciones garantizan la consistencia de los


datos, organizando las instrucciones SQL en transacciones lgicas, que se
completan o fallan como una unidad.

Las instrucciones de control de sesin cambian las opciones de una conexin


determinada con la base de datos, por ejemplo para activar las trazas de SOL o
activar un suceso.

Las instrucciones de control del sistema cambian las opciones que afectan a la
base de datos completa, por ejemplo para activar o desactivar el archivado
definitivo.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 40

2.1.2. Instrucciones DML y operadores

Las instrucciones de manipulacin de datos (DML) permitidas son cuatro:

SELECT devuelve filas de la base de datos que cumplan los criterios definidos en
su clusula WHERE

INSERT aade filas a una tabla de La base de datos

UPDATE modifica las filas de una tabla que cumplan la clusula WHERE

DELETE borra las filas identificadas por la clusula WHERE

Adems de WHERE estas instrucciones pueden tener otras clusulas que se


describen ms adelante en esta seccin. Cuando se ejecutan instrucciones SQL
desde SQL *PLUS, los resultados se presentan en la pantalla. En el caso de las
instrucciones UPDATE, 1NSERT o DELETE. SQL *PLUS devuelve el nmero de filas
procesadas.

2.1.2.1. Instruccin SELECT

Una instruccin SELECT extrae datos de la base de datos. Permite consultar los
valores que contienen los campos de tablas y/o vistas de la base de datos. La forma
general de una instruccin SELECT es:

SELECT [DISTINCT | ALL] {*, columna [alias], expresin, }


FROM listado de tablas
[WHERE condicin(es)]
[GROUP BY expresin [, expresin] ]
[HAVING condicin]
[ORDER BY {columna, expresin, alias} {ASC | DESC}]

En SQL * PLUS, una instruccin SELECT, muestra en pantalla las filas que satisfacen
las condiciones de la consulta. Toda bsqueda de caracteres es case sensitive, si
los datos se guardaron en mayscula. El dato a buscar deber escribirse en
mayscula. Para efecto de la manipulacin del Diccionario de datos, se debe tener en
cuenta que Oracle guarda dicha informacin SIEMPRE en maysculas. Por ejemplo,
al crear una tabla:

CREATE TABLE emp (EMPNO NUMBER(4), ENAME );

Si se desea buscar informacin acerca de esta tabla, muchas veces se hace lo


siguiente:

SQL> SELECT owner, table_name, tablespace_name


FROM dba_tables
WHERE table_name = emp;

No rows selected

Lo correcto debera ser de la siguiente manera:

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 41

SQL> SELECT owner, table_name, tablespace_name


FROM dba_tables
WHERE table_name = EMP;

OWNER TABLE_NAME TABLESPACE_NAME


------------ -------------------- -------------------------------
SCOTT EMP SYSTEM

Es importante conocer la estructura del objeto que se pretende acceder. Para ello, se
utiliza el comando DESC[RIBE] de SQL *PLUS. Este comando no es un comando de
SQL estndar. Es slo para el intrprete. Por ejemplo, para mostrar la estructura de la
tabla EMP hagamos lo siguiente:

DESC emp

O tambin:

DESCRIBE emp

A. Clusula WHERE

Para mostrar o seleccionar solo algunos registros, es decir, aplicar un filtro, se usa la
clusula WHERE seguido de una condicin:

SELECT ename, job, deptno, hiredate, sal


FROM emp
WHERE job = MANAGER
AND TO_CHAR(hiredate, DD/MM/YYYY) = 02/04/81;

B. Clusula ORDER BY
Para ordenar la salida de una sentencia SELECT se usa la clusula ORDER BY. A
continuacin se muestra un ejemplo:

SELECT empno, ename, sal * 12 salario


FROM emp
ORDER BY salario desc;

Para ordenar por mltiples columnas:

SELECT empno, ename, sal * 12 salario


FROM emp
ORDER BY salario, ename desc;

En este caso al poner la palabra reservada DESC, significa que la salida del SELECT
ser retornado en orden DESCENDENTE de acuerdo a las columnas mencionadas.
Para el caso contrario (ordenacin ascendente), se utiliza la palabra ASC.

C. Uso de Alias
Los alias son tiles cuando se requiere resolver algn tipo de ambigedad, por
ejemplo cuando haya columnas en dos tablas con el mismo nombre.

Por ejemplo, esta consulta utiliza alias para las dos tablas para diferenciar, la columna
DEPTNO, cuyo nombre se repite en ambas tablas:

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 42

SELECT empno, ename, A.deptno


FROM emp A, dept B
WHERE A.deptno = B.deptno;

Cuando necesitamos definir un alias cuyo nombre esta compuesto por ms de una
palabra, como el ejemplo anterior, este tipo de alias debe encerrarse entre comillas
(). Por ejemplo:

SELECT ename AS nombre, sal salario, sal * 12 salario annual


FROM emp;

2.1.2.1.1. Subconsultas

Es una sentencia SELECT que esta dentro de una clusula de otra sentencia
SELECT. La clusula puede ser Where, Having o From.
Sintaxis:

SELECT select_list
FROM table
WHERE expr operator (SELECT select_list FROM table)

Donde operator puede ser >, =, >=, <, <>, <= o IN, ANY, ALL.

Tipos de Subconsultas:

A. Subconsultas de una fila

Se utilizarn los operadores: >, =, >=, <, <>, <=.

SQL> SELECT ename FROM emp WHERE sal> (select sal from emp where
empno=7566)

B. Subconsultas de mltiples filas

Se utilizarn los operadores: IN, ANY, ALL.

SQL> SELECT ename, sal, deptno FROM emp WHERE sal IN (SELECT
MIN(sal) FROM emp group by deptno);

SQL> SELECT empno, ename, job FROM emp WHERE sal < ANY (SELECT
sal FROM emp where job=CLERK) AND job = CLERK;

C. Subconsultas de mltiples columnas

Si se desea comparar dos o ms columnas se debe escribir una clusula WHERE


compuesta utilizando operadores locales. Esto permite combinar condiciones de
where duplicados dentro de una clusula where simple.

SQL> SELECT * FROM emp WHERE (empno, deptno) IN (SELECT empno,


deptno FROM emp where job=MANAGER)

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 43

2.1.2.1.2. Rownum

Devuelve, en una consulta, el nmero de fila actual. Resulta til para limitar nmero
total de filas, y se usa principalmente en la clusula WHERE de las consultas y en la
clusula SET de las instrucciones UPDATE. ROWNUM devuelve un valor de tipo
NUMBER.

El ejemplo siguiente devuelve slo las primeras dos filas de la tabla EMP:

SQL> SELECT * FROM emp WHERE ROWNUM < 3 ;

El valor de ROWNUM para la primera fila es 1, para la segunda es 2, y as


sucesivamente. El valor de ROWNUM se asigna a las filas antes de que se realice
una ordenacin.

2.1.2.2. Instruccin INSERT

La sintaxis de la orden INSERT es la siguiente:

INSERT INTO tabla de referencia (nombre de columnas)


VALUES (expresiones);

Donde tabla_de_referencia, es la tabla en la cual se ingresar un nuevo registro,


nombres_de_columnas es la lista de campos que ser considerada en la insercin.
Esta lista va entre parntesis. Expresiones son los valores que sern insertados
correspondiendo uno a uno a los nombres de columnas anteriormente mencionados.
La expresin puede ser una sentencia SELECT cuya lista de campos deben ser
correspondientes a los nombres de columnas. En este caso, no se debe incluir la
clusula VALUES.

A. Convencional

INSERT INTO emp (empno, ename, job, manager,hiredate, sal, comm)


VALUES (2296, JPEREZ, SALESMAN, 7782, TO_DATE(25/09/2008,
DD/MM/YYYY), 3000, 100);

B. Con variables de sustitucin

Las variables de sustitucin son usadas en el entorno de SQL*PLUS, para ellos se


antepone el smbolo &, lo que har que el SQL*Plus solicite los valores para aquellas
variables que tienen antepuestas el mencionado smbolo.

INSERT INTO dept (deptno, dname, local)


VALUES (&Departamento, &Nombre,&Localizacion);

SQL>INSERT INTO dept (deptno, dname, local)


VALUES (&Departamento, &Nombre,&Localizacion);

Enter value for Departamento: 80


Enter value for Nombre: SISTEMAS
Enter value for Localizacion: LIMA

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 44

C. Con prompts personalizados

ACCEPT depto_d PROMPT Por favor ingrese el nmero del depto


ACCEPT name_d PROMPT Por favor ingrese el nombre del depto

INSERT INTO dept (deptno, dname)


VALUES (&depto_d,&name_d);

D. Copiando filas de otra tabla

INSERT INTO managers (id, name, salary, hiredate)


SELECT empno, ename, sal, hiredate FROM emp WHERE job=MANAGER;

2.1.2.3. Instruccin UPDATE

La sintaxis de la orden UPDATE es la siguiente:

UPDATE tabla_de_referencia SET


Nombre_columna1 = expresion1,
Nombre_columna2 = expresion2,
Nombre_columna3 = (sentencia_select),
WHERE clusula_where;

Donde, tabla_de_referencia es la tabla que se actualizar, nombre_columnaN son las


columnas a las que se le asigna un valor, expresionN son los valores
correspondientes para cada nombre de columna. El valor que se asigne a una
columna puede venir del resultado de una sentencia SELECT. La condiciones que el
SELECT retorne slo una fila, y los valores de los campos del SELECT sean
correspondientes a las columnas que estn actualizando en el UPDATE. La
clusula_where es la condicin que deben cumplir los registros para ser actualizados.

A. Convencional

UPDATE emp
SET deptno = 20
WHERE empno = 7782;

B. Con una subconsulta de mltiples columnas

UPDATE emp
SET (job,deptno)=(SELECT job,deptno FROM emp WHERE
empno=7499)
WHERE empno = 7698;

C. Con multiples subconsultas

UPDATE emp SET deptno = (SELECT deptno


FROM emp
WHERE empno = 7788)
WHERE job = (SELECT job FROM emp WHERE empno = 7788);

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 45

2.1.2.4. Instruccin DELETE

La orden DELETE elimina los registros que cumplen con la condicin definida en el
WHERE. La sintaxis es la siguiente:

DELETE FROM tabla_de_referencia WHERE clusula_where;

Donde, tabla_de_referencia es la tabla en la cual se eliminarn los registros


correspondientes, clusula_where es la condicin que cumplirn los registros que
sern eliminados. El CURRENT OF cursor es para ser usado cuando se esta
barriendo un cursor y se desea eliminar de la tabla el registro actual del cursor.

A. Convencional

DELETE FROM dept WHERE dname = ACCOUNTING;

B. Con una subconsulta

DELETE FROM emp WHERE deptno = (SELECT deptno


FROM dept
WHERE dname = SALES);

2.1.2.5. Operadores

2.1.2.5.1. Operadores de comparacin

A. =,>, >=, <, <=, <>

SELECT ename, sal, comm FROM emp WHERE sal <= comm;

B. BETWEEN AND ..

SELECT ename, sal FROM emp WHERE sal BETWEEN 1000 AND 1500;

C. IN (List)

Este operador de comparacin sirve para verificar que un valor (campo) este en una
lista de valores, donde esta lista puede ser un conjunto de elementos enumerados,
como tambin puede ser un SELECT.

SELECT empno, ename, sal, mgr FROM emp WHERE mgr IN (7902, 7566,
7788);

D. LIKE

Este operador de comparacin sirve para comparar parcialmente los valores de un


campo. Por ejemplo:

Registros cuyos valores en el campo Nombre empiece con la palabra JUAN.


condicin en clusula: Nombre LIKE JUAN%

Registros cuyos valores en el campo Nombre contengan la palabra PEREZ.


condicin en clusula: Nombre LIKE %PEREZ%

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 46

A continuacin se muestra otro caso:

Se utilizar %_ para mostrar los nombres de empleados que tengan como segunda
letra de su nombre la A

SELECT ename FROM emp WHERE ename like _A%;

E. IS NULL

Mostrar los empleados que no ganan comisin.

SELECT empno, ename, sal, job, comm FROM emp WHERE comm IS NULL;

La columna null indica si el campo es obligatorio o no. Si est como NOT NULL, la
columna o tambin llamado campo, es obligatorio ya que no acepta la constante
NULL como contenido y NULL la representa la ausencia de valor o vaco.

2.1.2.5.2. Operadores lgicos

A. AND

SELECT empno, ename, job, sal


FROM emp
WHERE sal >= 1100
AND job = CLERK;

B. OR

SELECT empno, ename, job, sal


FROM emp
WHERE sal >= 1100
OR job = CLERK;

C. NOT, NOT IN, NOT BETWEEN, NOT LIKE

SELECT empno, ename, job


FROM emp
WHERE job NOT IN ( CLERK, MANAGER, ANALYST);

2.1.3. Consultando dos o ms tablas

2.1.3.1. JOIN

Se utiliza para consultar datos de ms de una tabla. Se escribe en la parte de la


sentencia WHERE. Se pone como prefijo de la columna el nombre de la tabla cuando
la misma columna aparece en ms de una tabla.

Tipos de Join
Equijoin
Non-equijoin.
Outer-join
Self-join.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 47

A. Equijoin

SELECT emp.ename, emp.job, emp.sal, dept.dname FROM emp, dept


WHERE emp.deptno = dept.deptno;

Lo que hace un Equijoin es igualar los valores de los campos que son comunes entre
las diferentes tablas. Por ejemplo, en el caso anterior, para cada empleado se est
mostrando el campo dept.dname (nombre del departamento), el cual no est en la
tabla EMP. El dato comn que se tiene es que la tabla EMP tiene el campo
emp.deptno (cdigo del departamento). Con ese dato se va a buscar el nombre del
departamento que est en la tabla DEPT. Por eso, se hace el JOIN
emp.deptno=dept.deptno. Otra manera de expresar el select anterior sera:

SELECT emp.ename, emp.job, emp.sal, dept.dname FROM emp JOIN


dept ON emp.deptno = dept.deptno;

B. Non-Equijoin

SELECT e.ename, e.job, e.sal, s.grade FROM emp e, salgrade s


WHERE e.sal BETWEEN s.losal AND s.hisal;

C. Outer-join

Si un registro no satisface un join, el registro no aparecer en los resultados de la


consulta. Por ejemplo, en la condicin equijoin de EMP y DEPT, el departamento
OPERATIONS no aparecer porque nadie trabaja en ese departamento. El operador
de outer join es el signo (+) que se usa para ver los registros que no cumplen en el
join. En el ejemplo aparecern los nombres de departamentos.

SELECT e.empno, e.ename, e.job, e.sal, d.dname


FROM emp e, dept d
WHERE e.deptno(+) = d.deptno;

SELECT e.empno, e.ename, e.job, e.sal, d.dname


FROM emp e LEFT JOIN dept d
ON e.deptno = d.deptno;

D. Self-join

Este tipo de JOIN se utiliza para consultar datos que se encuentran dentro de una
misma tabla (join consigo mismo). Se requiere consultar el nombre del manager del
empleado con cdigo empno igual a 7369 (MGR).

SELECT
e.ename EMPLEADO,
e.sal SALARIO,
e.job OCUPACION,
m.ename MANAGER
FROM emp e, emp m
WHERE e.mgr=m.empno AND e.empno=7369;

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 48

2.1.4. Funciones predefinidas

Aceptan uno o ms argumentos y retornan un valor por cada fila retornada por la
consulta. Las funciones estndar del Oracle9i permiten realizar diversas operaciones
tiles para los desarrolladores y administradores de base de datos. stas se agregan
al Server en el momento de la instalacin de una Base de datos por defecto.

Las funciones se clasifican en los siguientes grupos:


Funciones de carcter
Funciones numricas
Funciones de fecha
Funciones de conversin
Funciones generales
Funciones de grupo

2.1.4.1. Funciones de carcter

Se dividen en dos grupos:

A. Funciones de conversin

Funcin Resultado
LOWER(SQL Course) sql course
UPPER(SQL Course) SQL COURSE
INITCAP(SQL Course) Sql Course

B. Funciones de manipulacin de caracteres

Funcin Resultado
CONCAT(Good, String) GoodString
SUBSTR(Hola, 1, 3) Hol
LENGTH(Hola) 4
INSTR(Hola,o) 2
LPAD(120,10,*) *******120
RPAD(120,10,*) 120*******
Trim( esto es una prueba ) esto es una prueba

2.1.4.2. Funciones Numricas

ROUND Redondea el valor a un nmero especfico de decimales.


TRUNC Trunca el valor a un nmero especfico de decimales.
MOD Retorna el residuo de la divisin

ROUND(45.936 , 2) 45.94
TRUNC(45.936 , 2) 45.93
MOD(1600 , 300) 100

SELECT
sal/7 operacion,
round(sal/7, 2) redondeo,
trunc(sal/7) trunco
FROM emp;

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 49

2.1.4.3. Funciones de fecha

Oracle guarda datos en un formato numrico interno: por centuria, ano, mes, da,
hora, minuto y segundo. El formato por defecto depende de la instalacin del Oracle
software.

SYSDATE es una funcin que retorna fecha y hora.


DUAL es una tabla pblica que se utiliza para ejecutar funciones predefinidas.

Se puede llevar a cabo clculos utilizando operaciones aritmticas como adicin y


sustraccin:

date + number = date


date number = date
date date = nmero de das
date + number/24 = date (suma horas)

Por ejemplo: sysdate = 26/12/2004

MONTHS_BETWEEN(sysdate +40, sysdate) 1.29032258


ADD_MONTHS(sysdate, 6) 26/06/2005
NEXT_DAYS(sysdate, VIERNES) 31/12/2004
LAST_DAY(sysdate) 31/12/2004
ROUND(sysdate, MONTH) 01/01/2005
ROUND(sysdate, YEAR) 01/01/2005
TRUNC(sysdate, MONTH) 01/12/2004
TRUNC(sysdate, YEAR) 01/01/2004

SELECT
SYSDATE,
ADD_MONTHS(sysdate,4) Agregados,
NEXT_DAY(sysdate, VIERNES) Viernes,
LAST_DAY(sysdate) ultimo
FROM DUAL;

2.1.4.4. Funciones de conversin

A. Conversin de tipos de datos implcitos

El servidor Oracle convierte automticamente lo siguiente:.

Funcin Resultado
VARCHAR2 or CHAR NUMBER
VARCHAR2 or CHAR DATE
NUMBER VARCHAR2
DATE VARCHAR2

B. Conversin de tipos de datos explcitos

SQL provee tres funciones para convertir un tipo de dato a otro:

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 50

TO_CHAR():

a. Funciones TO_CHAR con fecha: TO_CHAR(fecha, formato)

Elementos de Formato de fecha:

YYYY Ao completo en nmero


YEAR Ao deletreado
MM Valor de dos dgitos para el mes
MONTH Nombre completo del mes
DD Nmero del da en el mes
DAY Nombre del da
D Nmero del da en la semana
HH24 Horas en formato 24
MI Minutos
SS Segundos

A continuacin algunos ejemplos:

SELECT
ename,
TO_CHAR(hiredate, MM/YYYY) Mes de Ingreso
FROM emp;

SELECT
TO_CHAR(sysdate, DD/MM/YYYY HH2:MI:SS) fecha
FROM dual;

b. Funciones TO_CHAR con nmeros: TO_CHAR(nmero, formato)

Elementos de Formato Numrico:

9 Representa un dgito
0 Fuerza que se muestre un 0
$ Coloca el signo dlar
L Utiliza el smbolo de la moneda
. Imprime un punto decimal
, Imprime un indicador de miles

A continuacin algunos ejemplos:

SELECT TO_CHAR(sal, $ 99,999) Salario


FROM emp;

SELECT TO_CHAR(comm, L 0999.99) Comision


FROM emp;

TO_NUMBER():

Convierte una cadena de caracteres que contiene dgitos a un nmero con formato
especificado por el modelo de formato.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 51

TO_DATE():

Convierte una cadena de caracteres representando una fecha a un valor de fecha con
formato especificado. Si se omite, el formato es DD-MON-YY.

NVL():

Convierte un valor nulo a un valor que puede ser un nmero, un carcter o una fecha.

NVL(comm, 0)
NVL(hiredate, sysdate)
NVL(job, no job)

DECODE():

DECODE(mivariable, valor1, retorno1, valor2, retorno2, .,


retorno_defecto)

Donde si mivariable es igual a valor1, se retorna retorno1


Donde si mivariable es igual a valor2, se retorna retorno2

Donde si mivariable no es igual a ninguno de los valores anteriores, se retorna


retorno_defecto

SQL> SELECT DECODE(USER, SCOTT, usted es Scott, SYSTEM,


Es el administrador, No es conocido) resultado FROM DUAL;

RESULTADO
---------------
usted es Scott

2.1.4.5. Funciones de grupo


Estas funciones operan en grupos de registros para entregar un resultado por grupo.

A. Tipo de Funciones

AVG, COUNT, MAX, MIN, STDDEV, SUM, VARIANCE

B. Creando grupo de datos

Divide las filas de una tabla en datos agrupados.

SELECT deptno, AVG(sal)


FROM emp GROUP BY deptno;

SELECT deptno, job, SUM(sal)


FROM emp GROUP BY deptno, job;

C. Operadores Cube y Rollup

Especifique los operadores CUBE y ROLLUP en la clusula GROUP BY de una


consulta. El agrupamiento ROLLUP produce un juego de resultados que contiene las
filas agrupadas normales y los subtotales. La operacin CUBE en la clusula GROUP
BY agrupa las filas seleccionadas basadas en los valores de todas las combinaciones

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 52

posibles de expresiones de la especificacin y devuelve una sola fila de informacin


de resumen para cada grupo. Puede utilizar el operador CUBE para producir filas de
tabulacin cruzada.

Nota: Al trabajar con ROLLUP y CUBE, asegrese de que las columnas que siguen a la clusula
GROUP BY tengan entre s una relacin significativa y real; de lo contrario, los operadores devolveran
informacin irrelevante.
Los operadores CUBE y ROLLUP estn disponibles solamente en Oracle8i y en versiones posteriores.

a. Operador ROLLUP

El operador ROLLUP entrega agregados y superagregados para expresiones dentro


de una sentencia GROUP BY. Los escritores de informes pueden utilizar el operador
ROLLUP para extraer estadsticas e informacin de resumen de los juegos de
resultados. Los agregados acumulativos se pueden utilizar en informes, diagramas y
grficos.

SELECT [column,] group_function(column). . .


FROM table
[WHERE condition]
[GROUP BY [ROLLUP] group_by_expression]
[HAVING having_expression]
[ORDER BY column];

El operador ROLLUP crea agrupamientos movindose en una direccin, de derecha a


izquierda, a lo largo de la lista de columnas especificada en la clusula GROUP BY. A
continuacin, aplica la funcin agregada a estos agrupamientos.

Nota: Para producir subtotales en n dimensiones (es decir, n columnas en la clusula GROUP BY) sin un
operador ROLLUP, n+1 las sentencias SELECT deben estar enlazadas con UNION ALL. Esto hace que
la ejecucin de la consulta sea ineficaz, ya que cada sentencia SELECT provoca acceso de tabla. El
operador ROLLUP recoge los resultados de esta con solo un acceso de tabla. El operador ROLLUP es
til si hay muchas columnas implicadas en la produccin de subtotales.

Ejemplo:

SELECT
deptno as department_id,
Job as Job_id,
SUM(sal) salary
FROM emp
WHERE deptno < 60
GROUP BY ROLLUP(deptno, job);

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 53

DEPARTMENT_ID JOB_ID SALARY


------------------- ------------------------ ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
10 8750
20 CLERK 1900
20 ANALYST 3000
20 MANAGER 2975
20 7875
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
30 9400
50 ANALYST 3000
50 3000
29025
15 filas seleccionadas.

b. Operador CUBE

El operador CUBE es una opcin adicional de la clusula GROUP BY en una


sentencia SELECT. El operador CUBE se puede aplicar a todas las funciones
agregadas, incluidas AVG, SUM, MAX, MIN y COUNT. Se utiliza para producir juegos
de resultados que, normalmente, se utilizan para informes de tabulacin cruzada.
Mientras ROLLUP produce slo una fraccin de las posibles combinaciones
subtotales, CUBE produce subtotales para todas las posibles combinaciones de
agrupamientos especificados en la clusula GROUP BY y una suma total.

SELECT [column,] group_function(column). . .


FROM table
[WHERE condition]
[GROUP BY [CUBE] group_by_expression]
[HAVING having_expression]
[ORDER BY column];

El operador CUBE se utiliza con una funcin agregada para generar filas adicionales
en un juego de resultados. Las columnas incluidas en la clusula GROUP BY tienen
referencias cruzadas para producir un superjuego de grupos. La funcin agregada
especificada en la lista de seleccin se aplica a dichos grupos para producir valores
de resumen para las filas superagregadas adicionales. El nmero de grupos
adicionales del juego de resultados est determinado por el nmero de columnas
incluidas en la clusula GROUP BY.

De hecho, cada posible combinacin de las columnas o expresiones de la clusula


GROUP BY se utiliza para producir superagregados. Si tiene n columnas o
expresiones en la clusula GROUP BY, habr 2n posibles combinaciones
superagregadas. Matemticamente, estas combinaciones forman un cubo de n-
dimensiones que es la forma con la que el operador obtuvo su nombre.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 54

Mediante herramientas de programacin o aplicaciones, estos valores


superagregados se pueden introducir en diagramas y grficos que transmiten
resultados y relaciones de forma visual y efectiva.

Ejemplo:

SELECT
deptno as department_id,
Job as Job_id,
SUM(sal) salary
FROM emp
WHERE deptno < 60
GROUP BY CUBE(deptno, job) ;

DEPARTMENT_ID JOB_ID SALARY


------------------- ------------------------ ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
10 8750
20 CLERK 1900
20 ANALYST 3000
20 MANAGER 2975
20 7875
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
30 9400
50 ANALYST 3000
50 3000
CLERK 4150
MANAGER 8275
PRESIDENT 5000
ANALYST 6000
SALESMAN 5600
29025
15 filas seleccionadas.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 55

2.2. DICCIONARIO DE DATOS

2.2.1. Introduccin al Diccionario de Datos

El diccionario de datos de Oracle es una estructura de tablas y vistas, de slo lectura,


que contiene informacin de la base de datos, tal como:

Definiciones de todos los esquemas en la BD (tablas, ndices, vistas, clusters,


sinnimos, secuencias, procedimientos, funciones, paquetes, triggers, etc)

Espacio asignado y actualmente ocupado por un esquema

Usuarios de la base de datos

Privilegios y roles que cada usuario tiene

Informacin sobre quienes han accesado y actualizado esquemas

Informacin general de la base de datos

El diccionario de datos es creado cuando la base de datos es creada. Para reflejar con
exactitud el estado de la BD en todo momento, el diccionario de datos es
automticamente actualizado por Oracle en respuesta a acciones especficas (tales
como cuando la estructura de la BD es modificada). La importacia del diccionario de
datos radica en que Oracle cuenta con ste para operar la base de datos.

2.2.2. Estructura del Diccionario

2.2.2.1. Tablas base

Estas tablas que almacenan informacin acerca de la base de datos. Slo Oracle debe
escribir y leer esas tablas. Los usuarios rara vez accesan a ellas directamente porque
no estn normalizadas y la mayora de los datos estn encriptados.

2.2.2.2. Vistas accesibles por el usuario

Estas vistas resumen la informacin almacenada en las tablas base del diccionario de
datos.

Todas las tablas y vistas del diccionario de datos son almacenadas en el tablespace
SYSTEM.

El usuario SYS es el propietario de todas las tablas base y las vistas accesibles por el
usuario del diccionario de datos.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 56

2.2.3. Uso del Diccionario de Datos

Principalmente se usa de tres maneras:


Oracle accesa el diccionario de datos para hallar la informacin acerca de los
usuarios, esquemas y estructuras almacenadas.
Oracle modifica el diccionario de datos cada vez que una instruccin DDL es
usada.
Cualquier usuario puede usar el diccionario de datos

Hay tres grupos de vistas que contienen informacin similar y que se distinguen por su
prefijo:

Prefijo Descripcin
USER_ Vistas con informacin del esquema del usuario en sesin
Estas vistas presentan al usuario una perspectiva global de la
base de datos. Le da al usuario informacin sobre todos los
ALL_ objetos en la base de datos a los que tiene acceso.
DBA_ Vistas con la informacin de lo existe en todos los esquemas

Ejemplos de algunas de estas vistas son:

Informacin Vistas correspondientes


Errores de compilacin all_errors, dba_errors, user_errors
Trabajos en la BD all_jobs, dba_jobs, user_jobs
Usuarios all_users, dba_users, user_users
Objetos de la BD: tablas, programas, vistas
all_objects, dba_objects, user_objects
secuencias, ndices, etc.
Dependencias entre los objetos
all_dependencies, dba_dependencies,
(PROCEDURE, FUNCTION, PACKAGE,
user_dependencies
PACKAGE BODY)
Tablas de la base de datosall_tables, dba_tables, user_tables
Vistas en la BD
all_views, dba_views, user_views
all_sequences, dba_sequences,
Secuencias user_sequences
Nombres de tablas, vistas, secuencias,
all_catalog, dba_catalog, user_catalog
sinnimos
all_tab_columns, dba_tab_columns,
Columnas de las tablas y vistas user_tab_columns
all_tab_comments, dba_tab_comments,
user_tab_comments,
all_col_comments, dba_col_comments,
Comentarios sobre tablas o columnas user_col_comments
all_constraints, dba_constraints,
user_constraints,
all_cons_columns, dba_cons_columns,
Restricciones de integridad user_cons_columns
Triggers en la BD all_triggers, dba_triggers, user_triggers
all_trigger_cols, dba_trigger_cols,
Uso de las columnas en un trigger user_trigger_cols

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 57

2.2.3.1. Otras tablas en el diccionario

DUAL es una tabla del diccionario de datos que tiene una sola columna, DUMMY, y un
nico registro, 'X'. Es til para calcular el resultado de una expresion o ejecutar una
funcion usando instruccin SELECT. Por ejemplo, la consulta

SELECT TO_DATE ('16/05/2000', 'DD/MM/YYYY')+7 FROM dual;

Devuelve '23/05/00'.

DICTIONARY y DICT_COLUMNS proporcionan informacin sobre las tablas y vistas del


diccionario de datos de Oracle.

TAB proporciona informacion sobre las tablas, vistas y sinnimos del usuario. En su
lugar debera de usarse USER_TABLES o TABS.

2.2.3.2. La vista DBA_OBJECTS

Existe una vista maestra, que es el punto de partida para conocer los objetos de una
Base de Datos.

Tiene principalmente los siguientes campos:

OWNER: Dueo del objeto.

OBJECT_NAME: Nombre del objeto.

OBJECT_TYPE: Tipo de objeto: tabla, ndice, package, etc.

CREATED: Fecha en la que fue creada el objeto.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 58

Autoevaluacin
Sentecnias SQL

El siguiente grfico nos muestra un modelo de una base de datos que almacena
informacin de las ventas de una empresa.

Elabore las siguientes sentencias SQL de acuerdo a lo solicitado

1. Listado de nmero de empleados por departamento. La informacin a mostrar es


cdigo y nombre de departamento, nmero de empleados. Debe mostrarse la
informacin de todos los departamentos as no tengan empleados registrados.

2. Listado de ventas anual por producto. El listado debe mostrar los siguientes datos:
ao, cdigo de producto, nombre de producto, total de ventas.

3. Listado de empleados que han realizado al menos 5 ventas en los ltimos 3


meses. Mostrar por cada empleado, el cdigo, el nombre, el nmero de ventas y
el monto vendido.

4. Implemente un update que le incremente el salario en 5% a todos los empleados


que en el ltimo ao vendieron ms que el promedio de ventas.

5. Actualice todas las ordenes de compra de tal forma se asegure que el total de la
orden es igual a la suma de los subtotales de sus ndices.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 59

Diccionario de Datos

1. Averigue consultando el Diccionario de Datos, cuntos y cules son los tipos de


objetos que existen actualmente en la Base de Datos?

2. Lista todas las tablas que ha creado el usuario SYSTEM durante todo el ao 2004
y 2005.

3. Encuentre cul es el usuario de Base de Datos que ha creado ms tablas?

4. Encuentre cul es el usuario de Base de Datos que ha creado ms objetos?

5. Encuentre cul es el usuario de Base de Datos que ha creado ms ndices?

6. Liste los campos (nombre y tipo), que tiene la tabla EMP del usuario SCOTT.

7. Liste los constraints de la tabla SCOTT.EMP.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 60

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 61

UNIDAD

3
SISTEMA DE ARCHIVOS ORACLE
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al trmino de la unidad, el alumno podr administrar de manera eficiente los archivos
de control que componen una base de datos Oracle.

TEMARIO
3.1 Tema 4 : Archivos de Control
3.1.1 : Administracin de los Archivos de Control
3.1.2 : Creacin de Archivos de Control
3.1.3 : Respaldo y recuperacin de un archivo de control
3.1.4 : Eliminacin de los archivos de control
3.2 Tema 5 : Mantenimiento de los Archivos Redo Logs
3.2.1 : Definicin de archivos OnLine Redo Logs
3.2.2 : Planeacion de los archivos OnLine Redo Logs
3.2.3 : Administracion de los archivos OnLine Redo Logs
3.3 Tema 6 : Gestin de Tablespaces y Datafiles
3.3.1 : Conceptos de almacenamiento
3.3.2 : Tablespace
3.3.3 : Datafile
3.3.4 : Definicin de Usuario, Privilegio y Rol
3.3.5 : Diccionario de Datos
3.3.6 : Otras caracteristicas
3.4 Tema 7 : Jerarqua de almacenamiento
3.4.1 : Introduccin
3.4.2 : Estructura Lgica de Almacenamiento en Oracle
3.4.3 : Relaciones entre las Estructuras de Almacenamiento
3.4.4 : Informacin del Diccionario de Datos

ACTIVIDADES PROPUESTAS
Multiplexar los archivos de control.
Dejar la Base de Datos con un solo archivo de control
Reubicar un archivo de control

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 62

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 63

3.1. ARCHIVOS DE CONTROL


3.1.1. Administracin de los Archivos de Control

3.1.1.1. Qu son los control files?

Cada base de datos del Oracle al menos tiene un archivo de control. Un archivo de
control es un archivo binario pequeo que registra la estructura fsica de la base de
datos y tiene la siguiente informacin:

Nombre de la Base de Datos


Los nombres y ubicaciones de los datafiles y los redologs actuales
El timestamp de la creacin de la Base de Datos
Informacin del checkpoint.

Sin el archivo de control, la base de datos no puede ser montada y la recuperacin es


difcil. El archivo de control de una base de datos del Oracle se crea al mismo tiempo
que la base de datos. Por defecto, por lo menos una copia del archivo de control es
creada durante la creacin de base de datos.

En algunos sistemas operativos el defecto es crear copias mltiples. Usted debe crear
dos o ms copias del archivo de control durante la creacin de base de datos. Usted
puede ser que tambin necesite crear archivos de control ms adelante, si usted
pierde archivos de control o desea cambiar ajustes particulares en los archivos de
control.

3.1.1.2. Nombres de fichero para los archivos de control

Usted especifica nombres del archivo de control usando el parmetro de inicializacin


CONTROL_FILES en el archivo del parmetro (INIT.ora) de la base de datos.

3.1.1.3. Los archivos de control mltiplexados en diversos discos

Cada base de datos del Oracle debe tener por lo menos dos archivos de control, cada
uno almacenado en diferente disco. Si un archivo de control es daado debido a una
falla del disco, la Instancia deber ser bajada.

Una vez que se repare el accionamiento de disco, el archivo de control daado se


puede restaurar usando la copia intacta del archivo de control del otro disco y la
Instancia puede ser reinicializada. En este caso, no se requiere ninguna recuperacin
de los medios. Lo que sigue describe el comportamiento de los archivos de control
multiplexados:

Oracle escribe en todos los nombres de fichero enumerados que se fijan en el


parmetro: CONTROL_FILES.
el primer archivo enumerado en el parmetro de CONTROL_FILES es el nico
archivo ledo por el servidor de la base de datos del Oracle durante la operacin
de la base de datos.

si cualquiera de los archivos de control llegan a ser inasequibles durante la


operacin de la base de datos, la Instancia llega a ser inoperable y debe ser
abortada.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 64

3.1.1.4. Respaldo de los archivos de Control

Es muy importante respaldar los archivos de control, al inicio y ante cualquier cambio
de la Base de Datos.

Estos cambios seran:

Creando, eliminando o modificando los datafiles


Creando, eliminando o cambiando el status read-write de los tablespaces.
Creando o eliminado grupos o miembros redologs.

3.1.2. Creacin de los archivos de control

Los archivos de control iniciales son creados cuando se usa la clasula CREATE
DATABASE. Los nombres de estos archivos de control son especificados en el
parmetro CONTROL_FILES, con el path completo.

Ejemplos:

CONTROL_FILES = (/u01/oracle/prod/control01.ctl,
/u02/oracle/prod/control02.ctl,
/u03/oracle/prod/control03.ctl)

Si los archivos con esos nombres especificados ya existen en el momento de crear la


Base de Datos, usted debe especificar la clasula CONTROLFILE REUSE en la
sentencia CREATE DATABASE. Si el tamao del archivo de control ya existente difiere
del nuevo, entonces no se podr usar la opcin REUSE.

3.1.2.1. Creacin de copias adicionales. Renombramiento y reubicacin de los


Archivos de Control

Usted puede adicionar un nuevo archivo de control, copiando un existente archivo de


control a una nueva ubicacin, y adicionando el nombre completo del nuevo archivo de
control a la lista de archivos de control.

Similarmente usted renombra un archivo de control, copiando el file a su nueva


localizacin, y cambiando el nombre del archivo en la lista de los archivos de control.
Para ello se debe bajar la Base de Datos.

Los pasos para multiplexar o adicionar copias de los archivos de control, seran los
siguientes:

Bajar la Base de datos


Copiar un existente archivo de control a una diferente localizacin, usando
comandos de Sistema Operativo.
Editar el parmetro CONTROL_FILES en el INIT.ora para adicionar el nuevo
nombre de un archivo de control, o cambiando el nombre de un existente archivo
de control.
Reiniciar la Base de Datos

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 65

3.1.2.2. Creacin de Nuevos Control Files

A. Cundo crear archivos de control nuevos

Es necesario que usted cree archivos de control nuevos en las situaciones siguientes:

Todos los archivos de control para la base de datos se han daado


permanentemente y usted no tiene un backup del archivo de control.

Usted desea cambiar uno de los ajustes permanentes del parmetro de la base de
datos especificados originalmente en la sentencia CREATE DATABASE Estos
ajustes incluyen: el nombre de la base de datos y siguientes parmetros
MAXLOGFILES, MAXLOGMEMBERS, MAXLOGHISTORY, MAXDATAFILES, y
MAXINSTANCES.

Por ejemplo, usted cambiara el nombre de una base de datos si estuvo en conflicto
con el nombre de otra base de datos en un ambiente distribuido. O, como otro
ejemplo, usted puede cambiar el valor de MAXLOGFILES si el ajuste original es
demasiado bajo.

B. La sentencia CREATE CONTROLFILE

Usted puede crear un nuevo archivo de control usando la opcin CREATE


CONTROLFILE.

La siguiente sentencia crea un nuevo archivo de control para la Base de Datos PROD:

CREATE CONTROLFILE
SET DATABASE prod
LOGFILE GROUP 1 ('/u01/oracle/prod/redo01_01.log',
'/u01/oracle/prod/redo01_02.log'),
GROUP 2 ('/u01/oracle/prod/redo02_01.log',
'/u01/oracle/prod/redo02_02.log'),
GROUP 3 ('/u01/oracle/prod/redo03_01.log',
'/u01/oracle/prod/redo03_02.log')
NORESETLOGS
DATAFILE '/u01/oracle/prod/system01.dbf' SIZE 3M,
'/u01/oracle/prod/rbs01.dbs' SIZE 5M,
'/u01/oracle/prod/users01.dbs' SIZE 5M,
'/u01/oracle/prod/temp01.dbs' SIZE 5M
MAXLOGFILES 50
MAXLOGMEMBERS 3
MAXDATAFILES 200
MAXINSTANCES 6
ARCHIVELOG;

C. Pasos para crear un nuevo archivo de control

Paso 1.- Hacer una list de todos los datafiles y redolog files. Si se ha hecho un backup
formal de los archivos de control, estas listas estarn en el archivo generado durante
el backup.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 66

Si no hemos hecho ese backup, dicha informaciones puede obtener de las vistas
V$logfle y V$datafile.

Paso 2.- Bajar la Base de Datos de manera normal y consistente.

Paso 3.- Hacer un backup de los datafiles y los redolog files.

Paso 4.- Subir la Instancia de Base de Datos hasta el estado NOMOUNT.

Paso 5.- Crear el nuevo archivo de control usando la clasula CREATE


CONTROLFILE. En este caso puedes usar la opcin RESETLOGS si se ha perdido los
redologs online.

Paso 6.- Hacer un backup del nuevo archivo de control

Paso 7.- Recuperar la Base de Datos si es necesario, si ests creando el nuevo


control file como parte de una recuperacin de base de datos.

Si el nuevo archivo de control fue creado usando la opcin NORESETLOGS, tu puede


recuperar la base de datos de una manera completa.

Si el nuevo archivo de control fue creado usando la opcin RESETLOGS, se debe


especificar USING BACKUP CONTROL FILE

Paso 8.- Si no se invoc a una recuperacin, o se hizo una recuperacn completa, se


hace ALTER DATABASE OPEN

Si se especific RESETLOGS cuando se cre el archivo de control, se hace ALTER


DATABASE OPEN WITH RESETLOGS.

3.1.3. Respaldo y recuperacin de un archivo de control

3.1.3.1. Respaldo de un archivo de control

Usar el comando ALTER DATABASE BACKUP CONTROLFILE para respaldar los


controlfiles. Existen dos opciones:

1.- Respaldar el control file a un archivo binario (duplicar un existente archivo de


control) usando la siguiente sentencia: ALTER DATABASE BACKUP CONTROLFILE
TO '/oracle/backup/control.bkp';

2.- Producir sentencias SQL para que despus sean usado para recrear un archivo de
control: ALTER DATABASE BACKUP CONTROLFILE TO TRACE;

3.1.3.2. Recuperacin de un archivo de control (falla de disco) usando una copia


de archivo.

Este procedimiento que uno de los control files especificados en el parmetro


CONTROL_FILES es inaccesible debido a una falla permanente en el dispositivo
(disco), y tu tienes los archivos de control miltiplexados.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 67

1.- Con la Instancia shutdown, use con un comando de S.O para copiar un archivo de
control vlido a una nueva localizacin.

%cp /u01/oracle/prod/control01.ctl
/u04/oracle/prod/control03.ctl;

2.- Editar el parmetro CONTROL_FILES para reemplazar el archivo de control con


fallas:

CONTROL_FILES = (/u01/oracle/prod/control01.ctl,
/u02/oracle/prod/control02.ctl,
/u04/oracle/prod/control03.ctl)
3.- Levantar la Base de Datos.

3.1.4. Eliminacin de los archivos de control

1. Shutdown la Base de Datos.

2. Editar el parmetro CONTROL_FILES para retirar el archivo de control que se


desea eliminar.

3. Levantar la Base de Datos.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 68

3.2. Mantenimiento de los Archivos Redo Logs

3.2.1. Definicin de archivos ONLINE REDOLOGS

La estructura ms importante para la operacin de recuperacin est formada por los


Archivos Redo logs, el cual consiste en dos o ms archivos que almacenan los
cambios que en la base de datos sucede.

Cada Instancia de una Base de Datos tiene asociado un grupo de archivos redologs
para proteger a la Base de Datos en caso de falla.

3.2.1.1. Contenido de los Online Redo Logs

Los archivos redo logs son llenados con registros redo. Un registro redo, tambin
llamada una entrada redo, est formada por un grupo de vectores de cambios, caad
uno de ellos es una descripcin del cambio hecho en un simple bloque en la Base de
Datos.

Las entradas redo registran informacin que se puede usar para reconstruir toos los
cambios hechos en la base de datos, incluyendo los rollback segments. Cuando se
recupera una base de datos usando los redo, Oracle lee los vectores de cambio en
los registros redo y aplica los cambios a los respectivos bloques.

Oracle antes de escribir en los archivos redo logs escribe en el redo log buffer que
vimos en sesiones anteriores. El proceso background LGWR es el que se encarga de
bajar los datos del bufer a los archivos redo logs. stos bajan la data a disco cuando
hay un commit y un SCN (system change number) es asignado a esas entradas de los
redo logs para identificar a qu transaccin pertenece.

3.2.1.2. Cmo escribe Oracle en los online redo logs

Los archivos online redo logs de una Base de Datos consisten de dos o ms archivos.
Oracle requiere como mnimo dos, para garantizar que uno siempre est disponible
para ser escrito mientras el otro est siendo archivado. ( Si est en Modo ARCHIVE ).

El proceso LGWR escribe en los online redo logs de una manera circular. Cuando el
actual archivo online redo log se llena, LGWR empieza a escribir en el siguiente redo
log. Cuando el ltimo redo log disponible se llena, LGWR retorna al primer online
redolog, para escribir y empezar de nuevo el ciclo.

A continuacin se muestra una figura que explica lo antes mencionado:

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 69

3.2.1.3. Activo (actual) e inactivo online redo log

En un tiempo determinado, Oracle slo usa uno de los online redo logs para
almancenar los registros redo desde el redo log bfer. El archivo online redo log
donde actualmente el LGWR est escribiendo se conoce como el actual (CURRENT)
online redo log.

Los archivos online redo logs que son requerios para recuperar una Base de Datos
son llamados activos (ACTIVE) online redo logs. Los online redo logs que no son
requeridos para recuperar una Base de datos son llamados redo inactivos
(INACTIVE).

Si se tiene activado el Modo ARCHIVELOG, Oracle no puede usar o sobrescribir un


activo redo log hasta que el proceso ARCn ha archivado su contenido.

Si no se tiene activado este Modo ARCHIVELOG , cuando el ltimo online redo lg se


llena, se continua sobrescribiendo al primer online redolog.

3.2.1.4. Log Switches y Nmero de secuencias de logs

Un log switch es el punto en el cual el Oracle termina la escritura en un online redo log
y comienza a escribir a otro. Normalmente, un switch log ocurre cuando el online redo
log actual se llena totalmente y la escritura debe continuar en el online redo log
siguiente.

Sin embargo, usted puede especificar o forzar para que un switch log suceda sin
importar en qu online redo log est o en qu porcentaje est llen el online redo log.

El Oracle asigna a cada online redo log un nuevo nmero de serie (nmero de
secuencia) del registro cada vez que ocurre un switch log ocurre y LGWR comienza a
escribirl en el nuevo online redo log

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 70

Cada online o archivado (Modo ARCHIVELOG) redo log es identificado por su nmero
de secuencia. Durante una recuperacin, los redo logs son aplicados en orden
ascendent de acuerdo a su nmero de secuencia.

3.2.2. Planeacion de los archivos ONLINE REDOLOGS

3.2.2.1. Multiplexacin de los archivos online redo logs

Los archivos online redo logs son muy importantes, por eso Oracle recomienda y tiene
la capacidad de manejar varias copias de cada uno de los online redo logs, para evitar
un nico punto de falla. El proceso LGWR escribe concurrentemente en todas las
copias del actual archivo redo log.

Realmente los switch log sucede entre GRUPOS de redo logs. Cada archivo online
redo log en un grupo es llamado MEMBER.

3.2.2.2. Problemas con los online redologs

Si Entonces
LGWR puede escribir satisfactoriamente La escritura es normal. LGWR escribe a los
como mnimo a un miembro redo log redo log MEMBER habilitados e ignora a los
que est deshabilitados
LGWR no puede acceder al siguiente grupo La operacin de la base de datos se para por
de redo log al hacer un switch log, debido a el momento, hasta que el grupo est
que el grupo necesita ser archivado ( Modo habilitado o sea archivado
ARCHIVELOG)
Todos los miembros de un grupo (siguiente) Oracle retorna un error y la Base de datos
no pueden ser accedidos por el LGWR hace shutdown. En este caso se puede
porque hay una falla del medio (disco) necesitar hacer un proceso de recuperacin.

Si todos los miembros de un grupo actual de Oracle retorna un error y la Base de datos
redo log no son accesibles, cuando estaban hace shutdown. En este caso se puede
escribindose sobre ellos. necesitar hacer un proceso de recuperacin.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 71

3.2.3. Administracion de los archivos ONLINE REDOLOGS

3.2.3.1. Creacin de Grupos y Miembros redo logs

Para crear estos elementos se debe tener el privilegio de ALTER DATABASE. Una
Base de datos puede tener un nmero mximo MAXLOGFILES de grupos.

Para crear un grupo, puede ser de dos formas:

ALTER DATABASE ADD LOGFILE ('/oracle/dbs/log1c.rdo',


'/oracle/dbs/log2c.rdo') SIZE 500K;

ALTER DATABASE ADD LOGFILE GROUP 10 ('/oracle/dbs/log1c.rdo',


'/oracle/dbs/log2c.rdo')
SIZE 500K;

Para crear online redo logs miembros:

ALTER DATABASE ADD LOGFILE MEMBER '/oracle/dbs/log2b.rdo' TO


GROUP 2;

ALTER DATABASE ADD LOGFILE MEMBER '/oracle/dbs/log2c.rdo' TO


('/oracle/dbs/log2a.rdo', '/oracle/dbs/log2b.rdo');

Cuando se crea un grupo de redolog, sus miembros al principo aparecern con el


estado INVALID. Esto es normal, pues en el momento de ser usado por primera vez
pasar al estado activc (ACTIVE)

3.2.3.2. Reubicacin Renombramiento de los online redo logs

Se puede usar comandos de Sistema Operativo para reubicar los redo logs, luego se
usa el comando ALTER DATABASE para hacer que sus nuevos nombres sean
conocidos por la Base de Datos (controlfiles)

De nuevo se tiene que tener el privilegio de ALTER DATABASE. Es recomendable


hacer un backup de la base de datos antes de hacer esta operacin. Despus de
hacer los cambios en los redologs, hacer un backup de los archivos de control
(controlfiles).

Por ejemplo:

Los online redologs estn en dos discos: diska y diskb


Los online redolog estn duplicados: un grupo consiste de los miembros:
/diska/logs/log1a.rdo and /diskb/logs/log1b.rdo, y el segundo
grupo consiste de los miembros: /diska/logs/log2a.rdo and
/diskb/logs/log2b.rdo.
Los online redo logs que estn en el disco diska tienen que ser movidos al disco
diskc. Los nuevos nombres sern: /diskc/logs/log1c.rdo and
/diskc/logs/log2c.rdo.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 72

Para renombrar los online redo logs miembros se sigue los siguientes pasos:

1.- Bajar la Base de Datos

Shutdown immediate

2.- Copiar los online redo logs a la nueva ubicacin. Para esto se usa cualquier
comando de copia de archivos segn sea el Sistema Operativo. Por ejemplo si es un
windows usamos el EXPLORER o si es un UNIX usamos el comando mv

mv /diska/logs/log1a.rdo /diskc/logs/log1c.rdo
mv /diska/logs/log2a.rdo /diskc/logs/log2c.rdo

3.- Reiniciar la base de datos hasta el estado MOUNT, no abrir la base de Datos:

CONNECT / as SYSDBA
STARTUP MOUNT

4.- Renombrar los archivos online redo logs: Use el comando ALTER DATABASE con
la clasula RENAME FILE.

ALTER DATABASE RENAME FILE


'/diska/logs/log1a.rdo', '/diska/logs/log2a.rdo'
TO '/diskc/logs/log1c.rdo', '/diskc/logs/log2c.rdo';

5.- Abrir la Base de Datos:

ALTER DATABASE OPEN;

3.2.3.3. Eliminacin de grupos y miemnbros redo logs

Por ejemplo si hay una falla de disco, se va a necesitar dropear los grupos y
miembros redo logs que estn en ese disco. O pudiera ser que estn en un disco
inapropiado y se procede a eliminar.

Para eliminar un grupo online redo logs, debes tener el privilegio ALTER DATABASE.
Antes de eliminar un grupo de redoogs, tener las siguientes precauciones:

Una Instancia de Base de Datos requiere como mnimo 2 grupos de online redo
logs
Se puede eliminar un grupo de online redo logs si est en estado INACTIVO.
(INACTIVE)
Si el modo Archivelog est activado, asegurarse que el grupo de redo log a
eliminarse ha sido archivado. Para saber esto, hacer la siguiente consulta:

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 73

SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG;

GROUP# ARC STATUS


------ --- ----------------
1 YES ACTIVE
2 NO CURRENT
3 YES INACTIVE
4 YES INACTIVE

Para eliminar un grupo de redo log usar el comando ALTER DATABASE con la clasula
DROP LOGFILE. Por ejemplo, la siguiente sentencia elimina el grupo nmero 3:

ALTER DATABASE DROP LOGFILE GROUP 3;

SI el Oracle no est usando ORACLE MANAGED FILES, los archivos fsicos redo logs
no sern eliminados del Sistema Operativo. La Base de Datos ya no los reconoce,
pero an siguen en e disco. Para ello usar un comando apropiado de eliminacin de
archivos propio del Sistema Operativo.

Para eliminar un miembro redo log de un grupo de redo log, hay que tener en cuenta lo
siguiente:

Es permitido eliminar un online redo log si los miembros del grupo al cual
pertenece estn multiplexados.
No se puede eliminar el ltimo miembro VALIDO de un grupo, cuando existen slo
dos grupos (que es lo mnimo).
Se puede eliminar un miembro siempre y cuando no es parte de un grupo ACTIVO
o ACTUAL.
Asegurarse que ese miembro (Grupo) ha sido archivado, si es que la Base de
Datos est en modo ARCHIVELOG.

Para eliminar un especfico online redo log inactivo, usar el comando ALTER
DATABASE con la clasula DROP LOGFILE MEMBER. Por ejemplo:

ALTER DATABASE DROP LOGFILE GROUP 3;

3.2.3.4. Switch Log forzado

Un switch log ocurre cuando el LGWR para de escribir en un online redo log poruqe ya
se llen y empieza a escribir en el siguiente online redo log. Se puede forzar un switch
log por ejemplo para eliminar el online redo lo0g actual, hacindolo pasar al estado
INACTIVO.

Para hacer esta operacin, se utiliza el comando ALTER SYSTEM con la clasula
SWITCH LOGFILE.

ALTER SYSTEM SWITCH LOGFILE;

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 74

3.2.3.5. Verificacin de los bloques de los archivos redo logs

Para activar esta opcin se debe configurar el parmetro DB_BLOCK_CHECKSUM =


TRUE. Con esto Oracle cada vez que escribe un bloque calcula un checksum, para
detectar corrupciones de bloques. Oracle verifica cuando un blouqe de un redo log
archivado es escrito, o cuando se realiza un proceso de recuperacin.

3.2.3.6. Limpieza de un archivo online redo log

UN online redo log puede estar corrupto mientras la Base de Datos est abierta, y lo
que queda es bajar la base de datos, pues el archivamiento (si est en modo
ARCHIVELOG) no puede continuar. En esta situacin, el comando ALTER DATABASE
CLEAR LOGFILE puede ser usado para reinicializare el online redo log sin tener que
bajar la Base de Datos:

La siguiente sentencia limpa los redo logs del grupo 3:

ALTER DATABASE CLEAR LOGFILE GROUP 3;

Si el redolog est corrupto y no ha sido archivado, se debe usar la clasula


UNARCHIVED en la sentencia:

ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 3;

3.2.3.7. Vista para obtener informacin acerca de los redo logs

VISTA DESCRIPCION
V$LOG Muestra la informacin de los archivos redologs que contiene los
archivos de control
V$LOGFILE Identifica los grupos redo logsy miembros
V$LOG_HISTORY Contiene linformacin de la historia de los redo logs

SELECT * FROM V$LOG;


GROUP# THREAD# SEQ BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
------ ------- ----- ------- ------- --- --------- ------------- --------- ------------- ---------------------- ---------------
1 1 10605 1048576 1 YES ACTIVE 11515628 16-APR-00
2 1 10606 1048576 1 NO CURRENT 11517595 16-APR-00
3 1 10603 1048576 1 YES INACTIVE 11511666 16-APR-00
4 1 10604 1048576 1 YES INACTIVE 11513647 16-APR-00

SELECT * FROM V$LOGFILE;

GROUP# STATUS MEMBER


------ ------- ----------- -----------------------
1 D:\ORANT\ORADATA\IDDB2\REDO04.LOG
2 D:\ORANT\ORADATA\IDDB2\REDO03.LOG
3 D:\ORANT\ORADATA\IDDB2\REDO02.LOG
4 D:\ORANT\ORADATA\IDDB2\REDO01.LOG

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 75

3.3. Gestin de Tablespaces y Datafiles

3.3.1. Conceptos de almacenamiento

3.3.1.1. TableSpace

Una base de datos se divide en unidades lgicas denominadas TABLESPACES.


Un tablespace no es un fichero fsico en el disco, simplemente es el nombre que tiene
un conjunto de propiedades de almacenamiento que se aplican a los objetos (tablas,
secuencias) que se creen en la base de datos bajo el tablespace indicado (tablas,
secuencias).

3.3.1.2. Datafile

Un datafile es la representacin fsica de un tablespace. Son los "ficheros de datos"


donde se almacena la informacin fsicamente.
Un datafile est asociado a un solo tablespace y un tablespace est asociado a uno o
varios datafiles.

3.3.1.3. Segment

Un segment es aquel espacio direccionado por la base de datos dentro de un datafile


para ser utilizado por un solo objeto.
Fsicamente, todo objeto en base de datos no es ms que un segment (segmento,
trozo, seccin) en un datafile.

Se puede decir que un segmento es a un objeto de base de datos, como un datafile a


un tablespace: el segmento es la representacin fsica del objeto en base de datos (el
objeto no es ms que una definicin lgica).

3.3.1.4. Extent

Un extent es un espacio de disco que se direcciona de una sola vez, un segment que
se direcciona en un momento determinado de tiempo.
El concepto de extent es un concepto fsico, unos extent estn separados de otros
dentro del disco.

3.3.1.5. Data block

Un data block es el ltimo eslabn dentro de la cadena de almacenamiento.


El concepto de Data block es un concepto fsico, ya que representa la mnima unidad
de almacenamiento que es capaz de manejar Oracle.
Igual que la mnima unidad de almacenamiento de un disco duro es la unidad de
asignacin, la mnima unidad de almacenamiento de Oracle es el data block.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 76

En resumen:

El esquema anterior muestra toda la cadena de almacenamiento de Oracle:

Desde el nivel ms fsico al ms lgico:

Unidades de asignacin del SO (El ms fsico. No depende de Oracle)


Data blocks de Oracle
Extents
Segments
DataFiles
Tablespaces (El ms lgico)

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 77

Las unidades bsicas de una base de datos son los tablespaces y los datafiles.

Una base de datos est formada por una o varias unidades lgicas llamadas
tablespaces.

Adems, cada uno de estos tablespaces est formado por uno o varios ficheros fsicos
que son los datafiles. Un datafile solamente puede pertenecer a un tablespace. Por lo
tanto, los datafiles de una base de datos son todos los datafiles que forman parte de
todos los tablespaces de la base.

Cuando se crea una base de datos, hay que crear al menos un tablespace, por lo que
durante el proceso de creacin de la base de datos siempre se indica el tablespace
principal de sta, que se llama SYSTEM.
De igual manera, cuando se crea un tablespace se debe indicar obligatoriamente
tambin el nombre de al menos un datafile que formar parte de ese tablespace. El
datafile es un fichero fsico al que le tendremos que asignar un directorio, un nombre y
un tamao.

3.3.2. Tablespace

En un sistema manejador de base de datos (DBMS), un tablespace es una agrupacin


lgica de los datafiles de una base de datos. Una base de datos tpica contiene por lo
menos un tablespace y normalmente 2 o ms.

Existen programas de base de datos que automticamente crean un tablespace


llamado SYSTEM y este contiene informacin general acerca de la estructura y
contenidos de la base de datos. Una base de datos pequea puede estar contenida en
un tablespace SYSTEM, pero en la mayora de los casos los datos del usuario estn
en otro tablespace.

Los archivos en un tablespace generalmente comparten caractersticas. Cada


tablespace debera contener solo un datafile o cientos de archivos, u otras cosas. Los
tablespace pueden crearse, eliminarse o combinarse. Un objeto en base de datos
debe estar almacenado obligatoriamente dentro de un tablespace.

Las propiedades que se asocian a un tablespace son:

Localizacin de los ficheros de datos.


Especificacin de mximas cuotas de consumo de disco.
Control de la disponibilidad de los datos (en lnea o fuera de lnea).
Backup de datos.

Cuando un objeto se crea dentro de un cierto tablespace, este objeto adquiere todas
las propiedades antes descritas del tablespace utilizado.

3.3.2.1. El Tablespace System

Cuando se crea una base de datos es obligatorio crear un tablespace inicial en el que
se van a crear los usuarios SYS y SYSTEM automticamente. Estos usuarios son los
que tienen la informacin necesaria para que funcione la base de datos y podamos
hacer todo tipo de operaciones como, por ejemplo, crear nuevos usuarios o crear
nuevos tablespaces y tablas en esos nuevos tablespaces.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 78

Este tablespace inicial se llama por defecto SYSTEM. Es una pieza clave para un
buen funcionamiento de la base de datos ya que en l residen todos los objetos de los
usuarios SYS y SYSTEM.

Es muy recomendable crear al menos otro tablespace nuevo distinto al SYSTEM. As,
todos los nuevos usuarios que creemos en nuestra base de datos, junto con todas sus
tablas e ndices se almacenarn en un tablespace diferente a SYSTEM.

Se realiza esta separacin para evitar que se bloquee toda la base de datos si ocurre
algo grave en el tablespace SYSTEM.

3.3.2.2. Manipulaciones Bsicas

Partiendo de una base de datos creada y levantada. Y conectandonos a esta con el


usuario SYSTEM y su contrasea (por defecto, MANAGER).

A. Crear un tablespace.

Para crear un tablespace llamado Prueba y haciendo uso del SQLPLUS conectados
como system usamos la sentencia:

CREATE TABLESPACE prueba


DATAFILE '/users/oradata/orcl/prueba01.dbf' Size 100M;

Con esta sentencia estamos creando en nuestra base de datos un tablespace nuevo
llamado "prueba" y que est formado fsicamente por un fichero (datafile) llamado
prueba01.dbf de 100 Mbytes y que est en el directorio "/users/oradata/orcl". Esta
sentencia crea fsicamente dicho fichero.

B. Aumentar de tamao un Tablespace.

Para aumentar el tamao de un tablespace, tenemos varias posibilidades. La primera


de ellas es crear un nuevo datafile y asignrselo al tablespace que queremos
aumentar. Esto se puede hacer usando la sentencia:

ALTER TABLESPACE prueba


ADD DATAFILE '/users/oradata/orcl/prueba02.dbf' Size 50M;

Con esta sentencia hemos creado un nuevo fichero fsico en nuestro directorio
/users/oradata/orcl de 50 Mbytes de tamao y se lo hemos asignado al
tablespace "prueba".

Otra posibilidad es ampliar el tamao de uno de los ficheros fsicos o datafiles que
forman el tablespace. Esto se puede hacer usando la sentencia:

Alter datafile '/users/oradata/orcl/prueba01.dbf' resize 150M;

Con esta sentencia lo que hacemos es aumentar el datafile que forma parte de nuestro
tablespace en 50 Mbytes.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 79

C. Borrar un tablespace.

Para eliminar un tablespace de la base de datos se debe utilizar la sentencia:

DROP TABLESPACE prueba;

3.3.2.3. Tablespaces Online y Offline

Un tablespace puede estar en dos estados: Online y Offline. Que un tablespace est
online significa que est disponible para operar en l, mientras que si est offline
quiere decir que no se puede utilizar.

Cuando creamos un tablespace, se crea en estado online y, por lo tanto, podemos


crear en dicho tablespace objetos como ndices, tablas, etc.

A. Estado del tablespace

Podemos obtener esta informacin desde la vista dba_tablespaces. Consultndola


podemos conocer qu tablespaces tenemos en nuestra base de datos y en qu estado
se encuentran. Para ello usamos la sentencia:

SELECT
tablespace_name,
status
FROM dba_tablespaces;

B. Colocar un tablespace offline

Hay que tener en cuenta que cuando un tablespace est offline, no se puede acceder
a ningn objeto que se encuentre en l, es decir, que si en el tablespace hay tablas, no
se podr hacer consultas ni inserciones ni modificaciones de estas tablas, sin
embargo, el resto de los objetos que se encuentran en otros tablespaces de la base
de datos si estn accesibles.

Colocamos un tablespace offline para realizar tareas administrativas, tales como:

Hacer una copia de seguridad del tablespace estando completamenteseguros de que


nadie est modificando los objetos del tablespace y que no quedan transacciones
pendientes sin terminar y que pueden modificar estos objetos.

Actualizar una aplicacin que se basa en los objetos de este tablespace sin que
ningn usuario pueda modificar los datos en medio de la actualizacin.

Si en un tablespace existen segmentos de rollback activos, no se puede poner offline,


primero hay que desactivar los segmentos de rollback activos del tablespace.

C. Conocer que rollback segments estan en un tablespace y cual es su estado

Para obtener esta informacin utilizamos la sentencia:

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 80

SELECT
rollback_segment,
status,
tablespace_name
FROM dba_rollback_segs;

Con esta sentencia podremos ver todos los rollback existentes, en qu estado se
encuentran (online, offline) y en qu tablespace estn. Si comprobamos que en el
tablespace que vamos a poner offline tenemos algn segmento de rollback online
(activo), debemos ponerlo offline antes de intentar poner offline el tablespace. Para
desactivar un segmento de rollback, ejecutamos la sentencia:

ALTER ROLLBACK segment nombre_de_segmento offline;

Cuando ya no queden segmentos de rollback en estado online se ejecuta la siguiente


sentencia para colocar el tablespace en estado offline

ALTER TABLESPACE nombre_de_tablespace offline;

Luego de realizar las tareas administrativas ya se puede activar el tablespace


haciendo uso de la sentencia:

ALTER TABLESPACE nombre_de_tablespace online;

Si se ha tenido que desactivar algn segmento de rollback utilizamos la siguiente


sentencia para activarlo:

ALTER ROLLBACK segment nombre_de_segmento online;

En los tablespaces offline, no se pueden realizar consultas ni modificaciones ni


inserciones en los datos de las tablas que estn en ellos, pero si se pueden eliminar
objetos de dicho tablespace no es lo mismo que borrar datos de objetos del
tablespace).

Se pueden crear tablespaces para almacenar los ndices de la aplicacin y otros


distintos para almacenar las tablas o datos. En estos casos, si desactivamos el
tablespace en el que se encuentran los ndices, se puede seguir accediendo a las
tablas y realizar consultas sobre ellas porque su tablespace est accesible.

Si un servidor Oracle se encuentra con graves problemas para escribir en un


tablespace, al cabo de varios intentos lo pone automticamente offline.

Cuando un tablespace est offline, la informacin de que esto ha ocurrido se queda


almacenadada en el tablespace SYSTEM de esta base de datos. Existe una forma de
transportar un tablespace de una base de datos a otra para tener accesibles sus
objetos en la segunda, pero si el tablespace est offline en la primera, nunca podr
ponerse online en la base de datos destino ya que, la informacin del estado de este
tablespace se encuentra en el tablespace SYSTEM de la base de datos originaria del
tablespace.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 81

3.3.2.4. Tablespaces Read Only

Al crear un tablespace, se puede crear en l todos los objetos que queramos y


acceder a ellos y eliminarlos y tambin consultar los datos de las tablas que se
encuentren en este tablespace, as como borrar, insertar y modificar estos datos.
Existe la posibilidad de poner un tablespace en un estado en el cual, solamente se
pueden consultar los datos de los objetos, no se puede ni borrar ni insertar nada en
ellos.

A. Motivos por los cuales se hace uso de un tablespace read only

Como no se pueden modificar los datos que en l se encuentran, no hace falta hacer
backup del mismo. Dependiendo de las aplicaciones que se tengan en la base de
datos puede ser interesante tener tablespaces read only o no. Por ejemplo, si
tenemos una aplicacin en la que se pueden consultar cientos de fotos de animales
salvajes o de paisajes, se podra crear un tablespace en el que se introduzcan estas
imgenes y luego ponerlo read only.

Generalmente un tablespace de estas caractersticas, que sirve de almacenamiento de


fotos o temas similares, suele ocupar mucho espacio, por lo que hacer un backup del
mismo todos los das puede resultar muy costoso en tiempo y espacio. Adems, si no
se modifican nunca estas fotos no tiene mucho sentido hacer copia de seguridad del
mismo, y no solo eso, se podra almacenar dicho tablespace en un CDROM en vez de
ocupar espacio en disco.

Para poner un tablespace en estado read only, se usa la sentencia:

ALTER TABLESPACE nombre_de_tablespace READ ONLY;

En un tablespace read only solo se pueden realizar consultas de los datos, por lo
tanto, si en el instante de ejecutar esta sentencia se estn realizando modificaciones
o inserciones o borrado de datos, el servidor espera hasta que acaben para poner el
tablespace en estado read only.

Para ver si el tablespace esta en estado read only ejecutamos la sentencia:

SELECT
tablespace_name,
status
FROM dba_tablespaces;

Para hacer modificaciones en un tablespace read only, se debe poner en estado read
write y una vez realizada la modificacin, volver a ponerlo en estado read only, para
ello usamos la siguiente sentencia:

ALTER TABLESPACE nombre_de_tablespace read write;

Un tablespace read only no necesita backup, y por tanto, recovery. Siempre hay que
hacer al menos un backup. En primer lugar creamos un tablespace vaco en el que se
va metiendo poco a poco toda la informacin, pueden ser varias tablas que almacenan
fotos de animales y paisajes. Cuando ya no se van a crear nuevas imgenes es
cuando se debe poner el tablespace read only, pero ah si se debe hacer una copia de
seguridad, backup, y como ya se va a tocar nunca ms este tablespace ser la nica.
Si por algn motivo se decide poner este tablespace otra vez read write para crear o

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 82

borrar datos, despus de volver a ponerlo read only se deber deberemos hacer un
backup de los nuevos datos.

En un tablespace read only no se pueden modificar, ni insertar ni borrar datos de sus


tablas. Sin embargo y, al igual que en los tablespaces offline, si se pueden borrar
objetos enteros del tablespace, como por ejemplo un ndice o una tabla.

3.3.2.5. Tablespaces Temporales

Un tablespace temporal es aqul en el que solamente puede haber objetos


temporales. No se pueden crear en l objetos permanentes como pueden ser los
ndices, las tablas o los segmentos de rollback. Estn especialmente preparados para
optimizar las operaciones en las que se lleven a cabo ordenaciones. Por lo tanto est
muy recomendado tener al menos un tablespace temporal en cada base de datos.
Algunas de las operaciones que implican realizar ordenaciones son, las selects que
tienen group by, las que tienen order by, la creacin de ndices y analizar ndices para
calcularles las estadsticas. En todos estos casos, cuando para realizar la ordenacin
el servidor no encuentra espacio suficente libre en la memoria, utiliza el tablespace
temporal.

Los rendimientos son muy superiores comparndolos con los tiempos que se
empleara en realizar las ordenaciones en tablespaces normales. Esto se debe a que
el mecanismo que se utiliza para reservar y desreservar el espacio en los tablespaces
temporales es muy distinto que en los normales ya que est orientado a objetos que
crecen mucho y rpido y que a continuacin disminuyen totalmente su tamao y
desaparecen.

Para crear un tablespace temporal simplemente hay que aadir la palabra


TEMPORARY a la instruccin utilizada para crear tablespaces normales. Siguiendo el
ejemplo indicado en la creacin de tablespaces, podramos tener lo siguiente:

CREATE TABLESPACE prueba


DATAFILE '/users/oradata/orcl/prueba01.dbf' size 100M temporary;

Para indicar a un usuario de base de datos que sus ordenaciones debe hacerlas en un
determinado tablespace temporal, se usa la siguiente sentencia:

ALTER USER nombre_de_usuario


TEMPORARY TABLESPACE nombre_de_tablespace;

Y para conocer qu usuarios existen en nuestra base de datos y cual es el tablespace


temporal que utilizan, utilizamos la sentencia:

SELECT
username,
temporary_tablespace
FROM dba_users;

Finalmente, si se quiere conocer qu tablespaces se tienen y cules son temporales y


cuales son permanentes, se puede consultar la vista correspondiente a la informacin
sobre los tablespaces, es decir, la vista dba_tablespaces;

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 83

SELECT
tablespace_name,
contents
FROM dba_tablespaces;

Un tablespace permanente puede pasar a temporal y que uno temporal puede pasar a
permanente.

Ejemplo prctico de tablespace:

En este esquema podemos ver la tabla ARTICULO que se almacena dentro del
tablespace A, y que por lo tanto tendr todas las propiedades del tablespace A que
pueden ser:

Sus ficheros de datos estn en $ORACLE_HOME/datos/datos_tablespace_A


Los objetos no pueden ocupar ms de 10Mb de espacio de base de datos.
En cualquier momento se puede poner fuera de lnea todos los objeto de un cierto
tablespace.
Se pueden hacer copiar de seguridad slo de ciertos tablespaces.

Se puede apreciar que es posible tener una tabla en un tablespace, y los ndices de
esa tabla en otro tablespace. Esto es debido a que los ndices no son ms que objetos
independientes dentro de la base de datos, como lo son las tablas. Y al ser objetos
independientes, pueden ir en tablespaces independientes.

El tablespace SYSTEM es un tablespace por defecto en todas las bases de datos


Oracle. En l se almacenan todos los datos de sistema, el catlogo y todo el cdigo
fuente y compilado de procedimientos PL/SQL. Tambin es posible utilizar el mismo
tablespace para guardar datos de usuario.
En el esquema tambin vemos que hay un tablespace Temporal (en gris oscuro). Este
tablespace representa las propiedades que tendrn los objetos que la base de datos
cree temporalmente para sus clculos internos (normalmente para ordenaciones y
agrupaciones).

La creacin de un tablespace temporal difiere en una de sus clusulas de creacin.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 84

El tablespace RO (en gris claro) difiere de los dems en que es un tablespace de solo
lectura (Read Only), y que por lo tanto todos los objetos en l contenidos pueden
recibir rdenes de consulta de datos, pero no de modificacin de datos.

Estos tablespaces puede residir es soportes de slo lectura, como pueden ser
CDROMs, DVDs, etc.

Cuando se crea un tablespace, ste se crea de lectura/escritura. Despus se puede


modificar para que sea de solo lectura.
Un tablespace puede estar en lnea o fuera de ella (Online o OffLine), esto es que el
tablespace completo est a disposicin de los usuarios o est desconectado para
restringir su uso.
Cualquier objeto almacenado dentro de un tablespace no podr ser accedido si el
tablespace est fuera de lnea.

3.3.3. Datafile

Los datafiles son los ficheros fsicos en los que se almacenan los objetos que forman
parte de un tablespace. Un datafile pertenece solamente a un tablespace y a una
instancia de base de datos.

Un tablespace puede estar formado por uno o varios datafiles. Cuando se crea un
datafile, se debe indicar su nombre, su ubicacin o directorio, el tamao que va a tener
y el tablespace al que va a pertenecer. Adems, al crearlos, ocupan ya ese espacio
aunque se encuentran totalmente vacos, es decir, Oracle reserva el espacio para
poder ir llenndolo poco a poco con posterioridad. Por supuesto, si no hay sitio
suficiente para crear un fichero fsico del tamao indicado, se producir un error y no
se crear dicho fichero.

Cuando se van creando objetos en un tablespace, stos fsicamente se van


almacenando en los datafiles asignados a dicho tablespace, es decir, cuando creamos
una tabla y vamos insertando datos en ella, estos datos realmente se reparten por los
ficheros fsicos o datafiles que forman parte del tablespace. No se puede controlar en
qu fichero fsico se almacenan los datos de un tablespace. Si un tablespace est
formado por 2 datafiles y tenemos una tabla en ese tablespace, a medida que vamos
insertando filas stas se almacenarn en cualquiera de los dos datafiles
indistintamente, es decir, unas pueden estar en un datafile y otras en otro.

El espacio total disponible en un tablespace es lgicamente la suma de los tamaos


que ocupan los ficheros fsicos o datafiles que lo forman. Al crearlos,los datafiles estn
totalmente vacos, simplemente es un espacio reservado y formateado por Oracle para
su uso. A medida que se van creando objetos en ellos como tablas, ndices, etc y se
van insertando registros en estas tablas, los datafiles se van llenando o, lo que es lo
mismo, el tablespace se va llenando.

3.3.3.1. Creacin y Manipulacin

La creacin de datafiles est estrechamente relacionada con el tablespace al que va a


pertenecer. Existen varias formas de crear datafiles. Cada vez que se crea un
tablespace nuevo, hay que indicar obligatoriamente cual es el datafile que va a
pertenecer a dicho tablespace y, en ese momento, se crea tanto el tablespace como
su datafile.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 85

Tambin se pueden aadir datafiles nuevos a un tablespace que ya existe. Esto se


suele hacer cuando un tablespace se est llenando y est a punto de llegar a su
capacidad mxima. Al aadir un datafile a un tablespace, se aumenta el espacio
disponible en dicho tablespace en tantos megabytes como tenga el datafile nuevo
recin creado.

Ejemplo.- Creacin de un nuevo datafile de 50 megabytes junto con un nuevo


tablespace

CREATE TABLESPACE Nombre_tablespace


DATAFILE '/users/oracle/orcl/nombre_datafile.dbf' size 50M;

Una vez creado este tablespace, si con el tiempo se quiere aadir espacio, se puede
hacer creando un nuevo datafile y asignndoselo al tablespace, usando la sentencia:

ALTER TABLESPACE nombre_tablespace


ADD DATAFILE '/users/oracle/orcl/nombre_datafile2.dbf' size
100M;

Con las dos instrucciones anteriores se ha creado un tablespace nuevo en la base de


datos en el que caben 150 megabytes de informacin. Este espacio est formado
fsicamente por dos ficheros llamados nombre_datafile.dbf y nombre_datafile2.dbf que
se encuentran en el directorio /users/oracle/orcl de nuestra mquina y que ocupan 50 y
100 Mbytes respectivamente.

Para conocer los datafiles que forman parte de nuestra base de datos se puede
consultar la vista dba_data_files en la que se indica por cada datafile o fichero de
datos, a qu tablespace pertenece y cuanto espacio total tiene reservado.

Es importante recalcar que el espacio que aparece en esta vista es el espacio total
que ocupa el fichero fsico y no el espacio utilizado de ese fichero, es decir, que si
creamos un datafile de 50Mbytes y consultamos esta vista, veremos que ocupa
50Mbytes a pesar de estar totalmente vaco. Este dato indica la cantidad de espacio
que ocupa el fichero fsico, la cantidad de informacin que podremos introducir en l.
Para obtener esta informacin ejecutamos la sentencia:

SELECT
tablespace_name,
file_name,
bytes /1024/1024
FROM dba_data_files;

Existe tambin la posibilidad de aumentar el tamao de un datafile, es decir, se puede


conseguir que un tablespace tenga ms sitio vaco aumentando uno o varios de los
ficheros fsicos que lo forman, en lugar de aadindole un nuevo fichero fsico. Para
ello utilizamos la siguiente sentencia:

ALTER DATABASE Datafile '/users/oracle/orcl/nombre_datafile.dbf'


Resize 100M;

Esta instruccin deja el datafile indicado con un tamao de 100M, no es que se


aumente en 100Mbytes. En esta instruccin no se pueden utilizar nmeros negativos,
es importante tener en cuenta que no siempre podemos disminuir el tamao de un

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 86

datafile, esto tiene que ver con la forma en que Oracle reservar el espacio dentro de
los tablespaces y datafiles.

Existe la posibilidad de que Oracle aumente automticamente el tamao de sus


datafiles cuando stos se estn llenando, para evitar as la intervencin manual del
administrador de la base de datos. Se puede hacer de varias formas, al crear el
tablespace con el datafile, al aadir un nuevo datafile al tablespace o incluso en
cualquier otro momento.

Para indicar que queremos que un datafile aumente automticamente cuando


aadimos un nuevo datafile a un tablespace existente podemos utilizar la siguiente
sentencia:

ALTER TABLESPACE nombre_tablespace


ADD DATAFILE nombre_datafile SIZE 100M
AUTOEXTEND ON NEXT 250K MAXSIZE 200M;

Con esta instruccin lo que se hace es aadir un nuevo datafile llamado


nombre_datafile a nuestro tablespace nombre_tablespace con 100Mbytes de tamao.
Adems, se esta indicando que aumente por si mismo cada vez que se llene y que
aumente en bloques de 250 Kbytes cada vez.

Finalmente le ponemos un mximo tamao total que queremos que tenga el datafile
con la instruccin maxsize, por lo que una vez que llegue a 200 Mbytes, si se llena, no
volver a crecer ms.
Para indicar en cualquier momento que queremos que un datafile no crezca ms
automticamente, podemos utilizar la sentencia:

ALTER DATABASE datafile nombre_datafile AUTOEXTEND OFF;

Y para indicar que un determinado datafile crezca automticamente, la instruccin que


se debera ejecutar es:

ALTER DATABASE DATAFILE nombre_datafile


AUTOEXTEND ON NEXT 1M MAXIZE 300 M;

Se puede indicar que el datafile crezca indefinidamente, sin tope mximo. Esto se
consigue con "maxsize unlimited", pero es muy peligroso ya que puede crecer tanto
que ocupe todo el espacio del disco y luego es muy complicado restaurar un tamao
normal.

3.3.3.2. Renombrar Datafiles

Existe la posiblidad de cambiarle el nombre a un datafile o de cambiarlo de directorio.


Esta operacin no consiste simplemente en ir al sistema operativo y cambiarle el
nombre, ya que si hiciramos eso, Oracle no se da cuenta de que hemos movido de
sitio un datafile y cuando intenta acceder a informacin de ese datafile muestra
mensajes de error indicando que no lo encuentra.

Hay que distinguir entre los datafiles del tablespace SYSTEM y el resto. Los datafiles
del tablespace SYSTEM son especiales y no se pueden mover con la misma facilidad
que los dems.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 87

A. Renombrando datafiles que no son del tablespace SYSTEM

Hay que comprobar cual es nombre y el path completo del fichero a mover y el estado
en que se encuentra dicho fichero. Para realizar esta comprobacin podemos
consultar la vista dba_data_files, ejecutando la sentencia:

SELECT
file_name,
status,
bytes
FROM dba_data_files;

En file_name se nos indica cual es el nombre del datafile que nos interesa, con todo su
path, y adems vemos cuanto ocupa. En el campo status podremos comprobar si el
datafile est disponible (available). No se debe mover el datafile fsico sin antes poner
el tablespace offline.

Para tener el contenido del datafile esttico se coloca el tablespace en estado read
only, usando la sentencia antes mencionada:

ALTER TABLESPACE nombre_tablespace READ ONLY;

Para comprobar que realmente el tablespace esta en estado read only, podemos
consultar la vista dba_tablespaces. En estos momentos, los usuarios de la base de
datos, pueden acceder y modificar la informacin de cualquier tablespace que no sea
el que estamos manipulando, en el cual, solamente podrn realizar operaciones de
lectura, nunca inserciones ni modificaciones ni borrados de datos.

Cuando sabemos que no se est modificando el contenido del tablespace y, por lo


tanto, del datafile, es cuando se debe ir al sistema operativo y hacer una copia del
datafile con el nuevo nombre y la nueva ubicacin. Una vez copiado, se comprueba
tambin desde el sistema operativo que el nuevo datafile ocupa el mismo espacio que
el antiguo, para estar seguros de que no ha habido ningn problema en la copia.

Para poder indicarle a oracle que se ha cambiado de ubicacin o de nombre a uno de


sus datafiles, nos aseguramos que no hay ningn usuario utilizando el tablespace, ni
siquiera en modo consulta. Para ello deshabilitamos el tablespace usando la
sentencia:

ALTER TABLESPACE nombre_tablespace OFFLINE;

Y una vez deshabilitado, indicamos a Oracle el cambio de nombre o de ubicacin:

ALTER DATABASE RENAME FILE 'viejo_datafile_con_path' TO


'nuevo_datafile_con_path';

En estos momentos Oracle ya sabe que cuando tenga que buscar la informacin de
ese datafile debe buscarlo en el nuevo path indicado y con el nuevo nombre. Por lo
tanto, si lanzamos la sentencia select para ver los datafiles de la base de datos, es
decir, el select de la vista dba_data_files, comprobaremos que ha cambiado la
informacin antigua por la nueva. Ahora habria que activar el tablespace y permitir
operaciones de lectura y escritura en l, utilizando las sentencias:

ALTER TABLESPACE nombre_tablespace ONLINE;

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 88

ALTER TABLESPACE nombre_tablespace READ WRITE;

Antes de realizar cualquier operacin que implique modificacin de las estructuras de


la base de datos, como el renombrado de un datafile, se debe hacer un backup
completo de la misma. Una vez realizada la operacin tambin se recomienda hacer
un nuevo backup.

No se debe mover el datafile desde el sistema operativo sin haber puesto con
anterioridad su tablespace offline. De no ser as, si alguien manipula datos durante el
tiempo que tarda en hacerse la copia en el sistema operativo, Oracle detecta
problemas e invalida el datafile, lo que va a provocar que haya que poner en prctica
alguna estrategia de backup para recuperar el datafile invalidado.

B. Renombrando datafiles del tablespace SYSTEM

Para manipular los datafiles del tablespace SYSTEM hay que hacerlo de manera
especial. Nadie puede trabajar con la base de datos. Por ese motivo, se debe apagar
la base de datos y levantarla pero sin abrirla (en estado mount).

Primeramente se debe apagar la base de datos. Despus de esperar a que se


terminen las transacciones activas, las base de datos se apaga y podemos volver a
levantarla, usando la sentencia:

STARTUP MOUNT;

Como la base de datos esta levantada pero no abierta nadie, excepto otro
administrador, puede estar manipulando sus objetos. Ahora podemos realizar la copia
de los datafiles del tablespace SYSTEM al nuevo directorio o con el nuevo nombre.
Comprobamos que tanto el fichero nuevo como el antiguo tengan el mismo tamao y
a continuacin indicamos a Oracle que hemos movido el datafile de la misma manera
que en el apartado anterior, usando la sentencia:

ALTER DATABASE RENAME FILE 'viejo_datafile_con_path'


TO 'nuevo_datafile_con_path';

Finalmente podemos levantar la base de datos para que pueda volver a ser utilizada
por todos los usuarios, usando la sentencia:

ALTER DATABASE OPEN;

Despus de comprobar que la base de datos se levanta correctamente, se pueden


borrar los ficheros fsicos o datafiles viejos de su ubicacin antigua ya que Oracle est
utilizando solamente los nuevos.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 89

Ejemplo prctico de Datafile

En el esquema podemos ver como el Tablespace A est compuesto (fsicamente) por


tres datafiles (DATOS_1.ORA, DATOS_2.ORA y DATOS_3.ORA). Estos tres datafiles
son los ficheros fsicos que soportan los objetos contenidos dentro del tablespace A.

Aunque siempre se dice que los objetos estn dentro del tablespace, en realidad las
tablas estn dentro del datafile, pero tienen las propiedades asociadas al tablespace.
Cada uno de los datafiles utilizados est ocupando su tamao en disco (50 Mb los dos
primeros y 25 Mb el ltimo) aunque en realidad slo contengan dos objetos y estos
objetos no llenen el espacio que est asignado para los datafiles.

Los datafiles tienen una propiedad llamada AUTOEXTEND, que se si est activa se
encarga de que el datafile crezca automticamente (segn un tamao indicado) cada
vez que se necesite espacio y no exista. Al igual que los tablespaces, los datafiles
tambin pueden estar en lnea o fuera de ella.

3.3.4. Definicin de Usuario, Privilegio y Rol

A la hora de establecer una conexin con un servidor Oracle, es necesario utilizar un


modo de acceso, el cual describa de qu permisos dispondremos durante nuestra
conexin. Estos permisos se definen sobre un nombre de usuario.

Un usuario no es ms que un conjunto de permisos que se aplican a una conexin de


base de datos. Asimismo, el usuario tambin tiene otras funciones:

Ser el propietario de ciertos objetos.


Definicin del tablespace por defecto para los objetos de un usuario.
Copias de seguridad.
Cuotas de almacenamiento.

Un privilegio no es ms que un permiso dado a un usuario para que realice cierta


operacin.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 90

Estas operaciones pueden ser de dos tipos:

Operacin de sistema: necesita el permiso de sistema correspondiente.


Operacin sobre objeto: necesita el permiso sobre el objeto en cuestin.

Y por ltimo, un rol de base de datos no es ms que una agrupacin de permisos de


sistema y de objeto.

3.3.4.1. Creacin de usuarios:

La creacin de usuarios se hace a travs de la sentencia SQL CREATE USER

Su sintaxis bsica es:

CREATE USER nombre_usuario


IDENTIFIED [ BY clave | EXTERNALLY ]
{ DEFAULT TABLESPACE tablespace_por_defecto }
{ TEMPORARY TABLESPACE tablespace_temporal }
{ DEFAULT ROLE [ roles, ALL [EXCEPT roles], NONE ] };

La clusula IDENTIFIED BY permite indicar que tipo de autentificacin se utilizar:

Interna de Oracle: una clave para cada usuario de base de datos.


Interna del SO: utilizando la seguridad del SO.

La clusula DEFAULT TABLESPACE ser el tablespace por defecto en la creacin de


objetos del usuario que estamos creando. Si se omite se utilizar el tablespace
SYSTEM.

La clusula TEMPORARY TABLESPACE indica el tablespace que se utilizar para la


creacin de objetos temporales en las operaciones internas de Oracle. Si se omite se
utilizar el tablespace SYSTEM.

La clusula DEFAULT ROLE permite asignar roles de permisos durante la creacin del
usuario.

Ejemplos:

CREATE USER ADMINISTRADOR


IDENTIFIED BY MANAGER
DEFAULT TABLESPACE SYSTEM
TEMPORARY TABLESPACE TEMPORARY_DATA
DEFAULT ROLE DBA;

CREATE USER PEPE


IDENTIFIED BY TORO;

CREATE USER JUANCITO


IDENTIFIED BY PEREZ
DEFAULT TABLESPACE DATOS_CONTABILIDAD
TEMPORARY TABLESPACE TEMPORARY_DATA;

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 91

3.3.5. Diccionario de Datos

El diccionario de datos es una parte fundamental de toda base de datos ORACLE. El


diccionariode datos de ORACLE est constituido por una serie de tablas, vistas y
ORACLE packages a losque puede accederse para obtener informacin sobre la base
de datos. Las tablas del diccionario de datos son creadas automticamente durante el
proceso de instalacin de ORACLE y permitenal administrador conocer, entre otros:

La estructura lgica y fsica de la base de datos


Los usuarios de la base de datos.
Las restricciones de integridad definidas sobre las tablas de la base de datos.
El espacio asociado a cada objeto en la base de datos y cunto de este espacio
est
siendo realmente utilizado.
Los diferentes objetos creados por los usuarios de la base de datos.

ORACLE predefine un usuario dueo de todo el diccionario de datos denominado


SYS. Este usuario tiene todos los permisos sobre cualquier objeto de la base de datos
(incluidos los objetos de cualquier usuario). Debido a que este usuario puede modificar
entradas del diccionario de datos es recomendable no utilizarlo ya que cualquier error
generado sobre el diccionario de datos puede provocar errores irrecuperables en el
DBMS.

Slo se deber hacer uso cuando se requiera efectuar modificaciones


CONTROLADAS sobre el diccionario para reparar errores en el mismo (ciruga de la
base de datos).

3.3.5.1. Vistas Del Diccionario De Datos

user_extents, dba_extents
user_segments, dba_segments
user_free_space, dba_free_space
dba_users
dba_ts_quotas
user_tablespaces, dba_tablespaces
dba_data_files
v$datafile
dba_free_space_coalesced

3.3.5.2. Ejemplos de consultas al diccionario

SELECT
tablespace_name,
initial_extent,
next_extent,
min_extents,
max_extents,
pct_increase
FROM dba_tablespaces;

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 92

SELECT
file_name,
bytes,
tablespace_name
FROM dba_data_files;

SELECT
tablespace_name,
initial_extent,
next_extent,
min_extents,
max_extents,
pct_increase
FROM dba_tablespaces;

SELECT
tablespace_name,
file_id,
count(*) "trozos",
max(blocks),
min(blocks),
avg(blocks),
sum(blocks)
FROM dba_free_space
GROUP BY tablespace_name, file_id;

Ejemplo de la vista v$tablespace

SELECT * FROM v$tablespace;

Tendriamos como salida:

TS# NAME
--- --------
0 SYSTEM
1 ROLLBACK
2 TEMP
3 TOOLS
4 USERS

5 rows selected.

3.3.6. Otras caracteristicas

3.3.6.1. Tablespace de UNDO (o rollback)

Existe una nueva tecnologa que ha permitido la automatizacin de las reas de


UNDO que permiten asegurar un ambiente transaccional concurrente entre varias
sesiones. Los administradores ya no requieren ms crear rollback segments segn la
cantidad de transacciones concurrentes en una base de datos oracle. Otro beneficio
de esta tecnologa es que ya no existe posibilidad de contencin por una configuracin
de rollback segment inadecuada. Oracle maneja dinmicamente la cantidad de
segmentos de UNDO que se requieran segn la carga de trabajo, libera las reas que

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 93

ya no se requieran, deja online u offline los segmentos segn se necesite y todo esto
sucede por detrs, sin intervencin alguna del DBA. Todo lo que tiene que hacer el
administrador es poner los parmetros UNDO_MANAGEMENT en AUTO y
UNDO_RETENTION a la duracin en segundos de la consulta ms largas que se
requiera y disponer de suficiente espacio en el tablespace de UNDO.

El manejo automtico del Undo permite a Oracle el manejo de la funcin de rollback,


se puede escoger entre manejar los segmentos undo manualmente o
automticamente y son controlados en el parmetro undo_management del
INIT.ora

Los datos del undo son manejados en un nico undo tablespace.

Para crear el tablespace se usa la sentencia Create Undo Tablespace o


Undo_Tablespace al crear la base da datos. Ejemplo:

CREATE UNDO TABLESPACE UNDOTBS DATAFILE


/u01/app/oracle/product/9.0/oradata/test/undotbs01.dbf
SIZE 200M;

3.3.6.2. Implementacin de OMF (Oracle Managed Files)

El uso de los Oracle-managed files simplifica la administracin de una base de datos


oracle. Los Oracle-managed files eliminan la necesidad de que el DBA maneje
directamente archivos del sistema operativo Oracle internamente usa interfaces
estndares del sistema de archivos para crear y borrar archivos tanto como se
necesite de las siguientes estructuras:

Tablespaces
Online redo log files
Control files

Beneficios de usar Oracle-Managed Files son:

Hacen la administracin de la base de datos mas fcil


Reducen la corrupcin causada por los dba que especifican incorrectamente un
archivo, ya que cada OMF es nico.
Reducen el espacio desperdiciado en disco consumido por archivos obsoletos e
innecesarios
Simplifican la creacin, prueba e implementacin de la base de datos, ya que te
ayuda a minimizar el tiempo que estas tareas te podran tomar.

3.3.6.3. Tablespaces manejados localmente

El rendimiento de los tablespaces administrados localmente es mayor que los


tablespaces administrados en el diccionario Oracle. Para operaciones de asignacin y
designacin de espacio Oracle usa tecnologa de bitmaps en el header de cada
archivo de datos que es mucho mas rpida que acceder a recursos del kernel de
Oracle que es usado para muchas otras tareas.

Esto elimina la necesidad de muchas operaciones recursivas necesarias para la


asignacin de una extensin administrada en el diccionario de Oracle.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 94

Los tablespaces administrados localmente tienen dos opciones de configuracin para


la asignacin de extensiones: Asignacin automtica (AUTO ALLOCATE) y uniforme.
En la opcin AUTO ALLOCATE el motor Oracle asigna automticamente el tamao de
la extensin de un objeto sin intervencin alguna del DBA, mientras en la opcin
uniforme, el DBA especifica un tamao y todas las extensiones asignadas en ese
tablespaces son de ese tamao.

Los LMT (Local Manager Tablespace) con opcin AUTO ALLOCATE son muy
recomendables ya que si bien se genera fragmentacin de extents, esta fragmentacin
es inocua y no genera overhead ni problemas de desempeo. Se puede tener sobre
1000 extensiones sin problema.

El paquete dbms_space_administration.tablespace_migrate_to_local
permite migrar objetos de un tablespace administrado por diccionario a uno de tipo
LMT.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 95

3.4. Jerarqua y Estructuras de Almacenamiento

3.4.1. Introduccin

Una aproximacin de la arquitectura general utilizada por ORACLE para el manejo de


base de datos es la mostrada en la siguiente figura

Esta arquitectura puede ser divida en dos porciones lgicas:

Estructura de procesos y memoria.


Estructura para el manejo de los datos.

Oracle maneja dos estructuras bsicas para el manejo de datos: la fsica y la lgica.

3.4.1.1. Estructura Fsica para el Manejo de Datos

La estructura fsica es la estructura relacionada al almacenamiento de datos. Una base


de datos ORACLE, identificada por un nombre lgico mantenido en la variable de
entorno DB_NAME, representa las estructuras fsicas y est compuesta de archivos
del sistema de operacin. Aunque es posible utilizar un nombre de base de datos
diferente al del nombre de la instancia, se recomienda utilizar el mismo nombre para
hacer ms sencilla la administracin.

Los archivos que conforman la base de datos contienen los datos del usuario e
informacin adicional que es necesaria para garantizar el funcionamiento de la base
de datos. Una base de datos ORACLE consiste de los siguientes tipos de archivos:

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 96

A. Archivos de datos (Data Files)

Son aquellos que almacenan el diccionario de datos, los objetos del usuario, y los
valores de los datos previos a su modificacin. Una base de datos ORACLE debe
poseer al menos un archivo de datos. La informacin de una tabla puede expandirse a
muchos Data Files y un Data File puede almacenar mltiples tablas. El nmero
mximo de Data Files que soporta una instancia de ORACLE puede ser configurado.

B. Archivos de bitcora (Redo Log Files o Redo Log)

Mantienen informacin sobre todos los cambios efectuados sobre la base de datos
para asegurar su reconstruccin en caso de fallas. Toda base de datos ORACLE
requiere de por lo menos dos Redo Log Files. Es esencial que los Redo Log posee un
buen rendimiento y estn protegidos contra fallas de hardware. Si se pierde la
informacin contenida en estos archivos ser imposible la recuperacin de la base de
datos en caso de fallas del sistema. ORACLE provee mecanismos para almacenar
mltiples copias de los Redo Logs.

C. Archivos de Control (Control Files)

Contienen la informacin necesaria para mantener y verificar la integridad de la base


de datos, como la ubicacin de los datos y los Redo Log. ORACLE requiere de esta
informacin toda vez que se arranque la instancia del DBMS. Toda base de datos
ORACLE requiere de por lo menos un Control File. Es esencial que los Control Files
estn protegidos ya que en caso de perdida no se podr reiniciar la instancia de la
base de datos con la consecuente prdida de toda la informacin. ORACLE provee
mecanismos para almacenar mltiples copias de los archivos de control.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 97

3.4.2. Estructura Lgica de Almacenamiento en Oracle

La estructura lgica es la relacionada a la representacin de los datos y sus relaciones


(esquema conceptual). Oracle es el encargado de manejar el espacio donde van a ser
almacenados todos los objetos de una base de datos. Las unidades lgicas de
almacenamiento son: bloques de datos, extents, segmentos y tablespaces.

La siguiente figura muestra la relacin existente entre estas estructuras de datos:

3.4.2.1. Tablespaces

El nivel ms alto en la estructura de almacenamiento de datos en ORACLE es la base


de datos. Una base de datos (Database) agrupa las piezas lgicas de mayor nivel de
almacenamiento en ORACLE: los tablespaces.

Un tablespace es utilizado para agrupar lgicamente los datos. Por ejemplo, puede
tenerse un tablespace para almacenar los datos de contabilidad y otro para almacenar
los datos de ventas en una empresa de servicios. Al segmentar grupos de datos
relacionados en tablespaces diferentes se simplifican las tareas de administracin de
dichos grupos.

Los tablespaces pueden estar constituidos de varios Data Files. Al utilizar ms de un


Data File por tablespace puede distribuirse los datos sobre varios discos y balancear la
carga de E/S, mejorando as el rendimiento del sistema.

Cuando se crea un tablespace que, como hemos dicho, es una unidad lgica, se debe
indicar obligatoriamente tambin el nombre de al menos un datafile que formar parte

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 98

de ese tablespace. El datafile es un fichero fsico al que le tendremos que asignar un


directorio, un nombre y un tamao.

A. El Tablespace System

Cuando se crea una base de datos es obligatorio crear un tablespace inicial en el que
se van a crear los usuarios SYS y SYSTEM automticamente. Estos usuarios son los
que tienen la informacin necesaria para que funcione nuestra base de datos y
podamos hacer todo tipo de operaciones como, por ejemplo, crear nuevos usuarios o
crear nuevos tablespaces y tablas en esos nuevos tablespaces.

Este tablespace inicial se llama por defecto SYSTEM. Es una pieza clave para un
buen funcionamiento de la base de datos ya que en l residen todos los objetos de los
usuarios SYS y SYSTEM. El tablespace SYSTEM almacena los datos del diccionario.

Es muy recomendable crear al menos otro tablespace nuevo distinto al SYSTEM. As,
todos los nuevos usuarios que creemos en nuestra base de datos, junto con todas sus
tablas e ndices se almacenarn en un tablespace diferente a SYSTEM.

Se realiza esta separacin para evitar que se bloquee toda la base de datos si ocurre
algo grave en el tablespace SYSTEM. Suele ser habitual que para nuestras
aplicaciones creemos usuarios y tablas en las que introducimos informacin y que sin
darnos cuenta se llene de informacin el tablespace en el que estn estas tablas. Si no
hemos sido previsores, podemos haber llenado el tablespace SYSTEM con lo que es
posible que se paralice toda la base de datos.

B. Crear un Tablespace

Partiendo de una Base de Datos creada y levantada nos conectamos a la misma con
el usuario SYSTEM y su contrasea. La contrasea del usuario SYSTEM al crear la
base de datos es, por defecto, MANAGER. Por lo tanto nos conectamos bien al
SqlPlus mediante sqlplus system/manager, o bien al server manager mediante el
comando svrmgrl system/manager.

En primer lugar vamos a crear un tablespace llamado Prueba. Esto lo podemos hacer
por ejemplo desde el SQLPLUS conectados como system.

Create tablespace prueba datafile '/users/oradata/orcl/prueba01.dbf' size 100M;

Con esta sentencia estamos creando en nuestra base de datos un tablespace nuevo
llamado "prueba" y que est formado fsicamente por un fichero (datafile) llamado
prueba01.dbf de 100 Mbytes y que est en el directorio "/users/oradata/orcl". Esta
sentencia crea fsicamente dicho fichero.

C. Aumentar de tamao un Tablespace

Para aumentar el tamao de un tablespace, tenemos varias posibilidades. La primera


de ellas es crear un nuevo datafile y asignrselo al tablespace que queremos
aumentar. Esto lo podemos hacer con la instruccin siguiente.

ALTER TABLESPACE prueba


ADD DATAFILE '/users/oradata/orcl/prueba02.dbf' size 50M;

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 99

Con esta sentencia hemos creado un nuevo fichero fsico en nuestro directorio
/users/oradata/orcl de 50 Mbytes de tamao y se lo hemos asignado al
tablespace "prueba".

Otra posibilidad es ampliar el tamao de uno de los ficheros fsicos o datafiles que
forman el tablespace. Esto lo podemos hacer fcilmente con la siguiente instruccin:

ALTER DATAFILE '/users/oradata/orcl/prueba01.dbf' Resize 150M;

Con esta sentencia lo que hacemos es aumentar el datafile que forma parte de nuestro
tablespace en 50 Mbytes.

Tanto en la instruccin de creacin como en la de aumentar el tamao de un


tablespace se puede observar fcilmente cmo un datafile pertenece solamente a un
tablespace ya que en la propia sentencia se crea el fichero fsico o datafile.

D. Borrando un tablespace.

Para eliminar un tablespace de la base de datos se debe utilizar la sentencia:

Drop tablespace prueba;

E. Tablespaces Online y Offline

Un tablespace puede estar en dos estados: Online y Offline. Que un tablespace est
online significa que est disponible para operar en l, mientras que si est offline
quiere decir que no se puede utilizar. Cuando creamos un tablespace, se crea en
estado online y, por lo tanto, podemos crear en dicho tablespace objetos como ndices,
tablas, etc.

Existe una vista que nos da informacin sobre los tablespaces de nuestra base de
datos. Esta vista es la dba_tablespaces. Consultndola podemos conocer qu
tablespaces tenemos en nuestra base de datos y en qu estado se encuentran.

SELECT
tablespace_name,
status
FROM dba_tablespaces;

a. Utilizacin de Tablespaces Offline

Hay que tener en cuenta que cuando un tablespace est offline, no se puede acceder
a ningn objeto que se encuentre en l, es decir, que si en el tablespace hay tablas, no
se podr hacer consultas ni inserciones ni modificaciones de estas tablas, sin
embargo, el resto de los objetos que se encuentran en otros tablespaces de la base de
datos si estn accesibles. Por lo tanto, pondremos un tablespace offline en general
para realizar tareas administrativas:

Para poder hacer una copia de seguridad del tablespace estando completamente
seguros de que nadie est modificando los objetos del tablespace y que no
quedan transacciones pendientes sin terminar y que pueden modificar estos
objetos.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 100

Para poder actualizar una aplicacin que se basa en los objetos de este
tablespace sin que ningn usuario pueda modificar los datos en medio de la
actualizacin.

F. Tablespaces Read Only

Cuando creamos un tablespace, podemos crear en l todos los objetos que queramos
y acceder a ellos y eliminarlos y tambin consultar los datos de las tablas que se
encuentren en este tablespace, as como borrar, insertar y modificar estos datos.
Existe la posibilidad de poner un tablespace en un estado en el cual, solamente se
pueden consultar los datos de los objetos, no se puede ni borrar ni insertar nada en
ellos.

La principal ventaja de un tablespace read only es que, como no se pueden modificar


los datos que en l se encuentran, no hace falta hacer backup del mismo.
Dependiendo de las aplicaciones que tengamos en nuestra base de datos nos puede
interesar tener tablespaces read only o no. Por ejemplo, si tenemos una aplicacin en
la que se pueden consultar cientos de fotos de animales salvajes o de paisajes,
podramos crear un tablespace en el que introducir estas imgenes y luego ponerlo
read only.

Generalmente un tablespace de estas caractersticas, que sirve de almacenamiento de


fotos o temas similares, suele ocupar mucho espacio, por lo que hacer un backup del
mismo todos los das puede resultar muy costoso en tiempo y espacio. Adems, si no
se modifican nunca estas fotos no tiene mucho sentido hacer copia de seguridad del
mismo, y no solo eso, podramos incluso almacenar dicho tablespace en un CDROM
en vez de ocupar espacio en disco.
Para poner un tablespace en estado read only, simplemente debemos ejecutar la
siguiente instruccin:

ALTER TABLESPACE nombre_de_tablespace READ ONLY;

Como hemos indicado, en un tablespace read only solo se pueden realizar consultas
de los datos, por lo tanto, si en el instante de ejecutar esta sentencia se estn
realizando modificaciones o inserciones o borrado de datos, el servidor espera hasta
que acaben para poner el tablespace en estado read only. Para ver si ha quedado en
estado read only, simplemente ejecutamos la misma select que al principio para ver la
informacin general de los tablespaces:

SELECT
tablespace_name,
status
FROM dba_tablespaces;

Si por algn motivo necesitamos modificar los datos que se encuentran almacenados
en espace un tablespace read only, simplemente deberemos ponerlo en primer lugar
en estado read write y una vez realizada la modificacin, volver a ponerlo en su estado
read only. La sentencia que debemos ejecutar ser:

ALTER TABLESPACE nombre_de_tablespace READ WRITE;

Tenemos un concepto que debe quedar claro. Un tablespace read only no necesita
backup, y por tanto, recovery, pero, esto no hay que tomarlo al pie de la letra. Siempre

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 101

hay que hacer al menos un backup. En primer lugar creamos un tablespace vaco en
el que iremos metiendo poco a poco toda la informacin que nos interesa que, como
en el caso que hemos supuesto anteriormente, pueden ser varias tablas que
almacenan fotos de animales y paisajes. Cuando ya no vamos a crear nuevas
imgenes es cuando ponemos el tablespace read only, pero ah si debemos hacer una
copia de seguridad, backup, y como ya no vamos a tocar nunca ms este tablespace
ser la nica. Si por algn motivo decidimos poner este tablespace otra vez read write
para crear o borrar datos, despus de volver a ponerlo read only deberemos hacer un
backup de los nuevos datos.

Tambin hay que diferenciar dos ideas. Por un lado hemos dicho que en un
tablespace read only no se pueden modificar, ni insertar ni borrar datos de sus tablas.
Sin embargo y, al igual que en los tablespaces offline, si se pueden borrar objetos
enteros del tablespace, como por ejemplo un ndice o una tabla.

G. Tablespaces Temporales

Un tablespace temporal es aqul en el que solamente puede haber objetos


temporales. No se pueden crear en l objetos permanentes como pueden ser los
ndices, las tablas o los segmentos de rollback. Estn especialmente preparados para
optimizar las operaciones en las que se lleven a cabo ordenaciones. Por lo tanto est
muy recomendado tener al menos un tablespace temporal en cada base de datos.
Algunas de las operaciones que implican realizar ordenaciones son, las selects que
tienen group by, las que tienen order by, la creacin de ndices y analizar ndices para
calcularles las estadsticas. En todos estos casos, cuando para realizar la ordenacin
el servidor no encuentra espacio suficente libre en la memoria, utiliza el tablespace
temporal.

Los rendimientos son muy superiores comparndolos con los tiempos que se
empleara en realizar las ordenaciones en tablespaces normales. Esto se debe a que
el mecanismo que se utiliza para reservar y desreservar el espacio en los tablespaces
temporales es muy distinto que en los normales ya que est orientado a objetos que
crecen mucho y rpido y que a continuacin disminuyen totalmente su tamao y
desaparecen.

Para crear un tablespace temporal simplemente hay que aadir la palabra


TEMPORARY a la instruccin utilizada para crear tablespaces normales. Siguiendo el
ejemplo indicado en la creacin de tablespaces, podramos tener lo siguiente:

CREATE TABLESPACE prueba


DATAFILE '/users/oradata/orcl/prueba01.dbf' size 100M temporary;

Para indicar a un usuario de base de datos que sus ordenaciones debe hacerlas en un
determinado tablespace temporal, se usa la siguiente sentencia:

ALTER USER nombre_de_usuario


TEMPORARY TABLESPACE nombre_de_tablespace;

Y para conocer qu usuarios existen en nuestra base de datos y cual es el tablespace


temporal que utilizan, utilizamos la sentencia:

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 102

SELECT
username,
temporary_tablespace
FROM dba_users;

Finalmente, si se quiere conocer qu tablespaces se tienen y cules son temporales y


cuales son permanentes, se puede consultar la vista correspondiente a la informacin
sobre los tablespaces, es decir, la vista dba_tablespaces;

SELECT
tablespace_name,
contents
FROM dba_tablespaces;

Un tablespace permanente puede pasar a temporal y que uno temporal puede pasar a
permanente.

3.4.2.2. Segmentos

Un segmento almacena la informacin de una estructura lgica de Oracle dentro de un


mismo Tablespace. Est formado por una o ms extensiones y, a medida que va
creciendo el segmento se van asignando nuevas extensiones al mismo.

Hay cuatro tipos de segmentos:

Segmentos de datos: Cada segmento de datos almacena los datos


correspondientes a una tabla.
Segmentos de ndice: Cada segmento de ndice mantiene los datos para un ndice
definido dentro de la base de datos.
Segmento de Rollback: un segmento de Rollback permite almacenar las acciones
de una transaccin que deben ser deshechas bajo ciertas circunstancias.
Segmentos Temporales: Los segmentos temporales se crean cuando se requiere
de un espacio temporal para procesar una instruccin de SQL, y son destruidos
una vez que haya culminado el procesamiento de la instruccin.

A. Segmentos de datos e ndices

En un segmento de datos se almacenan todos los datos de una tabla que no est
particionada o que no forme parte de un cluster, de una particin de una tabla
particionada o, de un cluster de tablas. Se crea el segmento de datos a la hora de
ejecutar la sentencia create que crea la tabla, cluster o particin. En dicha sentencia se
indican tambin los valores de la clusula storage y va a determinar la forma en que
dicho segmento va a ir asignando y desasignando las extensiones.

En el caso de los ndices, existe un segmento para cada ndice no particionado o para
cada particin de un ndice particionado. Al igual que con las tablas, los segmentos de
ndices se crean al ejecutar la sentencia de creacin de ndices en la cual, tambin se
pueden indicar valores para la clusula storage y as parametrizar la forma en que se
le asignarn las extensiones a medida que vaya creciendo.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 103

B. Segmentos temporales

Cuando Oracle procesa las consultas se puede ver en la necesidad de utilizar espacio
en disco para poder llevar a cabo algunas partes del parsing (anlisis) y de la
ejecucin de la misma. Solamente utilizar este tipo de segmentos cuando no pueda
realizar la consulta ntegramente en memoria o cuando no pueda buscarse un mtodo
alternativo para realizarla utilizando los ndices. Hay varios tipos de sentencias en las
que Oracle se ve en la obligacin de utilizar los segmentos temporales:

SELECT ... ORDER BY.


CREATE INDEX.
SELECT ... GROUP BY.
SELECT ... UNION ...
SELECT DISTINCT ...
SELECT INSERSEC ...
SELECT MINUS ...

Se puede dar el caso en el que algunas consultas en las que intervengan joins en los
que no haya ndices que faciliten la unin y en las que se den a la vez sentencias del
tipo "group by" y "order by" o incluso "distinct", en las que no solo se requiere de un
nuevo segmento temporal sino que pueden adquirirse dos segmentos para poder
realizar dichas consultas.

Como es natural, cuantas ms operaciones se hagan en memoria mejor ser el


rendimiento del sistema, por lo que si en nuestra aplicacin existe un nmero
considerable de consultas de las mencionadas anteriormente, resulta muy apropiado
hacer un tunning para decidir si ampliar la zona de memoria reservada para las
ordenaciones, aumentando el valor del parmetro SORT_AREA_SIZE.

En Oracle tambin existen las tablas temporales y los ndices temporales para dichas
tablas. Estos objetos tamben utilizan segmentos temporales, pero se les asigna y
desasigna de forma diferente a como se hace con las consultas, creacin de ndices y
ordenaciones.

a. Asignacin de segmentos temporales en consultas

En las consultas, los segmentos temporales se van asignando segn se van


necesitando y, al terminar la ejecucin de la sentencia, se desasignan. Para
determinar en qu tablespace se van a crear los segmentos temporales necesarios
para estas consultas, a cada usuario de la base de datos, se le asigna un tablespace
para dicha funcin. Esto se realiza con el siguiente comando:

ALTER USER nombre_de_usuario


DEFAULT TABLESPACE nombre_tablespace_temporal;

Por defecto, en la creacin del usuario tambin se le puede asignar un tablespace


temporal y, si no se le indica, el sistema le asigna por defecto siempre el tablespace
SYSTEM. Es muy importante que ningn esquema o usuario tenga como tablespace
temporal el SYSTEM por varios motivos. En primer lugar, porque SYTEM no es un
tablespace temporal y por lo tanto, no est optimizado para la gestin de los
segmentos temporales, en segundo lugar, al utilizar SYSTEM como tablespace
temporal, se aumenta la fragmentacin de dicho tablespace por culpa de los
segmentos temporales que se van creando y borrando en medio de segmentos de

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 104

datos e ndices con lo que disminuye drsticamente el rendimiento del tablespace


principal de la base de datos, y por ltimo, se corre el peligro de que se llene este
tablespace por culpa de alguna select mal escrita y que se descontrole aumentando
desproporcionadamente el tamao del segmento temporal creado para ejecutarla.

b. Asignacin de segmentos temporales para tablas temporales

El segmento requerido para una tabla temporal y para sus ndices temporales se
asigna en el momento de producirse la primera insert en dicha tabla. Este segmento al
igual que en el caso anterior, se crear en el tablespace temporal del usuario que est
creando la tabla temporal. Para conocer el tablespace por defecto de un usuario y su
tablespace temporal, podemos consultar la vista dba_users.

SELECT
username,
default_tablespace,
temporary_tablespace
FROM dba_users;

La eliminacin del segmento temporal que se ha creado se har dependiendo del tipo
de tabla temporal que se ha creado. Cuando la tabla temporal es especfica para una
transaccin, Oracle eliminar el segmento creado al finalizar dicha transaccin, y si por
el contrario, la tabla es especfica para la sesin, su segmento se eliminar al
terminarse esta sesin.

C. Segmentos de Rollback

En cada base de datos Oracle tenemos uno o ms segmentos de rollback en los que
se almacena la informacin que ha sido cambiada por las transacciones. Estas
transacciones pueden ser definitivas, es decir, se ha realizado ya el commit de ellas, o
puede que an no se haya hecho dicho commit. Este tipo especial de segmento se
utiliza principalmente para poder realizar una lectura consistente de la base de datos
Oracle mientras se estn modificando los datos y para poder llevar a cabo las
recuperaciones de la base cuando sta cae por algn motivo.

La informacin de un segmento de rollback se almacena en las llamadas entradas de


rollback. En estas entradas se detalla en qu datafile estaba el dato que ha sido
modificado, en qu bloque dentro de dicho datafile y tambin el dato viejo que se ha
modificado en la transaccin. Adems, todas las entradas de rollback de una misma
transaccin estn encadenadas unas con otras para que as, si se deben deshacer los
cambios llevados a cabo en esa transaccin, resulta ms fcil de encontrarlos todos.

Las vistas ms importantes de las que podemos extraer informacin sobre los
segmentos de rollback son: v$rollname, dba_rollback_segs y v$rollstat.

En una base de datos Oracle, se guardan todos cambios en los bloques modificados
en una estructura llamada "logs de rehacer" o "redo logs". Cuando se crea una nueva
entrada de rollback en un segmento de rollback, realmente se est modificando un
bloque que se encuentra en dicho segmento de rollback con la informacin de dicha
entrada, por lo que este cambio tambin se almacena en los log de rehacer. Este
doble almacenamiento de la informacin que se guarda en los segmentos de rollback y
en los log de rehacer es fundamental para poder realizar un buen proceso de
recuperacin de la base de datos en caso de que se produzca en fallo en ella. Cuando

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 105

se produce una cada de la base de datos, en el momento de la recuperacin, se


recupera el estado de los segmentos de rollback tanto con las transacciones que ya se
haban terminado como con aquellas transacciones cuyo commit an no se haba
realizado. El siguiente paso que se produce es el rollback de todas aquellas
transacciones que se encuentran en los segmentos de rollback y para las cuales no se
haba completado el commit.

a. Utilizacin de los segmentos de rollback

Como se ha indicado anteriormente, los segmentos de rollback se utilizan para poder


deshacer los cambios de las transacciones para las que no se ha hecho un commit y
para asegurar la consistencia de lectura. Para facilitar estas tareas, Oracle guarda por
cada bloque una tabla de las transacciones que en cada momento se estn
ejecutando en el mismo. Adems, por cada transaccin, por cada nuevo cambio que
se realiza en los bloques de datos se crea una entrada de rollback que se encadena a
las anteriores entradas de rollback asignadas a esa misma transaccin de forma
ordenada.

Gracias a este sistema, cada vez que se desea restaurar el estado de una transaccin
al realizar el rollback de la misma, simplemente se debe detectar en qu bloque del
segmento de rollback se est almacenando los cambios producidos por dicha
transaccin mirando en las tablas de transacciones de los bloques del segmento de
rollback y, una vez detectado el bloque, se deben seguir una a una las entradas de
rollback de la transaccin que se encuentran ordenadas y encadenadas, para ir
restaurando los valores antiguos en los bloques de datos de forma ordenada.

De la misma manera, se utiliza para facilitar la lectura consistente ya que se detecta el


valor antiguo de los bloques navegando por la cadena de las entradas de rollback de
la transaccin.

b. Asignacin de las transacciones a los segmentos de rollback

Cada vez que comienza una nueva transaccin, se asigna a un determinado segmento
de dos formas diferentes:

Se asigna la transaccin al siguiente segmento de rollback que se encuentre libre en


ese momento de manera automtica. Solamente se asigna una transaccin cuando se
realiza una instruccin de DDL o de DML que no sea una select.

Tambin se puede asignar una transaccin a un segmento de rollback en concreto de


forma manual. De esta forma, se puede asignar a un segmento de rollback grande una
transaccin que conocemos de antemano que modifica un gran volumen de datos.
Una vez finalizada la transaccin, Oracle vuelve a asignar la siguiente de manera
automtica al primer rollback que encuentra libre. La instruccin es la siguiente:

SET TRANSACTION USE ROLLBACK SEGMENT nombre_segmento_rollback;

Cuando se finaliza una transaccion, Oracle libera la informacin de rollback aunque no


la destruye, esto es para soportar la lectura consistente de consultas que han
comenzado antes de que se realizara el commit. Para asegurarse que la informacin
se encuentra en los segmentos de rollback el mayor tiempo posible para estas
consutas sin borrarla, Oracle va asignando las extensiones a los segmentos de
rollback de manera secuencial y, cuando se ha llenado el segmento, se reutilizan las

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 106

extensiones empezando nuevamente por la primera, como si fuera un segmento


circular.

Un segmento de rollback puede tener asignadas solamente un nmero fijo de


transacciones como mximo. Oracle se encarga de asignar las transacciones de una
instancia de manera que todos los segmentos tengan el mismo nmero de
transacciones aproximadamente, sin tener en cuenta el tamao de las mismas ya que,
de antemano no lo puede conocer. El nmero de transacciones que puede contener
cada segmento de rollback depende del tamao del bloque.

c. Asignacin de extensiones

Un segmento de rollback debe tener al menos dos extensiones y cada una de sus
extensiones est formada por un nmero determinado de bloques. A continuacin
vamos a explicar cmo se organizan las transacciones en los segmentos de rollback.

En un segmento de rollback pueden estar realizndose a la vez varias transacciones.


Estas transacciones pueden estar escribiendo en distintas extensiones o incluso en la
misma. Sin embargo, en un bloque de una extensin solamente puede contener
informacin de una transaccin, es decir, que no pueden escribir dos transacciones en
el mismo bloque de la misma extensin a la vez. Adems, como hemos indicado que
la escritura de transacciones es secuencial, en cada momento una transaccin escribe
en una sola extensin. Cuando una transaccin se queda sin espacio para escribir en
la extensin en la que estaba, puede hacer dos cosas, bien reutilizar una extensin
que ya estaba asignada al segmento o bien requerir una nueva extensin para el
segmento de rollback.

La primera transaccin que necesita ms espacio nuevo chequea la siguiente


extensin del segmento de rollback, y si no contiene informacin de transacciones
activas, la adquiere. A partir de ese momento, todas las dems transacciones que
necesiten espacio utilizarn esta extensin. Si, nuevamente se llena esta extensin y
alguna transaccin sigue necesitando espacio libre, Oracle vuelve a comprobar si en la
siguiente extensin que le toca ocupar, siguiendo el orden secuencial y circular de
asignacin de extensiones, no se estn realizando transacciones activas (insistimos en
la naturaleza circular de los segmentos de rollback que, una vez ocupada la ltima
extensin, vuelve a intentar ocupar la primera como si formaran todas un anillo).

Como estamos viendo, Oracle mantiene un anillo formado por las extensiones que ha
ido adquiriendo este segmento de rollback y siempre intenta reusar una de las
extensiones que lo forman antes que adquirir una nueva del sistema. Si en algn
momento Oracle necesita utilizar una extensin y, en todas los que forman parte del
anillo se estn escribiendo transacciones activas, se ve obligado a adquirir una nueva
extensin del sistema y a aadirla al anillo del segmento de rollback para seguir
escribiendo. El nmero mximo de extensiones que pueden formar parte de un
segmento de rollback viene determinado por una parmetro definido en el initSID.ora y
que es MAXEXTENTS.

Ya hemos visto cmo se asignan extensiones a un segmento de rollback, pero cmo


se van desasignando? Al borrar un segmento de rollback, todas las extensiones que
tena asignadas el segmento se devuelven al tablespace y pueden ser utilizadas por el
resto de objetos que pertenecen al tablespace. Existe otra manera de devolver el
espacio utilizado por un segmento sin tener que eliminarlo. A la hora de crear un
segmento de rollback se puede indicar un valor en el parmetro OPTIMAL de la
clusula storage que representa el tamao ptimo de dicho segmento en bytes. Cada
vez que Oracle necesita una nueva extensin para el segmento de rollback, compara

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 107

el tamao que tiene dicho segmento con el valor del parmetro optimal y, si lo ha
sobrepasado, ir devolviendo al tablespace las extensiones ms antiguas que se va
encontrando en las que ya no quedan transacciones activas ya que, son las que
menor probabilidad tienen de tener datos necesarios para mantener la consistencia de
lectura. Si puede, liberar tantas extensiones como para quedarse con un tamao
aproximado al indicado en optimal pero siempre por encima.

El valor del parmetro ptimal nuca podr ser menor que el espacio necesario para la
creacin del segmento, en el que participan el parmetro initial_extent, next_extent, y
min_extents (recordemos que pct_increase no tiene sentido en los segmentos de
rollback, todas las extensiones deben ser iguales). Para consultar los valores de estos
parmetros podemos utilizar la vista dba_rollback_segs de la siguiente forma:

SELECT
segment_name,
initial_extent,
next_extent,
min_extents,
max_extents
FROM dba_rollack_segs;

Y para conocer si nuestros rollback segments tienen asignado un tamao ptimo:

SELECT
name,
optsize
FROM v$rollname, v$rollstat
WHERE v$rollname.usn = v$rollstat.usn
ORDER BY 1;

d. Estados de un segmento de rollback

Un segmento de rollback puede encontrarse en un determinado estado dependiendo


de cada momento. Los estados en los que puede encontrarse son:

OFFLINE: No ha sido adquirido por ninguna instancia de la base de datos.

ONLINE: Ha sido adquirido por alguna de las instancias y puede contener datos
de transacciones activas.

NEEDS RECOVERY: Contiene datos de transacciones que no se pueden hacer


rollback porque sus datafiles estn inaccesibles o corruptos.

PARTLY AVAILABLE: Contiene informacin de una transaccin "en duda" que


son transacciones en entornos de base de datos distribuidas de las que an no se
ha recibido respuesta.

INVALID: Ha sido borrado.

Esta informacin se puede obtener de la vista dba_rollback_segs. Las causas por las
que un segmento puede pasar de un estado a otro son las siguientes:

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 108

Estado Inicial Estado Final Motivo


Se pone el segmento de rollback offline con la instruccin
Online Offline
alter rollback segment nombre_segmento offline.
Se pone el segmento de rollback online con la instruccin
Offline Online
alter rollback segment nombre_segmento online.
Offline Invalid Al borrar el segmento de rollback
Cuando falla la red y hace que una transaccin distribuida
Online Partly Available
quede "en duda".
Partly Available Online Se resuelve la transaccin "en duda".
Partly Available Offline No se resuelve la transaccin "en duda".
Cuando un fallo del medio hace inaccesible la transaccin
Partly Available Needs Recovery
"en duda".
Cuando un fallo del medio hace inaccesibles los datafiles o
Online Needs Recovery
cuando el segmento est corrupto.
Si se soluciona satisfactoriamente la recuperacin del
Needs Recovery Offline
medio.
Needs Recovery Invalid Si se borra el segmento de rollback

Los estados de Partly Available y Needs Recovery son prcticamente iguales. En


ambos el segmento contiene informacin de transacciones que no han sido resueltas.
En un estado Partly Available, las transcciones distribuidas no han sido resueltas por
culpa de un fallo en la red mientras que en el estado de Needs Recovery, las
transacciones no han sido resueltas por un fallo del medio o por estar corrupto el
propio segmento.

Una diferencia entre ambos estados es que un administrador o el propio Oracle puede
poner un segmento Partly Available en estado Online, mientras que un segmento que
necesita Recovery, primero debe pasar a estado Offline y luego Online. Adems, un
segmento en estado Needs Recovery puede ser borrado por el administrado para
eliminarlo si estaba corrupto, sin embargo, no se puede borrar un segmento Partly
available, primero se debe resolver la transaccin en duda.

3.4.2.3. Extents

Una extensin es una unidad lgica de almacenamiento que est formada por un
nmero determinado de bloques de datos contiguos. La agrupacin de una o varias
extensiones forman un segmento que puede ser una tabla, un ndice, un segmento de
rollback o un segmento temporal. Por lo tanto, datos de una tabla, sabemos que estn
en un solo segmento de tipo tabla, que a su vez estar formado por una o varias
extensiones y que, cada una de esas extensiones est formada por un nmero
determinado de bloques de datos.

Cuando se crea un segmento nuevo, es decir, una tabla, un ndice o un segmento de


rollback, se crea obligatoriamente una extensin en dicho segmento (en el caso de los
rollback se crean dos). El tamao de esta extensin inicial viene dado por el valor
parmetro "initial" que se indica en el momento de crear el segmento.

La razn principal de esta estructura es la de minimizar el espacio desperdiciado


(vaco) de un tablespace. A medida que se insertan o eliminan filas de una tabla, los
extents del tablespace asociado a la tabla pueden aumentar o disminuir de tamao. De
esta forma el espacio para el almacenamiento de los datos puede ser administrado
dependiendo de cmo la tabla va sufriendo modificaciones en el nmero de filas.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 109

Cuando se crea un tablespace se puede especificar el nmero mnimo de extents a


ser asignados, as como el nmero de extents a ser agregados cada vez que se agote
el espacio disponible para almacenar datos.

A. Asignacin de Extensiones

Al crear o, mejor dicho, asignar una nueva extensin al segmento, se est reservando
espacio en el disco para almacenar los nuevos datos de dicho segmento. Por lo tanto,
al crear la nueva extensin est totalmente vaca y todo su espacio est disponible
para almacenar los datos del segmento y, adems, en el disco debe haber espacio
libre para que Oracle reserve todo el tamao que necesita la extensin, y lo formatea
de forma especial para poder utilizarlo. A partir de ese momento, en esa extensin
solamente se podrn almacenar datos del segmento al que pertenece.

Cuando se llenan todos los bloques de datos de una extensin, el segmento solicita
una nueva extensin al sistema para poder seguir almacenando informacin.

B. Determinacin del nmero de extensiones y el tamao de un segmento

Para establecer el tamao de las futuras extensiones que ir solicitando un segmento


se utilizan varios parmetros a los que hay que dar valor en el momento de la creacin
de la tabla, ndice o segmento de rollback. Estos parmetros se indican en la clasula
STORAGE de la sentencia que crea el segmento y son los siguientes:

a. Initial

Indica el tamao en bytes de la primera extensin que tendr el segmento. Se puede


indicar despus del valor una "K" o "M" para que el valor sea interpretado como
Kilobytes o Megabytes en lugar de bytes. Si no se pone explcitamente este parmetro
en la creacin del segmento, se hereda por defecto el valor que tenga este parmetro
en el tablespace en el que se est creando el segmento y que, si no se ha indicado
tampoco, por defecto son 5 bytes. Cuando se crea una extensin oracle redondea el
tamao indicado al siguiente mltiplo superior a 5 bloques de datos. Por lo tanto, si
nuestros bloques son de 8192 bytes y creamos un segmento con un inital de
256Kbytes, realmente estamos creando un segmento de 32 bloques y oracle lo
redondea a 35 bloques que es el primer mltiplo superior a 5 de 32. Por lo tanto,
nuestra initial extent ser de 35 * 8192 = 280 Kbytes.

Para comprobar estos datos se puede consultar la tabla dba_segments en la que


tenemos un registro por cada segmento distinto:

SELECT
segment_name,
initial_extent,
next_extent,
pct_increase,
min_extent,
max_extent
FROM dba_segments;

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 110

Tambin se puede consultar la vista dba_extents que es un detalle de dba_segments


ya que aqu se detalla por cada segmento todas sus extensiones, con su tamao en
concreto.

SELECT
segment_name,
extent_id,
blocks,
bytes
FROM dba_extents;

b. Next

Indica el tamao que tendr la prxima extensin que se cree cuando no quede ms
sitio en las extensiones que ya tiene asignadas el segmento. De igual manera que en
el caso del parmetro initial, Oracle redondea a un mltiplo de 5 bloques este valor, a
la hora de crear la extensin nueva. Cada vez que se crea una nueva extensin, se
recalcula el valor de este parmetro en funcin del valor de pctincrease y se actualiza
la vista dba_segments.

c. Pctincrease

En el momento que se asigna una nueva extensin al segmento, se recalcula el valor


que va a tener la prxima que se le asigne y que ser, el tamao de la extensin
recin creada (el next que tena el segmento) aumentado en el porcentaje indicado por
pctincrease. Por lo tanto, si queremos que todas las extensiones de nuestro segmento
tengan el mismo tamao, habr que asignarles el pctincrease a 0. Oracle recomienda
establecer por norma el pctincrease a 0 para evitar que se descontrolen los tamaos
de los segmentos, especialmente los temporales, aunque, curiosamente, su valor por
defecto es de 50%. No se puede modificar el pctincrease de los segmentos de rollback
que es siempre 0.

Por ejemplo: tenemos un segmento que en el campo next_extent tiene como valor
262144 y en pct_increase tiene 50 y los bloques son de 8192 bytes. Cuando crezca el
segmento y solicite una nueva extensin, sta se crear del tamao indicado en
next_extent redondendola al primer mltiplo de 5 bloques superior o igual a dicho
valor. En nuestro caso 262144 son 32 bloques as que crear una extensin de 35 que
son 286720 bytes. Adems, recalcula el valor del siguiente next_extent aumentando
en un 50% el valor del antiguo next_extent, es decir 262144 * 1,5 = 393216 bytes.

Nota.- El reclculo del siguiente extent (393216) se basa en el valor del anterior next_extent (262144) y
no en el valor de la extensin creada al redondear a un mltiplo de 5 bloques (286720), ya que si no, nos
habra salido un next_extent de 286720 * 1,5 = 430080. Por lo tanto, al consultar las tabla dba_segments
veremos que next_extent es 393216 es decir 48 bloques, aunque, eso si, si se vuelve a llenar esta
extensin, se crear realmente una extensin de 50 bloques que son los 430080 bytes.

d. Minextents

Se indica el nmero de extensiones que se deben reservar a la vez para un


determinado segmento en el momento de su creacin. Por defecto es una excepto en
los segmentos de rollback que son dos. Puede que las extensiones no estn
contiguas. Por supuesto, si en la clusula storage en la creacin del objeto se indican
valores para next y pctincrease, las extensiones iniciales que se crean se recalculan
para cumplir lo indicado en estos parmetros.
Por ejemplo, creamos un segmento con minextents = 4, con un initial de 262144, next
de tambin 262144, bytes y con un pctincrease del 50%, el resultado ser la creacin

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 111

de 4 extensiones de tamaos, 286720, 286720, 409600, 614400 y de un next extent


de 884736. Estos tamaos vienen de redondear 32, 48 y 72 a mltiplos de 5 y el next
extent es 108 bloques que es el 50% de 72 bloques.

e. Maxextents

Es el nmero mximo de extensiones que se pueden crear en ese objeto, contando


tambin la primera. Se puede especificar UNLIMITED con lo que pueden crecer
indefinidamente. No se recomienda que a los segmentos de rollback se les asigne
unlimited maxextents ya que con operaciones complejas podran aumentar
excesivamente de tamao y llenaran el disco. As que hay que tener cuidado a la hora
de crear rollback segments, sobretodo porque heredan por defecto el valor del
parmetro que tenga asignado el tablespace en el que se crean.

Por ejemplo, la creacin de una tabla en la que se indican valores para los parmetros
de la clusula storage. Si tenemos una tabla llamada empleado que contiene un solo
campo, nombre, con un initial extent de 256 Kilobytes, con 512 Kilobytes de next
extent, un pctincrease de 50, con 3 extensiones iniciales y con un mximo de 10
extensiones:

CREATE TABLE empleado (nombre varchar2(50))


STORAGE (Initial 256K Next 512K Pctincrease 50 Minextents 3
Maxextents 10)

Si consultamos la vista dba_extents nos mostrar que ha creado las 3 extensiones que
le hemos indicado con los siguientes valores:

SELECT
extent_id,
bytes,
blocks
FROM dba_extents
WHERE segment_name = 'EMPLEADO'
ORDER BY extent_id;

0 286720 35
1 532480 65
2 819200 100

Y, al consultar la vista dba_segments o incluso la vista user_tables para este


segmento en concreto, observamos el valor de next_extent:

SELECT
next_extent
FROM user_extents
WHERE segment_name = 'EMPLEADO';

1179648 que es el resultado de 512K * 1,5 * 1,5.

Cuando Oracle necesita asignar una nueva extensin a un segmento realiza el


siguiente proceso para buscar bloques de datos contiguos en igual nmero o superior
al solicitado por la extensin:

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 112

En primer lugar, busca un conjunto de bloques contiguos igual al solicitado por la


extensin ms uno, para evitar la fragmentacin (excepto cuando la extensin es
de 5 o menos bloques). Por lo tanto, si la extensin nueva es de 29 bloques oracle
buscar un conjunto de justo 30 bloques libres consecutivos.
Si no encuentra ningn conjunto de exactamente ese nmero de bloques,
empieza a buscar un conjunto de ms bloques contiguos. Si el primer conjunto
que encuentra tiene ms de 5 bloques que los que busca, se queda solamente
con los que busca, mientras que si la diferencia es de menos de 5 bloques, se
coge todo el conjunto.
Por lo tanto, en nuestro caso, si el primer conjunto que encuentra fuera de 35 o
ms bloques, cogera solo los 30 primeros, mientras que si encuentra un conjunto
de entre 31 y 34 se lo quedara entero.

Nota: En este paso se puede comprobar que, aunque a un segmento le asignemos pctincrease 0, puede
que luego nos encontremos en dba_extents algun extensin algo ms grande que otras del mismo
segmento.

Cuando no encuentra ningn conjunto de bloques de tamao superior al que busca,


realiza un coalesce del tablespace, que es un proceso mediante el cual se unen los
distintos bloques que han ido quedndose fragmentados en el tablespace al irse
creando y eliminando extensiones mediante este proceso. Una vez hecho el coalesce,
Oracle vuelve a repetir los pasos anteriores.
Si, finalmente no encuentra ningn conjunto de bloques para crear la nueva extensin,
intenta aumentar el tamao de alguno de los datafiles del tablespace. Esto solamente
lo conseguir si tienen activado el autoexpand. En caso de no conseguirlo, devolver
un error.

C. Desasignacin de Extensiones

Las extensiones que han sido reservadas por un segmento no son devueltas a Oracle
para que se las pueda signar a otro segmento del mismo tablespace hasta que se
elimina el objeto mediante la instruccin DROP. Por lo tanto, cuando tenemos una
tabla que nos ocupa varias extensiones, a pesar de que borremos todas sus filas, esa
tabla seguir teniendo reservadas las extensiones aunque eso si, estarn vacas.

Existen algunas excepciones. Se pueden devolver todas las extensiones de una tabla
excepto las min_extents haciendo un truncate de la misma. Hay que ser muy
cuidadoso con esta instruccin ya que se eliminan todos los datos de la tabla y, no hay
rollback posible. En los segmentos de rollback, si tienen puesto el parmetro optimal,
oracle peridicamente puede desasignarle las extensiones que no usa hasta que
vuelve a tener el tamao ptimo. Finalmente, existe una sentencia que tambin
desasigna las extensiones que no se usan en una tabla:

ALTER TABLE nombre_de_table DEALLOCATE UNUSED;

En cuanto se ha desasignado una extensin del segmento al que perteneca, Oracle


ya la puede volver a reclamar para que la puedan utilizar otros segmentos del mismo
tablespace. Por lo tanto, cuando un nuevo objeto solicite una nueva extensin, si
Oracle no encuentra espacio libre suficiente para crear una nueva, y entre las que ha
ido desasignando tampoco encuentra ninguna suficientemente grande como para
asignarla, puede unir varias de estas extensiones hasta conseguir una lo
suficientemente grande como para poder asignrsela al segmento. A esta operacin
se le llama COALESCE de extensiones.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 113

3.4.2.4. Bloques de Datos

Una base de datos se encuentra almacenada en bloques de datos que es el nivel mas
fino de unidades de almacenamiento. El tamao de un bloque de datos siempre
corresponde a un mltiplo del tamao de bloque manejado por el sistema de
operacin. El tamao del bloque de datos es un valor configurable en el DBMS. Oracle
almacena la informacin en unidades lgicas que son los segmentos, las extensiones
y los bloques. Estas tres unidades estn relacionadas entre s. Un segmento est
formado por una o varias extensiones y cada extensin est formada por varios
bloques.

Un bloque es la unidad mnima de almacenamiento de informacin de Oracle. A los


bloques tambin se les conoce como "bloques de datos", "bloques lgicos" o "bloques
oracle". Cada uno de estos bloques est formado por un nmero determinado de
bloques del sistema operativo. A la hora de crear una nueva base de datos se debe
indicar cuntos bloques de sistema operativo formarn un bloque de datos o bloque
oracle. Es muy importante decidir bien este valor de antemano ya que una vez creada
la base de datos ya no se puede modificar ms que en migraciones a versiones ms
actuales del producto.

Un bloque de datos es la mnima unidad de Lectura / Escritura en una base de datos


Oracle, es decir, Oracle no lee y escribe en bloques del sistema operativo sino que lo
hace en unidades lgicas que son los bloques de datos y que varan de una base de
datos a otra en la misma mquina ya que es un valor que se debe indicar en la
creacin de cada base de datos Oracle.
Oracle recomienda que el tamao de un bloque de datos o, data block, sea siempre un
mltiplo del bloque de datos del sistema operativo.

A. Estructura de un bloque

Los bloques de base de datos, pueden contener informacin de tablas, ndices o


segmentos de rollback, pero no importa qu informacin contengan, siempre tienen la
misma estructura.

Todo bloque de datos o, data block, est dividido en una cabecera, en un directorio de
tablas que utilizan dicho bloque, en un directorio de las filas que se encuentran
almacenadas en ese bloque, de espacio an libre y de las filas de datos de las tablas,
ndices o segmentos de rollback. Al espacio ocupado por la cabecera ms el directorio
de tablas y ms el directorio de filas se le llama overhead ya que es un espacio del
bloque que realmente no se rellena con datos sino que est ocupado por la

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 114

informacin que necesita Oracle para saber exactamente qu datos tiene en dicho
bloque.

B. Cabecera

Contiene informacin general sobre el bloque como el tipo de segmento al que


pertenece (ndice, tabla, rollback) o la direccin del bloque.

C. Directorio de Tablas

Contiene informacin acerca de las tablas que tienen datos en el bloque.

D. Directorio de Filas

Contiene informacin sobre las filas que se encuentran en cada momento en el


bloque. Esta informacin incluye la direccin de la fila dentro de la subzona "Datos de
Filas" del bloque en la que debe buscar Oracle los datos.

El espacio ocupado por esta subzona va aumentando a medida que se insertan


nuevas filas en el bloque, sin embargo nunca se libera el espacio. Si se borran filas de
datos que estaban en el bloque, en el directorio de filas desaparecer la entrada que
apuntaba a ellas, pero el espacio permanecer reservado aunque vaco. A medida que
se insertan nuevas filas de datos en el bloque, tambin se insertan registros en el
Directorio de Filas, pero antes de aumentar el tamao de esta subzona para la nueva
entrada, se comprueba si alguna de las entradas que hay est vaca y en ese caso se
"ocupa" y no hace falta que crezca ms la subzona.

E. Espacio Libre

Esta subzona est reservada para la insercin de nuevas filas en el bloque o, para la
modificacin de campos que requieren ms espacio que el que tenan con
anterioridad. Esto ltimo ocurre, por ejemplo, con los campos que son de tipo
varchar2. Si en un campo de una tabla tenemos un varchar2 de 30 caracteres para
almacenar el nombre del empleado, si insertamos un registro con el nombre de
'Jesus', solo ocupa 5 bytes y si posteriormente lo modificamos para poner 'Jesus
Maria', se necesitarn 6 bytes ms para almacenarlo.

Si en el bloque se estn almacenando datos de segmentos de tipo tabla o ndice, en la


subzona de Espacio Libre tambin se utiliza para llevar un registro de las
transacciones que en cada momento acceden a datos del bloque. Se necesita una
entrada de transaccin siempre que se realice una insert, update, delete o select for
update sobre filas del bloque. El tamao necesario para cada una de las entradas de
transacciones depende del sistema operativo.

F. Datos de Filas

En esta subzona se almacenan los datos de las tablas o de los ndices del bloque. Se
puede dar el caso de que una fila no entre completa en el bloque y tenga que ocupar
ms de un bloque. Este caso especial se comentar ms a fondo en el apartado de
encadenamiento y migracin de filas.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 115

G. Pctfree

Este parmetro se utiliza para modificar el comportamiento de Oracle a la hora de


insertar y modificar filas dentro de un bloque de datos o data block, se asigna a la hora
de crear la tabla o ndice. Tambin se puede modificar posteiormente el valor del
pctfree alterando la tabla o el ndice.
Este parmetro indica el porcentaje mnimo que se debe dejar libre para
modificaciones de los datos de las filas que ya existen dentro del bloque. Hay que
tener en cuenta que el espacio de un bloque no est compuesto solamente por los
datos, sino que tambin hay un overhead, por lo que si asignamos a un segmento de
tipo tabla un pctfree de 20, no estamos dejando para insercciones el 80% sino el 80%
menos lo que ocupe el overhead del bloque.

El concepto de pctfree se entiende mejor con un ejemplo. Si a una tabla le asignamos


un pctfree de 20, le estamos diciendo que se pueden insertar filas en el hasta que
quede libre en dicho bloque solamente el 20 por ciento. A partir de ese instante, todas
las filas nuevas que se creen se crearn en otros bloques ya que en este ya no queda
sitio para ms. Entonces, qu ocurre con este 20%?. Pues muy sencillo, se utiliza
para las modificaciones de las filas que ya estn en el bloque. Cuando se modifica una
fila y se aumenta el contenido de un campo, por ejemplo, el campo "nombre" tena el
valor 'Jesus' y ahora pasa a tener el valor 'Jesus Maria', Oracle echa mano del espacio
libre dentro del bloque para poder realizar esta operacin.

Por lo tanto, este espacio podra incluso llenarse lo cual, en caso de seguir haciendo
modificaciones de este estilo, podra generarnos filas migradas, como se explica ms
adelante. Sin embargo, el espacio libre en un bloque tambin puede aumentar, bien
borrando filas o bien haciendo updates que disminuyan el valor de los campos de las
filas que existen en dicho bloque. Cuando se hace espacio libre suficiente en el bloque
se permite otra vez la inserccin de registros en el mismo. El concepto de "espacio
libre suficiente" para volver a permitir inserciones en el bloque es lo que se define con
el parmetro pctused.

H. Pctused

El concepto de pctused est directamente relacionado con pctfree. Supongamos que


se crea un segmento (tabla o ndice) y se le asigna un pcfree de 20, por lo que todos
sus bloques tendrn dicho pctfree. Como ya hemos explicado, esto quiere decir que
podremos insertar filas o registros en uno de sus bloques hasta que se llene al 80 por
ciento. A partir de ese momento ya no se pueden insertar nuevos registros hasta que
se libere espacio en el bloque, o sea, hasta que vuelva a aumentar el espacio libre.

Para que aumente el espacio libre en un bloque de se debe borrar las filas que estn
en l o bien modificando campos de esas filas disminuyendo el tamao de los valores
que en ellas estn guardados.

El espacio libre que tiene que haber para poder volver a insertar nuevas filas nos lo
indica el parmetro pctused. As, si a un bloque le hemos asignado un pctused de 40,
lo que conseguimos es que en un bloque no se puedan insertar nuevos registros
(despus de haberse llenado hasta dejar solamente el pctincrease de espacio libre)
hasta que el espacio ocupado por las filas en dicho bloque no baje por debajo de 40,
es decir, que el pctused nos indica el lmite mnimo por debajo del cual debe bajar el
espacio ocupado dentro del bloque antes de volver a estar disponible para aceptar
nuevas filas, nuevas inserciones. Hay que resaltar que en los bloques de los

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 116

segmentos de tipo ndice, no tiene utilidad el parmetro pctused debido a la finalidad


de los mismos y a su estructura interna en forma de rbol binario.

Para consultar el valor tanto del parmetro pctfree como del parmetro pctused de
cada segmento de tipo tabla o de tipo ndice, podemos leer las vistas dba_tables y
dba_indexes del usuario SYS.
Select owner, table_name, pct_free, pct_used from dba_tables;
Select owner, index_name, pct_free from dba_indexes;

Para modificar el valor de los parmetros de una tabla o de un ndice se pueden


utilizar las siguientes sentencias:

Alter table nombre_de_tabla pctfree nuevo_pct_free;


Alter table nombre_de_tabla pctused nuevo_pct_used;
Alter index nombre_de_indice pctfree nuevo_pct_free;

I. Encadenamiento y Migracin de Filas

Existen dos circunstancias diferentes por las cuales puede ocurrir que los datos de una
fila recin insertada no tengan espacio suficiente dentro del bloque. Hay que intentar
por todos los medios evitar que esto se produzca para que no caiga el rendimiento del
sistema ya que cuando hay encadenamiento o migracion de filas, los datos de una fila
se dispersan por varios bloques, con lo que para obtener esos datos o para
modificarlos Oracle debe recorrer varios bloques que, posiblemente, no estn
contiguos.

J. Encadenamiento de filas

El encadenamiento o chained rows, se da cuando los datos de una fila ocupan tanto
espacio que no caben fsicamente en un solo bloque y Oracle debe guardarlos en dos
o ms bloques de los reservados para ese segmento. Esto suele ocurrir generalmente
cuando se utilizan columnas de tipo long o long raw que pueden almacenar grandes
cantidades de espacio, por lo que no caben en un solo bloque.

K. Migracin de filas

Este otro caso se da cuando modificamos los datos de una fila de un bloque,
aumentndolos de tamao, es decir, como en le ejemplo anterior, si tenamos un
campo varchar2(30) con el valor 'Jesus' solo ocupaba 5 bytes y si lo modificamos para
que contenga 'Jesus Maria' necesita 11 bytes. En este caso, si en la subzona en la
que tenemos el espacio libre del bloque no disponemos de espacio suficiente, Oracle
mueve o mejor dicho, migra toda la fila a un nuevo bloque en el que si que haya
espacio para toda la fila. Sin embargo, para no tener que cambiarle a dicha fila el
rowid, es decir, el identificador nico de la fila, lo que se hace es dejar en el bloque
inicial una informacin mnima de la fila, que ser simplemente un puntero hacia la
direccin del nuevo bloque en el que se ha reubicado toda esta fila.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 117

3.4.3. Relaciones entre las Estructuras de Almacenamiento

La siguiente figura muestra conceptualmente las relaciones existentes entre las


estructuras de almacenamiento lgico y fsico de ORACLE:

La base de datos puede tener varias instancias


La base de datos esta formada de tablespaces
Un tablespace esta compuesto de segmentos
El tablespace tiene asociado datafiles
El segmento esta compuesto de extents
El extent esta formado de bloques oracle
El bloque oracle esta compuesto de bloques del sistema
Una instancia le pertenece a una base de datos
EL tablespace le pertenece a una base de datos
El datafile le pertenece a un tablespace
El segmento le pertenece a un tablespace
Una tabla puede pertenecer a varios tablespaces, cuando son tablas
particionadas.
El extent le pertenecen a un segmento
El bloque oracle esta asociado a un extent
El datafile esta compuesto de extents
El extent le pertenece a un datafile
Los datafiles estan compuestos de bloques del sistema
Los bloques del sistema le pertenecen a un datafile

3.4.4. Informacin del Diccionario de Datos

Entre las vistas principales, donde vemos la estructura y jerarqua de almacenamiento,


tenemos:

DBA_TABLESPACE
DBA_DATA_FILES
DBA_SEGMENTS
DBA_EXTENTS

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 118

Autoevaluacin
Administracin de los Archivos de Control
1. Liste los archivos de control de la Base de Datos, haciendo una consulta SQL.

2. Averigue cules son los archivos de control actuales, sin hacer ninguna sentencia
SQL.

3. Indique los pasos para multiplexar los archivos de control.

4. Puede una base de datos funcionar con un solo archivo de control?

Mantenimiento de Archivos Redo Log


5. Agregue a los grupos de redo logs de su base de datos, 2 grupos adicionales,
pero de diferente tamao que los anteriores. Cada grupo tendr 4 miembros de
redologs. Al final haga las consultas respectivas al diccionario de datos para
comprobar el xito de la operacin.

6. 2.- Elimine grupos de redolos hasta quedarse con el nmero mnimo. Para ello
obligatoriamente debe eliminar el redolog ACTUAL que est en este momento.

7. 3.- Consultando a la vista V$LOG_HISTORY, elabore una estadstica de cuntos


SWITCH LOG han sucedido POR DIA, desde que se creo su Base de Datos.

Gestin de tablespaces y datafiles


8. Cmo puede crecer un tablespace?

9. Pase todos los datafiles de su Base de Datos a otro disco, en un directorio


llamado nueva_ubicacion.

10. Si un usuario crea una tabla, pero no indica en qu tablespace se va a crear. Al


final en qu tablespace de la Base de Datos se crear dicha tabla?

11. Cuntos tablespaces y datafiles como mnimo puede tener una Base de Datos?
Mencione los nombres.

Jerarqua y estructuras de almacenamiento


12. Liste todos los segmentos rollback que existen indicando su estado y a que
tablespace pertenecen.

13. Liste para un determinado segmento, todas sus extensiones con su tamao en
concreto.

14. Indique como puede liberar las extensiones de un determinado segmento.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 119

UNIDAD

GESTIN DE TABLAS E NDICES


LOGRO DE LA UNIDAD DE APRENDIZAJE
Al trmino de la unidad, el alumno implementa con eficiencia las principales
estructuras de datos, utilizando lenguaje SQL con sentencias DDL.

TEMARIO
4.1 Tema 8 : Tablas en Oracle
4.1.1 : Tipos de tablas
4.1.2 : Tablas Particionadas
4.1.3 : Tablas Agrupadas o Clustered
4.1.4 : Manejo de ndices
4.1.5 : ROWID-Tipo de datos
4.1.6 : Otras instrucciones que complementan la creacin de tablas
4.1.7 : Tablas externas
4.1.8 : Reorganizacin de tablas e ndices
4.1.7 : Diccionario de Datos
4.2 Tema 9 : Administracin de la Integridad
4.2.1 : Restricciones (Constraints)
4.2.2 : Administracin de la Integridad
4.2.3 : Creacion de constraints
4.2.4 : Recomendaciones para definir los constraints
4.2.5 : Habilitacin de los constraints
4.2.6 : Uso de la tabla EXCEPTIONS
4.2.7 : Obteniendo informacin del Diccionario de Datos

ACTIVIDADES PROPUESTAS
Crear tablas e ndices, en sus diferentes tipos
Resolver los ejericcios propuestos

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 120

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 121

4.1. TABLAS EN ORACLE


Tablas: son la unidad bsica de almacenamiento de datos en Oracle. Los datos son
almacenados en filas y columnas. La tabla se define a travs de:

Nombre.
Conjunto de columnas (nombre y tipo)

Al crear una tabla (no-clusterizada), Oracle asigna un segmento de datos en el


tablespacepara mantener los datos de la tabla. Se puede controlar la asignacin de
espacio para el segmento de datos de la tabla y el uso de este espacio reservado de la
siguiente manera:

Cantidad de espacio asignado al segmento de datos, asignando los parmetros


de almacenamiento del segmento.
Controlando el uso del espacio vaco en los bloques que constituyen los extents
del segmento, asignando el PCUSED y PCFREE.

4.1.1. Tipos de Tablas

Regulares:
Particionadas:
Organizadas por ndices:
Agrupadas (clusterizadas)

4.1.1.1. Tablas Regulares

Forma comunmente usada para almacenar los datos.


Tipo por defecto.
Se tiene muy poco control sobre la distribucin de las filas de la tabla en su
almacenamiento fsico:
Se realiza de acuerdo a la actividad propia de los bloques de datos.

4.1.1.2. Pctused y Pctfree

PCTFREE: valor entre 0 y 99. El valor de 0 permite que el blqoue entero se llene con
inserciones de tuplas nuevas.

Valor por defecto 10.


Si no existen actualizaciones, PCTFREE= 0.
En cualquier otro caso: PCTFREE=100*upd/(upd + ins)

PCTUSED: valor entre 1 y 99. No es un parmetro configurable para tablas


organizadas por ndice.

Valor por defecto 40.


Se especifica si se eliminan filas.
PCTUSED=100-(PCTFREE +100*upd/blocksize) + 100ins/blocksize

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 122

Donde:

upd: cantidad promedio en bytes, aadido en una actualizacin.


ins: tamao promedio de una fila al insertarse.

El PCTUSED permite inserciones en la tabla cuando hay suficiente espacio en el


bloque para actualizaciones de filas y para una fila ms.

En una tabla con muchas inserciones, cambiar el PCTUSED puede mejorar el


desempeo de los bloques de datos.

La suma del PCTFREE y PCTUSED debe ser menor a 100.

4.1.1.3. Otra forma de configurar el Pctfree y Pctused

PCTFREE: valor entre 0 y 99. El valor de 0 permite que el bloque entero se llene con
inserciones de tuplas nuevas.

Valor por defecto 10.


Si no existen actualizaciones, asignar 0.
En cualquier otro caso: PCTFREE=100*tam_prom_tupla/(tam_prom_tupla +
tam_inic_tupla)

PCTUSED: valor entre 1 y 99. No es un parmetro configurable para tablas


organizadas por ndice.

Valor por defecto 40.


Se especifica si se eliminan filas.
PCTUSED=100-PCTFREE -100*tam_prom_tupla/blocksize

Donde:
tam_prom_tupla: tamao promedio de una fila
tam_inic_tupla: tamao promedio de una fila al insertarse.

La suma del PCTFREE y PCTUSED debe ser menor a 100.

Un PCTFREE alto permite ms actualizaciones en un bloque y el bloque puede


acomodar menos filas.

Coloque un valor alto si la tabla contiene:

Columnas que son inicialmente NULL y luego actualizadas.


Columnas que pueden aumentar de tamao cuando se actualizan.

El PCTUSED se configura para que el bloque retorne a la lista de libres cuando hay
suficiente espacio para acomodar una tupla promedio.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 123

4.1.1.4. Encadenamiento y Migracin

Una fila puede no ser almacenada completamente en un bloque si:

Encadenamiento (chaining): la fila es demasiado larga para ser almacenada en un


bloque. Esto puede ocurrir durante una insercin o una modificacin. Oracle
almacena la fila en una cadena de uno o ms bloques.

Migracin: si un UPDATE aumenta la cantidad de espacio ocupado por la fila, de


forma que la misma no pueda ser almacenada en un bloque de datos.

Oracle trata de encontrar otro bloque con suficiente espacio para almacenar la fila
completa. Si el bloque existe, se mueve la fila completa. Si no, Oracle separa la fila en
varios row pieces, se mueve el (los) pedazo(s) que pueda(n) ser almacenado(s) y se
realiza encadenamiento.

Oracle mantiene en el bloque original de una fila migrada a apuntar a un nuevo bloque
que contiene la fila actual; el ROWID de una fila migrada no cambia. Los ndices no se
actualizan, ellos apuntan a la localizacin original del registro.

Tienen un efecto negativo en el tiempo de ejecucin:

INSERT y UPDATE que causan migracin o encadenamiento, pueden tener un


rendimiento pobre, porque requieren extra procesamiento.
Consultas que usan un ndice para seleccionar filas migradas o seleccionadas,
deben ejecutar operaciones extras de I/Os.

El comando ANALYZE permite identificar las filas de una tabla que se encuentran
encadenadas o que han sufrido una migracin.

ANALYZE <nombreTable> LIST CHAINED ROWS

Para poder utilizar el comando se requiere de una tabla especial llamada


CHAINED_ROWS, que debe ser creada de la siguiente manera:

CREATE TABLE CHAINED_ROWS (


owner_name varchar2(30),
table_name varchar2(30),
cluster_name varchar2(30),
patition_name varchar2(30),
head_rowid rowid,
analyze_tiemstamp date);

Suponga que la tabla CHAINED_ROWS ya existe y se quiere chequear el


encadenamiento y migracin sobre la tabla X:

Utilizar el comando ANALYZE para obtener las filas encadenadas o migradas de X:

ANALYZE TABLE X LIST CHAINED_ROWS

Verificar si existen filas encadenadas o migardas en la tabla X del usuario Y:

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 124

SELECT COUNT(*)
FROM CHAINED_ROWS
WHERE OWNER_NAME=Y AND TABLE_NAME=X

Si existen filas encadenadas o migradas, seguir el siguiente procedimiento:

Crear una tabla temporal con la misma estructura de X, con aquellas tuplas
encadenadas o migradas:

CREATE TABLE X_TEMP


AS SELECT * FROM X
WHERE ROWID IN (SELECT head_rowid
FROM CHAINED_ROWS WHERE table_name=X
and table_name=Y)

Eliminar de la tabla las tuplas que tengan encadenamiento o migradas:

DELETE FROM X
WHERE ROWID IN (SELECT head_rowid
FROM CHAINED_ROWS WHERE table_name=X
and table_name=Y)

Insertar las tuplas de la tabla temporal X_TEMP en la tabla original

INSERT INTO X
SELECT * FROM X_TEMP;

Eliminar la tabla temporal X_TEMP.

DROP TABLE X_TEMP;

Usar el ANALYZE otra vez.

Las tuplas que aparezcan en la salida, estn encadenadas. Se pueden eliminar


nicamente incrementando el tamao del bloque de datos.

4.1.2. Tablas Particionadas

Una tabla particionada consiste de un nmero de piezas que tienen los mismos
atributos lgicos.
Se puede crear una tabla particionada y tener una sola particin.

Una tabla particionada puede:

1. Poseer una o ms particiones, cada una de las cuales almacena las filas que
poseen ciertas propiedades.
2. Una tabla puede ser particionada en hasta 64.000 particiones separadas.
3. Cualquier tabla puede particionarse, excepto aquellas que usen los tipos LONG o
LONG RAW.
4. Cada particin se coloca en un segmento que puede, a su vez, estar ubicado en
un tablespace diferente. Tambin se puede configurar atributos fsicos tales como
pctfree y pctused.
5. La nocin de particin permite manejar tablas que almacenan grandes

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 125

6. volmenes de datos de forma optimal, y permiten que un gran nmero de


7. procesos pueda acceder a las mismas de forma concurrente.
8. El DBMS provee comandos para manejar las particiones separadamente.
9. Se recomiendan cuando:
La tabla tiene un tamao superior a 2 GB.
Tablas que mantienen histricos.

Las particiones se pueden hacer mediante estos mtodos:

4.1.2.1. Particionamiento por Rango

Se hace corresponder datos en particiones haciendo uso de los rangos de los valores
de la clave de particionamiento. Se deben considerar las siguientes reglas:

Cada particin se define con la clausula VALUES LESS THAN, la cual especifica
un lmite superior no inclusive para las particiones. Cualquier valor de la clave de la
particin igual o superior, es aadida a la proxima particin.
Todas las particiones, excepto la primera, tienen un lmite inferior implcito,
especificado en la clausula VALUES LESS THAN de la particin previa.
Un literal MAXVALUE puede ser definido para la ltima particin; representa un
valor virtual de infinito.

CREATE TABLE est


(carnet char(10),
cohorte number(2),
nombre char(20),
carrera char(20))
partition by range (carrera)
(partition sx1992 values less than (90) tablespace ts0
partition sx1993 values less than (96) tablespace ts1
partition sx1994 values less than (04) tablespace ts2)

4.1.2.2. Particionamiento por Lista

Permite especificar explicitamente la correspondencia entre las filas y las particiones.


Se especifica una lista de valores discretos para la clave de particionamiento. No se
soportan claves de particionamiento formadas por varios atributos.

CREATE TABLE sales_list


(salesman_id NUMBER(5),
sales_name VARCHAR2(30),
sales_state VARCHAR2(20),
sales_amount NUMBER(10),
sales_date DATE)
PARTITION BY LIST(sales_state)
(PARTITION sales_west VALUES(California,Hawai),
PARTITION sales_east VALUES (New York, Virginia, Florida)
PARTITION sales_central VALUES (Texas, Illinois)
PARTITION sales_other VALUES(DEFAULT));

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 126

4.1.2.3. Particionamiento por Hash

La correspondencia entre las filas y las particiones se realiza a travs de una funcin
de hash. Es una opcin til cuando:

Se desconoce la correspondencia en funcin de los rangos.


El rango de las particiones difiere sustancialmente o es difcil balancearla
manualmente.

CREATE TABLE sales_hash


(salesman_id NUMBER(5),
sales_name VARCHAR2(30),
sales_amount NUMBER(10),
week_no NUMBER(2))
PARTITION BY HASH(salesman_id)
PARTITIONS 4
STORE IN (data1, data2, data3, data4);

La tabla sales_hash se particiona en funcin de los valores de la columna


salesman_id. Las particiones se almacenan en los tablespaces: data1, data2, data3, y
data4.

4.1.2.4. Particionamiento por Composicin

Es un mtodo de particionamiento donde cada particin se particiona a su vez es sub-


particiones.

Las particiones ms generales se hacen con el mtodo de rango.

Cada particin se sub-particiona con el mtodo de hash o por lista.

CREATE TABLE sales_composite


(salesman_id NUMBER(5),
sales_name VARCHAR2(30),
sales_amount NUMBER(10),
sales_date DATE)
PARTITION BY RANGE(sales_date)
SUBPARTITION BY HASH(salesman_id)
SUBPARTITION TEMPLATE(
SUBPARTITION sp1 TABLESPACE data1,
SUBPARTITION sp2 TABLESPACE data2,
SUBPARTITION sp3 TABLESPACE data3,
SUBPARTITION sp4 TABLESPACE data4)
(PARTITION sales_jan2000 VALUES THAN (TO_DATE(02/01/2000,
DD/MM/YYYY)
PARTITION sales_fec2000 VALUES THAN (TO_DATE(03/01/2000,
DD/MM/YYYY
PARTITION sales_mar2000 VALUES THAN (TO_DATE(04/01/2000,
DD/MM/YYYY
PARTITION sales_apr2000 VALUES THAN (TO_DATE(05/01/2000,
DD/MM/YYYY))

La particin sales_jan2000_sp1 se almacena en el tablespace data1.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 127

4.1.3. Tablas Agrupadas o Clustered

Un cluster es un grupo de tablas que se almacenan en mismo bloque de datos porque


comparten columnas y usualmente se usan juntas.

Emp(ci,nombre,cod_dep)
Dep(cod_dep,nombre_dep,presupuesto)

Al clusterizar las tablas Emp y Dep, se almacena fsicamente todas las filas por cada
departamento en las tablas Emp y Dep en los mismos bloques.

4.1.3.1. Beneficios de clusterizar dos tablas

I/Os a disco se reducen en joins de tablas clusterizadas.


Tiempo de acceso se mejora para joins de tablas clusterizadas.
En un cluster, un valor de la clave del cluster, es el valor de las columnas claves
del cluster. Cada valor de la clave del cluster, se almacena una sola vez, en el
cluster de datos o de ndice, no importa cuantas filas tengan ese valor.

Los clusters pueden reducir el rendimiento de instrucciones de INSERT en


comparacin a la misma operacin en una tabla almacenada independientemente de
su ndice.

Registros de mltiples tablas se almacenan en un mismo bloque y se requieren


ms bloques que si la tabla no se clusterizara.
Columnas que se actualizan frecuentemente no son buenas candidatas a claves
de un cluster.

Las tablas candidatas a formar un cluster son aquellas que se relacionan por una
restriccin de integridad referencial y tablas que se acceden frecuentemente juntas
haciendo el uso del join:

Todas las tuplas que satisfacen el join estn en un mismo bloque.

Un cluster puede mantener una tabla simple.

Los datos de una tabla clusterizada son almacenados en el segmento creado para el
cluster en lugar de en un segmento de datos en un tablaspace. Parmetros de
almacenamiento no pueden ser especificados cuando una tabla cluster es creada o
alterada. Los parmetros de almacenamiento para el cluster siempre controlan el
almacenamiento de todas las tablas en el cluster.

4.1.3.2. Creacin de Tablas Agrupadas o Clustered

CREATE TABLE emp (


empno NUMBER(5) PRIMARY KEY,
ename VARCHAR2(15) NOT NULL,
..
deptno NUMBER(3) REFERENCES dept)
CLUSTER emp_dept (deptno);

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 128

CREATE TABLE dept (


deptno NUMBER(3) PRIMARY KEY,)
CLUSTER emp_dept (deptno);

4.1.3.3. Tablas Agrupadas - ndice sobre los Clusters

Una vez creado un cluster de tablas, se debe crear un ndice sobre el cluster, que
contiene una entrada por cada valor de la clave del cluster.

Para localizar una fila en el cluster A, el ndice se utiliza para localizar el valor de la
clave del cluster, el cual apunta al bloque de datos asociado con el cluster A.

El ndice sobre un cluster A debe ser creado antes que cualquier instruccin de DML
se ejecute sobre A.

Un ndice sobre un cluster se diferencia de un ndice sobre una tabla en:

Claves que son nulas tienen una entrada en el ndice sobre el cluster.
Entradas del ndice apuntan al primer bloque en la cadena para un valor de clave
de cluster dado.
Un ndice sobre cluster contiene una entrada por valor de la clave del cluster.
La ausencia de una tabla de ndice no afecta a los usuarios, sin embargo, los datos
clusterizados no pueden ser accedidos hasta que no exista un ndice sobre el
cluster.

4.1.4. Manejo de ndices

Son estructuras opcionales asociadas a tablas o clusters.


Oracle ofrece:
o Indices B*-tree.
o Clusters B*-tree
o Hash clusters
o Reverse key
o Bitmaps.

Los ndices pueden ser:


o nicos: dos filas no tiene el mismo valor en el ndice
o no-nicos: dos o ms filas pueden tener el mismo valor en el ndice.
o Compuestos: definidos sobre ms de un atributo.

Al crearse un ndice, Oracle reserva espacio en un segmento de ndice para mantener


los datos de ndice en un tablespace particular. Se puede controlar el espacio de un
segmento de ndice y usar el espacio reservado de la siguiente forma:

Asignar los parametros del segmento de ndice para controlar la asignacin de


extents a los segmentos de ndice.

Asignar el parmetro de PCTFREE del segmento de indice para controlar el


espacio vaco en los bloques de datos que constituyen.

Un ndice no tiene porque ser almacenado en el mismo tablespace que sus datos.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 129

4.1.4.1. Tablas Organizadas por ndices

Son tablas que mantienen los datos ordenados por la clave primaria (Indice Clustered
Nomenclatura Teora).

Una tabla organizada por ndice es una alternativa a:


Una tabla noclustered indexada por la clave primaria usando el comandoCREATE
INDEX.

Una tabla clustered almacenada en un indice cluster que ha sido creado usando el
comando CREATE CLUSTER que hace corresponder la clave primaria como clave
del cluster.

Se mantienen las filas de la tabla en un B*-tree construido en la clave primaria. Cada


fila del ndice contiene los valores de la clave y del resto de los atributos no claves:

<primary_key_value, non_primary_key_column_values>

4.1.4.2. Beneficios de las tablas organizadas por ndices:

Acceso rpido para consultas con matching exacto y busqueda por rangos.
No se requiere espacio para almacenar los ROWID de los registros.

Areas de OverFlow:

Las entradas de una tabla organizada por ndice pueden ser muy grandes y requerir
varios bloques. Para manejar el problema se puede especificar:

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 130

un overflow tablespace
un threshold value.- Porcentaje del tamao del bloque que indica el tamao a partir
del cual se almacenara el registro en el area de overflow. Si un registro excede el
tamano del threshold, entonces las columnas cuyos valores de las columnas para
la fila que excede el threshold son almacenados en el rea de overflow.

CREATE TABLE emp (


ci char(8),
nombre char(30),
profesion char(20)
constraint pk_emp PRIMARY KEY (ci)
)
ORGANIZATION INDEX TABLESPACE emp_collection
PCTTHRESHOLD 20 INCLUDING nombre
OVERFLOW TABLESPACE emp_collection_overflow;

Cuando el tamao de una fila excede al 20% del tamano del bloque, todas las
columnas que estan despues de la columna nombre, seran movidas al segmento del
tablespace emp_collection_overflow.

Si no se coloca el INCLUDING, se mueven todas las columnas excepto la clave


primeria.

Notar que:
ndices: son estructuras usadas para proveer acceso ms rpido a los datos.
Clave Primaria: conjunto minimal de atributos que identifica unvocamente a las tuplas de una tabla.

4.1.5. ROWID-Tipo de datos

El tipo de datos ROWID permite distinguir una columna especial que posee toda tabla
en Oracle y que puede ser consultada en cualquier momento.

Toda fila en una tabla no agrupada, posee un nico ROWID que permite ubicar el
primer row piece de la fila. En caso de tablas agrupadas, las filas de tablas diferentes
que se encuentren en el mismo bloque de datos, podrn tener el mismo ROWID.
El valor del rowid puede ser consultado de la siguiente manera:

Select rowid From EMP;

Los ROWID poseen las siguientes caractersticas:


Es un identificador unvoco para cada fila en la base de datos.
Los ROWIDs no se almacenan fsicamente como una columna.
Aunque el ROWID no provee la direccin especfica de la fila a nivel de los
bloques del sistema de operacin, puede ser utilizado para localizar una fila en un
bloque de Oracle.
Pueden ser usados para ver como los datos son almacenados(Rowid fsicos).
Para la tablas organizadas por ndice, Oracle provee un rowid lgico el cual se
basa en en la clave primaria de la clave-se usa para la construccin de ndices
secundarios. Los rowids lgicos no cambian mientras la clave de la fila no
cambie. No pueden ser usados para chequear como la tabla es organizada.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 131

4.1.5.1. Ejemplo prctico de creacion de tabla

A. Estructura general de la instruccin en SQL para crear una tabla

Se usa la instruccin:

CREATE TABLE nombre_de_la_tabla (


campo1 tipo de dato1,
campo2 tipo de dato2,
etc. );

B. Tipos de datos en Oracle


Los tipos de datos en Oracle son:
NUMBER - se usa para especificar valores numricos.
Ejemplos:

NUMBER(10) - especifica un entero de 10 dgitos.

NUMBER(10,2) - especifica un nmero de 10 dgitos, donde 2 lugares son decimales.

NUMBER - es el "default".

CHAR - se usa para especificar cadenas de caracteres de TAMAO FIJO.


Requiere que el dato est entre comillas sencillas.
Ejemplos:
CHAR(3) - especifica un tamao fijo de 3 caracteres.
Asimismo, CHAR es el "default" y su tamao es de un caracter.

VARCHAR2 - se usa para especificar cadenas de caracteres de TAMAO VARIABLE.


Requiere que el dato est entre comillas sencillas.
Ejemplos:
VARCHAR2(3) - especifica un tamao fijo de 3 caracteres. Asimismo, VARCHAR2 - es
el "default".

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 132

DATE - se usa para especificar fechas con formato dd-mmm-yy dd-mmm-yyyy.


Requiere que la fecha se especifique entre comillas sencillas.
Ejemplos:
'08-mar-99' es un dato vlido cuando el dato fue guardado en la base de datos con ese
formato.
'08-mar-1999' es un dato vlido cuando el dato fue guardado en la base de datos con
ese formato.

BOOLEAN - se usa para valores de cierto o falso. Puede asumir los valores TRUE,
FALSE o NULL.

Hay otros tipos de datos tales como: LONG, RAW, LONG RAW, LOB y otros.

C. Constraints
Sirven para especificar condiciones sobre los campos, tales como especificar los
"primary key", los "foreign key" o requisitos de validacin. A cada constraint se le
identtifica con un nombre, ese nombre debe ser alusivo a su funcin o propsito.

"PRIMARY KEY" se puede especificar en forma directa cuando se declara el campo


al crear la tabla o por medio de un "constraint" explcitamente, en particular cuando es
compuesto.

Ejemplos:

CREATE TABLE tabla1 (


campo1 number(7) PRIMARY KEY,
campo2 varchar2(5),
etc. );

CREATE TABLE tabla2 (


campo1 char(2),
campo2 number(5),
campo3 varchar2(20),
campo4 number)5),
CONSTRAINT keytabla2 PRIMARY KEY(campo1,campo2)
);

En este ltimo caso el "primary key" es compuesto.

"FOREIGN KEY" - se puede especificar en forma directa cuando se declara el campo


al crear la tabla o por medio de un "constraint" explcitamente. Es importante que los
tipos y tamao de los campos aludidos en el foreign key correspondan.

Ejemplo 1

CREATE TABLE tabla1 (


campo1 number(7) PRIMARY KEY,
campo2 varchar2(5),
etc. );

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 133

CREATE TABLE tabla2 (


camp1 char(2),
camp2 number(5),
camp3 varchar2(20),
camp4 number(7) FOREIGN KEY tabla1(campo1),
CONSTRAINT keytabla2 PRIMARY KEY(camp1,camp2) );

Ejemplo 2

CREATE TABLE tabla1 (


campo1 number(7) PRIMARY KEY,
campo2 varchar2(5),
etc. );

CREATE TABLE tabla2 (


camp1 char(2),
camp2 number(5),
camp3 varchar2(20),
camp4 number)5),
CONSTRAINT keytabla2 PRIMARY KEY(camp1,camp2)
CONSTRAINT foreignkeytabla1 FOREIGN KEYcamp4
REFERENCES tabla1(campo1)
);

4.1.6. Otras instrucciones que complementan la creacin de tablas

Las siguientes son instrucciones de SQL:

4.1.6.1. Alter Table

Esta instruccin nos permite aadir campos y modificar definiciones de campos a


tablas que estn creadas.

Por ejemplo si tenemos la tabla TABLA1 creada de la forma siguiente:

CREATE TABLE tabla1 (


campo1 number(7) PRIMARY KEY,
campo2 varchar2(5),
);

y queremos aadir un campo3 esto se puede hacer con:

ALTER TABLE tabla1 ADD(


campo3 number(5) );

Por otro lado si queremos cambiar a que el campo3 permita 7 dgitos en lugar de 5,
podemos hacer lo siguiente:

ALTER TABLE tabla1 MODIFY(


campo3 number(7) );

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 134

4.1.6.2. Drop Table

Esta instruccin nos permite eliminar la estructura de la tabla al igual que los datos que
haya en la misma.

Por ejemplo si queremos eliminar la tabla TABLA1 lo hacemos de la forma siguiente:

DROP TABLE tabla1;

4.1.6.3. Truncate Table

Esta instruccin nos permite eliminar los datos de la tabla, pero no elimina la
estructura de la tabla. SOLO ELIMINA LOS DATOS

Por ejemplo si queremos eliminar los datos de la tabla TABLA1 lo hacemos de la


forma siguiente:

TRUNCATE TABLE tabla1;

4.1.6.4. Insert Into


Esta instruccin nos permite insertar datos en una tabla ya creada.

Por ejemplo si tenemos la tabla TABLA1 creada de la forma siguiente:

CREATE TABLE tabla1 (


campo1 number(7) PRIMARY KEY,
campo2 varchar2(5),
);
y queremos insertar un rcord completo lo podemos hacer con:

INSERT INTO tabla1(campo1,campo2)


VALUES (1234567,'abcde');

Como en este caso se estn insertando datos en todos los campos se pueden omitir
los nombres de los campos, entonces quedara as:

INSERT INTO tabla1


VALUES (1234567,'abcde');

4.1.6.5. Update

Esta instruccin nos permite cambiar o actualizar datos en una tabla ya creada y ya
poblada.

Por ejemplo si tenemos la tabla TABLA1 creada de la forma siguiente:

CREATE TABLE tabla1 (


campo1 number(7) PRIMARY KEY,
campo2 varchar2(5),
);

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 135

y queremos cambiar el campo2 por 'xyzwv' lo podemos hacer con:

UPDATE tabla1
SET campo2 = 'xyzwv'
WHERE campo1 = 1234567;

4.1.6.6. Delete
Esta instruccin nos permite eliminar rcords de una tabla ya creada y ya poblada.
Por ejemplo si tenemos la tabla TABLA1 creada de la forma siguiente:

CREATE TABLE tabla1 (


campo1 number(7) PRIMARY KEY,
campo2 varchar2(5),
);

y queremos eliminar el rcord con "primary key" igual 12345, esto lo podemos hacer
con:

DELETE FROM tabla1


WHERE campo1 = 1234567;

4.1.6.7. Commit

Esta instruccin nos permite confirmar una operacin de "insert", "update" o "delete"
en una tabla. Si se realiza una de esas operaciones y no se hace inmediatamente un
COMMIT ese cambio no se hace en la base de datos, claro est se hace un COMMIT
implcito si usted sale de la cuenta (con exit o quit) o hace un create table, create view,
drop table, drop view, grant, revoke, connect, disconnect, alter, audit o noaudit.

4.1.6.8. Rollback

Esta instruccin nos permite eliminar una operacin de "insert", "update" o "delete" en
una tabla si no se ha hecho un COMMIT.

4.1.7. Tablas externas

Aqu est un ejemplo paso a paso de como crear una tabla externa y ejecutar query's
de esta fuente de datos dentro de Oracle, junto con una discusin de los usos
prcticos para las tablas externas y su funcionamiento.

ORACLE tiene muchas nuevas caractersticas, y uno de mis favoritas es la capacidad


de crear las tablas externas. Una tabla externa es una tabla donde la estructura se
define dentro de la base de datos, aunque sus datos residen externamente en unos o
ms archivos en el sistema operativo (vase el cuadro 1). Las tablas externas son muy
similares a las tablas regulares en Oracle, a menos que los datos no se almacenen en
datafiles de Oracle y no sean manejados por la base de datos.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 136

Cuadro 1: Estructura externa de la tabla en Oracle

+ +

Ejemplo:

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 137

Este ejemplo comienza con la informacin de producto enumerada en una hoja de


balance de Microsoft Excel. Los datos estan en formato (CSV),
D:\productsproducts.csv. La hoja de balance contiene tres columnas: Nmero,
descripcin, y precio del producto. Este archivo contiene los datos que preguntaremos
de Oracle.

Cuadro 2: Los datos de producto en Excel


Despus de que se guarde el archivo de excel, la tarea siguiente es crear un objeto
"DIRECTORIO", que es donde esta fisicamente el archivo. Este DIRECTORIO se
requiere para crear la tabla externa.

SQL> CREATE DIRECTORY PRODUCT_DIR AS 'd:products';


Directory created.

Ahora la tabla externa es creada usando el comando CREATE TABLE:

CREATE TABLE products (


product_no number,
description varchar2(100),
price varchar2(20)
)
ORGANIZATION EXTERNAL (
Type oracle_loader
Default directory PRODUCT_DIR
Access parameters(
records delimited by newline
badfile 'products.bad'
logfile 'products.log'
fields terminated by ','
)
Location ('products.csv')
)

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 138

REJECT LIMIT UNLIMITED


/

La primera parte de la declaracin de Create Table no tiene nada nuevo. Sin embargo,
la parte siguiente de la declaracin especifica ORGANIZATION EXTERNAL, que
indica que esta tabla es una tabla externa. Esta parte de la declaracin tambin
especifica un tipo de Oracle_loader, el cual es solamente soportado por Oracle.
Oracle_loader es realmente un tipo de objeto TYPE de Oracle definido en la base de
datos para manejar los procesos.

Tambin note que el directorio es parte de la declaracin default directory


PRODUCT_DIR; en esta linea se le indica a Oracle dnde encontrar los archivos.

La parte siguiente de la declaracin especifica los parmetros del acceso, que deben
parecer familiares a cualquier persona que ha utilizado SQL*Loader:

records delimited, especifica los caracteres que ser utilizado para separar las filas.
badfile, especifica el archivo que el Oracle utilizar almacenar las filas rechazadas.
logfile, especifica el archivo que el Oracle utilizar almacenar la informacin del
registro. La documentacin de cualquier error ser proporcionada en este archivo.
fields, especifica el separador distinguir una columna de otra durante la carga.

Finalmente, se especifican la localizacin y el lmite del rechazo:

location, la localizacin proporciona el nombre del archivo real al acceso. Si Oracle


necesita tener acceso a archivos mltiples, pueden ser especificados como sigue:
location ('file1.dat', 'file2.dat')
reject limit, especifica el nmero de las filas que pueden ser rechazadas antes de que
el comando devuelva un error. Si se alcanza este umbral, el error siguiente aparece al
intentar tener acceso a la tabla:

ERROR at line 1:
ORA-29913: error in executing ODCIEXTTABLEFETCH callout
ORA-30653: reject limit reached
ORA-06512: at "SYS.ORACLE_LOADER", line 14
ORA-06512: at line 1

El DDL para crear la declaracin funcionar incluso si el archivo no existe en el


sistema. Por un lado, usted no sabr si la tabla fue creada con xito hasta que una
sentecnia se ejecute contra la tabla. Inversamente, el archivo no tiene que existir
cuando se crea la tabla. De hecho, el archivo puede venir e ir segn lo necesitado,
este esquema es absolutamente acostumbrado en ambientes de OLAP.

Una vez creada la tabla, si otro usuario intenta tener acceso a la tabla a este punto,
este usuario recibir el error:

SQL> select count(*) from dave.products;


select count(*) from dave.products
*
ERROR at line 1:
ORA-06564: object PRODUCT_DIR does not exist

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 139

Para prevenir este error, usted debe dar acceso de lectura y escritura en el directorio
para cualquier usuario que desee consultar datos de la tabla. El conceder acceso de
SELECT en la tabla permitir que el objeto sea considerado, pero usted debe tambin
conceder el acceso al objeto subyacente del directorio.

GRANT READ, WRITE ON DIRECTORY products_dir TO alex;

Listing 1: Querying the table

SQL> select product_no, substr(description,1,40) "Desc", Price from


products;

PRODUCT_NO Desc PRICE


---------- -------------------------------------- ---------------
12300 Robin Yount Autographed Baseball $29.99
12301 George Brett Autographed Baseball $19.99
12302 Dale Murphy Autographed Baseball $19.99
12303 Paul Molitor Autographed Baseball $19.99
12304 Nolan Ryan Autographed Baseball $19.99
12305 Craig Biggio Autographed Baseball $19.99
12306 Jeff Bagwell Autographed Baseball $19.99
12307 Barry Bonds Autographed Baseball $19.99
12308 Mark McGuire Autographed Baseball $19.99
12309 Sammy Sosa Autographed Baseball $19.99
12310 Jeff Kent Autographed Baseball $19.99
12311 Roger Clemens Autographed Baseball $19.99
12312 Goose Gossage Autographed Baseball $19.99
12313 Derek Jeter Autographed Baseball $19.99

14 rows selected

El acceso de lectura/grabacin significa que en Oracle estar permitido escribir a ese


directorio cuando necesita poner al da el logfile o badfile. Como usuario del Sistema
Operativo, usted no tiene acceso a esos archivos en el sistema operativo a menos que
su identificacin tenga privilegios apropiados; consecuentemente, la seguridad no se
compromete.

Despus de crear la tabla externa y de conceder privilegios, la tabla se puede utilizar


como cualquier otra tabla (vase el listado 1).

La tabla externa se puede utilizar como substituto de SQL*Loader y una tabla regular
se puede utilizar para llevar a cabo sus datos:

INSERT INTO PROD.PRODUCTS AS SELECT * from DAVE.PRODUCTS;

Los datos que estaban en excel se cargan en Oracle, lo que permite que sea
sostenido y que se realice mejor que una tabla externa.

4.1.7.1. Limitaciones

Las tablas externas en Oracle9i tienen las siguientes limitaciones:

Son inalterables, as que ninguna operacion de manipulacin de datos (DML) (tales


como insert, update o delete) se pueden realizar contra ellos. Tambin, no se pueden
definir ndices en la tabla. Oracle tiene planeado apoyar la escritura en estas tablas en
un lanzamiento futuro.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 140

No soporta archivos ms grandes de 2GB. Si usted procura tener acceso a un archivo


ms grande que 2GB, Oracle falla con el siguiente error:

KUP - 04039: unexpected error while trying to find file in


director

Ciertos comandos contra la tabla, por ejemplo ANALYZE, fallarn.

SQL> analyze table products compute statistics;


analyze table products compute statistics
*
ERROR at line 1:
ORA-30657: operation not supported on external organized Table

Esta limitacin es importante porque la mayora del DBAs tiene escrituras que
restauren regularmente la estadstica del objeto basada en un esquema. Si usted
intenta generar estadstica en una tabla externa, el comando fallar.

Los datos en tablas externas no se sostienen como parte de rutinas de Backup regular
de Oracle, porque estn fuera del alcance de la base de datos.

4.1.7.2. Funcionamiento

Uno espera que el ncleo de Oracle incurra en ms gastos indirectos al procesar las
tablas externas. Oracle TYPE and TYPE BODY named SYS.ORACLE_LOADER
existen en la base de datos y procesan todas las declaraciones que tienen acceso a
las tablas externas. Este proceso aumenta los gastos indirectos para tener acceso a
los datos, y cuando est comparado a una tabla regular es muchas veces ms lento.
Oracle debe traer y realizar las tareas que no realiza (por ejemplo las conversiones,
manejando rechazamientos, y registrndolos) y es normalmente por lo tanto,
perceptiblemente ms lento.

Experiment con el funcionamiento de tablas externas creando una tabla interna con
los datos exactos como el externo:

SQL> create table products_internal as select * from


products;
Table created.

La tabla contuvo 5.292 filas, con los mismos datos que en la hoja de balance. La tabla
interna no tena ndices o llaves primarias definidas. De acuerdo con la escritura
demostrada en el listado 2, la tabla interna era constantemente 8-10 veces ms rpida
en tener acceso que la externa.

Recomendacin, las tablas externas se deben utilizar como medios de carga de datos
en las tablas internas y no se deben utilizar como fuente de datos externa.

Listado 2: El acceso a la tabla interna es perceptiblemente ms rpido que a la tabla


externa.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 141

set term off


col a new_value start
select dbms_utility.get_time() a from dual;
select count(*) from products_internal where product_no = 12313;
col b new_value stop
select dbms_utility.get_time() b from dual;
col c new_value answer
select (&stop - &start) c from dual;
col d new_value start_ext
select dbms_utility.get_time() d from dual;
select count(*) from products where product_no = 12313;
col e new_value stop_ext
select dbms_utility.get_time() e from dual;
col f new_value answer_ext
select (&stop_ext - &start_ext) f from dual;
col ans form 999
col ans_ext form 999
set term on
prompt
prompt
select 'Internal Table Execution Time in ms ', &answer ans
from dual;
select 'External Table Execution Time in ms ', &answer_ext
ans_ext
from dual;

Tomando las siguientes acciones, usted puede reducir al mnimo los gastos indirectos
usados al procesar una tabla externa:

Utilice la clusula PARALLEL cuando cree la tabla. Este valor indica el nmero de
procesadores que sern utilizados para procesar los datafiles y dividir los archivos en
porciones para que puedan ser procesadas por separado.
Utilice datatypes en Oracle, ya que emparejar las cualidades fsicas de los datos,
eliminando la conversin de datos costosa. Utilice valores fijos cuando sea posible,
incluyendo:

Fixed-width character sets


Fixed-length fields
Fixed-length records

La clusula RECORDS FIXED se enumera bajo parmetros del acceso y requiere la


definicin de campos. En el siguiente ejemplo, la lnea de datos tiene 40 bytes de
largo, ms un byte para la nueva lnea. Los nombres de campo deben ser iguales que
los nombres de la columna a los cuales corresponden.

RECORDS FIXED 41
FIELDS (
emp_first_name char(20)
emp_last_name char(20)
)

Utilice delimitadores de un solo caracter, y utilice los mismos juegos de caracteres que
utiliza la base de datos. Reduzca al mnimo los rechazos puesto que Oracle realiza
ms I/O para cada.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 142

4.1.7.3. Usos Prcticos

Las tablas externas tienen muchos usos prcticos, que pondr en dos categoras:
proceso de negocio y administracin de la base de datos.

Desde el punto de vista de negocio-proceso, las tablas externas responden a una


necesidad vital en un ambiente de dato-almacenamiento, en el cual la extraccin,
transformacin, y los procesos de la carga son comunes.

Las tablas externas hacen innecesario que los usuarios creen las tablas temporales
durante estos procesos, reduciendo el espacio requerido y el riesgo de trabajos
fallados. Las tablas externas se pueden utilizar en vez de las tablas temporales y de
utilidades como SQL*Loader. Tambin proporcionan una manera fcil para que las
compaas puedan cargar diversas fuentes de informacin en Oracle desde Excel o
Access.

En cuanto a la administracin de la base de datos. Si deseo supervisar esos archivos


que reviso con mas frecuencia como alert.log e init.ora desde un prompt SQL>.
Entonces puedo utilizar comandos del SQL para preguntar datos del archivo y de
especificar criterios para un proceso ms sofisticado. Un ejemplo de crear una tabla
externa para revisar al registro alerta (alert.log):

CREATE DIRECTORY BDUMP AS 'd:oracle9iadminPROD\dump';

CREATE TABLE alert_log (text varchar2(200))


ORGANIZATION EXTERNAL (
Type oracle_loader
Default directory BDUMP
Access parameters (
Records delimited by newline
Badfile 'dave.bad'
Logfile 'dave.log'
Fields terminated by ' '
)
Location ('PRODALRT.LOG')
)
REJECT LIMIT UNLIMITED;

Listado 3: La opinin de DBA_EXTERNAL_LOCATIONS.

SQL> desc dba_external_locations;


Name Null? Type
---------- ----------- ----------------
OWNER NOT NULL VARCHAR2(30)
TABLE_NAME NOT NULL VARCHAR2(30)
LOCATION VARCHAR2(4000)
DIRECTORY_OWNER CHAR(3)
DIRECTORY_NAME VARCHAR2(30)

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 143

4.1.7.4. Administracin de la Base de datos

Es importante saber qu vistas en Oracle contienen la informacin que pertenece a las


tablas externas. La vista DBA_TABLES demuestra las tablas externas y tiene un valor
de 0 para PCT_FREE, PCT_USED, INI_TRANS, y MAX_TRANS. El resto de las
columnas del almacenaje en la vista son nulas. Los scripts que utiliza esta vista para
determinar problemas debe ser actualizado para tener acceso a
DBA_EXTERNAL_TABLES. Esta vista contiene todos los parmetros que usted
especific cuando usted cre la tabla externa.

Otra vista til es DBA_EXTERNAL_ LOCATIONS, que proporciona una manera rpida
de ver qu archivos estn registrados en la base de datos (vase el listado 3).

4.1.8. Reorganizacin de tablas e ndices

Las tablas al igual que los ndices, estn formados por extensiones. Si se llenan de
extensiones, estos segmentos se fragmentan. Entonces muchas veces hay que
defragmentar las tablas y los ndices, esto se hace con los siguientes comandos:

ALTER TABLE <tabla> MOVE ..;

ALTER INDEX <indice> REBUILD ;

Por ejemplo, si deseo mover la tabla EMP a un tablespace DATA, se hace lo


siguiente:

ALTER TABLE SCOTT.EMP MOVE TABLESPACE DATA;

En estos dos comandos se puede redefinir TODOS los parmetros de


almacenamiento de dichos segmentos.

4.1.9. Diccionario de Datos

Entre las vistas principales para obtener informacin acerca de las tablas y los indices
tenemos:

DBA_TABLES
DBA_TAB_COLUMNS
DBA_CONSTRAINTS
DBA_CONS_COLUMNS
DBA_INDEXES
DBA_IND_COLUMNS
DBA_TAB_PARTITIONS

Si se desea saber ms detalle acerca de cada una de estas vistas (ver la descripcin
de sus campos), consultar la vista DBA_COL_COMMENTS. Por ejemplo:

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 144

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 145

4.2 ADMINISTRACIN DE LA INTEGRIDAD


4.2.1 Restricciones (Constraints)

Constraints son creados en la Base de datos para forzar validacin de reglas de


negocio y para especificar relaciones entre las tablas. Se puede usar para validar
reglas de negocio usando triggers y cdigo de la aplicacin. Constraints de integridad
previenen que mala data sea ingresado en a base de datos. Los nombres de los
constraints se definen en el momento de la creacin, si no se pone un nombre Oracle
automticamente generar uno autogenerado. Por ejemplo (SYS_C00361).

Oracle provee 5 tipos de constraints:

NOT NULL: Previene valores nulos en los campos.

CHECK: Valida una condicin que se debe cumplir como constraint.

UNIQUE: Asegura que no haya valores duplicados para la(s) columna(s)


especificada(s). Cada valor o conjunto de valores son nicos en la tabla.

PRIMARY KEY: Identifica de manera nica a cada registro de una tabla. Previene
valores NULL. Una tabla slo puede tener una llave primaria.

FOREIGN KEY: Establece una relacin padre-hijo entre dos tablas.

4.2.1.1 Tipos de constraint

Por defecto, una columna permite valores nulos. Una constraint NOT NULL obliga a
poner simpre valores a esa columna.

Un constraint UNIQUE requiere que cada valor en una columna o conjunto de


columnas deben ser nicos. Dos filas en la tabla no pueden tener los mismos valores
en la columna o conjunto de columnas.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 146

Cada tabla en la Base de datos puede tener como mximo una constraint de llave
primaria (PRIMARY KEY). Este constraint asegura:

No duplicidad
No valares nulos

Un constraint CHECK valida en una columan o conjunto de columnas que requieren


una condicin especial.

4.2.1.2 Estado de los constraints

A. Disable Novalidate

Un constraint que es de este tipo, es no revisado. La data existente como la nueva


data que ha sido insertada o actualizada, puedo no cumplir con ls reglas del negocio.

B. Disable Validate

Si un constraint est en este estado , cualquier modificacin de las columnas


involucradas no est permitida. Adems, el ndice en el constraint es dropeado y el
constraint es deshabilitado.

C. Enable Novalidate

Si un constraint est en este estado, la nueva data que viola el constraint no podr ser
ingresada. Sin embargo , la tabla puede tener data que es invlida, sto es data que
viola el constraint.

D. Enable Validate

Si un constraint est en este estado, ninguna nueva fila puede violar el constraint. La
data que existe tambin estar validada.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 147

4.2.1.3 Revisin validacin de los constraints

Se puede dejar la validacin de los constraints al final de la transaccin.

A. Constraints no diferidos o inmediatos

Son forzados al final de cada sentencia DML. Una violacin de constraint causa que a
la sentencia se le aplique rollback. Si un constraint causa una accin como DELETE
CASCADE la accin es tomada como parte de la sentencia que origin esto.

Un constraint que es definido como NO DIFERIDO no puede ser modificado para que
sea forzado al final de la transaccin.

B. Constraints diferidos

Son constraints que solamente son revisados al fial de la transaccin. Si hay una
violacin de algn constraint al final de la transaccin, se aplica un rollback a toda la
transaccin. Estos constraints son ms usados cuando los registros padres e hijos en
una relacin de foreign key son ingresados al mismo tiempo, por ejemplo al ingresar
una orden de compra.

Constraints de este tipo pueden ser definidos de la siguiente manera:

Initially immediate: especifica que por defecto va a funcionar como un


constraint inmediato.
Initially deferred: especifica que por defecto debera slo ser forzado al final de
la transaccin.

4.2.1.4 Cambio del tipo de constraint

La sentencia SET CONSTRAINTS setea los constraints para ser Diferidos o


inmediatos para una transaccin en paticular. Esto puede afectar a una lista de
constraints o a todos los contraints.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 148

La sentencia ALTER SESSION tambin tiene clasulas para SET CONTRAINTS y


manejar estados DIFERIDOS o IMMEDIATOS. Esta clasula implica configurar todos
los contraints diferidos. La sentencia ALTER SESSION SET CONSTRAINTS aplica
slo a la sesin actual:

ALTER SESSION
SET CONSTRAINT[S] = {IMMEDIATE|DEFERRED|DEFAULT}

SET CONSTRAINT | CONSTRAINTS


{constraint |ALL }
{IMMEDIATE|DEFERRED}

4.2.2 Consideraciones de llave foranea (Foreign Key)

La llave fornea debe ser eliminada antes de eliminar la tabla padre. Use el siguiente
comando para hacer AMBAS acciones:

DROP TABLE table CASCADE CONSTRAINTS;

La tabla padre no puede ser truncado sin eliminar o deshablitar la llave fornea.

La llave fornea de ser eliminado antes que se elimine el tablespace que contiene a la
tabla padre. El siguiente comando puede ser usado para realizar esto:

DROP TABLESPACE tablespace INCLUDING CONTENTS


CASCADE CONSTRAINTS

4.2.3 Creacion de constraints

Un constraint puede ser definido cuando la tabla es creada o cuando la tabla es


alterada. Usar la clasula de CONSTRAINT en una sentencia CREATE TABLE o
ALTER TABLE para crear un constraint. Usted debe tener los privilegios para definir
constraints.

Para establecer una integridad referencial, la tabla padre debe estar en tu esque o
debes tener el privilegio de REFERENCES sobre las columnas a las cuales se les va
a hacer referencia.

CREATE TABLE hr.employee(


id NUMBER(7)
CONSTRAINT employee_id_pk PRIMARY KEY
DEFERRABLE
USING INDEX
STORAGE(INITIAL 100K NEXT 100K)
TABLESPACE indx,
last_name VARCHAR2(25)
CONSTRAINT employee_last_name_nn NOT NULL,
dept_id NUMBER(7))
TABLESPACE users;

CREATE TABLE "SCOTT"."CURSO" ("CODIGO" VARCHAR2(3) NOT NULL,

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 149

"NOMBRE" VARCHAR2(20) NOT NULL, "N_ALUMNOS" NUMBER(10) NOT


NULL,
CONSTRAINT "PK_CURSO" PRIMARY KEY("CODIGO"),
CONSTRAINT "CHCK_N_ALUMNOS" CHECK(N_alumnos>=0))

La sintaxis de definicin de constraint en una columna forma parte de la definicin de


una tabla:

column datatype [CONSTRAINT constraint]


{[NOT] NULL
|UNIQUE [USING INDEX index_clause]
|PRIMARY KEY [USING INDEX index_clause]
|REFERENCES [schema.]table [(column)]
[ON DELETE CASCADE]
|CHECK (condition)
}
constraint_state :==
[NOT DEFERRABLE|DEFERRABLE [INITIALLY
{IMMEDIATE|DEFERRED}]
]
[DISABLE|ENABLE [VALIDATE|NOVALIDATE]]

Donde:

CONSTRAINT: identifica el constraint por el nombre que se guardar en el


diccionario de datos
USING INDEX: Para el caso de Unique o primary key. Necesitan soportarse en un
ndice.
DEFERRABLE: Si el constraint es diferido.
NOT DEFERRABLE: Si el constraint es no diferido o inmediato.
INITIALLY IMMEDIATE: Al inicio se comportar como constraint immediato.
INITIALLY DEFERRED: Al inicio se comportar como constraint diferido
DISABLE: Deshabilita el constraint

La sintaxis de creacin de un constraint a nivel tabla es tambin parte de la sentencia


de creacin de la tabla. Esto es para definir cualquier tipo de constraint excepto el
NOT NULL:

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

Para definir un constraint tipo NOT NULL, despus de crear una tabla, solamente se
puede hacer de la siguiente manera:

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 150

ALTER TABLE table MODIFY column CONSTRAINT constraint NOT


NULL;

4.2.3.1 4.1. Definicin de un constraint despus del CREATE TABLE

ALTER TABLE hr.employee


ADD(CONSTRAINT employee_dept_id_fk FOREIGN KEY(dept_id)
REFERENCES hr.department(id)
DEFERRABLE INITIALLY DEFERRED);

ALTER TABLE "SCOTT"."ALUMNO"


ADD (CONSTRAINT "SUELDO" CHECK(edad>0))

4.2.4 Recomendaciones para definir los constraints

Poner los ndices nicos y el de la llave primaria en un tablespace diferente al de la


tabla.

Cuando se carga frecuentemente data en una tabla, es preferible deshabilitar el


constraint, hacer la carga y luego habilitar los constraints.

4.2.5 Habilitacin de los constraints

Un constraint que est deshabilitado puede ser habilitado en las dos siguientes
maneras:

ENABLE NOVALIDATE or ENABLE VALIDATE

4.2.5.1 Enable NOVALIDATE

Para llave primaria o constraint unique los cuales tienen un ndice existente, habilitar
un constraint NOVALIDATE es mucho ms rpido que habilitar un constraint
VALIDATE porque la data que existe es no revisada para verificar si viola el constraint.

ALTER TABLE [ schema. ] table


ENABLE NOVALIDATE {CONSTRAINT constraint
| PRIMARY KEY
| UNIQUE ( column [, column ] ... ) }
[ USING INDEX index_clause ]

4.2.5.2 Enable VALIDATE

Habilitar un constraint VALIDATE revisa la data existente para verificar si viola el


constraint. Es es el DEFAULT (DEFECTO) cuando un constraint es habilitado.

ALTER TABLE [ schema. ] table


ENABLE [ VALIDATE ]{CONSTRAINT constraint
| PRIMARY KEY

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 151

| UNIQUE ( column [, column ] ... ) }


[ USING INDEX index_clause ]
[ EXCEPTIONS INTO [ schema. ] table ]

4.2.6 Uso de la tabla EXCEPTIONS

Esta opcin es para conocer qu fila o registro de una tabla est violando un constraint
cuando se trata de habilitar ste.

Justamente la clasula EXCEPTIONS ( no confundir con el bloque de EXCEPTION de


Pl/SQL ) ayuda a identificar cualquier fila o registro que viola un constraint cuando se
habilita.

Use los siguientes pasos para detectar vioalacin de constraints:

1.- SI la tabla EXCEPTIONS no est creada, ejecutar el script utlexcptl.sql:

SQL> @?/rdbms/admin/utlexcpt1
Statement processed.
SQL> DESCRIBE exceptions
Name Null? Type
-------------------------- ------- ----------------
ROW_ID ROWID
OWNER VARCHAR2(30)
TABLE_NAME VARCHAR2(30)
CONSTRAINT VARCHAR2(30)

2.- Ejecutar la sentencia ALTER TABLE con la clasula EXCEPTIONS:

SQL> ALTER TABLE hr.employee


2 ENABLE VALIDATE CONSTRAINT employee_dept_id_fk
3 EXCEPTIONS INTO system.exceptions;
ALTER TABLE hr.employee
*
ORA-02298: cannot enable (hr.EMP_DEPT_FK) - parent keys not
found

3.- Ubicar la data invlida ( que impidi que se active el constraint ), haciendo una
consulta a la tabla EXCEPTIONS:

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 152

SQL> SELECT rowid, id, last_name, dept_id


2 FROM hr.employee
3 WHERE ROWID in (SELECT row_id
4 FROM exceptions)
5 FOR UPDATE;
ROWID ID
LAST_NAME DEPT_ID
------------------ ----
--------- -------
AAAAeyAADAAAAA1AAA 1003 Pirie
50

1 row selected.

4.- Corregir los errores en la data.

SQL> UPDATE hr.employee


2 SET id=10
3 WHERE rowid=AAAAeyAADAAAAA1AAA;
1 row processed.
SQL> COMMIT;
Statement processed.

5.- Hacer un TRUNCATE a la tabla EXCEPTIONS y rehabilitar el constraint:

SQL> TRUNCATE TABLE exceptions;


Statement processed.

SQL> ALTER TABLE hr.employee


2 ENABLE VALIDATE CONSTRAINT employee_dept_id_fk
3 EXCEPTIONS INTO system.exceptions;
Statement processed.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 153

4.2.7 Obteniendo informacin del Diccionario de Datos

Son dos vistas las principales: DBA_CONSTRAINTS y DBA_CONS_COLUMNS.

SQL> desc dba_constraints


Name
-----------------------------
OWNER
CONSTRAINT_NAME
CONSTRAINT_TYPE
TABLE_NAME
SEARCH_CONDITION
R_OWNER
R_CONSTRAINT_NAME
DELETE_RULE
STATUS
DEFERRABLE
DEFERRED
VALIDATED
GENERATED
BAD
RELY
LAST_CHANGE
INDEX_OWNER
INDEX_NAME
INVALID
VIEW_RELATED

La vista DBA_CONSTRAINTS contiene informacin general de los contraints de una


tabla. Entre sus principales campos tenemos:

OWNER: Propietario de la tabla


CONSTRAINT_NAME: Nombre del constraint
CONSTRAINT_TYPE: Tipo de constraint. Por ejemplo: P (llave primaria), R (llave
fornea).
TABLE_NAME: Nombre de la tabla donde est creado el constraint.
R_OWNER: Propietario de la tabla padre cuando el CONSTRAINT_TYPE es R.
R_CONSTRAINT_NAME: Cuando el CONSTRAINT_TYPE es R, el
R_CONSTRAINT_NAME es el constraint de llave primaria en la tabla PADRE.

SQL> desc dba_cons_columns


Name
---------------------------------
OWNER
CONSTRAINT_NAME
TABLE_NAME
COLUMN_NAME
POSITION

La vista DBA_CONS_COLUMNS tiene el detalle de las columnas que conforman un


constraint. Por ejemplo, el constraint de llave primaria de una tabla aparecer en la
vista DBA_CONSTRAINTS, pero si necesito saber qu columnas forman esa llave
primaria habr que ir a la vista DBA_CONS_COLUMNS.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 154

Ejemplos:

Para listar los constraints de la table EMP del esquema SCOTT tenemos:

SQL> select constraint_name,constraint_type


2 from dba_constraints
3 where table_name='EMP'
4 and owner='SCOTT';

CONSTRAINT_NAME C
---------------- --
FK_DEPTNO R
PK_EMP P

Si se desea averiguar qu campos conforman la llave primaria de EMP:

SQL> select position,column_name


2 from dba_cons_columns where
3 owner='SCOTT' and constraint_name='PK_EMP';

POSITION COLUMN_NAME
-------- ------------------------------------
1 EMPNO

La llave primaria de la tabla EMP est formada por el campo EMPNO.

Si desea saber ms acerca de las columnas que tiene las vistas DBA_CONSTRAINTS
y DBA_CONS_COLUMNS, hacer lo siguiente:

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 155

Autoevaluacin
Gestin de Tablas e ndices

1. Mencione las ventajas de particionar una tabla.

2. Liste todos los ndices de la tabla SCOTT, indicando las columnas que indexa
cada uno. Utilice DBA_INDEXES y DBA_IND_COLUMNS.

3. Mencione las ventajas de implementar la opcin de TABLAS EXTERNAS.

4. Imagnese que en un tablespace USERS tenemos 1000 tablas. Y usted tiene


como tarea reorganizar todas esas tablas moviendo cada una de ellas a un
tablespace llamado DESTINO. Defina un procedimiento que implique menos
horas hombre de preparacin de los scripts para este trabajo.

Administracin de la Integridad

1. 1.- Usando la vista DBA_CONSTRAINTS determine los constraints involucrados


en la relacin de la tabla EMP con DEPT. Tip: tener en cuenta los campos
CONSTRAINT_NAME y R_CONSTRAINT_NAME.

2. 2.- Usando la vista DBA_CONSTRAINTS y DBA_CONS_COLUMNS determine el


detalle de la relacin entre la tabla EMP y DEPT. Se pide indicar mediante qu
columnas se est relacionando.

3. 3.- Agregue un constraint a la columna SAL de la tabla EMP, para que valide que
el sueldo debe ser mayor que cero.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 156

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 157

UNIDAD

5
MECANISMOS AVANZADOS DEL SERVIDOR
LOGRO DE LA UNIDAD DE APRENDIZAJE

1. Al trmino de esta unidad, los alumnos podrn configurar los segmentos rollback y
undo de acuerdo al tipo de sistema implementado.
2. Al trmino de la unidad, el alumno establece mecanismos de seguridad, auditora,
respaldo y recuperacin de la informacin, utilizando los comandos CREATE y
ALTER USER, AUDIT y mecanismos comprobados de respaldo y recuperacin,
tanto a nivel fsico como a nivel lgico

TEMARIO

5.1 Tema 10 : Segmentos rollback (undo)


5.1.1 : Definicin de los Segmentos Rollback
5.1.2 : Estados de un Segmento Rollback
5.1.3 : Administracin de Segmentros Rollback
5.1.4 : Informacin del Diccionario de Datos
5.1.5 : Posibles Errores y Soluciones
5.1.6 : Configuracin de Disco para Segmentos Rollback
5.1.7 : Administracin de almacenamiento y objetos
5.1.8 : Importancia de los Segmentos Rollback
5.2 Tema 11 : Seguridad
5.2.1 : Niveles de Seguridad
5.2.2 : Implementacin de Seguridad
5.3 Tema 12 : Auditora
5.3.1 : Auditora de Seguridad
5.3.2 : Informacin de Auditora
5.4 Tema 13 : Respaldo y Recuperacin
5.4.1 : Respaldo (Backup)
5.4.2 : Tipos de Backup
5.4.3 : Tipos de Recuperacin
5.4.4 : Administracin del Backup
5.4.5 : Principios de Recuperacin

ACTIVIDADES PROPUESTAS

Configurar correctamente la administracin de los segmentos undo


Ejecutar las diferentes formas de flashback

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 158

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 159

5.1 Segmentos rollback (undo)


5.1.1 Definicin de los Segmentos Rollback

Desde los inicios de los segmentos rollback o undo, Oracle, siempre ha hecho uso de
los mismos para almacenar las transacciones que se van ejecutando (sin hacer un
commit) de modo que puedan ser recuperadas. La administracin del espacio que
ser utilizado por estos segmentos rollback es un tanto compleja.

Toda base de datos tiene uno o ms segmentos rollback, los cuales son unas
estructuras o reas lgicas, ubicadas dentro de los datafiles, que contienen
informacin de las transacciones que se encuentran en curso y que an no han sido
confirmadas o deshechas. Todas las transacciones deben confirmarse en la base de
datos en algn momento mediante el uso de la instruccin commit, as como tambin
se puede deshacer un grupo de transacciones completamente, mientras no se haya
hecho commit, con la instruccin rollback. Cada vez que una transaccin modifique
algn bloque de datos, un segmento rollback almacena o guarda el estado de la
informacin (data) antes que esta cambie; en otras palabras, mientras se van
ejecutando las transacciones, los cambios se van almacenando en estos segmentos
rollback de manera que puedan ser utilizados cuando sea necesario. Esta rea o
espacio que almacena datos ocupa extensiones los cuales son grupos lgicos de
bloques de datos. Cada una de estas extensiones va almacenando la informacin de
las transacciones pendientes de confirmacin y va liberando espacio a medida que
stas se van confirmando. Cada vez que se completa alguna extensin se busca ms
espacio y se toma otra extensin; es debido a esto que se podra pensar en un
segmento rollback como un buffer circular, ya que intenta utilizar siempre las mismas
extensiones de datos.

Durante una instruccin Select el espacio asignado para los segmentos rollback no es
usado; es decir, la instruccin no es almacenada en este espacio; sin embargo, este
mismo espacio si ser accedido durante alguna instruccin Select con la finalidad de
obtener data. (Realizacin de consultas).

Oracle usa los segmentos rollback para una variedad de operaciones. En lneas
generales, los segmentos rollback de una base de datos almacenan los antiguos
valores de la data que ha cambiado debido a transacciones no commiteadas. Oracle
puede usar la informacin de los segmentos rollback durante la recuperacin de una
base de datos para deshacer cualquier cambio que an no haya sido commiteado,
cambio que fue aplicado desde los Redo log files hacia los datafiles, dejando, de este
modo, la data en un estado consistente.

Por ejemplo:
Un usuario cambia el valor de una fila de 3 a 9. El Redolog file guarda un registro de
este cambio mientras que el segmento rollback guarda el valor anterior (en este caso
sera 3). Antes que el usuario haga commit a la transaccin se va la luz. Una vez que
el problema de electricidad es resuelto, la base de datos realiza una operacin de
recuperacin para lo cual usa los Redolog files para obtener lo ltimo que se hizo
(cambiar el valor de 5 a 7) y despus hace uso de los segmentos rollback para
deshacer el cambio no commiteado, regresando el valor mencionado de 7 a 5.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 160

5.1.2 Estados de un Segmento Rollback

Un segmento rollback puede encontrarse en cualquiera de los siguientes estados:

Off-line.- No ha sido asociado a ninguna instancia de la base de datos.

On-line.- Ha sido adquirido por alguna de las instancias y puede contener datos de
transacciones activas.

Needs Recovery.- Contiene datos de transacciones que no pueden hacer rollback


porque alguno de sus datafiles se encuentra inaccesible o corrupto.

Partly Available.- Contiene informacin de una transaccin en duda que son


transacciones en entornos de base de datos distribuidas de las que an no se ha
recibido respuesta.

Invalid.- El segmento ha sido borrado.

Para cambiar el estado de un segmento rollback se debe ejecutar una instruccin cuya
sintaxis es como sigue:

ALTER ROLLBACK SEGMENT nombre_segmento estado;

5.1.3 Administracin de Segmentros Rollback

5.1.3.1 Creacin de segmentos rollback

Se hace uso de la sentencia Create Rollback Segment para crear un segmento


rollback, el cual es un objeto que Oracle usa para guardar o almacenar la data que sea
necesaria para revertir o deshacer los cambios que pudiesen haber sido ocasionados
por algunas transacciones. Tener en cuenta que un pre-requisito para poder crear un
segmento rollback es haber creado, previamente, el sistema de privilegios de los
segmentos rollback.

Para lo anterior, se asume que la base de datos est corriendo bajo el modo rollback
undo. El parmetro de inicializacin UNDO_MANAGEMENT es seteado como
MANUAL o no es seteado. Si la base de datos est corriendo en modo Automatic
Undo Management (es decir, el parmetro de inicializacin UNDO_MANAGEMENT
est seteado en AUTO, entonces la los segmentos rollback creados por el usuario no
son tan relevantes como antes. Oracle devuelve un error como respuesta a cualquier
sentencia de los siguientes tipos:

CREATE ROLLBACK SEGMENT

ALTER ROLLBACK SEGMENT

Nota.-
Este error puede ser ocultado, cambiando el valor del parmetro
UNDO_SUPPRESS_ERRORS a true.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 161

Algunas cosas a considerar.-

Un tablespace puede tener muchos segmentos rollback, lo que normalmente


ayuda a una mejor performance.
Para poder agregar un segmento rollback es necesario que la base de datos est
en estado On-line.
Una vez creado un segmento rollback, esta se encuentra en estado Off-line, para
cambiarle el estado a On-line, de debe usar la sentencia:

ALTER ROLLBACK SEGMENT

Otra opcin para cambiar el estado de un segmento rollback a On-line


automticamente cada vez que se levante la base de datos, es agregando el nombre
de este segmento en los parmetros de inicializacin de los segmentos rollback.

Por default, una vez creado un segmento rollback ser privado lo que har que solo
est disponible para la instancia que figure en sus parmetros de inicializacin, para
que sea pblico y est disponible para cualquier instancia es necesario indicrselo con
PUBLIC.

Es recomendable darle un nombre al segmento rollback que se vaya a crear.


Un ejemplo de creacin de un segmento rollback podra ser:

CREATE ROLLBACK SEGMENT rbs_one


TABLESPACE rbs_ts
STORAGE
(INITIAL 10K
NEXT 10K
MAXEXTENTS UNLIMITED);

5.1.3.2 Modificacin de Segmentos Rollback

Para cambiar el estado de un segmento rollback de Off-line a On-line o viceversa,


cambiar sus caractersticas de almacenamiento o darle un tamao especfico y
adecuado se usa la siguiente sentencia:
ALTER ROLLBACK SEGMENT

Una vez que un segmento rollback fue puesto en estado Off-line, est podr cambiar a
estado On-line por cualquier instancia.

On-line.-
Para poner el segmento rollback en estado On-line.
Cuando un segemtno rollback es creado inicialmente el estado en el que este se
encuentra es Off-line y por ende no estar disponible para ninguna transaccin que se
deseara ejecutar. La clusula ONLINE pone ek segmento rollback creado en lnea de
manera que permita la ejecucin de transacciones realzadas por la instancia. Otra
forma de cambiar este estado es mediante el uso de los parmetros de inicializacin
de los segmentos rollback.

Off-line.-
Para cambiar el estado de un segmento rollback a offline usar la clusula OFFLINE.
En caso que el segmento rollback no contenga alguna informacin necesaria para
deshacer alguna transaccin activa (hacerle rollback), Oracle mismo le cambia el
estado a Off-line.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 162

Si el segmento rollback contiene informacin que podra ser utilizada por


transacciones actuales y activas, entonces Oracle deshabilita dicho segmento para
futuras transacciones y lo pone en estado Off-line una vez que todas las transacciones
hayan sido ejecutadas (con commit) o deshechas (con rollback).

Para verificar el estado actual de u segmento rollback (On-line ou Off-line) se podra


verificar la vista DBA_ROLLBACK_SEGS. De estar en estado On-line, este parmetro
tendr el valor en uso (IN_USE), caso contrario el valor almacenado ser disponible
(AVAILABLE).

5.1.3.3 Eliminacin de Segmentos Rollback

Para remover o eliminar un segmento rollback de una base de datos se usa la


siguiente sentencia (antes hay que ponerle en estado OFFLINE):

DROP ROLLBACK SEGMENT

Una vez que un segmento rollback ha sido eliminado, el espacio que haba sido
ocupado por este regresa a ser parte del tablespace.

Solo se podr eliminar (hacer drop) un segmento rollback siempre y cuando est en
estado Off-line. No se podr eliminar el segmento rollback del SYSTEM.

Por ejemplo, para eliminar el segmento rollback de nombre rbs_ts se hara:


DROP ROLLBACK SEGMENT rbs_ts;

Cundo eliminar un segmento rollback?

Se puede eliminar un segmento rollback cuando los extents de un segmento estn


demasiado fragmentados en el disco o en caso se requiera re-ubicar el segmento en
otro tablespace. Antes de proceder a borrar un segmento rollback hay que verificar
que su estado sea Off-line, si el segmento rollback que se desea eliminar tiene algn
otro estado, entonces no podr eliminarlo. Si el estado es Invlido (INVALIDE)
entonces el segmento rollback ya fue eliminado.

Nota.-
Si algn segmento rollback, previamente especificado en los Segmentos Rollback
(ROLLBACK_SEGMENTS) fue eliminado, es necesario asegurarse de editar el archivo
de parmetros de la base de datos para eliminar de all el nombre del segmento
rollback, recientemente borrado, de la lista que figura en el parmetro de los
Segmentos Rollback. Si esto no es verificado, es posible que la prxima vez que se
intente levantar la base de daros ocurra una falla debido a que no encuentra el
segmento rollback que fue eliminado.

Despus que un segmento ha sido borrado, como se mencion antes, su estado


cambia a Invlido. La siguiente vez que se cree un segmento rollback, este tomar el
lugar dejado por algn segmento rollback que haya sido eliminado y la fila ocupada por
el segmento rollback eliminado ya no aparecer ms en la vista
DBA_ROLLBACK_SEGS.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 163

5.1.4 Informacion del Diccionario de Datos

Las siguientes vistas son tiles para poder ver la informacin que se desee sobre los
segmentos rollback:

DBA_ROLLBACK_SEGS.-
Describe los segmentos rollback, incluyendo nombres y el tablespace al cual
pertenecen.

DBA_SEGMENTS.-
Identifica un segmento como segmento rollback y contiene informacin adicional sobre
el segmento.

V$ROLLNAME.-
Muestra un listado, por nombre, de todos los segmentos rollback que tengan en ese
momento el estado On-line.

V$ROLLSTAT.-
Contiene las estadsticas de los segmentos rollback.

V$TRANSACTION.-
Contiene informacin sobre los segmentos undo.

Si se desea saber ms detalle sobre los campos de cada una de las vistas
mencionadas, se puede hacer la consulta a la vista DBA_COL_COMMENTS. Por
ejemplo:

5.1.5 Posibles Errores y Soluciones

5.1.5.1 Insuficiente Segmentos Rollback.-


Cuando una transaccin larga que se est ejecutando no puede reconstruir una toma
instantnea de los bloques que est leyendo debido a que la data que se encuentra en
los segmentos rollback no est disponible.
Esto puede suceder cuando:

a) La base de datos tiene muchas transacciones ejecutndose, las cuales cambian


constantemente la data, luego le hacen commit o rollback, entonces es muy posible

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 164

que la data que se encuentra en los segmentos rollback sea sobrescrita en algn
momento, sobretodo si es que estos segmentos son muy pequeos para el nmero y/o
tamao de los cambios que se estn realizando.

Una solucin a esto podra ser aumentar la cantidad de segmentos rollback grandes
disponibles; esto permitir que la data almacenada en estos segmentos sea guardada
por un mayor tiempo.

b) El programa que se est utilizando no cierra un cursor despus de realizar un fetch


repetitivo (bucle) o sentencias Update.

Como una alternativa se tiene que si un fetch est siendo ejecutado despus de un
commit, el nmero de registros rollback que fueron creados desde la ltima vez que
se cerr el cursor llenarn los segmentos rollback disponibles y se empezar a
sobrescribir registros anteriores.

En caso no se est usando la instruccin fetch a travs de un commit, lo que se


tendra que hacer es asegurarse que se ha cerrado correctamente el cursor. De lo
contrario, se tendr que incrementar la cantidad y el tamao de los segmentos
rollback. Mediante el uso de la vista V$ROLLSTAT se podr estimar el tamao de la
data (a la que se le har rollback) que el programa producir, esta vista contiene la
cantidad de bytes que son escritos por cada segmento rollback.

5.1.6 Configuracin de Disco para Segmentos Rollback

No es algo crtico optimizar los segmentos rollback debido a que estos son realizados
mediante un proceso background; sin embargo, las instancias que desarrollan muchas
sentencias DML (Definition Management Language) deberan tener configurado el
tablespace de los segmentos rollback de tal manera que permitan optimizar la
ejecucin de estas sentencias.

5.1.6.1 Instancias de Sentencias DML Intensivas

Los segmentos rollback de Entrada/Salida son normativamente de escritura intensiva y


lgicamente secuenciales. Si los requerimientos de un segmento rollback son lo
suficientemente grandes, luego, es posible obtener una secuencia de Entrada/Salida
fsicamente larga ubicando cada segmento rollback en su propio tablespace y en
discos dedicados. Debido a que Oracle distribuye automticamente las transacciones
destinadas a trabajar con segmentos rollback uniformemente, los beneficios de
obtener una secuencia de Entrada/Salida sern vistos cuando hayan menos
transacciones activas que segmentos rollback.

Esta configuracin de segmentos rollback es recomendable siempre y cuando se


tenga una base de datos en la cual se lleven a cabo muchas transacciones
concurrentes que por lo general producen una gran cantidad de sentencias Undo; es
decir, sentencias que en algn momento podran ser deshechas. Si se requiere ms
de un disco por segmento rollback entonces estos deberan ser puestos como en
paralelo en lugar de ser concatenados, de este modo se estara mejorando el
problema de la concurrencia en los casos en que ms de una transaccin deba
acceder a un segmento rollback al mismo tiempo. Cada segmento rollback, al ser
creado, se le debe indicar que ocupe aproximadamente un cuarto del tamao del
tablespace en el cual fue o ser creado, y debe estar ubicado en la parte ms rpida
del disco. Esto, con la finalidad de reducir el tiempo de bsqueda para lecturas en

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 165

consistencia de la data. Adems, es recomendable que cada segmento rollback sea


eliminado (mediante una sentencia drop) peridicamente y luego recreado para
asegurarse que sigue estando en la parte ms rpida del disco.

5.1.6.2 Instancias de Sentencias DML Moderadas

Para las bases de datos cuyo requerimientos de segmentos rollback es ms


moderada, se aconseja una configuracin de segmento rollback similar a la anterior,
con la excepcin que cada rollback segment tablespace contendr varios y pequeos
segmentos rollback.
Un segmento rolback deber ser creado en cada tablespace en forma cclica con la
finalidad de maximizar la probabilidad que la escritura hecha en los segmentos
rollback sea secuencial cuando hayan menos transacciones activas que segmentos
rollback en el tablespace. (Esto ltimo se muestra en la figura de abajo).

Para asegurar que los segmentos rollback estn siendo usados en el orden correcto,
es necesario verificar, adems, que estos estn nombrados en el orden correcto en el
archivo de parmetros, esto usando el parmetro rollback_segments.

5.1.7 Administracin de almacenamiento y objetos

Una de las caractersticas ms notables de Oracle es la simplificacin de muchas


tareas que deba realizar el DBA con bastante esfuerzo. En este sentido la
administracin de los segmentos rollback y la administracin de extensiones de tablas
e ndices son manejadas automticamente por el mismo motor Oracle. A estas
caractersticas se debe la obsolescencia de varios parmetros tales como
ROLLBACK_SEGMENTS y TRANSACTIONS_PER_ROLLBACK_SEGMENT que
requeran muchos conocimientos y experiencia del DBA para ajustarlos
adecuadamente.

5.1.7.1 Administracin automtica de segmentos de UNDO (Ex rollback


segments)

Desde Oracle 9i surgieron los segmentos Undo como una alternativa a los
convencionales segmentos rollback, esto se refiere al uso del denominado Flashback
Query, los mismos que han sido implementados usando la misma data undo o que
ser recuperada.

Estos segmentos Undo ofrecen una mayor flexibilidad en comparacin con los
segmentos rollback debido a que permiten que la informacin de los rollback est
disponible por un mnimo tiempo de retencin, eliminando las complejidades de la
administracin de los segmentos rollback y a la vez facilitndole la tarea a los DBAs de
modo que puedan ejercer control sobre cuanta cantidad de informacin ser guardada

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 166

como de tipo undo antes que se empiece a sobrescribir la informacin, adems de


asegurar un ambiente transaccional concurrente entre varias sesiones. Gracias a esta
nueva tecnologa, introducida por Oracle, es que los administradores ya no requieren
ms crear rollback segments segn la cantidad de transacciones concurrentes en una
base de datos oracle. Otro beneficio de esta tecnologa es que ya no existe posibilidad
de contencin por una configuracin de rollback segment inadecuada.

Oracle maneja dinmicamente la cantidad de segmentos UNDO que se requieran


segn la carga de trabajo, libera las reas que ya no se requieran, deja en On-line y/o
Off-line los segmentos segn se necesite y todo esto por detrs; es decir, sin
intervencin alguna del DBA. Se hace uso de un tablespace undo y todo lo que tiene
que hacer el administrador es poner los parmetros UNDO_MANAGEMENT en AUTO,
UNDO_RETENTION a la duracin en segundos de la consulta ms larga que se
requiera y disponer de suficiente espacio en el tablespace de UNDO. Lo que significa
que la base de datos debe estar configurada para escribir la data a ser recuperada en
un tablespace undo en lugar de usar los segmentos rollback. Oracle maneja
automticamente los tablespaces de tipo undo de modo tal que el DBA ya no tenga
que preocuparse sobre la creacin y la cantidad correcta de segmentos rollback que
debera crear, solo se requiere saber la cantidad de espacio total que se requerir para
guardar la informacin a recuperar y segn esto setear los parmetros mencionados
anteriormente.

Cmo funciona esto?

Cuando una sentencia DML es ejecutada, Oracle escribe la informacin a recuperar en


el undo tablespace. Esta informacin es retenida en ese lugar por el tiempo que se
haya especificado (indicado, por ejemplo, por el DBA) y esta retencin es la que
habilita el mecanismo del Flashback Query. Cabe recalcar, que los segmentos
rolllback no soportan un parametro de tipo tiempo de retencin, motivo por el cual es
necesario mover la data hacia los undo tablespaces, de otro modo no se podra
aprovechar lo que ofrece el Flashback Query (sus ventajas).

La forma de crear un undo tablespace es como sigue:

CREATE UNDO TABLESPACE undodataDATAFILE '/oradata

Una vez que este tablespace ha sido creado, se debe configurar la instancia de base
de datos que utilizar este tablespace, especificar el tiempo de retencin y cambiar la
instancia de base de datos a modo automated undo management, esto ltimo se
realizara de la siguiente forma:

UNDO_MANAGEMENT= AUTOUNDO_RETENTION = 1800UNDO_TABLESPACE

UNDO_RETENTION especifica la cantidad de tiempo durante el cual se mantendr la


informacin a recuperar disponible antes que se realice algn commit por alguna
transaccin; es decir, antes que la informacin sea sobrescrita. Este tiempo de
retencin es especificado en segundos, por default es: 900 segundos (15 minutos).

UNDO_RETENTION y UNDO_TABLESPACE son parmetros dinmicos mientras que


UNDO_MANAGEMENT no lo es, por lo tanto es necesario bajar la base de datos y
reiniciarla de manera que el cambio de modo surja efecto.

No es posible usar ambos mtodos de recuperacin de data en una misma instancia


de base de datos, con excepcin de los propsitos de migracin; por ejemplo, el hecho

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 167

de crear tablespaces undo en una base de datos que usa segmentos rollback, o
eliminar (drop) los segmentos rollback en una base de datos que usa tablespaces
undo. Sin embargo, es necesario bajar (shut down) la base de datos y re-iniciarla de
manera que el cambio hacia otro mtodo de administracin undo tenga efecto.

Para las bases de datos que utilizan los segmentos Undo existe una vista VROOM que
provee informacin adicional sobre el nmero de transacciones que han sido
almacenadas y la cantidad de bloques Undo que fueron usados durante cada periodo
de retencin, lo que nos provee una estimacin aproximada de las actividades
transaccionales que se lleven a cabo en la base de datos y poder determinar hasta
cierto punto el tamao ptimo para el tablespace Undo.

Oracle usa un segmento rollback de System para el desarrollo de las transacciones del
mismo (System). Solo existe un nico segmento rollback de System el cual es creado
automticamente en el momento de la creacin de una base de datos y es siempre
puesto en estado On-line al levantarse la instancia, no es necesario desarrollar o llevar
a cabo ninguna operacin para administrar los segmentos rollback del System.

5.1.8 Importancia de los Segmentos Rollback

Los segmentos rollback almacenan informacin sobre transacciones realizadas en una


base de datos mientras estas son llevadas a cabo. En caso ocurriese alguna
eventualidad que haga que la transaccin que se vena ejecutando falle, la informacin
que fue guardada en estos segmentos ser usada para roll-backear o dejar sin efecto
lo que se intentaba realizar con la ltima transaccin, de modo que la base de datos
quede consistente e igual a como estaba antes de ejecutar la transaccin.

Asimismo, los segmentos rollback permiten que uno o ms usuarios puedan tener
acceso de lectura sobre los datos de alguna tabla que podra estar siendo o haber sido
alterada por otra u otras sesiones en el mismo intervalo de tiempo. Por ejemplo, si un
usuario A empieza a realizar alguna transaccin de cambio sobre una tabla y si en
este intervalo de tiempo el usuario B desea visualizar cierta informacin para lo cual
requiere realizar una consulta a la misma tabla, entonces el query o Select a llevar a
cabo el usuario B ser sobre la vista mostrada por los rollback segments.

Es importante comprender cual es el contenido de un segmento rollback. No


almacenan el bloque de datos modificado entero, sino slo la imagen previa de la fila o
filas modificadas. La informacin del segmento roolback consiste en varias entradas
llamadas undo.

Por ejemplo: Si se inserta una fila en una tabla, el undo necesitar slo el rowid de la
fila insertada, ya que para volver atrs la insercin slo hay que realizar un delete. En
la operacin de actualizacin, se almacenar el valor antiguo de las columnas
modificadas. El segmento rollback asegura que la informacin undo se guardar
durante la vida de la transaccin.

El correcto funcionamiento de los segmentos rollback es muy importante para


asegurar la integridad de la base de datos. En resumen, los segmentos rollback son
muy importantes debido a que ayudan en:

Las transacciones rollback cuando una sentencia rollback es llamada.


La recuperacin de la base de datos.
El aseguramiento de la consistencia en lectura.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 168

Autoevaluacin

1.- Qu criterios usara para configurar el tamao y el nmero de segmentos


rollback en una Base de Datos?

2.- Averigue consultando al diccionario de datos, cuntos y cules son los


segmentos rollback disponibles?

3.- Si en la Base de Datos est ejecutndose un proceso fuerte de larga


duracin, por qu motivos puede fallar ese proceso respecto a los segmentos
rollback. Proponer soluciones.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 169

5.2. Seguridad
5.2.1 Niveles de Seguridad

Tipos de niveles de seguridad:

Seguridad de cuentas para la validacin de usuarios.


Seguridad en el acceso a los objetos de la base de datos.
Seguridad a nivel de sistema para la gestin de privilegios globales.

5.2.1.1 Seguridad de Cuentas

Para acceder a los datos en una BD Oracle, se debe tener acceso a una cuenta en
esa BD. Cada cuenta debe tener una palabra clave o password asociada. Una cuenta
en una BD puede estr ligada con una cuenta de sistema operativo. Los passwords
son fijados cuando se crea un usuario y pueden ser alterados por el DBA o por el
usuario mismo. La BD almacena una versin encriptada del password en una tabla del
diccionario llamada dba_users. Si la cuenta en la BD est asociada a una cuenta del
sistema operativo puede evitarse la comprobacin del password, dndose por vlida la
comprobacin de la identidad del usuario realizada por el SO.

5.2.1.2 Seguridad de Objetos

El acceso a los objetos de la BD se realiza via privilegios. Estos permiten que


determinados comandos sean utilizados contra determinados objetos de la BD. Esto
se especifica con el comando GRANT, conceder. Los privilegios se pueden agrupar
formando lo que se conoce por roles. La utilizacin de los roles simplifica la
administracin de los privilegios cuando tenemos muchos usuarios. Los roles pueden
ser protegidos con passwords, y pueden activarse y desactivarse dinmicamente, con
lo que constituyen una capa ms de seguridad en el sistema.

5.2.1.3 Roles del Sistema

Los roles se pueden utilizar para gestionar los comandos de sistema disponibles para
los usuarios. Estos incluyen comandos como CREATE TABLE o SELECT ANY
TABLE. Todos los usuarios que quieran acceder a la BD deben tener el rol CONNECT;
aquellos que necesiten crear segmentos necesitaran el rol RESOURCE. Un usuario
con el rol DBA tiene derecho para ver y manejar todos los datos de la BD. En Oracle
CONNECT, RESOURCE y DBA son roles de sistema. Las acciones contra cada tipo
de objeto son autorizadas por privilegios separados. As, un usuario puede tener
concedido el privilegio CREATE TABLE, pero no el ALTER TABLE.

5.2.2 Implementacin de Seguridad

No se podr acceder a la BD a menos que se acceda primero al servidor en el que la


BD est ejecutndose. El primer paso en la seguridad de la BD es asegurar la
plataforma en la que reside. Una vez que esto ha sido conseguido, se debe considerar
la seguridad del sistema operativo. Oracle utiliza una serie de ficheros a los que los
usuarios no tienen porque acceder de manera directa. Por ejemplo, los ficheros de
datos o los de redo log son escritos y leidos slo por los procesos Oracle. As, slo los

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 170

DBAs que han creado estos ficheros necesitan acceder directamente a ellos a nivel del
sistema operativo.

5.2.2.1 Creacin de Usuarios

El objetivo de la creacin de usuarios es establecer una cuenta segura y til, que


tenga los privilegios adecuados y los valores por defecto apropiados. En Oracle se
puede especificar todo lo necesario para abrir una cuenta con el comando CREATE
USER. Los parmetros que se le pueden pasar son:

Parmetro Significado
Username Nombre del Usuario (Esquema)
Palabra clave de la cuenta. Puede ser asociada directamente a
Password
una cuenta del sistema operativo.
Espacio de tablas por defecto en el que los objetos de este
Default
usuario sern creados. Esto no da al usuario derechos de crear
Tablespace
objetos.
Temporary El espacio de tablas en el que se almacenarn los segmentos
Tablespace temporales de las ordenaciones.
Quota Espacio mximo que puede ocupar en un espacio de tablas.
Asigna un perfil al usuario. Los perfiles se utilizan para restringir
Profile
el uso de recursos como el tiempo de CPU.

A continuacin se puede ver un ejemplo de uso del comando CREATE USER en el


que se crea una cuenta para el usuario JPEREZ:

SQL> create user JPEREZ


2> identified by cibertec
3> default tablespace users
4> temporary tablespace temp;

Si no se especifica un perfil, se aplica el perfil por defecto de la BD, que se llama


DEFAULT y tiene asignados todos los lmites a UNLIMITED.
Si no se especifca una cuota el usuario no puede crear objetos.
Para obtener informacin de los usuarios, se consultan estas vistas:

DBA_USERS
PROFILE:
Nombre del perfil del usuario
USERNAME:
Nombre del Usuario

DBA_PROFILES
LIMIT:
Indica el lmite de este recurso para este perfil
RESOURCE_TYPE:
Indica si el tipo de recurso es un parmetro de KERNEL de PASSWORD
RESOURCE_NAME:
Nombre del recurso
PROFILE:
Nombre del perfil

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 171

DBA_TS_QUOTAS
MAX_BLOCKS:
Cuota del usuario en bloques. Si es 1 es cuota ilimitada
BLOCKS:
Cantidad de bloques Oracle cargados al usuario
MAX_BYTES:
Cuota del usuario en bytes. Si es 1 es cuota ilimitada
BYTES:
Cantidad de bytes cargados al usuario
USERNAME:
Nombre del usuario que tiene derecho de recurso sobre el tablespace
TABLESPACE_NAME:
Nombre del tablespace

En el siguiente ejemplo, se usan estas vistas

SQL> SELECT TABLESPACE_NAME,


2 BYTES FROM DBA_TS_QUOTAS
3 WHERE USERNAME = USER01;

TABLESPACE_NAME BYTES
---------------- --------
DATOS 20480

SQL> SELECT USERNAME, ACCOUNT_STATUS,


2 TEMPORARY_TABLESPACE FROM DBA_USERS;

USERNAME ACCOUNT_STATUS TEMPORARY_TABLESPACE


------------- ---------------- -------------------------
SYS OPEN TEMP
SYSTEM OPEN TEMP
DBSNMP OPEN TEMP
USER01 OPEN TEMP

5.2.2.2 Eliminacin de Usuarios

Los usuarios pueden ser eliminados de la BD utilizando el comando DROP USER.


Este comando tiene un nico parmetro, CASCADE, el cual permite borrar todos los
objetos del usuario antes de eliminar el usuario.
A continuacin un ejemplo en el que eliminamos al usuario Prez:

Drop user JPEREZ cascade;

Si a continuacin se crea otro usuario con el mismo nombre no hereda los objetos del
anterior usuario con ese nombre. La razn se debe a que Oracle asigna a cada
cuenta un nmero adems del nombre, y utiliza ese nmero para determinar el
propietario de todos los objetos que crea esa cuenta, y no utiliza el nombre sino para
la comunicacin con los usuarios. De este modo al crear un nuevo usuario, aunque
sea con el mismo nombre, no puede heredar los objetos que antes eran de otro
usuario con el mismo nombre.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 172

5.2.2.3 Privilegios del Sistema

Los roles de sistema se utilizan para distribuir la disponibilidad de los comandos del
sistema utilizados para gestionar la BD. Los privilegios ms comunes estn en la
siguiente tabla. En ella se distinguen entre privilegios de manejo de objetos y de
gestin de la BD. La palabra clave ANY significa que ese usuario tiene el privilegio
para todos los esquemas en la BD. Hay que hacer notar que ANY y PUBLIC no son
sinnimos.

Privilegio Capacidades
Manejo de Objetos ...
CREATE ANY INDEX Crear cualquier ndice.
CREATE [PUBLIC]
Crear sinnimos [pblicos].
SYNONYM
Crear tablas. El usuario debe tener cuota en el espacio de
CREATE [ANY] TABLE tablas, o ha de tener asignado el privilegio UNLIMITED
TABLESPACE.
CREATE [ANY] VIEW Crear vistas.
ALTER ANY INDEX Alterar cualquier ndice.
ALTER ANY TABLE Alterar cualquier tabla
DROP ANY INDEX Borrar cualquier ndice.
DROP ANY SYNONYM Borrar cualquier sinnimo.
DROP PUBLIC
Borrar sinnimos pblicos.
SYNONYM
DROP ANY VIEW Borrar cualquier vista.
DROP ANY TABLE Borrar cualquier tabla.
SELECT ANY TABLE Efectuar selecciones de cualquier tabla o vista.
INSERT ANY TABLE Insertar en cualquier tabla o vista.
DELETE ANY TABLE Borrar filas de cualquier tabla o vista, y tambin truncar.
ALTER SESSION Alterar los parmetros de la sesin.
CREATE SESSION Conectarse a la BD.
Gestin de la BD ...
CREATE PROFILE Crear perfiles de usuario.
CREATE ROLE Crear roles.
CREATE ROLLBACK
Creacin de segmentos de rollback.
SEGMENT
CREATE TABLESPACE Crear espacios de tablas.
CREATE USER Crear usuarios.
ALTER PROFILE Alterar perfiles existentes.
ALTER ANY ROLE Alterar cualquier rol.
ALTER ROLLBACK
Alterar segmentos de rollback.
SEGMENT
ALTER TABLESPACE Alterar espacios de tablas.
ALTER USER Alterar usuarios.
DROP PROFILE Borrar un perfil existente.
DROP ANY ROLE Borrar cualquier rol.
DROP ROLLBACK Borrar un segmento de rollback existente.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 173

SEGMENT
DROP TABLESPACE Borrar un espacio de tablas.
Borrar un usuario. Aadir CASCADE si el usuario posee
DROP USER
objetos.
ALTER DATABASE Permite una sentencia ALTER DATABASE.
GRANT ANY
Otorgar cualquiera de estos privilegios.
PRIVILEGE
GRANT ANY ROLE Otorgar cualquier rol a un usario.
UNLIMITED
Puede usar una cantidad de almacenamiento ilimitada.
TABLESPACE
DROP PROFILE Borrar un perfil existente.

Los privilegios se pueden agrupar en roles, para as satisfacer a distintos tipos de


usuarios. En la instalacin se crea un rol llamado OSOPER que sirve para los
operarios de la mquina donde est la BD y permite realizar copias de seguridad en
frio y en caliente.

Los privilegios de OSOPER son STARTUP, SHUTDOWN, ALTER DATABASE


OPEN/MOUNT, ALTER DATABASE BACKUP, ARCHIVE LOG, RECOVER y
RESTRICTED SESSION.

Se pueden crear nuevos roles. Por ejemplo, podemos crear un rol llamado
creadorUsuarios que slo pueda crear usuarios y no pueda realizar ninguna otra
operacin de DBA. Las sentencias que permiten hacer esto son las siguientes:

Create role creadorUsuarios;


Statement processed.
Grant create session, create user to creadorUsuarios;
Statement processed.

Oracle incluye otros tres roles de sistema: CONNECT, RESOURCE y DBA, cuyos
privilegios son:

Rol Privilegios
alter session, create session, create cluster, create table, create view,
CONNECT
create synonym, create sequence, create database link
create cluster, create table, create procedure, create sequence, create
RESOURCE
trigger
DBA todos los privilegios de sistema con la opcion with admin option

5.2.2.4 Perfiles de Usuario

Los perfiles se utilizan para limitar la cantidad de recursos del sistema y de la BD


disponibles para un usuario. Si no se definen perfiles para un usuario se utiliza el perfil
por defecto, que especifica recursos ilimitados.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 174

Los recursos que pueden ser limitados via perfil son los siguientes:

Recurso a Nivel de Sesin Descripcin


El nmero de sesiones concurrentes que un
SESSIONES_PER_USER
usuario puede tener en una instancia.
El tiempo de CPU, en centenas de segundos, que
CPU_PER_SESSION
una sesin puede utilizar.
El nmero de minutos que una sesin puede
CONNECT_TIME
permanecer activa.
El nmero de minutos que una sesin puede
IDLE_TIME permanecer sin que sea utilizada de manera
activa.
El nmero de bloques de datos que se pueden
LOGICAL_READS_PER_SESSION
leer en una sesin.
El nmero de bloques de datos que se pueden
LOGICAL_READS_PER_CALL
leer en una operacin.
La cantidad de espacio privado que una sesin
PRIVATE_SGA puede reservar en la zona de SQL compartido de
la SGA.
El nmero de total de recursos por sesin, en
unidades de servicio. Esto resulta de un calculo
ponderado de CPU_PER_SESSION,
COMPOSITE_LIMIT CONNECT_TIME,
LOGICAL_READS_PER_SESSION y
PRIVATE_SGA, cuyos pesos se pueden variar
con el comando ALTER RESOURCE COST.

Se habilita los lmites de uso de recursos:


Con el parmetro de inicializacin RESOURCE_LIMIT
RESOURCE_LIMIT = TRUE

Con el comando ALTER SYSTEM


ALTER SYSTEM SET RESOURCE_LIMIT=TRUE;

Para obtener informacin de los lmites de recursos. Se consulta la vista DBA_USERS:

Atributos:

EXTERNAL_NAME: Nombre externo del usuario


INITIAL_RSRC_CONSUMER_GROUP: Grupo consumidor de recursos para el
usuario
PROFILE: Nombre del perfil del usuario
CREATED: Fecha de creacin del usuario
TEMPORARY_TABLESPACE: Tablespace por defecto para tablas temporales
DEFAULT_TABLESPACE: Tablespace por defecto para los datos
EXPIRY_DATE: Fecha en la que expira la cuenta
LOCK_DATE: Fecha en la que fue bloqueda la cuenta
ACCOUNT_STATUS: Bloqueada, desbloqueada o expirada
PASSWORD: Contrasea encriptada
USER_ID: Nmero de identificacin del usuario
USERNAME: Nombre del usuario

En el siguiente ejemplo se ve el uso de esta vista:

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 175

SQL> SELECT P.PROFILE, P.RESOURCE_NAME, P.LIMIT


2 FROM DBA_USERS U, DBA_PROFILES P
3 WHERE P.PROFILE = U.PROFILE AND USERNAME = USER01
AND
4 P.RESOURCE_TYPE = KERNEL;

PROFILE RESOURCE_NAME LIMIT


----------------------------- ------------------------------------------------- -------------
DEVOLOPER_PROF COMPOSITE_LIMIT DEFAULT
DEVOLOPER_PROF SESSIONS_PER_USER 2
DEVOLOPER_PROF CPU_PER_SESSION 10000
DEVOLOPER_PROF CPU_PER_CALL DEFAULT
DEVOLOPER_PROF LOGICAL_READS_PER_SESSION DEFAULT
DEVOLOPER_PROF LOGICAL_READS_PER_CALL DEFAULT
DEVOLOPER_PROF IDLE_TIME 60
DEVOLOPER_PROF CONNECT_TIME 480
DEVOLOPER_PROF COMPOSITE_LIMIT DEFAULT
9 rows selected.

Los perfiles se pueden crear va el comando CREATE PROFILE, y se pueden


modificar con la sentencia ALTER PROFILE.

Para crear el perfil MIPERFIL:

CREATE PROFILE MIPERFILE LIMIT


SESSIONS_PER_USER 2
CPU_PER_SESSION unlimited
CPU_PER_CALL 6000
LOGICAL_READS_PER_SESSION unlimited
LOGICAL_READS_PER_CALL 100
IDLE_TIME 30
CONNECT_TIME 480;

Para modificar el perfil MIPERFIL:

ALTER PROFILE MIPERFIL LIMIT


CPU_PER_CALL default
LOGICAL_READS_PER_SESSION 20000;

Tambin se puede borrar el perfil MIPERFIL con el comando DROP PROFILE:

DROP PROFILE MIPERFIL CASCADE;

En general, el perfil por defecto debe ser adecuado para los usuarios normales; los
usuarios con requerimientos especiales deberan tener perfiles especiales.

5.2.2.5 Cuentas BD sobre Cuentas SO

Los usuarios pueden entrar en la BD una vez que han dado un nombre de usuario y
una palabra de paso. Sin embargo, es posible aprovecharse del Sistema Operativo
para obtener un nivel adicional de autentificacin.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 176

La cuenta de la BD y del SO pueden relacionarse de manera que la de la BD se


diferencie slo en un prefijo de la cuenta del SO. Este prefijo se fija en el parmetro
OS_AUTHENTIC_PREFIX del fichero init.ora. Por defecto esta puesto a "OPS$", pero
puede tomar cualquier forma, incluso ser la cadena nula, "", con lo que no existe prefijo
que diferencie las cuentas en la BD y en el SO.

Por ejemplo, consideremos la cuenta del SO llamada JPEREZ. La correspondiente


cuenta en la BD sera OPS$JPEREZ. Cuando el usuario alu10 est en activo en el
SO, puede acceder a su cuenta OPS$JPEREZ sin especificar el password, como se
muestra a continuacin: $ sqlplus /

En este caso el carcter "/" toma el lugar de la combinacin del nombre de usuario y
del password que debera aparecer. Las cuentas pueden ser creadas con passwords
aunque no vaya a ser utilizado. Ya que de este modo ser posible acceder a la cuenta
de OPS$Alumno desde otra cuenta diferente a la alu10 del SO. La sentencia de
creacin de la cuenta OPS$JPEREZ puede ser la siguiente:

SQL>create user ops$JPEREZ


2> identified by cibertec
3> default tablespace users
4> temporary tablespace temp;

As, la forma de conectarse como OPS$Alumno desde una cuenta del SO diferente es:

$ sqlplus ops$JPEREZ/cibertec

Existen dos formas de evitar este problema. La primera es creando el usuario BD sin
especificar un password, utilizando la clasula IDENTIFIED EXTERNALLY. De esta
manera evitamos la necesidad de specificar un password para la cuenta, obligando a
la conexin entre las cuentas de la BD y del SO:

SQL>create user ops$JPEREZ


2> identified externally
3> default tablespace users
4> temporary tablespace temp;

La otra manera de evitar el problema es crear una cuenta con un password imposible,
aspecto este que se explicar ms adelante.

5.2.2.6 Protegidos por passwords

Los passwords pueden proteger tanto cuentas como roles. Los passwords se fijan a la
hora de la creacin de ambos y se pueden modificar con los comandos ALTER USER
y ALTER ROLE, respectivamente. No es necesario asignar un password a un rol, pero
si tiene uno debe ser especificado por el usuario cuando se asigna ese rol.

5.2.2.7 Gestionando Privilegios

Los privilegios dan acceso a los usuarios a los datos que no poseen. Los roles con
grupos de privilegios que facilitan la administracin de los privilegios. Pero los
privilegios se pueden manejar de manera explcita en algunas circunstancias. Los

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 177

privilegios se crean va el comando GRANT y son registrados en el diccionario de


datos.
Los privilegios que pueden otorgarse sobre objetos son los siguientes:

Privilegio Capacidades Otorgadas


SELECT Puede consultar a un objeto.
Puede insertar filas en una tabla o vista. Puede especificarse las
INSERT
columnas donde se permite insertar dentro de la tabla o vista.
Puede actualizar filas en una tabla o vista. Puede especificarse las
UPDATE
columnas donde se permite actualizar dentro de la tabla o vista.
DELETE Puede borrar filas dentro de la tabla o vista.
ALTER Puede alterar la tabla.
INDEX Puede crear ndices de una tabla.
REFERENCES Puede crear claves ajenas que referencia a esta tabla.
EXECUTE Puede ejecutar un procedimiento, paquete o funcin.

Haciendo un privilegio PUBLIC lo hace disponible a todos los usuarios de la BD.


Aunque los privilegios se puedan otorgar individualmente, no resulta razonable basar
la gestin de los privilegios en su asignacin individual. La gestin de los privilegios se
facilita con la utilizacin de los roles. A continuacin se puede ver como se crean dos
roles, el PROFESORES que permite establecer una sesin, y el rol
INSERTA_JPEREZ que permite insertar y seleccionar en la tabla emp de JPEREZ:

create role profesores;


Statement processed.
grant create session to profesores;
Statement processed.

create role inserta_jperez;


Statement processed.
grant select, insert on JPEREZ.emp to inserta_jperez;
Statement processed.

Se pueden asignar roles a roles:

grant usuarios to inserta_jperez;

Los roles pueden asignarse a los usuarios. As, podemos asignar el rol
INSERTA_JPEREZ al usuario Juan:

grant inserta_jperez to Juan;

Los roles se pueden denegar con el comando REVOKE.

5.2.2.8 Listar Privilegios Otorgados

La informacin de los privilegios otorgados se almacena en el diccionario de datos.


Estos datos son accesibles a travs de las siguientes vistas del diccionario de datos:

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 178

Vista Contenidos
DBA_ROLES Nombres de los roles y su estado del password.
DBA_ROLES_PRIVS Usuarios a los que han sido otorgados roles.
DBA_SYS_PRIVS Usuarios a los que han sido otorgados privilegios del sistema.
Usuarios a los que han sido otorgados privilegios sobre
DBA_TAB_PRIVS
objetos.
Usuarios a los que han sido otorgados privilegios sobre
DBA_COL_PRIVS
columnas de tablas.
ROLE_ROLE_PRIVS Roles que han sido otorgados a otros roles.
ROLE_SYS_PRIVS Privilegios de sistema que han sido otorgados a roles.
ROLE_TAB_PRIVS Privilegios de tabla que han sido otorgados a roles.

Relaciones entre los elementos de la Seguridad en Oracle

5.2.2.9 Contraseas

A travs de los perfiles se pueden gestionar la caducidad, reutilizacin y complejidad


(funcin utlpwdmg.sql).

Para encriptar las contraseas en el login (en segundo intento). Se usa:

ORA_ENCRYT_LOGIN=TRUE (sqlnet.ora)

DBLINK_ENCRYT_LOGIN=TRUE ((s)pfile)

5.2.2.10 Database Resource Manager

Permite controlar con mayor precisin en los perfiles, el uso de recursos


Se puede usar mediante:

DBMS_RESOURCE_MANAGER
OEM

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 179

5.3 Auditoria En Oracle


5.3.1 Auditora de Seguridad

El SGBD Oracle tiene la capacidad de auditar todas las acciones que tienen lugar en
la BD. Se pueden auditar tres tipos de acciones:

intentos de entrada en cuentas de la BD.


accesos a los objetos de la BD.
acciones sobre la BD.

La BD registra todos los intentos de accin, tanto los exitosos como los infructuosos,
aunque es un parmetro configurable.
Para habilitar la capacidad de auditora, se debe fijar el parmetro AUDIT_TRAIL en el
fichero init.ora. Los registros de auditora se almacenan en la tabla SYS.AUD$ o bien
su gestin se deja al SO. Cuando se decide utilizar la tabla SYS.AUD$ esta debe
revisarse peridicamente, por si hiciera falta truncarla debido a que su aumento de
tamao puede causar problemas de espacio en el tablespace SYSTEM. Los valores
del parmetro AUDIT_TRAIL son los que se exponen en la siguiente tabla:

Valor Descripcin
NONE Deshabilita la auditora
BD Habilita la auditora, escribiendo en la tabla SYS.AUD$.
OS Habilita la auditora, dejando al SO su gestin.

5.3.1.1 Auditando Conexiones


Todo intento de conexin con la BD ser registrado. El comando para iniciar la
auditora es

audit session;

Para determinar si se deben registrar slo los xitos, o slo los fracasos se pueden
utilizar los siguientes comandos:

audit session whenever successful;


audit session whenever not successful;

Si los registros de auditora se almacenan en la tabla SYS.AUD$, entonces pueden


verse a travs de la vista DBA_AUDIT_SESSION.

select
os_username, /* nombre de usuario SO */
username, /* nombre de usuario BD */
terminal,
decode(returncode,'0','Conectado',
'1005','Solo username, sin password',
'1017','Password incorrecto',
returncode), /* comprobacion de error */
to_char(timestamp,'DD-MON-YY HH24:MI:SS'), /* hora de entrada */
to_char(logoff_time,'DD-MON-YY HH24:MI:SS') /* hora de salida */
from dba_audit_session;

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 180

Para deshabilitar la auditoria de las conexiones basta con ejecutar la siguiente


sentencia:

noaudit session;

5.3.1.2 Auditando Acciones


Se puede auditar cualquier accin que afecte a cualquier objeto de la BD. Para facilitar
la gestin, las acciones a auditar se encuentran agrupadas segn los grupos que se
muestran en la siguiente tabla:

Grupo Comandos Auditados


CLUSTER Todas las sentencias que afecten a clusters.
Todas las sentencias que afecten a enlaces de
DATABASE LINK
BD.
Todas las sentencias que fallen porque ya existe
EXISTS
un objeto en la BD.
INDEX Todas las sentencias que afecten a ndices.
Todas las sentencias que fallen porque un
NOT EXISTS
determinado objeto no existe.
Todas las sentencias que afecten a
PROCEDURE
procedimientos.
PROFILE Todas las sentencias que afecten a perfiles.
PUBLIC DATABASE Todas las sentencias que afecten a enlaces
LINK pblicos de BD.
Todas las sentencias que afecten a sinnimos
PUBLIC SINONYM
pblicos.
ROLE Todas las sentencias que afecten a roles.
ROLLBACK Todas las sentencias que afecten a segmentos de
SEGMENT rollback.
SEQUENCE Todas las sentencias que afecten a secuencias.
SESSION Todas las sentencias de acceso a la BD.
SYNONYM Todas las sentencias que afecten a sinnimos.
SYSTEM AUDIT Todas las sentencias AUDIT y NOAUDIT.
SYSTEM GRANT Todas las sentencias afecten a privilegios.
TABLE Todas las sentencias que afecten a tablas.
Todas las sentencias que afecten a espacios de
TABLESPACE
tablas.
TRIGGER Todas las sentencias que afecten a disparadores.
Todas las sentencias que afecten a las cuentas de
USER
usuarios.
VIEW Todas las sentencias que afecten a vistas.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 181

Por ejemplo, para auditar todas acciones que tienen que ver con las tablas sirve el
siguiente comando:

audit table;

Y para deshabilitar la auditora se utilizar el siguiente comando:

noaudit table;

Tambin se puede afinar un poco ms en la auditora fijando un usuario concreto al


que seguir la pista:

audit table by jperez;

Cada accin auditada recibe un cdigo numrico al que se puede acceder a travs de
la vista AUDIT_ACTIONS. Una vez que conocemos el cdigo de la accin, podemos
utilizarlo para determinar como dicha accin ha afectado a un objeto, consultado la
vista DBA_AUDIT_OBJECT.

5.3.1.3 Auditando Objetos


Adems de la auditora de acciones sobre los objetos, se puede seguir el rastro a las
operaciones de manipulacin de tablas: SELECT, INSERT, UPDATE y DELETE. Estas
auditoras se pueden hacer por sesin o por acceso.

Un ejemplo de sentencias de auditoras sobre objetos se puede ver en el siguiente


grupo de sentencias:

audit insert on jperez.emp;


audit all on jperez.emp by session;
audit delete on jperez.emp by access;

Los registros de auditora se pueden ver en la misma vista DBA_AUDIT_OBJECT


anteriormente mencionada.

5.3.1.4 Protegiendo los Registros de Auditora


Los registros de la tabla SYS.AUD$ pueden ser objeto de intentos de acceso para ser
eliminados ya que pueden reflejar acciones no autorizadas en la BD. As, resulta
interesante reflejar ese tipo de acciones. Esto se consigue con el siguiente comando:

audit all on sys.aud$ by access;

De este modo cualquier accin contra la tabla SYS.AUD$ quedar registrado.


Adems, las acciones contra la tabla SYS.AUD$ slo pueden ser borradas por los
usuarios que puedan conectarse como INTERNAL.

5.3.2 Informacin de la Auditoria

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 182

Vistas sobre la tabla SYS.DBA$:

AUDIT_ACTIONS: Tabla con tipos de accin de la auditora (accin, nombre)


ALL_DEF_AUDIT_OPTS: Opciones por defecto de la auditora (ALT, AUD,COM,
DEL, GRA, IND, INS, LOC, REN, SEL, UPD, REF, EXE)
DBA_AUDIT_EXISTS: Registros de auditora del sistema (AUDIT EXISTS)
DBA_AUDIT_OBJECT: Todos los objetos del sistema
DBA_AUDIT_SESSION: CONNECT y DISCONNECT
DBA_AUDIT_TRAIL: Todo el sistema
DBA_STMT_AUDIT_OPTS: Opciones actuales sobre el sistema y por el usuario
DBA_OBJ_AUDIT_OPTS: Opciones sobre las tablas y vistas
USER_AUDIT_EXISTS: Registro de Auditoria del usuario (AUDIT EXISTS)
USER_AUDIT_OBJECTS: Los objetos del usuario
USER_AUDIT_SESSION: CONNECT y DISCONNECT usuario
USER_AUDIT_TRAIL: Registro de Auditora por usuario
USER_OBJ_AUDIT_OPTS: Tablas y vistas del usuario

Si se desea ms detalle sobre cada una de las vistas, podemos usar la vista
DBA_COL_COMMENTS para saber qu informacin se guarda en cada campo de las
vistas anteriormente mencionadas. Por ejemplo:

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 183

Autoevaluacin

1.- Explique la diferencia entre perfil y privilegio.

2.- Explique la diferencia entre privilegio de sistema y prvilegios de objetos.

3.- Si un usuario crea una tabla, pero no indica en qu tablespace se va a


crear. Al final en qu tablespace de la Base de Datos se crear dicha tabla?.

4.- A usted le gusta anticiparse a los hechos, Ha definido una buena poltica de
manejo de privilegios. Un campo importante es SAL de la tabla EMP.
Implemente una auditora para registrar qu usuarios estn intentando ver la
tabla EMP, a pesar que no tienen el privilegio necesario.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 184

5.4 Respaldo y Recuperacin


5.4.1 Respaldo (Backup)

Para conseguir un funcionamiento seguro de la BD y una pronta recuperacin ante


fallos se necesita planear una estrategia de copias de seguridad, backup, y de
recuperacin, recovery, ya que de nada sirve pensar que estamos a salvo de tales
circunstancias, y que eso no nos puede pasar . Y el primer paso a dar es definir las
caractersticas fundamentales de la implantacin, porque mal vamos a conseguir unos
objetivos si se desconocen o estn indefinidos. El segundo paso es establecer unos
planes de copias de seguridad y recuperacin que nos permitan asegurar los
objetivos.

Planear y comprobar los procedimientos de backup del sistema es la nica garanta


que existe contra fallos del sistema, del SO, del software o cualquier otro tipo de
circunstancias. Las causas de error en una sistema de BD pueden agruparse en las
siguientes categoras:

Fsicas.- son causadas por fallos del hardware, como por ejemplo del disco o de la
CPU.
De Diseo.- son agujeros en el software, ya sea en el SO o en el SGBD.
De Funcionamiento.- son causadas por la intervencin humana, debidos a fallos del
DBA, configuraciones inapropiadas o mal planteamiento de los procedimientos de
backup.
Del entorno.- como por ejemplo desastres naturales, fallos de corriente, temperatura
excesiva.

De entre todas estas posibilidades, el DBA (Administrador de Base de Datos) slo


puede influir y prever los errores de funcionamiento, ya que el resto habitualmente no
est dentro de sus responsabilidades y capacidades.
Dada la complejidad de los sistemas actuales y las necesidades cada vez ms crticas
en la disponibilidad de los sistemas, donde una BD caida puede causar prdidas
millonarias, puede ser interesante considerar los mecanismos de proteccin hardware
y de redundancia que la tecnologa nos proporciona:

UPS o fuentes de corriente ininterrumpida,


espejado de disco, o tecnologa RAID,
Componentes duplicados,
Sistemas redundantes.

Una de las ms importantes decisiones que un DBA debe tomar es decidir si arrancar
la BD en modo ARCHIVELOG o no. Esta decisin tiene sus ventajas e inconvenientes:

Ventajas:
Aunque se pierdan los ficheros de datos, siempre se puede recuperar la BD con
una copia antigua de los ficheros de datos y los ficheros de redo log archivados.
Es posible realizar backups en caliente.

Inconvenientes:
Se necesitar ms espacio en disco.
El trabajo del DBA se incrementa al tener que determinar el destino del archivado
de los redo log.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 185

5.4.2 Tipos de Backup

Los backups se pueden clasificar en fsicos y lgicos. Los fsicos se realizan cuando
se copian los ficheros que soportan la BD. Entre estos se encuentran los backups del
SO, los backups en fro y los backups en caliente.
Los backups lgicos slo extraen los datos de las tablas utilizando comandos SQL y
se realizan con la utilidad export/import.

Backups del SO
Este tipo de backup es el ms sencillo de ejecutar, aunque consume mucho tiempo y
hace inaccesible al sistema mientras se lleva a cabo. Aprovecha el backup del SO
para almacenar tambin todos los ficheros de la BD. Los pasos de este tipo de backup
son los siguientes:

1. Parar la BD y el SO
2. Arrancar en modo superusuario.
3. Realizar copia de todos los ficheros del sistema de ficheros
4. Arrancar el sistema en modo normal y luego la BD.

Backups de la BD en Frio
Los backups en frio implican parar la BD en modo normal y copiar todos los ficheros
sobre los que se asienta. Antes de parar la BD hay que parar tambin todos las
aplicaciones que estn trabajando con la BD. Una vez realizada la copia de los
ficheros, la BD se puede volver a arrancar.

Backups de la BD en Caliente
El backup en caliente se realiza mientras la BD est abierta y funcionando en modo
ARCHIVELOG. Habr que tener cuidado de realizarlo cuando la carga de la BD sea
pequea. Este tipo de backup consiste en copiar todos los ficheros correspondientes a
un tablespace determinado, los ficheros redo log archivados y los ficheros de control.
Esto para cada tablespace de la BD.

Backups Lgicos con Export/Import


Estas utilidades permiten al DBA hacer copias de determinados objetos de la BD, as
como restaurarlos o moverlos de una BD a otra. Estas herramientas utilizan comandos
del SQL para obtener el contenido de los objetos y escribirlos en/leerlos de ficheros
Una vez que se ha planeado una estrategia de backup y se ha probado, conviene
automatizarla para facilitar as su cumplimiento.

5.4.3 Tipos de Recuperacin


Oracle proporciona diferentes modos de recuperar un fallo en la BD, y es importante
que el DBA conozca como funciona cada uno de ellos para determinar cundo ha de
ser utilizado.

Una de las mayores responsabilidades del DBA consiste en tener la BD a punto, y


prepararla ante la posibilidad de que se produzca un fallo. As, ante un fallo el DBA
podr recuperar la BD en el menor tiempo posible. Los procesos de recuperacin
dependen del tipo de error y de las estructuras afectadas.

As, los tipos de error que se pueden producir son:

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 186

Errores de Usuario
Como por ejemplo un usuario borrando una fila o eliminando una tabla. Estos errores
se solucionan importando una tabla de una copia lgica anterior. Si no se dispone de
la copia lgica, se puede recuperar la BD en una instancia auxiliar, exportar la tabla en
cuestin de la instancia auxiliar e importarla en la instancia operativa.

Fallos de Sentencias
Se definen como la imposibilidad del SGBD Oracle de ejecutar alguna sentencia SQL.
Un ejemplo de esto se produce cuando se intenta una seleccin de una tabla que no
existe. Estos fallos se recuperan automticamente mediante un rollback de la
transaccin que contena la sentencia fallida. El usuario necesitar volver a ejecutar
otra vez la transaccin cuando se haya solucionado la causa del problema.

Fallos de Procesos
Es una terminacin anormal de un proceso. Si el proceso era un proceso de usuario,
del servidor o de una aplicacin el PMON efectuar la recuperacin del proceso. Si el
proceso era alguno de los de background, la instancia debe de ser parada y arrancada
de nuevo, proceso durante el cual se recupera la caida efectuando un roll forward y un
rollback de las transacciones no confirmadas.

Fallos de la Red
Algunas veces los fallos en la red producen fallos de proceso, que son tratados por el
PMON. Si en el error de red se ve envuelta una transaccin distribuida, una vez que se
reestablece la conexin, el proceso RECO resuelve los conflictos automticamente.

Fallos de Instancia
Pueden deberse a fallos fsicos o de diseo del software que hacen que algn proceso
background caiga y la instancia con l. La recuperacin es automtica cuando se
levanta la BD, tomandose ms o menos tiempo en la recuperacin.

Fallos del Sistema


Son los fallos ms peligrosos, no slo porque se pueden perder datos, sino porque se
tarda ms tiempo en recuperar que los otros fallos. Adems se depende mucho de la
experiencia del DBA para levantar la BD rpidamente y sin pdida (o casi) de datos.
Existen tres tipos de recuperacin en Oracle: a nivel de bloque, de thread y fsica.

Recuperacin de bloques
Es el mecanismo de recuperacin ms simple, y se realiza automticamente. Se
produce cuando un proceso muere justo cuando est cambiando un bloque, y se
utilizan los registros redo log en lnea para reconstruir el bloque y escribirlo en disco.

Recuperacin de threads
Se realiza automticamente cuando Oracle descubre que una instancia muere dejando
abierto un thread, entonces se restauran los bloques de datos modificados que
estaban en el cache de la instancia muerta, y cerrando el thread que estaba abierto.
La recuperacin se efectua automticamento cuando la BD se levanta.

Recuperacin fsica
Se realiza como respuesta a un comando RECOVER. Se utiliza para convertir los
ficheros de backup en actuales, o para restaurar los cambios que fueron perdidos
cuando un fichero de datos fue puesto offline sin un checkpoint, aplicando los fichero
redo log archivados y en lnea.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 187

5.4.4 Administracin del backup

Un backup vlido es una copia de la informacin sobre la BD necesaria para


reconstruir la BD a partir de un estado no utilizable de la misma. Normalmente, si la
estrategia de backup se basa en la copia de los ficheros de datos y en el archivado de
los ficheros redo log, se han de tener copias de los ficheros de datos, de los ficheros
de control, de los ficheros redo log activos y tambin de los archivados. Si se pierde
uno de los ficheros redo log archivados se dice que se tiene un agujero en la
secuencia de ficheros. Esto invalida el backup, pero permite a la BD ser llevada hasta
el principio del agujero realizando una recuperacin incompleta.

5.4.4.1 Diseo de la BD y Reglas Bsicas de Backup

Antes de nada, es muy importante entender ciertas reglas que determinan la situacin
de los ficheros y otras consideraciones que afectarn al esquema de backup:

Es recomendable archivar los ficheros redo log en disco, y luego copiarlos a cinta,
pero siempre en un disco diferente del que soporta los ficheros de datos y de redo
log activos.
Los ficheros copias no deben estar en el mismo dispositivo que los originales. No
siempre hay que pasar las copias a cinta, ya que si se dejan en disco se acelera la
recuperacin. Adems, si se copian las copias a cinta y se mantienen en el disco,
se puede sobrevivir a diversos fallos de dispositivo.
Se deberan mantener diferentes copias de los ficheros de control, colocadas en
diferentes discos con diferentes controladores.
Los ficheros redo log en lnea deben estar multiplexados, con un mnimo de 2
miembros por grupo, residiendo cada miembro en un disco distinto.
Siempre que la estructura de la BD cambie debido a la inclusin, borrado o
renombrado de un fichero de datos o de redo log, se debe copiar el fichero de
control, ya que almacenan la estructura de la BD. Adems, cada fichero aadido
tambin debe ser copiado. El fichero de control puede ser copiado mientras la BD
est abierta con el siguiente comando:

SQL> alter database backup controlfile to 'destino';

Teniendo en cuenta las reglas anteriores, los siguientes puntos pueden considerarse
un ejemplo de estrategia de backup:
1. Activar el modo ARCHIVELOG.
2. Realizar un backup al menos una vez a la semana si la BD se puede parar. En
otro caso, realizar backups en caliente cada da.
3. Copiar todos los ficheros redo log archivados cada cuatro horas. El tamao y el
nmero de ellos depender de la tasa de transacciones.
4. Efectuar un export de la BD semanalmente en modo RESTRICT.

5.4.4.2 Backups Fsicos

Los backups fsicos son aquellos que copian fsicamente los ficheros de la BD. Existen
dos opciones: en fro y en caliente. Se dice que el backup es en frio cuando los
ficheros se copian con la BD esta parada. En caliente es cuando se copian los ficheros
con la BD abierta y funcionando.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 188

A. Backup en Fro
El primer paso es parar la BD con el comando shutdown normal. Si la BD se tiene que
parar con inmediate o abort debe rearrancarse con el modo RESTRICT y vuelta a
parar en modo normal. Despus se copian los ficheros de datos, los de redo log y los
de control, adems de los redo log archivados y an no copiados.
Una buena idea es automatizar todo este proceso con los scripts correspondientes, de
modo que no nos olvidemos de copiar ningn fichero.

Como este tipo de backup es una copia de los ficheros de la BD, si estos contienen
algn tipo de corrupcin, la traspasaremos a la copia de seguridad sin detectarla. Por
esto es importante comprobar las copias de seguridad.

B. Backup en Caliente
Si la implantacin de BD requiere disponibilidad de la misma 24h. al da, 7 dias a la
semana no se pueden realizar backups en frio. Para efectuar un backup en caliente
debemos trabajar con la BD en modo ARCHIVELOG. El procedimiento de backup en
caliente es bastante parecido al frio. Existen dos comandos adicionales: begin backup
antes de comenzar y end backup al finalizar el backup. Por ejemplo, antes y despus
de efectuar un backup del tablespace users se deberan ejecutar las sentencias:

SQL> alter tablespace users begin backup;


SQL> alter tablespace users end backup;

As como el backup en frio permita realizar una copia de toda la BD al tiempo, en los
backups en caliente la unidad de tratamiento es el tablespace. El backup en caliente
consiste en la copia de los ficheros de datos (por tablespaces), el actual fichero de
control y todos los ficheros redo log archivados creados durante el periodo de backup.
Tambin se necesitarn todos los ficheros redo log archivados despus del backup en
caliente para conseguir una recuperacin total.

5.4.4.3 Backups Lgicos

Este tipo de backups copian el contenido de la BD pero sin almacenar la posicin


fsica de los datos. Se realizan con la herramienta export que copia los datos y la
definicin de la BD en un fichero en un formato interno de Oracle.

Para realizar un export la BD debe estr abierta. Export asegura la consistencia en la


tabla, aunque no entre tablas. Si se requiere consistencia entre todas las tablas de la
BD entonces no se debe realizar ninguna transaccin durante el proceso de export.
Esto se puede conseguir si se abre la BD en modo RESTRICT.

Entre las ventajas de efectuar un export estn las siguientes:

Se puede detectar la corrupcin en los bloques de datos, ya que el proceso de


export fallar.
Protege de fallos de usuario, por ejemplo si se borra una fila o toda una tabla por
error es fcil recuperarla por medio de un import.
Se puede determinar los datos a exportar con gran flexibilidad.
Se pueden realizar exports completos, incrementales y acumulativos.
Los backups relizados con export son portables y sirven como formato de
intercambio de datos entre BDs y entre mquinas.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 189

Una de las desventajas de realizar backups lgicos con export es que son mucho ms
lentos que los backups fsicos.

A. Parmetros de Export

Parmetro Defecto Descripcin


el username/password del usuario que efectua el
USERID indefinido
export.
dependiente
BUFFER El tamao en bytes del buffer utilizado.
del SO
FILE expdat.dmp el nombre del fichero destino.
GRANTS Yes indica si se exportan tambin los derechos.
INDEXES Yes indica si se exportan tambin los ndices.
indica si se exportan tambin las filas de las
ROWS Yes
tablas, o slo las definiciones de las tablas.
CONSTRAINTS Yes indica si se exportan tambin las restricciones.
COMPRESS Yes indica si se exporta en modo comprimido.
FULL No indica si se exporta la BD entera.
una lista de usuarios cuyos objetos se quieren
OWNER usuario actual
exportar.
TABLES indefinido la lista de tablas a exportar.
dependiente
RECORDLENGTH la longitud en bytes del registro del fichero.
del SO
INCTYPE indefinido el tipo de export incremental.
indica si se anota el export incremental en las
RECORD Yes
tablas SYS.INCVID y en SYS.INCEXP.
PARFILE indefinido el fichero de parmetros.

B. Modos de Export

Existen tres modos de realizar una exportacin de datos:

Modo Tabla.- Exporta las definiciones de tabla, los datos, los derechos del propietario,
los ndices del propietario, las restricciones de la tabla y los disparadores asociados a
la tabla.

Modo Usuario.- Exporta todo lo del modo de Tabla ms los clusters, enlaces de BD,
vistas, sinnimos privados, secuencias, procedimientos, etc. del usuario.

Modo BD Entera.- Adems de todo lo del modo Usuario, exporta los roles, todos los
sinnimos, los privilegios del sistema, las definiciones de los tablespaces, las cuotas
en los tablespaces, las definiciones de los segmentos de rollback, las opciones de
auditora del sistema, todos los disparadores y los perfiles.

El modo BD entera puede ser dividido en tres casos: Completo, Acumulativo e


Incremental. Estos dos ltimos se toman menos tiempo que el completo, y permiten
exportar slo los cmbios en los datos y en las definiciones.

Completo.- Exporta todas las tablas de la BD e inicializa la informacin sobre la


exportacin incremental de cada tabla. Despus de una exportacin completa, no se

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 190

necesitan los ficheros de exportaciones acumulativas e incrementales de la BD


anteriores.

$ exp userid=system/manager full=y inctype=complete constraints=Y


file=full_export_filename

Acumulativo.- Exporta solo las tablas que han sido modificadas o creadas desde la
ltima exportacin Acumulativa o Completa, y registra los detalles de exportacin para
cada tabla exportada. Despus de una exportacin acumulativa, no se necesitan los
ficheros de exportaciones incrementales de la BD anteriores.

$ exp userid=system/manager full=y inctype=cumulative constraints=Y


file=cumulative_export_filename

Incremental.- Exporta todas las tablas modificadas o creadas desde la ltima


exportacin Incremental, Acumulativa o Completa, y registra los detalles de
exportacin para cada tabla exportada. Son interesantes en entornos en los que
muchas tablas permanecen estticas por periodos largos de tiempo, mientras que
otras varan y necesitan ser copiadas. Este tipo de exportacin es til cuando hay que
recuperar rpidamente una tabla borrada por accidente.

$ exp userid=system/manager full=y inctype=incremental constraints=Y


file=incremental_export_filename

La poltica de exportacin puede ser la siguiente: realizar una exportacin completa el


da 1 (por ejemplo el domingo), y luego realizar exportaciones incrementales el resto
de la semana. De este modo de lunes a sbado slo se exportarn aquellas tablas
exportadas, ahorrando tiempo en el proceso.

5.4.5 Principios de la Recuperacion

Para entender los principios de la recuperacin, se necesita entender las estructuras


de datos subyacentes utilizadas en la recuperacin.

5.4.5.1 Definiciones y Conceptos

Los ficheros redo log contienen los cambios realizados sobre la BD. Conviene
presentar algunos conceptos relacionados con ellos.
Vector de Cambio

Describe un cambio simple en un bloque de datos de la BD. Entre otros datos,


contiene el nmero de versin, el cdigo de la transaccin, y la direccin del bloque
afectado.

Registro Redo log

Es un conjunto de vectores de cambio que describen un cambio atmico sobre la BD.


La transaccin es tambin la unidad de recuperacin.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 191

Evolucin de Redo log por da

Se puede calcular ejecutando el comando archive log list en dos das consecutivos y
calculando la diferencia del nmero de secuencia de los ficheros redo log, multiplicado
por el tamao de un fichero redo log:

SQL> archive log list;


Database log mode No Archive Mode
Automatic archival Disabled
Archive destination /opt/app/oracle/admin/demo/arch/arch.log
Oldest online log sequence 3
Current log sequence 5

System Change Number, SCN

Es un dato que define la versin confirmada de la BD en este instante de tiempo.


Cuando una transaccin es confirmada, se le asigna un SCN que la identifica
unvocamente. Los ficheros redo log son marcados con dos SCN. Cuando se abre un
nuevo fichero redo log se le marca con un SCN, low SCN, que es uno mas que el SCN
mayor del anterior fichero redo log; y su high SCN es puesto a infinito. Los SCN
tambin se asocian al fichero de control, ya que cuando se para una BD, un
tablespace o fichero de datos, se almacena para cada fichero de datos su stop SCN
en el fichero de control.

Cambio de redo log

Es el proceso mediante el cual se deja de utilizar un fichero redo log y el LGWR


combia al siguiente fichero redo log disponible. Se puede hacer con el comando alter
system switch logfile;.

Checkpoints

Son activados automticamente durante el funcionamiento normal de la instancia, pero


pueden ser activados manualmente con el comando alter system checkpoint local o
alter system checkpoint global dependiendo si nos referimos a la instancia en la que
estamos, o si queremos que afecte a todas las instancias activas, respectivamente.
Cada checkpoint lleva implicito un SCN, y Oracle asegura que todos los cmbios con
un SCN menor que el del checkpoint dado han sido escritos en el disco.

5.4.5.2 Mtodos de Recuperacin


Existen varios mtodos de recuperacin, pero todos ellos se basan en la aplicacin de
los registros de redo log.

A. Aplicacin de Redo Log


Cuando una BD se arranca con el comando startup, la BD pasa por los estados
nomount, mount y open. En este tercer estado, se verifica que se pueden abrir todos
los ficheros de log y de datos. Si la BD se arranca por primera vez despus de una
caida, se necesitar efectuar una recuperacin que consiste en dos pasos: avanzar la
BD hacia adelante aplicando los registros redo log, deshacer las transacciones no
confirmadas.
Cada fichero de datos tiene en su cabecera el ltimo checkpoint efectuado, as como
el fichero de control tambin lleva esa cuenta. El checkpoint lleva incluido el SCN. Este
es conocido como SCN de inicio de fichero. Asociado a cada fichero de datos el
fichero de control tiene el SCN de final, puesto inicialmente a infinito. El SCN de inicio
se incrementa con cada checkpoint.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 192

Cuando la BD se para en modo normal o inmediato iguala el SCN de parada para


cada fichero de datos al SCN almacenado en cada fichero de datos. Cuando se abre
otra vez la BD se realizan dos comprobaciones. La primera es mirar si el contador de
checkpoints en la cabecera de los ficheros de datos coincide con el correspondiente
del fichero de control. Si es as, se compara el SCN de inicio de cada fichero de datos
con el SCN de final almacenado en el fichero de control. Si son iguales no se necesita
recuperacin en este fichero de datos. Como parte de la apertura se pone a infinito el
SCN de final para ese fichero de datos.

Si la BD se par con en modo abort no se ejecut el checkpoint y el SCN de fin para


los fichero de datos est a infinito. As, durante la BD se abre, y suponiendo que el
contador de checkpoints coincide, se comparan los SCN de inicio y de final, y como el
ltimo es infinito se efectura una recuperacin aplicando los cambios almacenados en
los ficheros redo log en lnea para avanzar la BD, y los registros de roll back de los
segmentos de roll back para deshacer las transacciones no confirmadas.

Si despus de parar la BD se reemplaza un fichero de datos por su copia de


seguridad, al arrancar la BD Oracle detecta que el contador de checkpoints del fichero
de datos no coincide con el almacenado en el fichero de control. As, se tendr que
echar mano a los ficheros redo log archivados, empezando por aquel cuyo nmero de
secuencia aparece en la cabecera del fichero de datos.

5.4.5.3 Recuperacin Fsica

La utilizacin de una copia de backup de ficheros de datos siempre necesita de una


recuperacin fsica. Tambin es as cuando un fichero de datos se pone offline sin un
checkpoint.

Oracle detecta que se necesita una recuperacin fsica cuando el contador de


checkpoints de la cabecera del fichero de datos no coincide con el correspondiente
contador de checkpoints del fichero de control. Entonces se hace necesario el
comando recover. La recuperacin comienza en el SCN menor de los ficheros de
datos en recuperacin, aplicando los registros de redo log a partir de l, y parando en
el SCN de final mayor de todos los ficheros de datos.

Existen tres opciones para realizar una recuperacion fsica. La primera es una
recuperacin de BD donde se restaura la BD entera. La segunda es una recuperacin
de tablespace donde, mientras una parte de la BD est abierta, se puede recuperar un
tablespace determinado. Esto significa que sern recuperados todos los ficheros de
datos asociados al tablespace. El tercer tipo es la recuperacin de un fichero de datos
especfico mientras el resto de la BD est abierta.

Requisitos para Utilizar Recuperacin Fsica


La primera condicin que se ha de poner para poder recuperar fsicamente una BD es
que sta se est utilizando en modo ARCHIVELOG. De otro modo, una recuperacin
completa puede que no sea posible. Si trabajamos con la BD en modo
NOARCHIVELOG, y se hace una copia semanal de los ficheros de la BD, se debera
estar preparado para perder, en el peor de los casos, el trabajo de la ltima semana si
sucede un fallo. Ya que los ficheros de redo log contendran un agujero y no se podia
avanzar la BD hasta el intante anterior al fallo. En este caso el nico medio para
reconstruir la BD es hacerlo desde un export completo, recreando el esquema de la
BD e importando todos los datos.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 193

5.4.5.4 Recuperacin de la BD

La BD debe estar montada pero no abierta. El comando de recuperacin es el


siguiente:

RECOVER [AUTOMATIC] [FROM 'localizacion'] [BD]


[UNTIL CANCEL]
[UNTIL TIME fecha]
[UNTIL CHANGE entero]
[USING BACKUP CONTROLFILE]

Las opciones entre corchetes son opcionales:


AUTOMATIC hace que la recuperacin se haga automticamente sin preguntar al
DBA por el nombre de los ficheros redo log. Tambin se puede utilizar para este
cometido el comando set autorecovery on/off. Los ficheros redo log deben estar
en la localizacin fijada en LOG_ARCHIVE_DEST y el formato del nombre de los
ficheros debe ser el fijado en LOG_ARCHIVE_FORMAT.
FROM se utiliza para determinar el lugar donde estn los ficheros redo log, si es
distinto del fijado en LOG_ARCHIVE_DEST.
UNTIL sirve para indicar que se desea realizar una recuperacin incompleta, lo
que implica perder datos. Solo se dar cuando se han perdido redo log archivados
o el fichero de control. Cuando se ha realizado una recuperacin incompleta la BD
debe ser abierta con el comando alter database open resetlogs, lo que produce
que los redo log no aplicados no se apliquen nunca y se inicialice la secuencia de
redo log en el fichero de control. Existen tres opciones para parar la recuperacin:

UNTIL CANCEL permite recuperar un redo log cada vez, parando cuando se teclea
CANCEL.

UNTIL TIME permite recuperar hasta un instante dado dentro de un fichero de redo log

UNTIL CHANGE permite recuperar hasta un SCN dado.

USING BACKUP CONTROLFILE utiliza una copia de seguridad del fichero de control
para gobernar la recuperacin.

5.4.5.5 Recuperacin de un tablespace

La BD debe estar abierta, pero con el tablespace a recuperar offline. El comando de


recuperacin es el siguiente:

RECOVER [AUTOMATIC] [FROM 'localizacion']


TABLESPACE nombre_tablespace [, nombre_tablespace]

5.4.5.6 Recuperacin de un Fichero de Datos

La BD debe estar abierta o cerrada, dependiendo del fichero a recuperar. Si el fichero


a recuperar es de un tablespace de usuario la BD puede estar abierta, pero con el
fichero a recuperar offline. Si el fichero es del tablespace SYSTEM la BD debe estar
cerrada, ya que no puede estar abierta con los ficheros del SYSTEM offline. El
comando de recuperacin es el siguiente:

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 194

RECOVER [AUTOMATIC] [FROM 'localizacion']


DATAFILE nombre_fichero [, nombre_fichero]

5.4.5.7 Creando un Fichero de Control

Si el fichero de control ha resultado daado y se ha perdido se puede utilizar una copia


de seguridad del mismo o crear uno nuevo. El comando de creacin de un nuevo
fichero de control es CREATE CONTROLFILE. Este comando se puede ejecutar slo
con la BD en estado nomount. La ejecucin del comando produce un nuevo fichero de
control y el montaje automtico de la BD.
Un comando interesante que ayuda a mantener los ficheros de control a salvo es el
siguiente:

SQL> alter database backup controlfile to trace;

que produce un script que puede ser utilizado para generar un nuevo fichero de control
y recuperar la BD, en caso necesario. El fichero de traza generado es el siguiente:

Dump file /opt/app/oracle/admin/demo/udump/demo_ora_515.trc


Oracle9i Server Release 9.0.20 - Production Release
With the distributed, replication and Spatial Data options
PL/SQL Release 2.3.2.3.0 - Production
ORACLE_HOME = /opt/app/oracle/product/9.0.2.
System name: SunOS
Node name: cartan
Release: 5.5
Version: Generic
Machine: sun4m
Instance name: demo
Redo thread mounted by this instance: 1
Oracle process number: 7
Unix process pid: 515, image: oracledemo

Fri May 15 11:41:19 1998


Fri May 15 11:41:19 1998
*** SESSION ID:(6.2035) 1998.05.15.11.41.19.000
# The following commands will create a new control file and use it
# to open the database.
# No data other than log history will be lost. Additional logs may
# be required for media recovery of offline data files. Use this
# only if the current version of all online logs are available.
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "DEMO" NORESETLOGS
NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 2
MAXDATAFILES 30
MAXINSTANCES 1
MAXLOGHISTORY 100
LOGFILE
GROUP 1 '/export/home/oradata/demo/redodemo01.log' SIZE 2M,
GROUP 2 '/export/home/oradata/demo/redodemo02.log' SIZE 2M,
GROUP 3 '/export/home/oradata/demo/redodemo03.log' SIZE 2M

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 195

DATAFILE
'/export/home/oradata/demo/system01.dbf',
'/export/home/oradata/demo/rbs01.dbf',
'/export/home/oradata/demo/rbs02.dbf',
'/export/home/oradata/demo/rbs03.dbf',
'/export/home/oradata/demo/temp01.dbf',
'/export/home/oradata/demo/tools01.dbf',
'/export/home/oradata/demo/users01.dbf'
;
# Recovery is required if any of the datafiles are restored backups,
# or if the last shutdown was not normal or immediate.
RECOVER DATABASE
# Database can now be opened normally.
ALTER DATABASE OPEN;

5.4.5.8 Recuperacin Lgica

Oracle dispone de la herramienta import para restaurar los datos de una BD a partir de
los ficheros resultados de un export. Import lee los datos de los ficheros de exportacin
y ejecuta las sentencias que almacenan creando las tablas y llenndolas de datos.

Parmetros del Import

Parmetro Defecto Descripcin


el username/password del usuario que efectua el
USERID indefinido
import.
dependiente
BUFFER El tamao en bytes del buffer utilizado.
del SO
FILE expdat.dmp el nombre del fichero de exportacin a importar.
indica si se muestran los contenidos del fichero de
SHOW No
exportacin, sin importar ningn dato.
indica si ignorar los errores producidos al importar
IGNORE Yes
un objeto que ya existe en la BD.
GRANTS Yes indica si se importan tambin los derechos.
INDEXES Yes indica si se importan tambin los ndices.
ROWS Yes indica si se importan tambin las filas de las tablas.
FULL No indica si se importan el fichero entero.
una lista de los usuarios cuyos objetos se han
FROMUSER Indefinido
exportado.
una lista de los usuarios a cuyo nombre se
TOUSER Indefinido
importan los objetos.
TABLES indefinido la lista de tablas a importar.
dependiente
RECORDLENGTH la longitud en bytes del registro del fichero.
del SO
el tipo de import incremental (SYSTEM o
INCTYPE indefinido
RESTORE).
indica si se efectua un commit despus de importar
COMMIT No cada fila. Por defecto, import efectua un commit
despus de cargar cada tabla.
PARFILE indefinido el fichero de parmetros.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 196

Para importar un export incremental se puede efectuar la siguiente secuencia de


pasos:

1. Utilizar la copia ms reciente del import para restaurar las definiciones del sistema:

$ imp userid=sys/passwd inctype=system full=Y file=export_filename

2. Poner los segmentos de rollback online.


Importar el fichero de exportacin completa ms reciente:

$ imp userid=sys/passwd inctype=restore full=Y file=filename

3. Importar los ficheros de exportacin en modo acumulacin desde la exportacin


completa ms reciente, en orden cronolgico:

$ imp userid=sys/passwd inctype=restore full=Y file=filename

4. Importar los ficheros de exportacin en modo incremental desde la exportacin


completa o acumulativa ms reciente, en orden cronolgico:

$ imp userid=sys/passwd inctype=restore full=Y file=filename

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 197

Autoevaluacin

1.- Mencione las ventajas y desventajas de un backup on line.

2.- Mencione las ventajas y desventajas de un backup off line.

3.- Investigue acerca de los tablespace transportables.

4.- Cul es la ventaja de que una Base de Datos est en Modo Archive?

5.- Cul es la relacin de un backup online con los archived redo logs?

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 198

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 199

UNIDAD

6
SEGUIMIENTO Y AFINAMIENTO DE SENTENCIAS SQL
LOGRO DE LA UNIDAD DE APRENDIZAJE

Al trmino de la unidad, el alumno optimiza procesos de negocios afinando las


sentencias SQL involucradas, llegando a reducir el costo de una sentencia SQL y
disminuir el tiempo transcurrido de un proceso de Base de Datos.

TEMARIO

6.1 Tema 14 : Seguimiento y Optimizacin de sentencias SQL


6.1.1 : Optimizadores en Oracle
6.1.2 : Optimizador Basado en Costes

ACTIVIDADES PROPUESTAS

Realizar en su totalidad el ejemplo prctico del contenido

Resolver los ejercicios propuestos

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 200

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 201

6.1 INTRODUCCION
6.1.1 Optimizadores en Oracle

Afinamiento de Sentencias SQL. Conocer las mejores prcticas para afinar una
sentencia Oracle

Oracle proporciona tres paquetes que pueden utililzarse junto con Oracle Enterprise
Manager (OEM) para llevar el control de la optimizacin del rendimiento y la gestin de
cambios, y para generar diagnsticos del sistema y de la base de datos.

El paquete Oracle Expert: El cual permite la optimizacin de instancias,


oportunidades de reutiizacin de SQL, gestin adecuada del espacio, acceso
ptimo a los datos.
La opcin Oracle Performance Manager: Esta herramienta est diseada para
proporcionar una vista rpuda de estaod de las distintas reas de la base de
datos.
La opcin Tunnig Pack: Paquete de optimizacin del rendimiento.

Problemas comunes en sentencias SQL


Los problemas existentes en los entornos de desarrollo y produccin generan la
necesidad de una evaluacin automatizada de las sentencias SQL utilizadas. Los
errores ms comunes asociados a la calidad de las sentencias SQL son los siguientes:

Uso ineficiente de la CPU y tiempos de respuesta pobres debido a un uso


incorrecto de sentencias SQL.
Inexistencia de unos estndares y reglas de codificacin SQL. En muchos casos
aunque existen, no se emplean a la hora de desarrollar las aplicaciones.
Eleccin incorrecta de las vas a seguir para obtener datos DB2 en el entorno de
produccin. Esto es debido a que las aplicaciones se prueban sin tener en cuenta
las estadsticas DB2 del entorno de pruebas o a que se han hecho rebindings en
produccin.
El Anlisis de la base de datos fsica, de los parmetros DDL y de la IR mediante
un proceso manual ineficiente.

Rendimiento del SQL y de las Aplicaciones

Las sentencias SQL son responsables del 60 al 90 por ciento de los problemas de
rendimiento de las aplicaciones de base de datos. Existen muchas maneras
semnticamente equivalentes de escribir una sentencia SQL dada. El reto es
encontrar la sentencia SQL que produzca rendimiento ptimo. An con programadores
SQL expertos, hasta un 30 por ciento o ms de las sentencias SQL complejas pueden
ser rescritas para que se desempeen mejor. El SQL es complejo y puede requerir
horas para ser afinado y obtener buen rendimiento hasta ahora.

Hay varias maneras de poder optimizar sentencias en Oracle, pero la mas rpida,
grafica y efectiva para alguien que recin entra a ver temas de afinamiento, es el uso
el Enterprise Manager, especficamente el Management Server.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 202

Este producto viene con los instaladores de base de datos, y para probar el producto,
puedes instalar una pequea instancia en tu estacin, donde alojaras el Oracle
Management Server (OMS), de donde se puede monitorear el resto de tus bases de
datos.

Con este producto se tiene una serie de herramientas que pueden ayudar, la principal
para solucionar el problema es el SQL analyze, desde donde se puede ver el COSTO
de las sentencias de SQL que utilizan los programas. Otra herramienta es el Oracle
Expert.

OpcinSQL Expert

La opcin SQL Expert es la solucin completa para el afinamiento del rendimiento y la


optimizacin del SQL, que detecta y rescribe SQL. A travs de su motor nativo de
bsqueda, la opcin SQL Expert reduce el esfuerzo requerido para optimizar SQL y
hace que hasta el ms inexperto de los programadores SQL, sea todo un experto. Los
desarrolladores usan la opcin SQL Expert para optimizar el SQL durante el desarrollo
de aplicaciones. Los DBAs tambin lo usa para eliminar SQL problemtico antes de
que los usuarios tengan problemas de rendimiento de las aplicaciones en sistemas
productivos.

Fcilmente identifique problemas del SQL antes de que ocurran

La opcin SQL Expert realiza bsquedas a travs de objetos de base de datos y


programas aplicativos sin necesidad de ejecutar los programas. Esto reduce
dramticamente el tiempo requerido para identificar sentencias SQL que estn
causando bajo rendimiento.

Automticamente encuentra sentencias SQL equivalentes

Los algoritmos de bsqueda y retroalimentacin de la opcin SQL Expert, nicos en


su clase, eliminan el factor suerte de la problemtica de optimizacin de sentencias
SQL problemticas. Una vez usted ha identificado una sentencia SQL que requiere
afinamiento, el Optimizador SQL Sintctico de la opcin SQL Expert rescribe la
sentencia para usted. Encuentra las sentencias SQL que son semnticamente
equivalentes a su sentencia SQL original y luego limita la eleccin de sentencias SQL
alternas a las que tienen planes de ejecucin nicos.
Los algoritmos de bsqueda de la opcin SQL Expert ofrecen la ms grande
oportunidad de encontrar sentencias SQL que seguramente mejorarn el rendimiento.
Este poderoso enfoque permite que la opcin SQL Expert realice en instantes el
trabajo que normalmente tomara horas en llevarse a cabo.

Optimice el SQL en Aplicaciones de Terceros

La opcin SQL Expert soporta por completo las caractersticas de optimizacin y


Planes Abstractos (APs) de ASE. Los APs de ASE pueden hacer que cada plan de
consulta generado por el optimizador pueda ser 'capturado'. Una vez capturado,
pueden ser almacenados, asociados a la sentencia que los gener, y reutilizados. Los
APs pueden ser editados usando cualquier editor de texto, brindndole un control muy
granular sobre cmo es ejecutada una sentencia.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 203

Permite ejecucin automatizada de pruebas

La opcin SQL Expert automatiza las intensivas tareas de verificacin de sentencias


SQL. Le permite probar la ejecucin de sentencias SQL para cada plan de ejecucin
alterno, individualmente o en grupos. Luego brinda un reporte de los tiempos de
respuesta para el procesamiento del primer registro y el tiempo transcurrido para
procesar todos los registros. Este proceso le permite seleccionar la mejor sentencia
SQL para su aplicacin.

La opcin SQL Expert ahorra an ms tiempo permitindole determinar el criterio de


terminacin que automticamente cancelar la ejecucin de prueba sobre cualquier
sentencia que est sobrepasando a la mejor.

Mejore sus habilidades SQL con la tecnologa "In-Process Training"

"In-Process Training" ensea a desarrolladores y DBAs cmo escribir el SQL de ms


alto rendimiento posible. El SQL Comparor de la opcin SQL Expert hace esto
mostrando comparaciones entre el SQL original y las distintas sentencias SQL
alternas. Adems se gana un conocimiento ms profundo sobre el Plan de Ejecucin a
partir del sistema de ayuda sensitivo de la opcin SQL Expert.

SQL Expert Incorpora estos mdulos

Optimizador Sintctico de SQL


Afinamiento automtico de sentencias SQL
Rescribe sentencias SQL para obtener rendimiento ptimo usando algoritmos de
bsqueda y retroalimentacin propietarios.
Encuentra todas las posibles alternativas de ejecucin para sentencias SQL
semnticamente equivalentes.
Ejecuta pruebas de cada plan de ejecucin alterno y encuentra el plan de
ejecucin ms rpido para procesamiento transaccional y procesamiento en lotes
(batch).
Brinda "In-Process Training" comparando el SQL original y las sentencias alternas
para ayudar ha desarrollar habilidades de codificacin.
Soporta por completo las caractersticas de optimizacin y Planes Abstractos de
ASE.
Reduce el esfuerzo de aprender el lenguaje de los Planes Abstractos de ASE.
Automticamente detecta la compatibilidad entre Planes Abstractos y SQL.
Automticamente genera Panes Abstractos optimizados para sentencias SQL
problemticas.
Afina sentencias SQL sin la necesidad de cambiar cdigo fuente, lo que es
particularmente til al afinar paquetes aplicativos de terceros.
Congela el plan de ejecucin de sentencias SQL para evitar la degradacin del
rendimiento debido a cambios en el volumen de datos o actualizaciones de la
base de datos.
Soporta la optimizacin de tablas temporales.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 204

SQL Monitor
Monitorea las sentencias SQL que estn siendo ejecutadas y las filtra basndose
en usuario, SID, programa, y terminal.
Permite al DBA encontrar y optimizar sentencias SQL dinmicas que son creadas
en programas aplicativos.
Crea un archivo con las sentencias SQL capturadas.

6.1.2 Optimizador Basado en Costes (Cost Based Optimizer - CBO)

El optimizador basado en costes (Cost Based Optimizer, CBO) se introdujo en Oracle


7 y se basa en calcular el coste de distintos planes de ejecucin y eligir para la
ejecucin el plan de ejecucin con menor coste. En su contra, est el optimizador
basado en reglas (Rules Based Optimizer, RBO), que se basa en unas reglas
prefijadas para decidir el plan de ejecucin de una consulta.

Para calcular el coste de una consulta, el optimizador se basa en las estadsticas


almacenadas en el catlogo de Oracle, a travs de la instruccin:

Si no existen datos estadsticos para un objeto (por ejemplo, porque se acaba de


crear), se utilizarn valores por defecto. Adems, si los datos estadsticos estn
anticuados, se corre el riesgo de calcular costes basados en estadsticas incorrectas,
pudiendo ejecutarse planes de ejecucin que a priori pueden parecer mejores.

Por esto, si se utiliza el optimizador basado en costes, es muy importante analizar los
objetos periodicamente (como parte del mantenimiento de la base de datos). Como las
estadsticas van evolucionando en el tiempo (ya que los objetos crecen o decrecen), el
plan de ejecucin se va modificando para optimizarlo mejor a la situacin actual de la
base de datos. El optimizador basado en reglas haca lo contrario: ejecutar siempre el
mismo plan, independientemente del tamao de los objetos involucrados en la
consulta.

Dentro de la optimizacin por costes, existen dos modos de optimizacin,


configurables desde el parmetro OPTIMIZER_MODE:
- FIRST_ROWS: utiliza slo un nmero determinado de filas para calcular los planes
de ejecucin. Este mtodo es ms rpido pero puede dar resultados imprecisos.
- ALL_ROWS: utiliza todas las filas de la tabla a la hora de calcular los posibles planes
de ejecucin. Este mtodo es ms lento, pero asegura un plan de ejecucin muy
preciso. Si no se indica lo contrario, este es el mtodo por defecto.
El optimizador basado en costes se utilizar en alguna de las siguientes situaciones:

1.- Si el parmetro OPTIMIZER_MODE del archivo INIT.ORA est definido como


ALL_ROWS o FIRST_ROWS.

2.- Si existen estadsticas para alguna de las tablas involucradas en la consulta y el


parmetro OPTIMIZER_MODE es distinto a RULE.

3.- Si se incluye un "hint" distinto a +RULE.

4.- Si se ha establecido la variable OPTIMIZER_GOAL a ALL_ROWS o FIRST_ROWS


a nivel de sesin.

5.- En Oracle 7.3, si alguna tabla tiene un grado de paralelismo distinto de 0.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 205

Cmo puedo saber el optimizador que est siendo usado?

Hay que generar un plan de ejecucin de la consulta a travs del comando EXPLAIN
PLAN. Una vez generado, se debe comprobar la columna POSITION de
PLAN_TABLE para aquellas filas que ID=0. Si el valor de POSITION es NULL, se est
usando el optimizador basado en reglas, en el resto de los casos se utiliza el basado
en costes.

El siguiente SELECT nos puede servir para ver el tipo de optimizador utilizado en los
distintos planes:

SELECT DECODE(NVL(position,-1),-1,'Reglas','Costes') FROM plan_table


WHERE id = 0;

Como puedo averiguar el plan de ejecucin que utiliza una consulta?

Esto se puede hacer con distintos mtodos:

1.- Activando la traza de SQL a nivel de sesin.


2.- Utilizando la instruccin EXPLAIN PLAN.
3.- Utilizando el comando SET AUTOTRACE de SQL*Plus.

6.1.2.1 Activar la traza de SQL a nivel de sessin:

Consultar el FAQ sobre trazas a nivel de sesin.

6.1.2.2 Utilizar la instruccion EXPLAIN PLAN:

La instruccin EXPLAIN PLAN nos permite llenar la tabla PLAN_TABLE con datos
sobre el plan de ejecucin. La tabla PLAN_TABLE debe crearse, y para ello podemos
ir al fichero UTLXPLAN.SQL del directorio $ORACLE_HOME/rdbms/admin. Una vez
creada la tabla, ejecutaremos la instruccin:

EXPLAIN PLAN
[SET STATEMENT ID = 'identificador']
INTO esquema.PLAN_TABLE
FOR <instruccion SQL>;

Con esto llenaremos la tabla PLAN_TABLE con un nmero de registros indeterminado.


Cada registro, tendr en la columna STATEMENT_ID el valor 'identificador'. Para ver
el plan de ejecucin, podremos mostrar las distintas filas formateadas con la siguiente
consulta:

SELECT LPAD( , 2 * (level-1)) || operation operation,


options,
object_name,
FROM output
START WITH id = 0 AND
statement_id = 'identificador'
CONNECT BY PRIOR id = parent_id AND
statement_id = 'identificador';

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 206

6.1.2.3 Utilizar el comando AUTOTRACE (a partir de Oracle 7.3)

El programa SQL*Plus nos permite mostrar el plan de ejecucin de todas las


instrucciones que vamos lanzando. Para ello basta con activar la auto-traza a travs
del comando:
SET AUTOTRACE [ON,OFF] [EXPLAIN] [STATISTICS]
Si indicamos la opcin EXPLAIN, nos mostrar el plan de ejecucin, y si indicamos la
opcin STATISTICS, nos presentar una tabla de estardsticas tales como nmero de
ordenaciones, lecturas a disco, bloques recuperados, etc. Para poder ejecutar este
comando, es necesario tener el permisos sobre V$SESSION. La mejor manera de
conseguir esto es concediendo el rol completo PLUSTRACE, y estar creada la tabla
PLAN_TABLE dentro del esquema actual (ver el punto 2 para consultar cmo crear
esta tabla).

Cmo puedo obtener una traza de todas las sentencias ejecutadas durante una
sesin?

Oracle nos permite obtener una traza de todas las instrucciones que se lancen en una
sesin determinada. Puede ser til para ver el plan de ejecucin de cada una de ellas,
para averiguar las instrucciones SQL que son lanzadas contra una base de datos
(cuando no disponemos de los fuentes de un programa concreto), o incluso para
detectar qu instruccin ralentiza un proceso complejo.

Los pasos a dar son:

a) Obtener el 'sid' y 'serial#' del proceso sobre el que queremos hacer la traza. Para
ello debemos hacer la siguiente consulta sobre V$SESSION:

SELECT username, program, sid, serial#


FROM v$session
ORDER BY 1, 2;

Dentro de la tabla resultado, buscaremos nuestro proceso, por ejemplo:

USERNAME PROGRAM SID SERIAL#


--------------- -------------------- --------- ---------
SCOTT DELPHI32.EXE 9 30

b) Ejecutar el siguiente bloque de cdigo PL/SQL:

BEGIN
SYS.DBMS_SYSTEM.set_sql_trace_in_session(9,30,TRUE);
END;

Esto nos activa la traza para una sesin identificada por sid y serial#

c) Ejecutar todas las instrucciones sobre las que queremos hacer la traza. Esto puede
ser una instruccin concreta, un proceso completo, o incluso una jornada entera de
trabajo con un programa.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 207

d) Ejecutar de nuevo el bloque de cdigo para desactivar la traza:

BEGIN
SYS.DBMS_SYSTEM.set_sql_trace_in_session(9, 30, FALSE);
END;

e) En el directorio configurado para la salida aparecer nuestro archivo de traza


ORAxxx.trc. Este directorio se configura desde la opcin USER_DUMP_DEST del
archivo INIT.ORA. Por defecto tiene el valor ORACLE_HOME/rdbms/trace.

f) Formatear el archivo de traza a travs de la utilidad TKPROF, situada en el directorio


BIN de la instalacin de Oracle. Una llamada bsica podra ser la siguiente:

TKPROF <fichero_traza> <fichero_salida> [explain=usuario/password] [sys=no]

Con el parmetro "explain=usuario/password" indicamos que nos muestre el plan de


ejecucin de todas las instrucciones, conectndose para ello al usuario/password
indicados.

Con el parmetro "sys=no" indicamos que no nos muestre las instrucciones realizadas
por el usuario SYS.

Adems de las instrucciones y su plan de ejecucin, el archivo de traza nos


proporciona informacin sobre las sentencias erroneas, los tiempos de ejecucin, el
optimizador utilizado, etc.

Por qu una conversin en el WHERE desactiva mis ndices?

Cuando se hace una consulta y la condicin de filtro incluya una funcin de conversin
(TO_NUMBER, TO_DATE, etc.), esta se debe aplicar siempre que se pueda sobre un
valor constante en vez de sobre una columna.
Por ejemplo, la siguiente consulta no utilizar ningn indice sobre
<COLUMNA_VARCHAR>

SELECT <COLUMNAS>
FROM <TABLA>
WHERE TO_NUMBER(<COLUMNA_VARCHAR>) = 2;

Sin embargo, la siguiente consulta s que utiliza los ndices sobre la


<COLUMNA_VARCHAR>

SELECT <COLUMNAS>
FROM <TABLA>
WHERE <COLUMNA_VARCHAR> = TO_CHAR(2);

Las conversiones implcitas siguen unas normas parecidas, pero teniendo en cuenta
que Oracle aplicar la funcin de conversin sobre el valor alfanumrico:

Por ejemplo, esta consulta:


SELECT <COLUMNAS>
FROM <TABLA>
WHERE <COLUMNA_VARCHAR> = 2;

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 208

ser interpretada del siguiente modo:

SELECT <COLUMNAS>
FROM <TABLA>
WHERE TO_NUMBER(<COLUMNA_VARCHAR>) = 2;

Por lo tanto, desactivar los ndices. Sin embargo, esta otra consulta:

SELECT <COLUMNAS>
FROM <TABLA>
WHERE <COLUMNA_NUMBER> = '2';

ser interpretada del siguiente modo:

SELECT <COLUMNAS>
FROM <TABLA>
WHERE <COLUMNA_VARCHAR> = TO_NUMBER('2');

Por lo que no desactivar los ndices, ya que la funcin se aplica sobre el valor
constante y no sobre la columna.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 209

EJEMPLO PRCTICO

A continuacin vamos a reproducir un escenario en el cual vamos a afinar una


sentencia SQL, cuya solucin es al final crear un ndice. Lo que se va a hacer a
continuacin, es basa en el EXPLAIN PLAN anteriormente mencionado, slo que en
este caso vamos a utilizar una herramienta grfica que se llama SQL Scratchpad, que
viene en el Enterprise Manager de la Instalacin del software de base de datos Oracle.

1.- Ingresar de manera Stand alone al Enterpise Manager con el usuario SYSTEM.

2. Marcar la Base de Datos e ir al SQL Scratchpad.

Aparecer la siguiente pantalla:

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 210

3. Abrir una sesin del sqlplus con el usuario SYSTEM y hacer lo siguiente:

CREATE TABLE OBJETOS AS SELECT * FROM DBA_OBJECTS;


ANALYZE TABLE OBJETOS COMPUTE STATISTICS;

4.- Ejecutar la siguiente sentencia en el SQLScratchpad:

SELECT * FROM OBJETOS where OBJECT_ID=30139;

Aparecer lo siguiente:

Luego haciendo click en el cono EXPLICACION DEL PLAN.., observamos:

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 211

El costo de la sentencia en la base de datos es 26.


Para buscar la informacin deseada , se ha tenido que barrer toda la
tabla, por eso se ve que hay un FULL SCAN.

5.- Ahora en el SQLPLUS ejecute lo siguiente:

CREATE INDEX INDEX_OBJECT ON OBJETOS (OBJECT_ID) ;


ANALYZE TABLE OBJETOS COMPUTE STATISTICS;

Estamos creando un ndice por ese campo de bsqueda.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 212

6. Ahora en el SQLScratchpad ejecutemos de nuevo la misma sentencia SELECT:

Y tambin ejecutemos el plan de ejecucin:

CARRERA DE REDES Y COMUNICACIONES CIBERTEC


ADMINISTRACIN DE BASE DE DATOS 213

Observamos algo muy importante, ahora el costo es dos (antes era 26 ), y


observamos que se est usando el ndice que acabamos de crear :
INDEX_OBJECT. Por eso, con la ayuda del ndice la sentencia es ms rpida.
Esto se reflejar mucho ms teniendo en cuenta la cantidad de registros de la
respectiva tabla.

CIBERTEC CARRERA DE REDES Y COMUNICACIONES


ADMINISTRACIN DE BASE DE DATOS 214

Autoevaluacin

1.- Para qu sirve el comando ANALYZE TABLE?

2.- Haga el mismo caso del EJEMPLO PRACTICO, pero sin usar el SQLScratchpad.
Solamente deber usar el SQLPLUS.

3.- Si en una sentencia SQL en la parte del WHERE se hace referencia a:


campo1=dato1 , y existe un ndice creado sobre ese campo, Oracle SIEMPRE usar
el ndice?. Justifique.

CARRERA DE REDES Y COMUNICACIONES CIBERTEC

S-ar putea să vă placă și