Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Proyecto AjpdSoft: Foros

AjpdSoft :: Ver tema - Crecimiento excesivo tablespace UNDO (UNDOTBS1)
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information Crecimiento excesivo tablespace UNDO (UNDOTBS1)

Publicar nuevo tema Responder al tema
Foros de discusión » Oracle Database, motor de base de datos profesional   
Ver tema anterior :: Ver tema siguiente
AutorMensaje
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Crecimiento excesivo tablespace UNDO (UNDOTBS1) Responder citando

Tengo un servidor con Oracle 9 instalado y en producción, desde hace un tiempo estoy notando que el tablespace UNDO (SMU) está creciendo día a día y no se va liberando, incluso casi me está dejando la unidad sin espacio

¿cómo puedo solucionar esto? ¿qué provoca que este tablespace crezca tanto? ¿cómo lo configuro para que esto no pase? ¿para qué sirve este tablespace?
MensajePublicado:
Mar Ago 12, 2008 8:14 am
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Crecimiento excesivo tablespace UNDO (UNDOTBS1) Responder citando



Anuncios



varios escribió:
Tengo un servidor con Oracle 9 instalado y en producción, desde hace un tiempo estoy notando que el tablespace UNDO (SMU) está creciendo día a día y no se va liberando, incluso casi me está dejando la unidad sin espacio

¿cómo puedo solucionar esto? ¿qué provoca que este tablespace crezca tanto? ¿cómo lo configuro para que esto no pase? ¿para qué sirve este tablespace?


En realidad, SMU no es el nombre del tablespace UNDO, es el tipo de gestión que Oracle hace sobre éste. Existen dos posibilidades:

* SMU (System Managed Undo): modo automático de gestión, no se utilizan segmentos de rollback externos, la información de UNDO se almacena en un tablespace especial, dedicado exclusivamente a este menester.
* RBU: modo manual de gestión de UNDO, se almacena de forma externa en segmentos de rollback. Este era el único método que existía en versiones anteriores de Oracle.

El modo de gestión se estable con el parámetro: UNDO_MANAGEMENT

* AUTO: modo SMU.
* MANUAL: modo RBU.

Por otro lado, con el parámetro UNDO_TABLESPACE se establece el nombre del tablespace que se utilizará para UNDO, por defecto UNDOTBS1.

Y con el parámetro UNDO_RETENTION se especifican (en segundos) el tiempo de retención de los datos, indica la cantidad de segundos que se quiere garantizar para mantener la información de deshacer.


Con el comando siguiente puedes ver el valor actual de estos parámetros.:
Código:

show parameter undo


Te devolverá algo así:


SQL> show parameter undo

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_suppress_errors boolean FALSE
undo_tablespace string UNDOTBS1


Cada base de datos Oracle debe tener un método de mantenimiento de la información que se utiliza para deshacer (UNDO), para anular transacciones (ROLLBACK). Oracle guarda la información necesaria en este tablespace para poder deshacer cualquier acción realizada en la BD.

El hecho de que este tablespace te esté creciendo sin parar no es normal, pues cuando ejecutas una transacción grande (muchos insert o updates) sí que crecerá pero temporalmente, cuando pase un tiempo y se haya hecho un commit sobre la transacción los datos guardados en este tablespace se deberían liberar, pues ya no son necesarios.

En esta página puedes ver más información al respecto:

http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96521/undo.htm
MensajePublicado:
Mie Ago 13, 2008 8:48 am
Top of PageVer perfil de usuario
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Re: Crecimiento excesivo tablespace UNDO (UNDOTBS1) Responder citando



Anuncios



alonsojpd escribió:
En realidad, SMU no es el nombre del tablespace UNDO, es el tipo de gestión que Oracle hace sobre éste. Existen dos posibilidade...


Ok, pero ¿por qué puede crecer tanto? Tengo otra unidad con espacio suficiente ¿podría cambiar el tablespace UNDO a esta otra unidad? ¿cómo lo hago?
MensajePublicado:
Mie Ago 13, 2008 11:36 am
Top of PageVer perfil de usuario
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Re: Crecimiento excesivo tablespace UNDO (UNDOTBS1) Responder citando



Anuncios



Otra duda ¿cómo modifico el valor de los parámetros que me has comentado?
MensajePublicado:
Mie Ago 13, 2008 11:36 am
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Crecimiento excesivo tablespace UNDO (UNDOTBS1) Responder citando



