2010-03-02 9 views

Respuesta

10

En 11g esta consulta le daría la respuesta, pero me doy cuenta de que estás en 10g y por desgracia the useful column is missing.

select tablespace_name, max_size 
from dba_tablespaces 
/

En 10g que tendrá que

select tablespace_name 
     , initial_extent + (next_extent * (max_extents-1)) as calc_max_size 
from dba_tablespaces 
/

Recuerde que este es el tamaño máximodefecto. En la práctica, estará limitado por el tamaño de los archivos de datos asignados al tablespace, que podría ser mucho menor que este máximo teórico.

edición

comentario @ Pablo 's es pertinente. Supongo que la respuesta correcta sería decir que el tamaño máximo de un tablespace es un concepto sin sentido, de hecho casi ficticio. El tamaño de un espacio de tabla en realidad está determinado por sus archivos de datos, y su máximo tamaño máximo potencial está determinado por la cantidad máxima de archivos de datos que se pueden asignar. El SQL Reference tiene esto que decir sobre el tema:

  • Un espacio de tabla bigfile contiene sólo un archivo de datos o archivo temporal, que puede contener hasta aproximadamente 4 mil millones (232) bloquea. El tamaño máximo del único archivo de datos o archivo temporal es de 128 terabytes (TB) para un espacio de tabla con 32K bloques y 32TB para un espacio de tablas con 8K bloques.
  • Un espacio de tabla smallfile es un tablespace Oracle tradicional, que puede contener 1022 archivos de datos o tempfiles, cada uno de los cuales puede contener hasta aproximadamente 4 millones ([2 al poder de 22]) bloques.

Así que tal vez esta es una consulta más útil ...

select tablespace_name 
     , count(*) as no_of_data_files 
     , sum(maxblocks) as max_size 
from dba_data_files 
group by tablespace_name 
/

... con la salvedad de que sólo se aplica a los archivos de datos asignados en la actualidad.

edición 2

MAXSIZE se aplica no el archivo de datos de tabla. Es por eso que la palabra clave MAXSIZE se trata en el documentation for the filespec clause en lugar de en CREATE TABLESPACE.

+0

Parece que no funciona para mí. Lo primero era que next_extent era nulo, así que justificó initial_extent * max_extents, pero max_extents parece ser MAXINT (2147483645) siempre (y los espacios de tabla no se crearon con MAXSIZE unlimited) –

+0

No quiero que se le asigne el espacio actual. Necesito el tamaño que se especificó con MAXSIZE cuando se creó. No veo que esto carezca de sentido, es de suponer que Oracle se negará a extender un tablespace más allá de MAXSIZE. –

+1

@Paul: Oracle se negará a extender un espacio de tabla más allá de los límites de sus archivos de datos asignados actualmente (porque autoextend está desactivado, o el sistema de archivos está lleno, o ha alcanzado el MAXSIZE especificado para el archivo de datos). – APC

0

MAXSIZE es un atributo de dba_data_files

+0

No es un atributo de dba_data_files en Oracle 10g, por lo que yo puedo decir (hay un MaxBytes), y ¿no será el tamaño máximo del archivo de datos, no el espacio de las tablas? –

+0

@Paul - ver mi respuesta revisada. Fundamentalmente, Robert tiene razón: el tamaño del tablsepace es producto del tamaño del archivo de datos. – APC

+0

Lo siento, no estaba claro. El atributo se llama maxbytes. Cuando mira el diagrama de ER de Oracle: un tablespace consiste en uno o más archivos de datos, un archivo de datos tiene un atributo maxbytes. Entonces, el máximo de un espacio de tabla es la suma de maxbytes de los archivos de datos en ese espacio de tabla. –

0

seleccione tablespace_name, maxbytes/1024/1024 MAX_SIZE de dba_data_files;

0
select tablespace_name, round(sum(bytes)/1024/1024, 2) as free_space from dba_free_space group by tablespace_name; 
4

Todo depende de si el archivo de datos es autoextensible o no.

para que pueda obtener la información correcta de la DBA_DATA_FILES:

  • Si AUTOEXTENSIBLE se establece en sí, entonces necesita la suma total de MAXBYTES.

  • Si AUTOEXTENSIBLE está establecido en NO, entonces necesita la suma total de BYTES.

MAX_SIZE en DBA_TABLESPACES no tiene nada que ver con el tamaño máximo del tablespace. De acuerdo con Oracle documenation es el

"tamaño máximo predeterminado de segmentos"

lo que la consulta correcta es:

select TABLESPACE_NAME, sum(decode(AUTOEXTENSIBLE, 'YES', MAXBYTES, BYTES)) MAX_SIZE 
from DBA_DATA_FILES 
group by TABLESPACE_NAME; 

Esto ha sido probado en 11g pero también debería funcionar en 10g. Le da el tamaño máximo de cada espacio de tabla en bytes.

Lo mismo vale para los espacios de tabla TEMP:

select TABLESPACE_NAME, sum(decode(AUTOEXTENSIBLE, 'YES', MAXBYTES, BYTES)) MAX_SIZE 
from DBA_TEMP_FILES 
group by TABLESPACE_NAME; 
Cuestiones relacionadas