3.1.2. Espacio asignado


Una de las tareas habituales en la administración de una base de datos Oracle es la de crear un nuevo tablespace para contener nuevos objetos como tablas, índices, etc. Un tablespace en Oracle es una unidad de almacenamiento lógica y utiliza datafiles para la parte física donde se guardarán las tablas, índices, etc.

Información de todos los tablespaces que componen la base de datos

set linesize 132
 set pagesize 200
 --*****************************************************************************
 SELECT tablespace_name,
    SUM (mbtotal) / 1024 / 1024 mbtotal,
    SUM ( mbtotal - mblibre) / 1024 / 1024 mbusado,
    SUM (mblibre) / 1024 / 1024 mblibre, 
    round(((SUM ( mbtotal - mblibre) / 1024 / 1024) * 100) / (SUM (mbtotal) / 1024 / 1024), 2) Porc_ocu,
    round(((SUM (mblibre) / 1024 / 1024) *100) / (SUM (mbtotal) / 1024 / 1024),2) Porc_libre
  FROM (SELECT tablespace_name, bytes mbtotal, 0 mblibre
          FROM dba_data_files
         UNION ALL
        SELECT tablespace_name, 0 mbtotal, bytes mblibre
          FROM dba_free_space)
  GROUP BY tablespace_name
  order by 6
 /

Creación del tablespace:

CREATE TABLESPACE TAB 
   DATAFILE 
   '/PROD/data1/tab_PROD_01.dbf' SIZE 16G AUTOEXTEND OFF
   NOLOGGING
   ONLINE
   PERMANENT
   EXTENT MANAGEMENT LOCAL UNIFORM SIZE 50M
   BLOCKSIZE 16K
   SEGMENT SPACE MANAGEMENT AUTO
   FLASHBACK Off;

Borrar un tablespace

Primero debemos asegurarnos de que el contenido de los archives de datos no es necesario, o se ha movido a otro tablespace.

En Segundo lugar, debemos achicar el tamaño de cada datafile lo más que se pueda antes de proceder al borrado, ya que se corre el riesgo de que el espacio ocupado no se libere completamente en el sistema operativo.

SELECT /*+ rule */ 'alter database datafile ''' 
       || name || ''' resize 10M;'
  FROM v$datafile
  WHERE ts# = (SELECT TS# FROM v$TABLESPACE WHERE name = UPPER('&tbs_a_borrar'))

En tercer lugar, procedemos al borrado del tablespace.

DROP TABLESPACE tbs_a_borrar INCLUDING CONTENTS AND DATAFILES;

Reemplazar el nombre del tablespace si fuera necesario Es posible, que algunos scripts referencien al tablespace que consideramos borrar, en este ejemplo, se trata de un HP-UX itanium, donde varios procesos (scripts) creaban tablas y/o índices en el tablespace que se quería borrar.

Lo que se hizo fue, buscar por patrones el nombre del tablespace, y reemplazar por otro tablespace existente en la base para tal fin.

Buscar los patrones en los scripts

GREP -i TBS_A_BORRAR *.sql | awk -F: {'print $2'} | awk {'print $2'} | sort –u

Dependiendo de los patrones correr el siguiente sh

for k in `grep -i TBS_A_BORRAR *.sql | awk -F: {'print $1'}`
 do
 sed 's/tbs_a_borrar/tbs_existente/g' $k > $k.tmp
 cp $k.tmp $k
 rm -f $k.tmp
 done

Lo que hace el sh es, por cada archivo sql que contiene el patrón de búsqueda, reemplaza el patrón buscado (tbs_a_borrar)por la cadena especificada (tbs_existente), el resultado del reemplazo lo envía a un archivo temporal que se llama igual al archivo seguido de “.tmp”.

Luego se copia este nuevo archivo, a su nombre original, y por último se borra el archivo temporal.

Redimensionar un tablespace

Primero vemos cuantos datafiles conforman el tablespace, y que tamaño tienen, para en base a esta información, añadir uno nuevo, siguiendo el estándar de nombres, y el tamaño apropiado.

Set lines 200
 SET pages 999
 COL espacio format 9999999
 COL file_name format a50
 --**************************************************************
 SELECT /*+ parallel (a,4) */ bytes/1024/1024 espacio,file_name
    FROM Sys.Dba_Data_Files a
    WHERE Tablespace_Name = UPPER('&tbs_a_dimensionar')
    ORDER BY File_Name;

Fuentes de información

http://descubriendooracle.blogspot.mx/2011/08/tablespaces.html



Anterior
Valid XHTML
home

Siguiente