Domanda

Ho bisogno di determinare il MAXSIZE che è stato impostato per un tablespace quando è stato creato (Oracle 10g)

Sono sicuro che mi manca qualcosa di ovvio, ma l'informazione non è immediatamente evidente nelle informazioni in DBA_TABLESPACES.

È stato utile?

Soluzione

In questa query 11g darebbe la risposta, ma ho notato che sei sulla 10g e ahimè la colonna utile manca .

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 questo è il default dimensione massima. In pratica si sarà limitato dalle dimensioni dei file di dati assegnati al tablespace, che potrebbe essere molto inferiore a questo valore massimo teorico.

modifica

Commento @ Paolo s' è pertinente. Suppongo che la risposta corretta sarebbe quella di dire che la dimensione massima di un tablespace è un senso, anzi quasi di finzione, concetto. La dimensione di uno spazio tabella è in realtà determinata dalle sue datafiles, e il suo potenziale dimensione massima massima è determinata dal numero massimo di file di dati che può essere assegnato. Il SQL Reference ha questo da dire sul tema:

  • Un tablespace 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 filetemp è di 128 terabyte (TB) per un tablespace con 32K blocchi e 32 TB per uno spazio tabella con 8k blocchi.
  • A smallfile tablespace è un tablespace Oracle tradizionale, che può contenere 1022 datafiles o tempfiles, ciascuno dei quali può contenere fino a circa 4 milioni ([2 alla potenza di 22]) blocchi.

Quindi, 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.

modifica 2

MAXSIZE si applica al file di dati non spazio tabelle. È per questo che la parola MAXSIZE è discusso nella documentazione per la clausola specifica file piuttosto che sotto CREATE TABLESPACE.

Altri suggerimenti

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

Così si ottiene il le informazioni giuste da DBA_DATA_FILES:

  • Se AUTOEXTENSIBLE è impostata su YES allora avete bisogno la somma totale di maxbytes.

  • Se AUTOEXTENSIBLE è impostata su NO, che ha bisogno la somma totale di byte.

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

  

"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 spazio tabella 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;

MAXSIZE è un attributo di DBA_DATA_FILES

selezionare tablespace_name, maxbytes / 1024/1024 MAX_SIZE da DBA_DATA_FILES;

select tablespace_name, round(sum(bytes)/1024/1024, 2) as free_space from dba_free_space group by tablespace_name;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top