Oracle - tamaño restante tablespace

   
Vista:

tamaño restante tablespace

Publicado por Carlos (1 intervención) el 26/08/2015 19:29:49
Buenas soy nuevo en el foro y tengo un problema con mi base de datos oracle. Estoy intentando conseguir la siguiente información.

nombre del tablespace, hasta donde puede crecer y qué porcentaje tiene utilizado, para que cuando llegue a un 90% de hasta donde puede crecer, me salte una alerta.
Me estoy volviendo loco con esta query...pero no me da la info que necesito por supuesto


SELECT df.tablespace_name "TABLESPACE", ROUND ( (df.bytes - SUM (fs.bytes)) * 100 / df.bytes, 2) "USED"
FROM (SELECT TABLESPACE_NAME,BYTES
FROM sys.sm$ts_free fs
UNION ALL
SELECT TABLESPACE_NAME,FREE_SPACE
FROM DBA_TEMP_FREE_SPACE ) FS,
(SELECT tablespace_name, SUM (bytes) bytes
FROM sys.sm$ts_avail
GROUP BY tablespace_name
UNION ALL
SELECT TABLESPACE_NAME, SUM(bytes)
FROM SYS.DBA_TEMP_FILES GROUP BY tablspace_name ) df
WHERE fs.tablespace_name(+) = df.tablespace_name AND df.tablespace_name = '{0}'
GROUP BY df.tablespace_name,df.bytes
ORDER BY 1;

Muchas gracias por adelantado
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

tamaño restante tablespace

Publicado por Rafael (178 intervenciones) el 27/08/2015 08:15:08
Este query tarda un poco ... pero a mi me da buenos resultados y esta puesto para generar alarmas cuando un tablespace supera el 85%

Si no tienes ninguno con el 85% o mas pues no devuelve informacion ... pero para probar simplemente baja el porcentaje y veras que va muy bien ...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
SELECT fs.tablespace_name "Tablespace",
       (df.totalspace - fs.freespace) "USADOS MB",
       fs.freespace "LIBRES MB",
       df.totalspace "TOTAL MB",
       df.totalmaxspace "SPACE TOTAL MB",
       DECODE (df.totalmaxspace, 0, df.totalspace, df.totalmaxspace)
          "TOTAL MAX MB",
       DECODE (
          df.totalmaxspace,
          0, ROUND (100 * (fs.freespace / df.totalspace)),
          ROUND (100 * ( (df.totalspace - fs.freespace) / df.totalmaxspace)))
          "Pct. Ocupado",
       ROUND (100 * (fs.freespace / df.totalspace)) "Pct. Libre"
  FROM (  SELECT tablespace_name,
                 ROUND (SUM (bytes) / 1048576) TotalSpace,
                 ROUND (
                      SUM (DECODE (AUTOEXTENSIBLE, 'YES', maxbytes, BYTES))
                    / 1048576)
                    TotalMaxSpace
            FROM dba_data_files
        GROUP BY tablespace_name) df,
       (  SELECT tablespace_name, ROUND (SUM (bytes) / 1048576) FreeSpace
            FROM dba_free_space
        GROUP BY tablespace_name) fs
 WHERE     df.tablespace_name = fs.tablespace_name
       AND (df.totalmaxspace - (df.totalspace - fs.freespace)) < 6000 -- SI HAY 6 GB LIBRES NO AUMENTO
       AND DECODE (
              df.totalmaxspace,
              0, ROUND (100 * (fs.freespace / df.totalspace)),
              ROUND (
                 100 * ( (df.totalspace - fs.freespace) / df.totalmaxspace))) >
              85;

Si te sirve la ayuda puntua...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

tamaño restante tablespace

Publicado por Carlos (5 intervenciones) el 27/08/2015 16:40:55
No me ha funcionado la tuya, he hecho esto: "pero sigue sin darme los resultados esperados"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
 UNION ALL
 SELECT TABLESPACE_NAME, SUM (MBtotales)/1024/1024 MBtotales, SUM (MBtotales-MBlibre)/1024/1024 MBusado, SUM(MBlibre)/1024/1024 MBlibre,
      round(((SUM ( MBtotales - MBlibre) / 1024 / 1024) * 100) / (SUM (MBtotales) / 1024 / 1024), 2) Porc_ocu,
      round(((SUM (MBlibre) / 1024 / 1024) *100) / (SUM (MBtotales) / 1024 / 1024),2) Porc_libre
 FROM (SELECT tablespace_name, bytes MBtotales, 0 MBlibre
         FROM sys.dba_temp_files
        UNION ALL
       SELECT tablespace_name, 0 MBtotales, FREE_SPACE MBlibre
         FROM dba_temp_free_space)
 GROUP BY tablespace_name
 order by 6;

Alguién sabe en qué me equivoco?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

tamaño restante tablespace

Publicado por Rafael (178 intervenciones) el 28/08/2015 08:43:55
Por que dices que no te ha funcionado??? Tengo mas de 30 Bases de datos con este monitoreo y siempre que un tablespace llega al 85% de su ocupacion maxima me envia un correo, no falla...

Bueno pero no entiendo tampoco por que tienes que hacer uso de un union ...

Espero encuentres pronto lo que buscas ...
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

tamaño restante tablespace

Publicado por Ana (5 intervenciones) el 29/08/2015 12:49:57
he revisado mas tranquilamente esta select y sí que funciona, a mí no me funcionó porque los valores no encajaban. Esta muy bien hecha.
Mi union no es adecuada, además de que va lenta.
Gracias
Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Manuel

tamaño restante tablespace

Publicado por Manuel (1 intervención) el 31/08/2015 16:15:26
Hola, he aplicado tu query y me a devuelto lo siguiente:

TableSpace USADOS MB LIBRES MB TOTAL MB SPACE TOTAL MB TOTAL MAX MB %. Ocupado %. Libre
SYSTEM 28609 39 28648 32768 32768 87 0


Mis preguntas son?
1 Que debo entender en este resultado?
2 Como Cambio el Porcentaje del TableSpace?
3 Cuales son los problemas q se generan cuando un TableSpace llega a su limite?


Por la atención quedo muy agradecido.

Att. Manuel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

tamaño restante tablespace

Publicado por Rafael (178 intervenciones) el 01/09/2015 08:24:50
Debes entender que:

1. El tablespace SYSTEM se encuentra un 87% ocupado lo que significa que esta procximo a llenarse cuando esto ocurra no te dejara insertar mas datos en las tablas que dependan de el.

2. Que puedes ir ampliando dicho tablespace, asi no te quedas sin espacio disponible.

3. Puedes ir planificando algun tipo de depuracion de tus datos.

Te doy ejemplos;

En mi caso cuento con Bases de Datos de Facturacion e Inventarios cuando determinados tablespace estan a su limite de crecimiento lo que hago es lanzar los procesos de traspaso a histórico, con ello recupero espacio ocupado y mantengo la base de datos en un crecimiento muy controlado.

Otro caso es cuando los table space de las bases de desarrollo estan al limite, ahi exijo a los desarrolladores limpien sus bases.

Vaya que en escencia esto te sirve para tener un crecimiento controlado de la base de datos, en grandes empresas hasta para la asignacion de discos en la cabina y cosas similares.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar