jueves, 5 de abril de 2012

Oracle y OCFS2 sin liberar espacio usado

Algunas veces tienes que eliminar un tablespace para recuperar espacio de almacenamiento y usarlo para crear otro tablespace, como cuando tienes que redimensionar un tablespace de undo. Y usualmente no es gran problema a menos que tengas sistemas de archivos OCFS2:
oracle@myserver$ df -m|egrep '(Filesystem)|(/mydb/undo)'
Filesystem           1M-blocks      Used Available Use% Mounted on
                         24576     24572         4 100% /mydb/undo

oracle@myserver$ sqlplus '/ as sysdba'

SQL*Plus: Release 10.2.0.4.0 - Production on Thu Jan 26 22:57:35 2012

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options

SQL> drop tablespace myundo including contents and datafiles;

Tablespace dropped.

SQL> create undo tablespace mynewundo datafile '/mydb/undo/undo.dbf' size 10g;
create undo tablespace mynewundo datafile '/mydb/undo/undo.dbf' size 10g
*
ERROR at line 1:
ORA-01119: error in creating database file '/mydb/undo/undo.dbf'
ORA-27044: unable to write the header block of file
Linux-ia64 Error: 28: No space left on device
Additional information: 4

SQL> quit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options

oracle@myserver$ df -m|egrep '(Filesystem)|(/mydb/undo)'
Filesystem           1M-blocks      Used Available Use% Mounted on
                         24576     24572         4 100% /mydb/undo

oracle@myserver$ ls -la /mydb/undo
total 16
drwxr-xr-x  4 root   root 4096 Jan 20  2010 .
drwxr-xr-x  4 root   root 4096 Dec 17  2009 ..
drwxr-xr-x  2 root   root 4096 Dec 17  2009 lost+found

Como podrás haberte dado cuenta no hay espacio recuperado por eliminar ese tablespace de undo, y ya que necesitamos crear un nuevo tablespace de undo en el mismo sistema de archivos tenemos que hacer algo.

Yo no tengo muchas bases de datos ubicadas en sistemas de archivos OCFS2 por lo que no me preocupé por encontrar la causa raíz de este problema, y ya que tenía esta base de datos sin usuarios conectados sólo creé un pequeño tablespace de undo en otro lugar, di de baja la instancia, y después de hacerlo recuperé el espacio:
oracle@myserver$ df -m|egrep '(Filesystem)|(/mydb/undo)'
Filesystem           1M-blocks      Used Available Use% Mounted on
                         24576       359     24217   2% /mydb/undo

oracle@myserver$ ls -la /mydb/undo
total 16
drwxr-xr-x  4 root   root 4096 Jan 20  2010 .
drwxr-xr-x  4 root   root 4096 Dec 17  2009 ..
drwxr-xr-x  2 root   root 4096 Dec 17  2009 lost+found

oracle@myserver$ mount|grep /mydb/undo
/dev/mapper/myvg-undo on /mydb/undo type ocfs2 (rw,_netdev,datavolume,nointr,heartbeat=local)

oracle@myserver$ uname -a
Linux myserver.localdomain 2.6.9-67.EL #1 SMP Wed Nov 7 13:43:35 EST 2007 ia64 ia64 ia64 GNU/Linux

oracle@myserver$ /sbin/lsmod|grep ocf
ocfs2                 744096  26 
debugfs                27340  2 ocfs2
ocfs2_dlmfs            53416  1 
ocfs2_dlm             424192  2 ocfs2,ocfs2_dlmfs
ocfs2_nodemanager     316791  32 ocfs2,ocfs2_dlmfs,ocfs2_dlm
configfs               65468  2 ocfs2_nodemanager
jbd                   149272  2 ocfs2,ext3

oracle@myserver$ /sbin/modinfo ocfs2
filename:       /lib/modules/2.6.9-67.EL/kernel/fs/ocfs2/ocfs2.ko
license:        GPL
author:         Oracle
version:        1.2.9 1B43458FD47258934A48F1C
description:    OCFS2 1.2.9 Mon May 19 14:04:34 PDT 2008 (build a693806cb619dd7f225004092b675ede)
depends:        ocfs2_nodemanager,ocfs2_dlm,jbd,debugfs
vermagic:       2.6.9-67.EL SMP ia64gcc-3.4

Sé que este es sólo un arreglo temporal y no uno bueno, pero funciona bien y puedes continuar con lo que sigue.

No hay comentarios.:

Publicar un comentario