La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

ORACLE DBA ADMINISTRACION DE BASE DE DATOS

Presentaciones similares


Presentación del tema: "ORACLE DBA ADMINISTRACION DE BASE DE DATOS"— Transcripción de la presentación:

1 ORACLE DBA ADMINISTRACION DE BASE DE DATOS
Dictado por: Ing. Carlos Alcalá Helguero Consultas:

2 ORACLE DBA TEMA 5 ADMINISTRACION DE ESTRUCTURAS Y OBJETOS DE BASES DE DATOS ORACLE

3 ESTRUCTURAS Y OBJETOS DE ORACLE
ESTRUCTURAS DE ALMACENAMIENTO Archivos de Control Cada base de datos tiene su control file. Un archivo de control es un binario que registra la estructura física de la base de datos e incluye: El nombre de Base de Datos Nombres y localidades de archivos de datos y archivos online redo log El timestamp de la creación de Base de Datos El numero de la secuencia de log Información de checkpoint El archivo de control debe estar disponible para escritura por el servidor Oracle cuando este abierta la BD. Sin el archivo de control la base de datos no se puede montar y se dificulta la recuperación de BD. El archivo de control de una BD Oracle, se crea al mismo tiempo que la misma BD, por defecto, al menos una copia del archive de control se crea durante este proceso. Se debe crear uno o mas copias del archivo de control, incluso puede ser necesario que cree los archivos después. Registrar nombres para los Archivos de Control Se especifica un nombre de archivo con el parámetro de inicialización CONTROL_FILES en el archivo de parámetros. La instancia de inicio reconoce y abre todos los archivos listados

4 ESTRUCTURAS Y OBJETOS DE ORACLE
La instancia escribe y mantiene todos los archivos de control durante la operación de la base de datos, si no se especifica los archivos para el parámetro CONTROL_FILES antes de la creación de BD, y no se esta usando la característica Oracle Managed Files, se crea un archivo de control automáticamente y con un nombre por defecto. Realizar Back Up de los archivos de Control Es muy importante realizar back de los archivos de control. Esto es al inicio y en el tiempo que se cambia la estructura de la base de datos. Tales cambios pueden ser: Adicionar, borrar o renombrar archivos de datos Adicionar o borrar espacios de tablas, o alterar el estado lectura-escritura Adicionar o borrar archivos de redo log Tamaño de los archivos de Control El principal determinante del tamaño de un archivo de control son los valores para los parámetros MAXDATAFILES, MAXLOGFILES, MAXLOGMEMBERS, MAXLOGHISTORY, y MAXINSTANCES en la sentencia CREATE DATABASE que se realizo para crear la base de datos asociada.

5 ESTRUCTURAS Y OBJETOS DE ORACLE
Creación de archivos de control iniciales Los archivos de control iniciales de una base de datos son creados cuando se utiliza la sentencia CREATE DATABASE. Los nombres de estos archivos se especifican con el parámetro CONTROL_FILES dentro del archivo de parámetros de inicio usado durante la creación de la base de datos. Los archivos deben ser totalmente especificados. Por ejemplo: CONTROL_FILES = ( c:\oracle\oradata\prueba\control01.ctl, c:\oracle\oradata\prueba\control02.ctl, c:\oracle\oradata\prueba\control03.ctl) Si ya existen archivos con los mismos nombres en la dirección especificada al momento de la creación, se debe especificar la cláusula CONTROLFILE REUSE en la sentencia CREATE DATABASE, sino ocurre un error. También, si el tamaño del antiguo archivo difiere en el parámetro SIZE del nuevo archivo, no se puede hacer uso de la opción REUSE. El tamaño del archivo de control cambia según la versión de Oracle. Se puede cambiar subsecuentemente el valor del parámetro CONTROL_FILES para añadir mas archivos de control o cambiar los nombres existentes y sus direcciones