Anuncios



varios escribió:
Ok, pero ¿por qué puede crecer tanto? Tengo otra unidad con espacio suficiente ¿podría cambiar el tablespace UNDO a esta otra unidad? ¿cómo lo hago?


Esto puede ser debido a varias razones, una de ellas, la "normal", es que tengas alguna aplicación, de las que atacan la base de datos, que no esté terminando bien las transacciones.

También podría ser debido a que no tengas bien configurado alguno de los parámetros que te hemos comentado anteriormente.

Otra posibilidad, menos habitual, es que tengas una versión de Oracle que tenga algún bug (fallo) al respecto, en este caso tendrías que instalar algún parche.

El tablespace UNDO actual no podrás cambiarlo de unidad, pero sí puedes crearte otro tablespace UNDO, establecerlo como el tablespace UNDO por defecto y decirle que los ficheros de datos estarán en esa otra unidad y poner Offline el tablespace actual. De esta forma, aunque manual, pero habrás cambiado el tablespace UNDO de ubicación. A continuación te indicamos cómo hacer esto:

1. Crea un nuevo tablespace con la siguiente consulta SQL (desde sqlplus de Oracle):

Código:

CREATE UNDO
    TABLESPACE "UNDO2"
    DATAFILE 'd:/bd/oracle/undo/UNDO2.dbf' SIZE 500M

Lógicamente, cambia "d:/..." por tu unidad, carpeta y el nombre que quieras dar al fichero. Cambia también "500M" por el valor en MB que quieras asignarle y cambia "UNDO2" por el nombre que quieras darle al nuevo tablespace UNDO.

2. Una vez creado el nuevo tablespace debes indicar a Oracle que lo utilice a partir de ahora como tablespace UNDO por defecto, mediante la siguiente consulta SQL:

Código:

ALTER SYSTEM SET UNDO_TABLESPACE=UNDO2;


3. Cierra la base de datos con el comando:

Código:

shutdown immediate;


4. Inicia la base de datos con el comando:

Código:

startup;


5. Por último debes marcar el tablespace UNDO antiguo como Offline, para ello ejecuta la siguiente consulta SQL:

Código:

ALTER TABLESPACE "UNDOTBS1" OFFLINE NORMAL;


Donde, "UNDOTBS1" será el nombre del tablespace que quieres eliminar, el anterior.

Con esto habras desactivado el tablespace UNDO que te estaba ocupando mucho espacio y has establecido como tablespace UNDO el nuevo (UNDO2), en la unidad donde tienes más espacio.

Cuando pasen unos días o semanas y veas que todo va bien, podrás eliminar el tablespace UNDO anterior (UNDOTBS1) y así se liberará el espacio que ocupaba, con el comando SQL:

Código:

DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS AND DATAFILES;
MensajePublicado:
Mie Ago 13, 2008 12:06 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Crecimiento excesivo tablespace UNDO (UNDOTBS1) Responder citando



Anuncios



varios escribió:
Otra duda ¿cómo modifico el valor de los parámetros que me has comentado?


Para modificar el valor de los parámetros y para ejecutar los comandos que te hemos indicado anteriormente tienes que hacer lo siguiente:

* Si el servidor de Oracle está sobre una máquina con Windows abre una ventana de MS-DOS, desde "Inicio" - "Ejecutar" - "cmd". En esta ventana escribe:

Código:

sqlplus /nolog


Si está correctamente configurada la variable de entorno PATH se te abrirá la utilidad de Oracle SQL*Plus, para conectarte a la base de datos puedes escribir el siguiente comando:
Código:

connect / as sysdba


Si todo ha ido bien te mostrará esto:

c:\>sqlplus /nolog

SQL*Plus: Release 9.2.0.4.0 - Production on Wed Aug 13 14:02:37 2008

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

SQL> connect / as sysdba
Connected.


Desde aquí ya podrás ejecutar los comandos SQL para modificar los parámetros, por ejemplo, si quieres cambiar el tiempo de rentención, ejecuta el siguiente comando:

Código:

ALTER SYSTEM SET UNDO_RETENTION=1000;


Si todo es correcto devolverá algo así:

SQL> ALTER SYSTEM SET UNDO_RETENTION=1000;

System altered.


