Administración de Bases de Datos
Administración de Bases de Datos
Base de Datos
ADMINISTRACIN DE BASE DE DATOS 2
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
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
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.
Red de contenidos
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.
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:
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.
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 DBA (Administrador de Base de Datos) puede crear un espacio de tablas con una
orden, como la siguiente:
Los archivos de datos (datafiles) almacenan los datos del usuario. Se requiere como
mnimo uno para una 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.
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
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.
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
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.
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.
En este momento se abren los archivos y los usuarios ya pueden tener acceso a los
datos.
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.
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
Ejemplo:
1. Conexin a la base de datos a travs del cuadro de dilogo del SQL*PLUS para
Windows:
SYS AS SYSDBA
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.
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
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)
Por ejemplo, la base de datos se debe montar, pero no abrir, durante las siguientes
tareas:
Este es el comando que necesitamos para iniciar la base de datos despus de haber
montado la base de datos.
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> 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.
La base de datos tambin se puede poner en modo restringido con el comando ALTER
SYSTEM:
Donde:
ENABLE RESTRICTED SESSION: Permite conexiones futuras slo para los
usuarios que tienen el privilegio RESTRICTED SESSION
DISABLE RESTRICTED SESSION: Desactiva el privilegio RESTRICTED.
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:
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.
Para iniciar una instancia, Oracle Server lee el archivo de parmetros de inicializacin.
Existen dos tipos de archivos de parmetros de inicializacin:
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:
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:
A. SHUTDOWN Normal
SQL> SHUTDOWN
Base de datos cerrada.
Base de datos desmontada.
Instancia ORACLE cerrada.
B. SHUTDOWN TRANSACTIONAL
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.
C. SHUTDOWN IMMEDIATE
D. SHUTDOWN ABORT
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.
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.
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 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.
7. Test 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.
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:
Autoevaluacin
1. Indique cual es la diferencia entre base de datos e instancia de base de datos.
a. Open
b. Open restrict
c. Mount
d. Nomount
e. N.A.
a. Open
b. Open restrict
c. Mount
d. Nomount
e. N.A.
a. Open
b. Open restrict
c. Mount
d. Nomount
e. N.A.
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
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.
SELECT devuelve filas de la base de datos que cumplan los criterios definidos en
su clusula WHERE
UPDATE modifica las filas de una tabla que cumplan la clusula WHERE
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:
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:
No rows selected
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:
B. Clusula ORDER BY
Para ordenar la salida de una sentencia SELECT se usa la clusula ORDER BY. A
continuacin se muestra un ejemplo:
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:
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:
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:
SQL> SELECT ename FROM emp WHERE sal> (select sal from emp where
empno=7566)
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;
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:
A. Convencional
A. Convencional
UPDATE emp
SET deptno = 20
WHERE empno = 7782;
UPDATE emp
SET (job,deptno)=(SELECT job,deptno FROM emp WHERE
empno=7499)
WHERE empno = 7698;
La orden DELETE elimina los registros que cumplen con la condicin definida en el
WHERE. La sintaxis es la siguiente:
A. Convencional
2.1.2.5. Operadores
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
Se utilizar %_ para mostrar los nombres de empleados que tengan como segunda
letra de su nombre la A
E. IS NULL
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.
A. AND
B. OR
2.1.3.1. JOIN
Tipos de Join
Equijoin
Non-equijoin.
Outer-join
Self-join.
A. Equijoin
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:
B. Non-Equijoin
C. Outer-join
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;
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.
A. Funciones de conversin
Funcin Resultado
LOWER(SQL Course) sql course
UPPER(SQL Course) SQL COURSE
INITCAP(SQL Course) Sql Course
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
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;
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.
SELECT
SYSDATE,
ADD_MONTHS(sysdate,4) Agregados,
NEXT_DAY(sysdate, VIERNES) Viernes,
LAST_DAY(sysdate) ultimo
FROM DUAL;
Funcin Resultado
VARCHAR2 or CHAR NUMBER
VARCHAR2 or CHAR DATE
NUMBER VARCHAR2
DATE VARCHAR2
TO_CHAR():
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;
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
TO_NUMBER():
Convierte una cadena de caracteres que contiene dgitos a un nmero con formato
especificado por el modelo de formato.
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():
RESULTADO
---------------
usted es Scott
A. Tipo de Funciones
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
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);
b. Operador CUBE
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.
Ejemplo:
SELECT
deptno as department_id,
Job as Job_id,
SUM(sal) salary
FROM emp
WHERE deptno < 60
GROUP BY CUBE(deptno, job) ;
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.
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.
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.
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
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
Devuelve '23/05/00'.
TAB proporciona informacion sobre las tablas, vistas y sinnimos del usuario. En su
lugar debera de usarse USER_TABLES o TABS.
Existe una vista maestra, que es el punto de partida para conocer los objetos de una
Base de Datos.
Autoevaluacin
Sentecnias SQL
El siguiente grfico nos muestra un modelo de una base de datos que almacena
informacin de las ventas de una empresa.
2. Listado de ventas anual por producto. El listado debe mostrar los siguientes datos:
ao, cdigo de producto, nombre de producto, total 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.
Diccionario de Datos
2. Lista todas las tablas que ha creado el usuario SYSTEM durante todo el ao 2004
y 2005.
6. Liste los campos (nombre y tipo), que tiene la tabla EMP del usuario SCOTT.
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
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:
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.
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.
Es muy importante respaldar los archivos de control, al inicio y ante cualquier cambio
de la Base de Datos.
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)
Los pasos para multiplexar o adicionar copias de los archivos de control, seran los
siguientes:
Es necesario que usted cree archivos de control nuevos en las situaciones siguientes:
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.
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;
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.
Si no hemos hecho ese backup, dicha informaciones puede obtener de las vistas
V$logfle y V$datafile.
2.- Producir sentencias SQL para que despus sean usado para recrear un archivo de
control: ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
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;
CONTROL_FILES = (/u01/oracle/prod/control01.ctl,
/u02/oracle/prod/control02.ctl,
/u04/oracle/prod/control03.ctl)
3.- Levantar la Base de Datos.
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.
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.
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.
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).
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
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.
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.
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.
Para crear estos elementos se debe tener el privilegio de ALTER DATABASE. Una
Base de datos puede tener un nmero mximo MAXLOGFILES de grupos.
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)
Por ejemplo:
Para renombrar los online redo logs miembros se sigue los siguientes pasos:
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.
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:
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:
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:
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.
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:
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
3.3.1.1. TableSpace
3.3.1.2. Datafile
3.3.1.3. Segment
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.
En resumen:
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
Cuando un objeto se crea dentro de un cierto tablespace, este objeto adquiere todas
las propiedades antes descritas del tablespace utilizado.
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.
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.
A. Crear un tablespace.
Para crear un tablespace llamado Prueba y haciendo uso del SQLPLUS conectados
como system usamos la sentencia:
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.
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:
Con esta sentencia lo que hacemos es aumentar el datafile que forma parte de nuestro
tablespace en 50 Mbytes.
C. Borrar un tablespace.
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.
SELECT
tablespace_name,
status
FROM dba_tablespaces;
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.
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.
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:
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.
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.
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:
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
borrar datos, despus de volver a ponerlo read only se deber deberemos hacer un
backup de los nuevos datos.
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 indicar a un usuario de base de datos que sus ordenaciones debe hacerlas en un
determinado tablespace temporal, se usa la siguiente sentencia:
SELECT
username,
temporary_tablespace
FROM dba_users;
SELECT
tablespace_name,
contents
FROM dba_tablespaces;
Un tablespace permanente puede pasar a temporal y que uno temporal puede pasar a
permanente.
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:
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 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.
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.
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:
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;
datafile, esto tiene que ver con la forma en que Oracle reservar el espacio dentro de
los tablespaces y datafiles.
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:
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.
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.
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:
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.
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:
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.
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).
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:
Finalmente podemos levantar la base de datos para que pueda volver a ser utilizada
por todos los usuarios, usando la sentencia:
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.
La clusula DEFAULT ROLE permite asignar roles de permisos durante la creacin del
usuario.
Ejemplos:
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
SELECT
tablespace_name,
initial_extent,
next_extent,
min_extents,
max_extents,
pct_increase
FROM dba_tablespaces;
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;
TS# NAME
--- --------
0 SYSTEM
1 ROLLBACK
2 TEMP
3 TOOLS
4 USERS
5 rows selected.
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.
Tablespaces
Online redo log files
Control files
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.
3.4.1. Introduccin
Oracle maneja dos estructuras bsicas para el manejo de datos: la fsica y la lgica.
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:
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.
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.
3.4.2.1. 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.
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
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.
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.
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:
Con esta sentencia lo que hacemos es aumentar el datafile que forma parte de nuestro
tablespace en 50 Mbytes.
D. Borrando un tablespace.
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;
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.
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.
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.
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:
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
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
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 indicar a un usuario de base de datos que sus ordenaciones debe hacerlas en un
determinado tablespace temporal, se usa la siguiente sentencia:
SELECT
username,
temporary_tablespace
FROM dba_users;
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
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.
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:
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.
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.
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.
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
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.
Cada vez que comienza una nueva transaccin, se asigna a un determinado segmento
de dos formas diferentes:
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.
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.
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;
SELECT
name,
optsize
FROM v$rollname, v$rollstat
WHERE v$rollname.usn = v$rollstat.usn
ORDER BY 1;
ONLINE: Ha sido adquirido por alguna de las instancias y puede contener datos
de transacciones activas.
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:
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.
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.
a. Initial
SELECT
segment_name,
initial_extent,
next_extent,
pct_increase,
min_extent,
max_extent
FROM dba_segments;
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
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
e. Maxextents
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:
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
SELECT
next_extent
FROM user_extents
WHERE segment_name = 'EMPLEADO';
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.
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:
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.
A. Estructura de un bloque
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
informacin que necesita Oracle para saber exactamente qu datos tiene en dicho
bloque.
B. Cabecera
C. Directorio de Tablas
D. Directorio de Filas
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.
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.
G. Pctfree
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
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
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;
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.
DBA_TABLESPACE
DBA_DATA_FILES
DBA_SEGMENTS
DBA_EXTENTS
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.
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.
11. Cuntos tablespaces y datafiles como mnimo puede tener una Base de Datos?
Mencione los nombres.
13. Liste para un determinado segmento, todas sus extensiones con su tamao en
concreto.
UNIDAD
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
Nombre.
Conjunto de columnas (nombre y tipo)
Regulares:
Particionadas:
Organizadas por ndices:
Agrupadas (clusterizadas)
PCTFREE: valor entre 0 y 99. El valor de 0 permite que el blqoue entero se llene con
inserciones de tuplas nuevas.
Donde:
PCTFREE: valor entre 0 y 99. El valor de 0 permite que el bloque entero se llene con
inserciones de tuplas nuevas.
Donde:
tam_prom_tupla: tamao promedio de una fila
tam_inic_tupla: tamao promedio de una fila al insertarse.
El PCTUSED se configura para que el bloque retorne a la lista de libres cuando hay
suficiente espacio para acomodar una tupla promedio.
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.
El comando ANALYZE permite identificar las filas de una tabla que se encuentran
encadenadas o que han sufrido una migracin.
SELECT COUNT(*)
FROM CHAINED_ROWS
WHERE OWNER_NAME=Y AND TABLE_NAME=X
Crear una tabla temporal con la misma estructura de X, con aquellas tuplas
encadenadas o migradas:
DELETE FROM X
WHERE ROWID IN (SELECT head_rowid
FROM CHAINED_ROWS WHERE table_name=X
and table_name=Y)
INSERT INTO X
SELECT * FROM X_TEMP;
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.
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
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.
La correspondencia entre las filas y las particiones se realiza a travs de una funcin
de hash. Es una opcin til cuando:
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.
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:
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.
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.
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.
Un ndice no tiene porque ser almacenado en el mismo tablespace que sus datos.
Son tablas que mantienen los datos ordenados por la clave primaria (Indice Clustered
Nomenclatura Teora).
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.
<primary_key_value, non_primary_key_column_values>
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:
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.
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.
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.
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:
Se usa la instruccin:
NUMBER - es el "default".
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.
Ejemplos:
Ejemplo 1
Ejemplo 2
Por otro lado si queremos cambiar a que el campo3 permita 7 dgitos en lugar de 5,
podemos hacer lo siguiente:
Esta instruccin nos permite eliminar la estructura de la tabla al igual que los datos que
haya en la misma.
Esta instruccin nos permite eliminar los datos de la tabla, pero no elimina la
estructura de la tabla. SOLO ELIMINA LOS DATOS
Como en este caso se estn insertando datos en todos los campos se pueden omitir
los nombres de los campos, entonces quedara as:
4.1.6.5. Update
Esta instruccin nos permite cambiar o actualizar datos en una tabla ya creada y ya
poblada.
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:
y queremos eliminar el rcord con "primary key" igual 12345, esto lo podemos hacer
con:
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.
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.
+ +
Ejemplo:
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.
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.
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
Una vez creada la tabla, si otro usuario intenta tener acceso a la tabla a este punto,
este usuario recibir el error:
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.
14 rows selected
La tabla externa se puede utilizar como substituto de SQL*Loader y una tabla regular
se puede utilizar para llevar a cabo sus datos:
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
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:
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.
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:
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.
Las tablas externas tienen muchos usos prcticos, que pondr en dos categoras:
proceso de negocio y administracin de la base de datos.
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.
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).
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:
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:
PRIMARY KEY: Identifica de manera nica a cada registro de una tabla. Previene
valores NULL. Una tabla slo puede tener una llave primaria.
Por defecto, una columna permite valores nulos. Una constraint NOT NULL obliga a
poner simpre valores a esa columna.
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
A. Disable Novalidate
B. Disable Validate
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.
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.
ALTER SESSION
SET CONSTRAINT[S] = {IMMEDIATE|DEFERRED|DEFAULT}
La llave fornea debe ser eliminada antes de eliminar la tabla padre. Use el siguiente
comando para hacer AMBAS acciones:
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:
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.
Donde:
[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:
Un constraint que est deshabilitado puede ser habilitado en las dos siguientes
maneras:
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.
Esta opcin es para conocer qu fila o registro de una tabla est violando un constraint
cuando se trata de habilitar ste.
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)
3.- Ubicar la data invlida ( que impidi que se active el constraint ), haciendo una
consulta a la tabla EXCEPTIONS:
1 row selected.
Ejemplos:
Para listar los constraints de la table EMP del esquema SCOTT tenemos:
CONSTRAINT_NAME C
---------------- --
FK_DEPTNO R
PK_EMP P
POSITION COLUMN_NAME
-------- ------------------------------------
1 EMPNO
Si desea saber ms acerca de las columnas que tiene las vistas DBA_CONSTRAINTS
y DBA_CONS_COLUMNS, hacer lo siguiente:
Autoevaluacin
Gestin de Tablas e ndices
2. Liste todos los ndices de la tabla SCOTT, indicando las columnas que indexa
cada uno. Utilice DBA_INDEXES y DBA_IND_COLUMNS.
Administracin de la Integridad
3. 3.- Agregue un constraint a la columna SAL de la tabla EMP, para que valide que
el sueldo debe ser mayor que cero.
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
ACTIVIDADES PROPUESTAS
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.
On-line.- Ha sido adquirido por alguna de las instancias y puede contener datos de
transacciones activas.
Para cambiar el estado de un segmento rollback se debe ejecutar una instruccin cuya
sintaxis es como sigue:
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:
Nota.-
Este error puede ser ocultado, cambiando el valor del parmetro
UNDO_SUPPRESS_ERRORS a true.
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.
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.
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.
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.
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:
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.
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.
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.
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.
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
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:
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.
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.
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.
Autoevaluacin
5.2. Seguridad
5.2.1 Niveles de Seguridad
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.
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.
DBAs que han creado estos ficheros necesitan acceder directamente a ellos a nivel del
sistema operativo.
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.
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
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
TABLESPACE_NAME BYTES
---------------- --------
DATOS 20480
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.
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.
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.
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:
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
Los recursos que pueden ser limitados via perfil son los siguientes:
Atributos:
En general, el perfil por defecto debe ser adecuado para los usuarios normales; los
usuarios con requerimientos especiales deberan tener perfiles especiales.
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.
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:
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:
La otra manera de evitar el problema es crear una cuenta con un password imposible,
aspecto este que se explicar ms adelante.
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.
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
Los roles pueden asignarse a los usuarios. As, podemos asignar el rol
INSERTA_JPEREZ al usuario Juan:
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.
5.2.2.9 Contraseas
ORA_ENCRYT_LOGIN=TRUE (sqlnet.ora)
DBLINK_ENCRYT_LOGIN=TRUE ((s)pfile)
DBMS_RESOURCE_MANAGER
OEM
El SGBD Oracle tiene la capacidad de auditar todas las acciones que tienen lugar en
la BD. Se pueden auditar tres tipos de acciones:
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.
audit session;
Para determinar si se deben registrar slo los xitos, o slo los fracasos se pueden
utilizar los siguientes comandos:
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;
noaudit session;
Por ejemplo, para auditar todas acciones que tienen que ver con las tablas sirve el
siguiente comando:
audit table;
noaudit table;
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.
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:
Autoevaluacin
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.
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.
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.
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.
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.
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.
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:
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.
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.
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:
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.
Una de las desventajas de realizar backups lgicos con export es que son mucho ms
lentos que los backups fsicos.
A. Parmetros de Export
B. Modos de Export
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.
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.
Los ficheros redo log contienen los cambios realizados sobre la BD. Conviene
presentar algunos conceptos relacionados con ellos.
Vector de Cambio
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:
Checkpoints
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.
5.4.5.4 Recuperacin de la BD
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
USING BACKUP CONTROLFILE utiliza una copia de seguridad del fichero de control
para gobernar la recuperacin.
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:
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;
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.
1. Utilizar la copia ms reciente del import para restaurar las definiciones del sistema:
Autoevaluacin
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?
UNIDAD
6
SEGUIMIENTO Y AFINAMIENTO DE SENTENCIAS SQL
LOGRO DE LA UNIDAD DE APRENDIZAJE
TEMARIO
ACTIVIDADES PROPUESTAS
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.
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.
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
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.
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.
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:
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>;
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.
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:
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.
BEGIN
SYS.DBMS_SYSTEM.set_sql_trace_in_session(9, 30, FALSE);
END;
Con el parmetro "sys=no" indicamos que no nos muestre las instrucciones realizadas
por el usuario SYS.
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;
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:
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';
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.
EJEMPLO PRCTICO
1.- Ingresar de manera Stand alone al Enterpise Manager con el usuario SYSTEM.
3. Abrir una sesin del sqlplus con el usuario SYSTEM y hacer lo siguiente:
Aparecer lo siguiente:
Autoevaluacin
2.- Haga el mismo caso del EJEMPLO PRACTICO, pero sin usar el SQLScratchpad.
Solamente deber usar el SQLPLUS.