6 ESTRUCTURAS Y OBJETOS DE ORACLE
La sentencia CREATE CONTROLFILE Se puede crear un nuevo archivo de control usando la sentencia CREATE CONTROLFILE. Las siguientes sentencias crean un nuevo archivo de control para la base de datos prueba (Formalmente una base de datos que use un nombre diferente): CREATE CONTROLFILE SET DATABASE prueba LOGFILE GROUP 1 ('c:\oracle\oradata\prueba\redo01_01.log', 'c:\oracle\oradata\prueba\redo01_02.log‘), GROUP 2 ('c:\oracle\oradata\prueba\redo02_01.log', 'c:\oracle\oradata\prueba\redo02_02.log'), GROUP 3 ('c:\oracle\oradata\prueba\redo03_01.log', 'c:\oracle\oradata\prueba\redo03_02.log') NORESETLOGS DATAFILE 'c:\oracle\oradata\prueba\system01.dbf' SIZE 3M, 'c:\oracle\oradata\prueba\rbs01.dbs' SIZE 5M, 'c:\oracle\oradata\prueba\users01.dbs' SIZE 5M, 'c:\oracle\oradata\prueba\temp01.dbs' SIZE 5M MAXLOGFILES 50 MAXLOGMEMBERS 3 MAXDATAFILES 200 MAXINSTANCES 6 ARCHIVELOG;

7 ESTRUCTURAS Y OBJETOS DE ORACLE
Pasos para crear nuevos archivos de Control Completar los siguientes pasos para crear un nuevo archivo de Control. 1. Hacer una lista de todos los archivos de datos y archivos online redo log de la base de datos Para obtener esa lista se debe ejecutar las siguientes sentencias. SELECT MEMBER FROM V$LOGFILE; SELECT NAME FROM V$DATAFILE; SELECT VALUE FROM V$PARAMETER WHERE NAME = 'CONTROL_FILES'; Si no se puede obtener la lista de archivos y los archivos de control están dañados de tal modo que no se puede abrir la base de datos, intente localizar todos los archivos de datos y online redo log que constituyen la base de datos. Alguno de los archivos que no se haya especificado no se podrá recuperar una vez realizada la creación del nuevo archivo de control. Peor aun si se omite algún archivo del espacio de tablas SYSTEM, no será posible recuperar la base de datos. 2. Realizar shutdown de la base de datos. Si la base de datos esta abierta, realizar un shutdown normal si es posible. Usar las opciones IMMEDIATE o ABORT solo si es el ultimo recurso.

8 ESTRUCTURAS Y OBJETOS DE ORACLE
3. Realizar una copia de todos los archivos de datos y online redo log. 4. Iniciar una nueva instancia, pero no montar o abrir la base de datos: STARTUP NOMOUNT; Precaución: La sentencia CREATE CONTROLFILE puede potencialmente dañar archivos especificados de datos y online redo log files. Omitir un nombre de archivo puede causar perdida de datos en tal archivo, o perder el acceso total a la base de datos. 5. Crear un nuevo archivo de control para la base de datos usando la sentencia CREATE CONTROLFILE. Cuando se crea un nuevo archivo, seleccionar la opción RESETLOGS si se han perdido algún archivo online redo log groups en adición a los archivos de control. En este caso será necesario recuperar de la perdida de los redo logs (Paso 8). También se debe especificar la opción RESETLOGS si se ha renombrado la base de datos. De otro modo seleccionar NORESETLOGS. 6. Guardar un backup del nuevo archivo de control. 7. Editar el parámetro de inicio CONTROL_FILES para la base de datos indicando todos los archivos de control (sin incluir el backup del archivo de control). Si se esta renombrando la base de datos, editar el parámetro DB_NAME y especificar el nuevo nombre. 8. Recuperar la base de datos si es necesario. 9. Abrir la base de datos usando uno de los siguientes métodos:

9 ESTRUCTURAS Y OBJETOS DE ORACLE
Si no se ha realizado una recuperación, o se ha realizado una recuperación completa de la base de datos cerrada, abrir la base de datos con normalidad. ALTER DATABASE OPEN; Si se ha especificado RESETLOGS cuando se ha creado el archivo de control , usar ALTER DATABASE RESETLOGS. ALTER DATABASE OPEN RESETLOGS; Ahora la base de datos esta abierta y lista para su uso.

10 ESTRUCTURAS Y OBJETOS DE ORACLE
Manejo de errores durante CREATE CONTROLFILE Si Oracle envia un error (usualmente ORA-01173, ORA-01176, ORA-01177, ORA-01215, u ORA-01216) cuando se intenta montar y abrir la base de datos después de crear el archive de control, la causa mas probable es que se ha omitido algún archivo desde la sentencia CREATE CONTROLFILE o se ha incluido alguno que no debería estar listado. En este caso se debe recuperar los archivos que se hicieron backup en el paso 3 y repetir el procedimiento desde el paso 4, usando los archivos correctos. Recuperación de un archivo de control corrupto usando una copia Este procedimiento asume que uno de los archivos de control especificado en el parámetro CONTROL_FILES esta dañado, el directorio es accesible, y se tiene una copia multiplexada del archivo de control. 1. Con la instancia finalizada (shutdown), usar un comando del sistema operativo para sobrescribir el archivo dañado con una copia que sirva: % copy c:\oracle\prueba\control03.ctl c:\oracle\prueba\control01.ctl; 2. Iniciar SQL*Plus y abrir la base de datos: SQL> STARTUP

11 ESTRUCTURAS Y OBJETOS DE ORACLE
Realizar Backup de archivos de Control Usar la sentencia ALTER DATABASE BACKUP CONTROLFILE para realizar una copia de seguridad de los archivos de control. Se tienen dos opciones: 1. Realizar backup del archivo de control a un archivo binario (duplicar el archive de control existente) usando la siguiente sentencia: ALTER DATABASE BACKUP CONTROLFILE TO 'c:\oracle\backup\control.bkp'; 2. Producir las sentencias SQL que permitan después recrear el archivo de control: ALTER DATABASE BACKUP CONTROLFILE TO TRACE; Este comando escribe un script SQL al archivo de base de datos trace donde puede ser capturado y editado para reproducir un archivo de control. Borrar Archivos de Control Se puede borrar archivos de control de la base de datos. Por ejemplo, si la dirección del archivo ya no es apropiada. Recuerde que la base de datos debe tener al menos dos archivos de control todo el tiempo. 1. Finalizar la base de datos. 2. Editar el parámetro CONTROL_FILES para borrar el antiguo archivo de control de la lista 3. Reiniciar la Base de datos.

12 ESTRUCTURAS Y OBJETOS DE ORACLE
ARCHIVOS ONLINE REDO LOG Que son los archivos Online redo log La mas crucial estructura para operaciones de recuperación es el online redo log, que consiste en dos o mas archivos prelocalizados que guardan todos los cambios hechos a la base de datos mientras ocurren. Cada instancia de base de datos tiene su online redo log asociado para proteger la base de datos en caso de una falla de la instancia. Como Oracle escribe los datos en Online Redo Log El online redo log de una base de datos consiste en dos o mas archivos files. Oracle requiere un mínimo de dos archivos para garantizar que siempre esta uno disponible para su escritura mientras otro esta siendo archivado (si esta en modo ARCHIVELOG). El proceso LGWR escribe en los archivos online redo log en un proceso circular. Cuando el archivo actual se llena, LGWR comienza a escribir en el siguiente archivo disponible. Cuando el ultimo archivo disponible se llena, LGWR retorna al primer archivo, iniciando el ciclo nuevamente. La figura a continuación ilustra esto.

13 ESTRUCTURAS Y OBJETOS DE ORACLE

14 ESTRUCTURAS Y OBJETOS DE ORACLE
Creación de Online Redo Log Grupos y miembros Planificar el online redo log de una base de datos y crear todos los grupos y miembros de archivos durante la creación de base de datos. Para crear nuevos grupos y miembros de online redo log, se debe tener el privilegio ALTER DATABASE. Una base de datos puede tener un máximo numero de grupos especificado en MAXLOGFILES. Creando grupos Para crear un nuevo grupo de archivos, usar la sentencia SQL: ALTER DATABASE con la opción ADD LOGFILE. La siguiente sentencia adiciona un nuevo grupo a la base de datos: ALTER DATABASE ADD LOGFILE ('c:\oracle\dbs\log1c.rdo', 'c:\oracle\dbs\log2c.rdo') SIZE 500K; También se puede especificar el numero que identifica el grupo usando la opción GROUP: ALTER DATABASE ADD LOGFILE GROUP 10 ('c:\oracle\dbs\log1c.rdo', 'c:\oracle\dbs\log2c.rdo') SIZE 500K; Usar el numero de grupo hace la administración mas fácil. Sin embargo, el numero debe estar en el rango 1- MAXLOGFILES. No se deben saltar los números de grupos (ejemplo 10, 20, 30, y así), o se consumirá espacio en los archivos de control innecesariamente.

15 ESTRUCTURAS Y OBJETOS DE ORACLE
Creando miembros En algunos casos, no será necesario crear un grupo complete de archivos online redo log. Un grupo ya puede existir, pero no estar complete porque alguno de sus miembros está borrado o no existe (por ejemplo debido a una falla de disco). En este caso, se añada un nuevo miembro al grupo existente. Para crear un nuevo miembro para un grupo existente, usar la sentencia SQL de ALTER DATABASE con la opción ADD LOG MEMBER. La siguiente sentencia añade un nuevo miembro al grupo 2: ALTER DATABASE ADD LOGFILE MEMBER 'c:\oracle\dbs\log2b.rdo' TO GROUP 2; Relocalizar y Renombrar miembros Se puede usar comandos del sistema operativo para relocalizar online redo logs, luego usar la sentencia ALTER DATABASE para actualizar sus nuevos nombres (localización) en la base de datos. Este procedimiento es necesario, por ejemplo, si el disco usado para algunos archivos online redo log files va a ser removido, o si archivos de datos y archivos online redo log están guardados en el mismo disco y deben estar separados para reducir la contención. Para renombrar los miembros online redo log, se debe tener el privilegio ALTER DATABASE. Adicionalmente privilegios de sistema para copiar los archivos necesarios a su nueva localidad y para abrir y realizar backup de la base de datos.

16 ESTRUCTURAS Y OBJETOS DE ORACLE
Usar el siguiente procedimiento para relocalizar redo logs. El presente ejemplo asume lo siguiente: Los archivos log están localizados en dos disco C:\ y D:\ El online redo log esta duplexado: un grupo consiste de los miembros C:\logs\log1a.rdo y D:\logs\log1b.rdo, y el segundo grupo consiste de los miembros C:\logs\log2a.rdo y D:\logs\log2b.rdo Los archivos de log que están localizados en C:\ deben ser renombrados en E:\ los nuevos archivos deben reflejar la nueva dirección. Para renombrar los miembros Online Redo Log. 1. Finalizar la base de datos. SHUTDOWN 2. Copiar o mover los archivos online redo log a su nueva dirección. copy C:\logs\log1a.rdo E:\logs\log1c.rdo copy C:\logs\log2a.rdo E:\logs\log2c.rdo 3. Iniciar la base de datos, montar, pero no abrir. CONNECT \ as SYSDBA STARTUP MOUNT 4. Renombrar los miembros online redo log. Usar la sentencia ALTER DATABASE con la opción RENAME FILE. ALTER DATABASE RENAME FILE 'c:\logs\log1a.rdo', 'c:\logs\log2a.rdo' TO 'd:\logs\log1c.rdo', 'c:\logs\log2c.rdo'; 5. Abrir la base de datos para su operación normal. Las alteraciones surten efecto cuando se abre la base de datos.

17 ESTRUCTURAS Y OBJETOS DE ORACLE
Borrar grupos y miembros En algunos casos, necesite borrar un grupo entero de miembros. Por ejemplo, si desea reducir el numero de grupos en una instancia online redo log. En un caso diferente, se necesite borrar uno o mas miembros especificos. Por ejemplo si ocurre una falla de disco, se necesite borrar todos los archivos online redo log en el disco dañado para que Oracle no intente escribir en los archivos inaccesibles. En otras situaciones, algunos archivos quizás sean innecesarios, o un archivo esta en un lugar no apropiado. Borrar grupos de Log Para borrar un grupo de redo log se debe tener privilegios de alteración de base de datos. Antes de borrar un grupo se deben tomar en cuenta las siguientes precauciones: Una instancia requiere al menos dos grupos de online redo log, sin importar el numero de miembros de cada grupo Se puede borrar un grupo solo si esta inactivo, si es necesario borrar el grupo actual, se debe forzar un log switch Asegurarse que el grupo esta archivado si ARCHIVELOG esta activado antes de borrarlo.

18 ESTRUCTURAS Y OBJETOS DE ORACLE
Para verificar que esto ha sucedido usar la vista V$LOG SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG; GROUP# ARC STATUS 1 YES ACTIVE 2 NO CURRENT 3 YES INACTIVE 4 YES INACTIVE Borrar el grupo de redo log con la sentencia SQL de ALTER DATABASE con la opción DROP LOGFILE. Por ejemplo: ALTER DATABASE DROP LOGFILE GROUP 3; Borrar miembros Redo Log Para borrar miembros específicos de online redo log, usar la sentencia ALTER DATABASE con la opción DROP LOGFILE MEMBER. Por ejemplo: ALTER DATABASE DROP LOGFILE MEMBER 'c:\oracle\dbs\log3c.rdo'; Cuando un miembro se borra de la base de datos, el archive permanece en disco. Pero los archivos de control asociados se actualizan para borrar al miembro de la estructura. Después de borrar el miembro de la base de datos, y luego usar el comando necesario para borrar el archivo del disco.

19 ESTRUCTURAS Y OBJETOS DE ORACLE
Forzar Log Switches Un log switch ocurre cuando el LGWR termina de escribir en el grupo redo log y empieza en otro. Por defecto un log switch ocurre automáticamente cuando se llena el archive de grupo. Se puede forzar un log switch para hacer disponible el grupo activo para mantenimiento. Por ejemplo si se quiere borrar el grupo activo, pero no se puede hasta que este inactivo. Usar la sentencia ALTER SYSTEM con la opción SWITCH LOGFILE. Por ejemplo: ALTER SYSTEM SWITCH LOGFILE; Limpiar un archivo Online Redo Log Un archive redo log se puede volver corrupto cuando se abre la base de datos, y parar la actividad de la base de datos porque no se puede continuar con el archivado. En esta situación se debe usar la sentencia ALTER DATABASE CLEAR LOGFILE para reiniciar el archivo sin tener que finalizar la base de datos. ALTER DATABASE CLEAR LOGFILE GROUP 3; Si el archivo dañado no ha sido archivado, usar la opción UNARCHIVED en la sentencia. ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 3; Esta sentencia limpia el archivo redo logs y no permite que se archive. Los archivos redo logs están disponibles para su uso incluso si no han sido archivados.

20 ESTRUCTURAS Y OBJETOS DE ORACLE
ESPACIOS DE TABLAS Usar múltiples Espacios de Tablas Usar múltiples espacios de tablas permite mayor flexibilidad en operaciones con la BD. Por ejemplo, las siguientes tareas: Separar datos de usuario de datos del diccionario para reducir el contenido de los objetos de diccionario y objetos de esquema para los mismos archivos Separar datos de una aplicación de otra para prevenir que múltiples aplicaciones se vean afectadas cuando se ponga fuera de línea un espacio de tablas. Guardar diferentes archivos de datos en discos separados para reducir lectura de entrada/salida Separar datos de segmentos de rollback de datos de usuarios, previendo que la falla de un disco cause la perdida permanente de datos. Realizar backup de espacios de tablas individuales Creación de Espacios de Tablas Antes de crear un espacio de tablas se debe crear una base de datos para contenerlo. El primer espacio de tablas en cualquier base de datos es el SYSTEM, y los primeros espacios de tablas de cualquier base de datos son automáticamente guardados en el espacio SYSTEM durante la creación de la base de datos. Los pasos para crear un espacio de tablas varia según el sistema operativo. En todos los casos, sin embargo, se debe crear la estructura de directorios donde se guardara los archivos de datos. En la mayoría de los sistemas operativos se indica el tamaño y nombre de archivo totalmente especificado cuando se crea o altera un espacio de tablas.

21 ESTRUCTURAS Y OBJETOS DE ORACLE
Se pueden crear espacios de tablas de diferentes tamaños de bloques que el estándar especificado por el parámetro DB_BLOCK_SIZE. Sin embargo, el buffer cache en la memoria SGA debe estar configurado para los diferentes tamaños de bloque. Para crear un nuevo espacio de tablas, usar la sentencia SQL de CREATE TABLESPACE o CREATE TEMPORARY TABLESPACE.. Luego se puede usar la sentencia ALTER TABLESPACE o ALTER DATABASE para cambiar características del espacio de tablas. Creación de un espacio de tablas local Para crear un espacio de tablas local, se debe especificar LOCAL en la opción EXTENT MANAGEMENT de la sentencia CREATE TABLESPACE. Opcionalmente, se puede omitir EXTENT MANAGEMENT; la opción de local esta por defecto. Luego se tienen dos opciones, se puede hacer que Oracle maneje los extensiones automáticamente con la opción AUTOALLOCATE (por defecto), o se puede especificar que el espacio de tablas se con extensiones uniformes de un tamaño especifico (UNIFORM SIZE) Si el espacio de tablas se espera que contenga objetos de diferentes tamaños requiriendo diferentes tamaños de extensiones, entonces AUTOALLOCATE es la mejor opción. AUTOALLOCATE presenta una forma simplificada para manejar el espacio de tablas. Algún espacio quizás se gaste pero el beneficio de que Oracle lo maneje es mas conveniente.

22 ESTRUCTURAS Y OBJETOS DE ORACLE
Por otro lado, si se desea control exacto sobre el espacio no utilizado, y se puede predecir exactamente el tamaño de las extensiones y los objetos, entonces la mejor opción es UNIFORM. Asegura que no se tendrá espacio sin utilizar en la base de datos. La siguiente sentencia crea un espacio de tablas local denominada lmtbsb, donde AUTOALLOCATE hace que Oracle maneje automáticamente el tamaño de extensiones. CREATE TABLESPACE lmtbsb DATAFILE 'c:\oracle\data\lmtbsb01.dbf' SIZE 50M EXTENT MANAGEMENT LOCAL AUTOALLOCATE; Alternativamente, este espacio de tablas se puede crear con la opción UNIFORM. En este ejemplo con una extensión de 128K de tamaño. Cada 128K de extensiones (donde, si el tamaño de bloque del espacio de tabla es 2K, es equivalente a 64 bloques Oracle) es representado por un bit en el bitmap de la extensión para este archivo. EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;

23 ESTRUCTURAS Y OBJETOS DE ORACLE
Especificar el espacio de segmento Cuando se crea un espacio de tablas local usando la sentencia CREATE TABLESPACE, la opción SEGMENT SPACE MANAGEMENT permite especificar como se manejara el espacio libre y usado dentro de un segmento. Las opciones son: MANUAL Especificar esta opción le dice a Oracle que se quiere listas libres para manejar espacios libres entre segmentos. Listas libres son listas de bloques de datos que tienen espacio disponible para insertar filas. Esta opción es por defecto. AUTO Esta opción permite que se use bitmaps para el manejo de espacio libre entre segmentos. Un bitmap, es un mapa que describe el estado de cada bloque de datos dentro del segmento, con respecto al monto de espacio en el bloque disponible de insertar filas. La siguiente sentencia crea un espacio de tablas lmtbsb con manejo automático de segmentos: CREATE TABLESPACE lmtbsb DATAFILE 'c:\oracle\data\lmtbsb01.dbf' SIZE 50M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

24 ESTRUCTURAS Y OBJETOS DE ORACLE
Alterar un espacio de tablas No se puede alterar un espacio de tablas local hacia un espacio de tablas temporal, ni se puede cambiar su metodo de manejo de espacios de segmento. Algunas razones para usar la sentencia ALTER TABLESPACE para espacios de tablas local son: Adicionar un archivo de datos. Por ejemplo: ALTER TABLESPACE lmtbsb ADD DATAFILE 'c:\oracle\data\lmtbsb02.dbf' SIZE 1M; Espacios de tablas de Diccionario Iniciando con Oracle9i, la extensión por defecto para la creación de espacios de tablas es manejo local. Sin embargo, se puede explicitar que se desea crear un espacio de tablas de diccionario. Creación de un espacio de tablas de Diccionario Como ejemplo, la siguiente sentencia crea un espacio de tablas tbsa, con las siguientes características: Los datos del nuevo espacio de tablas, se contiene en un archivo unico de datos de 50M de tamaño. El espacio de tablas se crea específicamente como Diccionario con la sentencia especificada EXTENT MANAGEMENT DICTIONARY

25 ESTRUCTURAS Y OBJETOS DE ORACLE
La siguiente sentencia crea el espacio de tablas tbsb: CREATE TABLESPACE tbsb DATAFILE 'c:\oracle\data\tbsa01.dbf' SIZE 50M EXTENT MANAGEMENT DICTIONARY DEFAULT STORAGE ( INITIAL 50K NEXT 50K MINEXTENTS 2 MAXEXTENTS 50 PCTINCREASE 0); El siguiente ejemplo crea el espacio de tablas tbsb, pero en esta oportunidad con un tamaño de bloque diferente del estándar (como se especifica con DB_BLOCK_SIZE). DATAFILE 'c:\oracle\data\tbsb01.dbf' SIZE 50M BLOCKSIZE 8K

26 ESTRUCTURAS Y OBJETOS DE ORACLE
Alteración de un espacio de tablas de Diccionario Una razón para utilizar la sentencia ALTER TABLESPACE es para añadir un archivo de datos. La siguiente sentencia crea un nuevo archive de datos para el espacio de tablas tbsa: ALTER TABLESPACE tbsa ADD DATAFILE 'c:\oracle\data\tbsa02.dbf' SIZE 1M; Eliminación de Espacios de Tablas Se puede eliminar espacios de tablas y su contenido (los segmentos contenidos en el espacio de tablas) desde la base de datos si el espacio de tablas y el contenido no se requieren mas. Cualquier espacio de tablas se puede borrar en una base de datos Oracle, excepto el espacio de tablas SYSTEM. Se debe tener el privilegio DROP TABLESPACE para eliminar un espacio de tablas. Cuando se elimina un espacio de tablas, los punteros de archivos en el archive de control de la base de datos asociada son borrados. Se puede opcionalmente dirigir a Oracle para remover los archivos de sistema (archivos de datos) que constituyen el espacio de tablas eliminado. No se puede borrar un espacio de tablas que contenga algún segmento activo. Por ejemplo, si una tabla en el espacio de tablas esta siendo actualmente usada o si el espacio de tablas contiene un segmento de rollback activo. Por simplicidad, poner el espacio de tablas fuera de línea antes de borrar. Para borrar un espacio de tablas se debe usar la sentencia DROP TABLESPACE. La siguiente sentencia borra el espacio de tablas users, incluyendo los segmentos: DROP TABLESPACE users INCLUDING CONTENTS;

27 ESTRUCTURAS Y OBJETOS DE ORACLE
Si el espacio de tablas esta vació (no contiene ninguna tabla, vistas o estructuras), no se tiene que especificar la opción INCLUDING CONTENTS. Se usa la opcion CASCADE CONSTRAINTS para borrar todas las referencias de integridad referencial de las tablas fuera del espacio de tablas que referencias a claves primarias y llaves unicas de tablas dentro del espacio de tablas. Para borrar los archivos de datos asociados con el espacio de tablas al mismo tiempo que el espacio de tablas se borra, usar la opción INCLUDING CONTENTS AND DATAFILES. La siguiente sentencia borra el espacio de tablas USER y sus archivos de datos asociados: DROP TABLESPACE users INCLUDING CONTENTS AND DATAFILES; Un mensaje de alerta se escribe por cada archive de datos que se borra. Si un error de sistema operativo previene la eliminación del archivo, la sentencia DROP TABLESPACE de todos modos funciona, pero un mensaje describiendo el error se registra en el archivo de alerta. Ver Información de Espacios de Tablas Algunas vistas de diccionarios proveen información útil acerca de los espacios de tablas de una base de datos. Listar Espacios de tablas y Parámetros por defecto Para listar los nombres de los parámetros por defecto de todos los espacios de tablas en una base de datos, se tienen las siguientes vistas: DBA_EXTENTS, USER_EXTENTS Informacion acera de extensiones de datos de espacios de tablas. DBA_FREE_SPACE, USER_FREE_SPACE Informacion acerca de extensiones libres de espacios de tablas

28 ESTRUCTURAS Y OBJETOS DE ORACLE
V$DATAFILE Informacion acerca de todos los archivos de datos, incluyendo numeros de espacios de tablas. V$TEMPFILE Informacion acerca de archivos temporales, incluyendo numero de espacio de tablas. DBA_DATA_FILES Muestra archivos (datafiles) pertenecientes a espacios de tablas. DBA_TEMP_FILES Muestra archivos (tempfiles) pertenecientes a espacios de tablas temporales. V$TEMP_EXTENT_MAP Informacion sobre todas las extension. V$TEMP_EXTENT_POOL Para espacios de tablas locales: estado de espacio temporal en cache usado por instancia. V$TEMP_SPACE_HEADER Muestra el espacio usado/libre para cada archivo temporal. DBA_USERS Espacio de tablas por defecto para todos los usuarios. DBA_TS_QUOTAS Listar las quotas de los espacios de tablas para todos los usuarios. V$SORT_SEGMENT Informacion sobre cara tipo de segmento en una instancia. V$SORT_USER Espacio temporal ordenado usado por usuario de espacio de tablas temporal/permanente.

29 ESTRUCTURAS Y OBJETOS DE ORACLE
Usar la siguiente consulta en la vista DBA_TABLESPACES: SELECT TABLESPACE_NAME "TABLESPACE", INITIAL_EXTENT "INITIAL_EXT", NEXT_EXTENT "NEXT_EXT", MIN_EXTENTS "MIN_EXT", MAX_EXTENTS "MAX_EXT", PCT_INCREASE FROM DBA_TABLESPACES; TABLESPACE INITIAL_EXT NEXT_EXT MIN_EXT MAX_EXT PCT_INCREASE RBS SYSTEM TEMP TESTTBS USERS

30 ESTRUCTURAS Y OBJETOS DE ORACLE
Listar los archivos de datos y espacios de tablas asociadas Para listar los nombres, tamaños, y espacios de los archivos de datos de las tablas asociados de una base de datos, ingresar la siguiente consulta en la vista DBA_DATA_FILES: SELECT FILE_NAME, BLOCKS, TABLESPACE_NAME FROM DBA_DATA_FILES; FILE_NAME BLOCKS TABLESPACE_NAME C:\ORACLE\IDDB3\RBS01.DBF RBS C:\ORACLE\IDDB3\SYSTEM01.DBF SYSTEM C:\ORACLE\IDDB3\TEMP01.DBF TEMP C:\ORACLE\IDDB3\TESTTBS01.DBF TESTTBS C:\ORACLE\IDDB3\USERS01.DBF USERS

31 ESTRUCTURAS Y OBJETOS DE ORACLE
Desplegar estadísticas para espacio libre de cada espacio de tablas Para producir estadisticas acerca del espacio libre y actividad para cada espacio de tablas en la base de datos, ejecutar la siguiente consulta: SELECT TABLESPACE_NAME "TABLESPACE", FILE_ID, COUNT(*) "PIECES", MAX(blocks) "MAXIMUM", MIN(blocks) "MINIMUM", AVG(blocks) "AVERAGE", SUM(blocks) "TOTAL" FROM DBA_FREE_SPACE WHERE TABLESPACE_NAME = 'SYSTEM' GROUP BY TABLESPACE_NAME, FILE_ID; TABLESPACE FILE_ID PIECES MAXIMUM MINIMUM AVERAGE TOTAL RBS SYSTEM TEMP TESTTBS USERS

32 ESTRUCTURAS Y OBJETOS DE ORACLE
PIECES muestra el número de extensiones de espacio vacío en el espacio de tablas. MAXIMUM y MINIMUM muestran el mayor y menor de áreas contiguas de espacio en bloques de base de datos. AVERAGE muestra el promedio del tamaño de bloques de un espacio vacio de extensión. TOTAL muestra la cantidad de espacio libre en cada espacio de tablas en bloques. Esta consulta es útil cuando se esta por crear un nuevo objeto o se sabe que un segmento esta a punto de extenderse, y se desea asegurar que hay suficiente espacio disponible en el espacio de tablas.

33 ESTRUCTURAS Y OBJETOS DE ORACLE
ARCHIVOS DE DATOS Archivos de datos son archivos fisicos del sistema operativo que guardan la informacion de todas las estructuras logicas en la base de datos. Se deben crear explícitamente para cada espacio de tablas. Oracle asigna a cada archivo de datos dos números asociados, un número absoluto de archivo y un número relativo de archivo, que es usado para identificarlo inequívocamente. Creación de Archivos de Datos y Adición a espacios de Tablas Cuando se crea un espacio de tablas, puede estimar el tamaño potencial de objetos de base de datos y crear suficientes archivos de datos en diferentes dispositivos. Después, si es necesario, puede crear archivos de datos adicionales y adicionarlos al espacio de tablas para incrementar el tamaño total de disco para localizar el mismo, y consecuentemente la base de datos. CREATE TABLESPACE Crea un espacio de tablas y los archivos de datos que lo componen CREATE TEMPORARY TABLESPACE Crea un espacio de tablas local temporal y los tempfiles (tempfiles son una especie de archivos de datos especiales) ALTER TABLESPACE ... ADD DATAFILE Crea y adiciona un archivo de datos a un espacio de tablas ALTER TABLESPACE ... ADD TEMPFILE Crea y adiciona un archivo de datos temporal a un espacio de tablas CREATE DATABASE Crea una base de datos y sus archivos de datos asociados ALTER DATABASE ... CREATE DATAFILE Crea un nuevo archivo de datos vacoi de uno antiguo para recrear un archivo que no tiene backup.

34 ESTRUCTURAS Y OBJETOS DE ORACLE
Se puede crear archivos de datos y asociarlos con un espacio de tablas usando cualquiera de las sentencias listadas a continuación. En todos los casos, se puede especificar el archivo a crear. Si se añade nuevos archivos de datos a un espacio de tablas y no se especifica el nombre de archivo, Oracle crea el archivo de datos en el directorio por defecto o el directorio actual, Habilitar o Deshabilitar Extensión Automática Se puede crear archivos de datos o alterar existentes para que se puedan incrementar automáticamente en tamaño cuando se necesita mas espacio en la base de datos. Los archivos incrementan de forma específica hasta un máximo. Se puede especificar extensión automática de archivo con la opción AUTOEXTEND ON cuando se crean archivos de datos con las siguientes sentencias SQL: CREATE DATABASE CREATE TABLESPACE ALTER TABLESPACE Se puede activar o desactivar la extensión automática de extensión de archivos para archivos de datos existentes, o manualmente redimensionar un archivo de datos usando la sentencia SQL de ALTER DATABASE. El siguiente ejemplo activa la extensión automática de un archivo de datos adicionado al espacio de tablas users: ALTER TABLESPACE users ADD DATAFILE 'c:\oracle\rbdb1\users03.dbf' SIZE 10M AUTOEXTEND ON NEXT 512K MAXSIZE 250M;

35 ESTRUCTURAS Y OBJETOS DE ORACLE
EL valor de NEXT es el mínimo tamaño del incremento adicionado a un archivo cuando se extiende. El valor de MAXSIZE es el máximo tamaño que el archive puede automáticamente extenderse. El siguiente ejemplo deshabilita la extensión automática para el archivo de datos. ALTER DATABASE DATAFILE 'c:\oracle\rbdb1\users03.dbf' AUTOEXTEND OFF; Redimensión manual de Archivos de Datos Se puede incrementar o decrementar manualmente el tamaño de un archive de datos usando la sentencia ALTER DATABASE. Dado que se puede cambiar el tamaño de los archivos de datos, se puede añadir mas espacio a su base de datos sin añadir mas archivos de datos. Esto es algo beneficioso si esta por alcanzar el máximo numero de archivos de datos permitidos en su base de datos. Manualmente reducir el tamaño de archivos de datos permite reclamar espacio no utilizado en la base de datos. Esto es util para corregir errores de estimados de requerimientos de espacio. En el siguiente ejemplo, asumir que el archivo de datos c:\oracle\rbdb1\stuff01.dbf se ha extendido hasta 250M. Sin embargo, el archive de datos puede ser reducido en tamaño. La siguiente sentencia decrementa el tamaño del archivo de datos C:\oracle\rbdb1\stuff01.dbf: ALTER DATABASE DATAFILE 'c:\oracle\rbdb1\stuff01.dbf' RESIZE 100M;

36 ESTRUCTURAS Y OBJETOS DE ORACLE
Renombrar y Relocalizar Archivos de Datos Se puede renombrar archivos de datos para cambiar el nombre o relocalizar el archivo: Cuando se renombra o relocaliza un archive de datos, solo los punteros a los archivos, como estan en los archivos de control se cambian. Los procedimientos no renombran fisicamente ningun archivo de sistema operativo, o realiza copias a nivel de sistema operativo. Renombrar y relocalizar envuelve varios pasos. Renombrar Archivos de Datos Para renombrar archivos de datos en un espacio de tablas se debe seguir el siguiente procedimiento: 1. Tomar el espacio de tablas no-SYSTEM que contiene los archivos de datos fuera de línea. Por Ejemplo: ALTER TABLESPACE users OFFLINE NORMAL; 2. Renombrar los archivos de datos usando comandos del sistema operativo. 3. Usar la sentencia ALTER TABLESPACE con la opción RENAME DATAFILE para cambiar los nombres de archivos dentro de la base de datos. Por ejemplo, la siguiente sentencia renombra los archivos de datos: ALTER TABLESPACE users RENAME DATAFILE 'c:\oracle\rbdb1\user1.dbf', c:\oracle\rbdb1\user2.dbf' TO 'c:\oracle\rbdb1\users01.dbf', 'c:\oracle\rbdb1\users02.dbf'; Los nuevos archivos deben existir; esta sentencia no crea los archivos. También, siempre se debe proveer los nombres completos de archivos (incluyendo dirección) para identificar apropiadamente los viejos y nuevos archivos. En particular, especificar el nombre de archivo anterior exactamente tal como aparece en la vista DBA_DATA_FILES del diccionario de datos. 4. Realizar un backup de la base de datos.

37 ESTRUCTURAS Y OBJETOS DE ORACLE
Relocalizar y Renombrar Archivos de Datos Los pasos para relocalizar y renombrar un archivo de datos es el siguiente: 1. Identificar el nombre del archivo de datos de interés. La siguiente sentencia de la vista del diccionario de datos DBA_DATA_FILES lista los nombres de archivos de datos y sus respectivos tamaños (en bytes) del espacio de tablas users: SELECT FILE_NAME, BYTES FROM DBA_DATA_FILES WHERE TABLESPACE_NAME = 'USERS'; FILE_NAME BYTES C:\ORACLE\RBDB1\USERS01.DBF C:\ORACLE\RBDB1\USERS02.DBF 2. Tomar el espacio de tablas fuera de línea, o finalizar la base de datos y reiniciar montando, dejándola cerrada. Cualquier opción cierra los archivos de datos. 3. Copiar los archivos de datos a sus nuevas direcciones y renombrar usando comandos del sistema operativo. 4. Renombrar los archivos de datos dentro de Oracle. Los punteros de archivos de datos guardados, en el archivo de control de la base de datos asociada, se debe cambiar a los nuevos nombres. Si el espacio de tablas esta fuera de línea pero la base de datos esta abierta, usar la sentencia ALTER TABLESPACE ... RENAME DATAFILE. Si la base de datos esta montada pero cerrada, usar la sentencia ALTER DATABASE ... RENAME FILE.

38 ESTRUCTURAS Y OBJETOS DE ORACLE
Por ejemplo: ALTER TABLESPACE users RENAME DATAFILE 'c:\oracle\rbdb1\users01.dbf','c:\oracle\rbdb1\users02.dbf' TO 'd:\oracle\rbdb1\users01.dbf','d:\oracle\rbdb1\users02.dbf'; 5. Poner el espacio de tablas en línea, o abrir la base de datos. Si el espacio de tablas users esta fuera de línea y la base de datos esta abierta, colocar el espacio de tablas en línea nuevamente. Si la base de datos esta montada pero cerrada, abrir la base de datos. 6. Hacer un backup completo de la base de datos.

39 ESTRUCTURAS Y OBJETOS DE ORACLE
Ver información de Archivos de Datos Los siguientes ejemplos proveen información útil acerca de los archivos de datos de una base de datos: Por ejemplo usando la vista, V$DATAFILE. SELECT NAME, FILE#, STATUS, CHECKPOINT_CHANGE# "CHECKPOINT" FROM V$DATAFILE; NAME FILE# STATUS CHECKPOINT C:\oracle\rbdb1\system01.dbf 1 SYSTEM 3839 C:\oracle\rbdb1\temp01.dbf 2 ONLINE 3782 C:\oracle\rbdb1\users03.dbf 3 OFFLINE 3782 FILE# Lista el numero de cada archivo de datos; el primer archive de datos creado en el espacio de tablas SYSTEM siempre es 1. STATUS Lista otra información acerca del archivo de datos. Si el archivo es parte del espacio de tablas SYSTEM, su estado es SYSTEM. Si un archivo de datos en un espacio de tablas no-SYSTEM esta en línea, su estado es ONLINE. Caso contrario es OFFLINE o RECOVER. CHECKPOINT Lista el SCN final (system change number) escrito para el mas reciente checkpoint de un archivo de datos.

40 ESTRUCTURAS Y OBJETOS DE ORACLE
OBJETOS DE BASE DE DATOS TABLAS Creación de Tablas Para crear una nueva tabla en su esquema, se debe tener el privilegio de CREATE TABLE. Para crear tablas en el esquema de cualquier usuario, se debe tener el privilegio CREATE ANY TABLE. Adicionalmente, el propietario de la tabla debe tener una cuota para el espacio de tablas que contiene la tabla, o el privilegio UNLIMITED TABLESPACE. Se puede crear tablas usando la sentencia SQL de CREATE TABLE. Creación de una Tabla Cuando el usuario scott realiza la siguiente sentencia, crea la tabla denominada emp en su esquema y lo guarda en el espacio de tablas users:

41 ESTRUCTURAS Y OBJETOS DE ORACLE
CREATE TABLE emp ( empno NUMBER(5) PRIMARY KEY, ename VARCHAR2(15) NOT NULL, job VARCHAR2(10), mgr NUMBER(5), hiredate DATE DEFAULT (sysdate), sal NUMBER(7,2), comm NUMBER(7,2), deptno NUMBER(3) NOT NULL CONSTRAINT dept_fkey REFERENCES dept) PCTFREE 10 PCTUSED 40 TABLESPACE users STORAGE ( INITIAL 50K NEXT 50K MAXEXTENTS 10 PCTINCREASE 25 );

42 ESTRUCTURAS Y OBJETOS DE ORACLE
Tablas Una tabla se crea en un segmento. Este segmento posee una o más extensiones. Si la tabla crece hasta alcanzar el tamaño máximo de una extensión, entonces se crea uno nuevo para esa tabla. Las extensiones crecen de la manera en que se definieron cuando se creó la tabla, dentro de la cláusula Storage. Cuando la cláusula anterior no se define para una tabla, entonces se utilizan los parámetros por defecto definidos dentro del tablespace donde se está usando. Si tampoco existen, entonces se utilizan los parámetros del sistema. La cláusula storage La sintaxis de la cláusula mencionada cuando se crea una tabla es la siguiente: CREATE TABLE nombre_tabla(nombre_columna tipo_columna,...)TABLESPACE nombre_tablespaceSTORAGE(INITIAL tamaño NEXT tamaño PCTINCREASE porcentaje MINEXTENTS número MAXEXTENTS número o UNLIMITED);

43 ESTRUCTURAS Y OBJETOS DE ORACLE
INITIAL: Es el tamaño en bytes de la extensión inicial; la primera que se crea, en el instante mismo en que se crea la tabla (aún sin datos). También se pueden utilizar las letras K o M seguidas del número para denotar kilobytes o megabytes. NEXT: Análogo al anterior, pero aplica a los tamaños de las extensiones posteriores. PCTINCREASE: Este parámetro especifica el tamaño de las extensiones posteriores a la segunda. Así como initial indica la extensión de la primera extensión, next lo indica para la segunda y pctincrease es el porcentaje en que se incrementarán los tamaños de las extensiones en adelante. El valor 0 (cero) indica que todas las extensiones tendrán el mismo tamaño que lo indicado en next y el valor 100 que se incrementaran en un 100% con respecto a ese valor (es decir, el doble de next). MINEXTENTS: Con este parámetro se puede indicar cuántas extensiones se crearán en el momento en que se cree el objeto, todas respetando el valor de lo indicado en initial. MAXEXTENTS: Permite indicar el número máximo de extensiones que podrá tener el objeto creado.

44 ESTRUCTURAS Y OBJETOS DE ORACLE
Cláusulas PCTFREE y PCTUSED Al momento de crear una tabla, es posible indicar, mediante dos parámetros al momento de su creación, ciertas condiciones de almacenamiento especiales que dicen relación con la volatilidad de los datos y cómo gestionar mejor el espacio (bloques) asignado a cada extensión del objeto. Estos parámetros se denominan PCTFREE y PCTUSED. PCTFREE: Determina el porcentaje de espacio que se reservará en cada bloque de datos de una tabla para futuras actualizaciones de los registros que se graben en ese mismo bloque. El valor que se asigne al parámetro implica conocer la frecuencia de updates que se harán a la tabla. Los valores sugeridos para distintas frecuencias de actualización de filas proyectada para la tabla, son los siguientes: Alta: Cuando hay muchas actualizaciones que no necesariamente puedan hacer crecer el registro de la tabla, se puede establecer un porcentaje igual a 10. Cuando se incrementa el tamaño de la fila en las actualizaciones, y éstas son además de alta periodicidad, un valor de 20% es suficiente. Cuando casi no existen actualizaciones o la frecuencia es muy baja, basta con reservar un 5% de espacio para permitir actualizaciones dentro del mismo bloque.

45 ESTRUCTURAS Y OBJETOS DE ORACLE
PCTUSED: Este parámetro está relacionado con la frecuencia de inserciones que se pueden hacer a una tabla. Determina el mínimo porcentaje de espacio usado que será mantenido para cada bloque de datos, antes de crear el próximo segmento. Si la actividad de inserción es alta o baja, los valores sugeridos para setear este parámetro son los siguientes: Alta: Establézcase el porcentaje cercano o igual a 40. Si es alta y además con mucha frecuencia de actualizaciones, establézcase un valor de 60. Si la frecuencia de inserciones de filas es baja, un porcentaje del 60% también es válido para este parámetro.

46 ESTRUCTURAS Y OBJETOS DE ORACLE
Creación de una Tabla Temporal Es posible crear un tabla temporal. La definición de una tabla temporal es que sea visible a todas las sesiones, pero el contenido de la tabla es visible solo para la sesión que inserta los datos en la tabla. Se usa la sentencia CREATE GLOBAL TEMPORARY TABLE para crear una tabla temporal. Las palabras reservadas ON COMMIT indican si los datos en la tabla son especificas de transacción (por defecto) o especificas de sesión: ON COMMIT DELETE ROWS especifica que la tabla temporal es especifica de transacciones y Oracle trunca la tabla después de cada COMMIT. ON COMMIT PRESERVE ROWS especifica que la tabla temporal es de sesión y Oracle trunca la tabla cuando termina la sesión Este ejemplo crea un tabla temporal que es específica de transacción: CREATE GLOBAL TEMPORARY TABLE work_area (startdate DATE, enddate DATE, class CHAR(20)) ON COMMIT DELETE ROWS; Los índices se pueden crear en tablas temporales. También son temporales y los datos en el índice tienen el mismo tiempo de vida que los datos en la tabla.

47 ESTRUCTURAS Y OBJETOS DE ORACLE
Mover una tabla a un nuevo segmento o espacio de tablas La sentencia ALTER TABLE ... MOVE permite relocalizar datos de una tabla no particionada dentro de un nuevo segmento, y opcionalmente dentro de un diferente espacio de tablas en el cual se tiene cuota. Esta sentencia también permite modificar cualquiera de los atributos de almacenamiento, incluyendo aquellos que no pueden ser modificados usando ALTER TABLE. La siguiente sentencia mueve la tabla emp a un nuevo segmento especificando los nuevos parámetros de almacenamiento: ALTER TABLE emp MOVE STORAGE ( INITIAL 20K NEXT 40K MINEXTENTS 2 MAXEXTENTS 20 PCTINCREASE 0 ); Borrar Columnas Se pueden borrar columnas que ya no se están utilizando en la tabla, incluyendo una tabla organizada por índices. Esto provee una manera eficiente y conveniente de para liberar espacio en la base de datos, y no tener que exportar/importar los datos y recrear los índices y constraints. Los usuarios requieren el privilegio ALTER en tabla destino o el privilegio ALTER ANY TABLE para realizar las sentencias de borrado. No se puede borrar todas las columnas de una tabla, o borrar columnas de una tabla que pertenece al usuario SYS.

48 ESTRUCTURAS Y OBJETOS DE ORACLE
Remover Columnas de Tablas Cuando se ejecuta la sentencia ALTER TABLE ... DROP COLUMN, la columna descriptora y los datos asociados con la columna destino son removidos de cada fila de la tabla. Se pueden borrar múltiples columnas con una sentencia. La siguiente sentencia nos muestra ejemplos para borrar columnas de la tabla emp. Esta sentencia borra solo la columna sal: ALTER TABLE emp DROP COLUMN sal; La siguiente sentencia borra las columnas sal y comm: ALTER TABLE emp DROP (sal, comm); Marcar Columnas sin utilizar Si esta conciente acerca del largo de tiempo que toma borrar una columna de datos de una tabla grande de todas las filas, se puede usar la sentencia ALTER TABLE ... SET UNUSED. Esta sentencia marca una o mas columnas como no-usadas, pero no remueve realmente la columna de datos destino o restaura el espacio ocupado en disco por estas columnas. Sin embargo, una columna marcada no se muestra en las consultas de vistas de diccionario de datos, y su nombre es removido asi que una nueva columna puede reusar el nombre. Todos los constraints, índices, y estadísticas definidas en la columna también se borran. Para marcar las columnas sal y comm, ejecutar la siguiente sentencia: ALTER TABLE emp SET UNUSED (sal, comm);

49 ESTRUCTURAS Y OBJETOS DE ORACLE
Luego se pueden remover columnas marcadas como no-usadas utilizando la sentencia ALTER TABLE ... DROP UNUSED COLUMNS. Las columnas no-usadas también se borran de la tabla cuando se utiliza la sentencia para borrar otra columna en particular. Las vistas del diccionario de datos USER_UNUSED_COL_TABS, ALL_UNUSED_COL_TABS, o DBA_UNUSED_COL_TABS pueden ser usadas para listar todas las tablas que contienen columnas no-usadas. El campo COUNT muestra el número de columnas no-usadas en la tabla. SELECT * FROM DBA_UNUSED_COL_TABS; OWNER TABLE_NAME COUNT SCOTT EMP 1 1 row selected. Remover Columnas no-usadas La sentencia ALTER TABLE ... DROP UNUSED COLUMNS es la única acción permitida en columnas no-usadas. Remueve físicamente todas las columnas de la tabla y recupera el espacio de disco. En el siguiente ejemplo la palabra reservada opcional CHECKPOINT se especifica. Esta opción realiza un checkpoint después de procesar el número de filas, en este caso 250. Los checkpoint bajan la cantidad de undo logs acumulados durante la operación de borrado para evitar un potencial termino de espacio en el segmento de rollback. ALTER TABLE emp DROP UNUSED COLUMNS CHECKPOINT 250;

50 ESTRUCTURAS Y OBJETOS DE ORACLE
Borrar Tablas Para borrar una tabla, la tabla debe estar contenida en su esquema o se debe tener el privilegio de DROP ANY TABLE. Para borrar una tabla que ya no se necesita usar la sentencia DROP TABLE. La siguiente sentencia borra la tabla emp: DROP TABLE emp; Si la tabla a ser borrada contiene alguna llave primaria o única referenciada como llave foránea de otras tablas y se intenta borrar el constraint FOREIGN KEY de las tablas descendientes, se debe incluir la opción CASCADE en la sentencia DROP TABLE, tal como: DROP TABLE emp CASCADE CONSTRAINTS;

51 ESTRUCTURAS Y OBJETOS DE ORACLE
VISTAS Manejo de Vistas Una vista es una presentación de datos contenidos en una o mas tablas (y otras vistas), y toma la salida de una consulta y la trata como una tabla. Se puede pensar en una vista como una “consulta almacenada” o “tabla virtual”. Se pueden usar estas vistas en donde sea que se pueda usar tablas. Creación de Vistas Puede crear vistas usando la sentencia CREATE VIEW. Cada vista se define como una consulta que referencia tablas, vistas materializadas, u otras vistas. Como todas las subconsultas, la consulta que define la vista no puede contener la clausula FOR UPDATE. La siguiente sentencia crea una vista a partir de un subconjunto de datos de la tabla emp: CREATE VIEW sales_staff AS SELECT empno, ename, deptno FROM emp WHERE deptno = 10 WITH CHECK OPTION CONSTRAINT sales_staff_cnst;

52 ESTRUCTURAS Y OBJETOS DE ORACLE
La consulta define la referencia de vista sales_staff solo en filas del departamento 10. Mas adelante, la opcion CHECK OPTION crea una vista con el constraint (llamado sales_staff_cnst) que las sentencias INSERT y UPDATE ejecutadas con la vista no puede resultar en filas que la vista no pueda seleccionar. Por ejemplo, la sentencia INSERT funciona correctamente para insertar una fila en la tabla emp por medio de la vista sales_staff, que contiene todas las filas del departamento numero 10: INSERT INTO sales_staff VALUES (7584, 'OSTER', 10); Sin embargo, la siguiente sentencia INSERT realiza un rollback y retorna un error porque intenta insertar una fila row para el departamento numero 30, que no puede ser seleccionado usando la vista sales_staff: INSERT INTO sales_staff VALUES (7591, 'WILLIAMS', 30); La vista puede ser creada opcionalmente con la cláusula WITH READ ONLY, que previene de cualquier actualización, inserción o borrado hacia la tabla base a través de la vista. Si no se usa la cláusula WITH la vista con algunas restricciones se hereda como actualizable.

53 ESTRUCTURAS Y OBJETOS DE ORACLE
Vistas de Join Se pueden crear vistas que usen dos o mas tablas base o vistas en la cláusula FROM. Estas son llamadas vistas join. La siguiente sentencia crea una vista division1_staff que realiza un join de datos de las tablas emp y dept: CREATE VIEW division1_staff AS SELECT ename, empno, job, dname FROM emp, dept WHERE emp.deptno IN (10, 30) AND emp.deptno = dept.deptno; Una vista join actualizable es una vista conde las operaciones de UPDATE, INSERT, y DELETE son permitidas. Borrar Vistas Se pueden borrar cualquier vista dentro de su esquema. Para borrar cualquier vista de esquemas de otros usuarios, se debe tener el privilegio DROP ANY VIEW. Borrar una vista usando la sentencia DROP VIEW. Por ejemplo, la siguiente sentencia borra la vista emp_dept: DROP VIEW emp_dept;

54 ESTRUCTURAS Y OBJETOS DE ORACLE
SECUENCIAS Manejo de Secuencias Secuencias en una base de datos son objetos desde donde múltiples usuarios pueden generar números enteros únicos. Se puede usar secuencias para automáticamente generar llaves primarias. Creación de Secuencias Para crear una secuencia en su esquema, se debe tener el privilegio CREATE SEQUENCE. Para crear la secuencia en otro esquema se debe tener el privilegio CREATE ANY SEQUENCE. Para crear una secuencia se debe usar la sentencia CREATE SEQUENCE. Por ejemplo, la siguiente sentencia crea una secuencia usada para generar números de empleados para la columna empno de la tabla emp: CREATE SEQUENCE emp_sequence INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE CACHE 10; La opción CACHE reserva una serie de números de secuencia y los mantiene en memoria para que los números se puedan acceder después más rápidamente. Cuando el último de los números de la secuencia en el cache ha sido utilizado, Oracle lee otra serie de números dentro del cache.

55 ESTRUCTURAS Y OBJETOS DE ORACLE
Increment by: Indica la cantidad de incremento de la secuencia. Start with: Es el valor de partida de la secuencia. Minvalue: Indica cuál será el valor mínimo de la secuencia. Maxvalue: Corresponde al valor máximo que puede tomar la secuencia. Nocycle: Es el valor por defecto para establecer si la secuencia deberá comenzar nuevamente a generar valores una vez que ha alcanzado el máximo.

56 ESTRUCTURAS Y OBJETOS DE ORACLE
Alteración de secuencias Para alterar una secuencia, su esquema debe contener una secuencia, o se debe tener el privilegio ALTER ANY SEQUENCE. Se puede alterar la secuencia para cambiar cualquiera de los parámetros definidos que permiten generar números excepto el número inicial. Para cambiar el punto de inicio de la secuencia, se debe borrar la secuencia y luego recrear. Cuando se realizan operaciones DDL en los números de la secuencia se pierden los valores de la memoria cache. Alterar la secuencia usando la sentencia ALTER SEQUENCE. Por ejemplo, la siguiente sentencia altera la secuencia emp_sequence: ALTER SEQUENCE emp_sequence INCREMENT BY 10 MAXVALUE 10000 CYCLE CACHE 20; Borrar Secuencias Se puede borrar cualquier secuencia en su esquema. Para borrar una secuencia en otros esquemas se debe tener el privilegio DROP ANY SEQUENCE. Si una secuencia ya no es necesaria, se puede borrar la secuencia usando la sentencia DROP SEQUENCE. Por ejemplo, la siguiente sentencia borra la secuencia order_seq: DROP SEQUENCE order_seq; Cuando una secuencia se borra, su definición se remueve del diccionario de datos.

57 ESTRUCTURAS Y OBJETOS DE ORACLE
SINONIMOS Manejar Sinónimos Un sinónimo es un alias para un objeto de esquema. Sinónimos pueden proveer un nivel de seguridad enmascarando el nombre y propietario de un objeto proveyendo una dirección transparente para objetos remotos de una base de datos distribuida. También, son convenientes para usar y reducir la complejidad de las sentencias SQL para los usuarios de base de datos. Los sinónimos permiten los objetos ser renombrados o movidos, donde solo el sinónimo necesita ser redefinido y aplicaciones basadas en los sinónimos continúan sus funciones sin modificación. Se pueden crear sinónimos públicos y privados. Un sinónimo publico es propiedad del grupo especial PUBLIC y es accesible a cada usuario en la base de datos. Un sinónimo privado esta contenido en el esquema del usuario especifico y disponible solo para el usuario.

58 ESTRUCTURAS Y OBJETOS DE ORACLE
Creación de Sinónimos Para crear un sinónimo en su propio esquema, se debe tener el privilegio CREATE SYNONYM. Usar la siguiente sentencia para crear un sinónimo publico llamado public_emp en la tabla emp contenido en el esquema jward: CREATE PUBLIC SYNONYM public_emp FOR jward.emp; Para crear un sinónimo en su propio esquema CREATE SYNONYM public_emp FOR jward.emp; Borrar Sinónimos Para borrar un sinónimo se debe tener el privilegio DROP ANY SYNONYM. Para borrar un sinónimo que no sea mas requerido, usar la sentencia con o sin la opción PUBLIC dependiendo del tipo de sinónimo. Por ejemplo para borrar un sinonimo privado: DROP SYNONYM emp; La siguiente sentencia borra el sinónimo público llamado public_emp: DROP PUBLIC SYNONYM public_emp; Cuando se borra un sinónimo, su definición se remueve del diccionario de datos. Todos los objetos que referencian un sinónimo permanecen. Sin embargo, se convierten en inválidos (no usables).

59 ESTRUCTURAS Y OBJETOS DE ORACLE
INDICES Un índice es una estructura diseñada para obtener un acceso más rápido a los datos contenidos dentro de una tabla. Un índice es independiente de los datos almacenados en la tabla y cuando se encuentra bien definido, es decir, cuando se forma atendiendo a la gran mayoría de las consultas que se harán sobre una tabla, reduce significativamente la búsqueda, aumentando el rendimiento. Inmediatamente luego de creado el índice, Oracle comienza a mantenerlo de acuerdo a las inserciones, actualizaciones y eliminaciones de registros de la tabla en la cual se ha implementado. Tipos de índices Existen tres tipos de índices cuya naturaleza depende de la forma en que haya sido creado. Estos tipos son: Un índice único es aquel que tiene la restricción adicional de que el grupo de columnas indexadas define una única fila. Sin embargo, si no van a existir más grupos de columnas con esta características dentro de una misma tabla, se recomienda crear el conjunto como una clave primaria ya que de todas formas Oracle asociará un índice único a esta restricción (la clave primaria). Un índice no único, que es aquel que no impone la restricción de que las filas no deban repetirse. Un índice compuesto es aquel que agrupa varias columnas de la tabla. Este tipo es muy útil cuando las sentencias de selección (SELECT) efectúan búsquedas por varios criterios (columnas) en una misma tabla. Es importante el orden en que se ponen las columnas al crear el índice; la columna más referenciada debería ser puesta en primer lugar y así sucesivamente.

60 ESTRUCTURAS Y OBJETOS DE ORACLE
Cuando se crea un índice (de cualquier tipo) también se crea un segmento de datos para guardar esa información, que también se verá afectada por la misma cláusula storage que se estudió para el caso de las tablas. Consideraciones en el diseño de índices Un índice sólo es efectivo cuando es utilizado. Es por eso que debe asegurarse que la frecuencia de uso sea muy alta y que su implementación redunde en mejoras de rendimiento de las consultas efectuadas a la tabla donde reside el índice. Sin embargo, no debe explotarse el uso de los índices dentro de una misma tabla porque con cada operación de inserción, actualización o eliminación que se lleva a cabo sobre una tabla, sus índices se deben recrear, con el consiguiente overhead que se produce. A menudo es conveniente eliminar o desactivar temporalmente un índice cuando sabemos que se va a efectuar una operación de carga/actualización/eliminación masiva en la tabla para evitar este overhead y más tarde volver a crearlo, cuando la operación haya finalizado.

61 ESTRUCTURAS Y OBJETOS DE ORACLE
Considere las siguientes reglas de indexación para cuando se enfrente a la tarea de decidir qué tablas indexar: Indexe solamente las tablas cuando las consultas (queries) no accedan a una gran cantidad de filas de la tabla. Use índices cuando una query acceda a un porcentaje menor al 5% de las filas de una tabla. No indexe tablas que son actualizadas con mucha frecuencia. Indexe aquellas tablas que no tengan muchos valores repetidos en las columnas escogidas. Recuerde que finalmente el índice hace una búsqueda secuencial dentro de un conjunto de filas objetivo. Las queries muy complejas (en la cláusula WHERE) por lo general no toman mucha ventaja de los índices. Cuando posea más experiencia podrá corroborar esta afirmación y estará preparado para arreglar estas situaciones.

62 ESTRUCTURAS Y OBJETOS DE ORACLE
También es importante decidir qué columnas indexar. Siga las siguientes reglas cuando tenga que tomar esta decisión: Escoja las columnas que se utilizan con mayor frecuencia en las cláusulas WHERE de las consultas. No indexe aquellas columnas que tengan demasiados valores repetidos en ellas. Las columnas que toman valores únicos son excelentes candidatas para indexar. Oracle automáticamente indexa las claves primarias de las tablas. Indexe las columnas que sirven para unir una tabla con otras (join en las consultas). Si hay columnas que no tienen valores únicos por sí solas pero que en conjunto con otra columna forman una dupla única o con pocas repeticiones (menos que las columnas individualmente), entonces conviene indexarlas (siempre y cuando existan consultas que las utilicen en conjunto). Estos índices reciben el nombre de índices compuestos.

63 ESTRUCTURAS Y OBJETOS DE ORACLE
Creación de índices: CREATE INDEX nombre_indice ON [esquema.]nombre_tabla (columna1 [, columna2, ...]) TABLESPACE nombre_tablespace ; Indices particionados Tal como en el caso de las tablas, los índices también pueden ser almacenados en tablespaces separados. La sintaxis de creación de los índices de este tipo es similar a la de creación de las tablas particionadas: CREATE INDEX nombre_indice ON [esquema.]nombre_tabla (columna1 [, columna2, ...])PARTITION BY RANGE (columna1 [, columna2, ...])PARTITION particion1 VALUES LESS THAN (valor) TABLESPACE tablespace1[PARTITION particion2 VALUES LESS THAN (MAXVALUE) TABLESPACE tablespace2)] ; Observe que el valor representado por la palabra reservada MAXVALUE será siempre el mayor valor presente en la tabla para la columna especificada.


Descargar ppt "ORACLE DBA ADMINISTRACION DE BASE DE DATOS"

Presentaciones similares


Anuncios Google