2010-03-02 17 views
11

esistente ho bisogno di determinare il MAXSIZE che è stato impostato per un tablespace quando è stato creato (Oracle 10g)Come determinare MAXSIZE di spazio tabella

Sono sicuro che mi manca qualcosa di ovvio, ma le informazioni isn' t immediatamente evidente nelle informazioni in DBA_TABLESPACES.

risposta

10

In 11g questa query darebbe la risposta, ma ho notato che sei sulla 10g e ahimè the useful column is missing.

select tablespace_name, max_size 
from dba_tablespaces 
/

In 10g si dovrà

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

Ricordate che questa è la dimensione massimapredefinita. In pratica, la dimensione dei file di dati assegnati al tablespace sarà limitata, il che potrebbe essere molto inferiore a questo massimo teorico.

modificare

commento @ Paolo s' è pertinente. Suppongo che la risposta corretta sarebbe quella di dire che la dimensione massima di un tablespace è un concetto privo di significato, anzi quasi fittizio. La dimensione di un tablespace è in realtà determinata dai suoi file di dati e la sua potenziale dimensione massima massima è determinata dal numero massimo di file di dati che possono essere assegnati. Il SQL Reference ha questo da dire sul tema:

  • uno spazio tabelle bigfile contiene un solo file di dati o di tempfile, che può contenere fino a circa 4 miliardi (232) blocchi. La dimensione massima del singolo file di dati o tempfile è di 128 terabyte (TB) per un tablespace con blocchi 32K e 32 TB per un tablespace con blocchi 8K.
  • Un tablespace smallfile è un tablespace Oracle tradizionale, che può contenere 1022 datafiles o tempfiles, ognuno dei quali può contenere fino a circa 4 milioni ([2 alla potenza di 22]) blocchi.

Così forse questa è una query più utile ...

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

... con l'avvertenza che si applica solo per i file di dati attualmente assegnati.

modificare 2

MAXSIZE si applica al file di dati non spazio tabelle. Questo è il motivo per cui la parola chiave MAXSIZE viene discussa nello documentation for the filespec clause anziché in CREATE TABLESPACE.

+0

Non sembra funzionare per me. La prima cosa era next_extent era null, quindi ho appena fatto initial_extent * max_extents, ma max_extents sembra essere MAXINT (2147483645) sempre (e gli tablespace non sono stati creati con MAXSIZE unlimited) –

+0

Non voglio che lo spazio attuale sia assegnato ad esso. Ho bisogno della dimensione che è stata specificata con MAXSIZE quando è stata creata. Non vedo questo come privo di significato - presumibilmente Oracle si rifiuterà di estendere un tablespace oltre MAXSIZE. –

+1

@Paul - Oracle rifiuterà di estendere un tablespace oltre i limiti dei suoi file di dati attualmente assegnati (perché l'autoextend è disattivato, o il file system è pieno, o hai raggiunto il MAXSIZE specificato per il file di dati). – APC

0

MAXSIZE è un attributo di DBA_DATA_FILES

+0

Non è un attributo di DBA_DATA_FILES in Oracle 10g, per quanto posso dire (c'è un maxbytes), e non sarà la dimensione massima del file di dati, non lo spazio delle tabelle? –

+0

@Paul - vedere la mia risposta rivista. Fondamentalmente Robert ha ragione: la dimensione di tablsepace è un prodotto della dimensione del datafile. – APC

+0

Scusa se non sono stato chiaro. L'attributo è chiamato maxbytes. Quando si guarda il diagramma ER di oracle: un tablespace è costituito da uno o più file di dati, un file di dati ha un attributo maxbytes. Quindi il valore massimo di un tablespace è la somma dei maxbytes dei file di dati in quel tablespace. –

0

selezionare tablespace_name, maxbytes/1024/1024 MAX_SIZE da 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

Tutto dipende dal fatto che il file di dati sia auto estensibile o meno.

modo da ottenere il le informazioni giuste da DBA_DATA_FILES:

  • Se AUTOEXTENSIBLE è impostata su Sì, allora avete bisogno la somma totale di maxbytes.

  • Se AUTOEXTENSIBLE è impostato su NO, è necessaria la somma totale di BYTES.

MAX_SIZE in dba_tablespaces non ha nulla a che fare con la dimensione massima dello spazio tabella stessa. Secondo Oracle documenation è la "dimensione massima predefinita di segmenti"

Quindi la domanda giusta è:

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

Questa è stata testata su 11g ma dovrebbe funzionare anche su 10g. Ti dà la dimensione massima di ogni tablespace in byte.

La stessa cosa vale per gli spazi tabella TEMP:

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