* Si el servidor donde tienes Oracle es Linux, es más o menos igual, abres una ventana de terminal y ejecutas los mismos comandos, recuerda que debes hacerlo con el superusuario root o bien con el usuario que suele crear la instalación de Oracle, que suele llamarse "oracle".

Si al ejecutar "sqlplus /nolog" te dice que no encuentra el comando, será porque no tienes bien configurada la variable PATH, en este caso puedes acceder al directorio de instalación de Oracle, que para el caso de Windows puede ser C:\ora92\bin, con el comando:

Código:

cd C:\ora92\bin


Desde aquí ya podrás ejecutarlo.

Para el caso de Linux, será lo mismo, saber dónde está instalado Oracle y acceder a la carpeta "bin".
MensajePublicado:
Mie Ago 13, 2008 12:20 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Crecimiento excesivo tablespace UNDO (UNDOTBS1) Responder citando



Anuncios



Algunas consultas SQL útiles para obtener información del tablespace UNDO:

* Tamaño ocupado por el tablespace UNDO:
Código:

SELECT SUM(a.bytes)/1048576 "Tamaño UNDO (MB)"
  FROM v$datafile a,
       v$tablespace b,
       dba_tablespaces c
WHERE c.contents = 'UNDO'
   AND c.STATUS = 'ONLINE'
   AND b.name = c.tablespace_name
   AND a.ts# = b.ts#


* Tamaño actual tablespace UNDO, valor del parámetro UNDO_RETENTION, espacio necesario:

Código:

SELECT d.undo_size/(1024*1024) "Tamaño actual UNDO (MB)",
       SUBSTR(e.value,1,25) "UNDO RETENTION (Sec)",
       (TO_NUMBER(e.value) * TO_NUMBER(f.value) *
       g.undo_block_per_sec) / (1024*1024)
      "Espacio UNDO necesario (MB)"
  FROM (
       SELECT SUM(a.bytes) undo_size
         FROM v$datafile a,
              v$tablespace b,
              dba_tablespaces c
        WHERE c.contents = 'UNDO'
          AND c.STATUS = 'ONLINE'
          AND b.name = c.tablespace_name
          AND a.ts# = b.ts#
       ) d,
      v$parameter e,
       v$parameter f,
       (
       SELECT MAX(undoblks/((end_time-begin_time)*3600*24))
         undo_block_per_sec
         FROM v$undostat
       ) g
WHERE e.name = 'undo_retention'
  AND f.name = 'db_block_size'
MensajePublicado:
Lun Ago 18, 2008 5:44 am
Top of PageVer perfil de usuario
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Re: Crecimiento excesivo tablespace UNDO (UNDOTBS1) Responder citando



Anuncios



He seguido los pasos que indicas y, a veces, en determinadas acciones de los programas aparece un mensaje de error como este:

[Oracle] ORA-00376: file 3 cannot be read at this time.
ORA-01110: data file 3 d:\oracle\undo\undo01.dbf.


El fichero que indica el error es el del tablespace UNDO viejo, que está Offline, lo que no entiendo es por qué tiene que leer en ese tablespace UNDO cuando ya tiene el nuevo por defecto.
MensajePublicado:
Mar Ago 19, 2008 10:45 am
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Crecimiento excesivo tablespace UNDO (UNDOTBS1) Responder citando



Anuncios



varios escribió:
He seguido los pasos que indicas y, a veces, en determinadas acciones de los programas aparece un mensaje de error como este:

[Oracle] ORA-00376: file 3 cannot be read at this time.
ORA-01110: data file 3 d:\oracle\undo\undo01.dbf.


El fichero que indica el error es el del tablespace UNDO viejo, que está Offline, lo que no entiendo es por qué tiene que leer en ese tablespace UNDO cuando ya tiene el nuevo por defecto.


Esto es relativamente normal, Oracle intenta acceder a algunos bloques que aún no han sido actualizados con el nuevo tablespace UNDO. Salvo que detectes que las aplicaicones no funcionan esto no tiene por qué preocuparte, con el tiempo ya no te debería dar este error.
MensajePublicado:
Mar Feb 10, 2009 4:54 pm
Top of PageVer perfil de usuario
Mostrar mensajes de anteriores:   
Todas las horas son GMT - 1 Horas
Publicar nuevo tema Responder al tema
Foros de discusión » Oracle Database, motor de base de datos profesional  

Cambiar a:  
Key
  Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A