2015-05-20 19 views
6

Recentemente ho avuto bisogno di importare un .dmp in un nuovo utente che ho creato. Ho anche creato un nuovo spazio tabelle per l'utente con il seguente comando:Oracle Tablespace maxsize "unlimited" non proprio illimitato

create tablespace my_tablespace 
datafile 'C:\My\Oracle\Install\DataFile01.dbf' size 10M 
autoextend on 
next 512K 
maxsize unlimited; 

Mentre l'importazione era in esecuzione ho ottenuto un errore:

ORA-01652 Unable to extend my_tablespace segment by in tablespace 

Quando ho esaminato i file di dati nella tabella DBA_DATA_FILES, Ho osservato che il valore massimo era di circa 34 GB. Poiché conoscevo la dimensione generale del database, sono stato in grado di importare il file .dmp senza problemi dopo aver aggiunto più file di dati nello spazio tabella.

Perché ho dovuto aggiungere più file di dati nello spazio tabelle quando il primo che ho aggiunto è stato impostato per aumentare automaticamente a una dimensione illimitata? Perché la dimensione massima è di 34 GB e non è illimitata? C'è un limite massimo di 34 GB?

+3

Qual è il blocco DB? A (tablespace smallfile) [datafile può avere solo 2^22 blocchi] (http://docs.oracle.com/cd/E11882_01/server.112/e40402/limits002.htm#REFRN0042), quindi suppongo che tu stia colpendo quel limite con i blocchi 8kb? –

+0

Credo di aver raggiunto questo limite. Avevo (apparentemente erroneamente) presunto che l'estensione "illimitata" si espandesse fino a quando il sistema operativo non esaurisse lo spazio HD. Per chiarimenti, quello che stai dicendo è che c'è un limite? – spots

+1

Sì; ma varia in base alla dimensione del blocco: il numero di blocchi è limitato, non è un limite diretto alle dimensioni. La dimensione specificata è un limite flessibile. Come menzionato da Jon, puoi specificare più file di dati i cui limiti soft ammontano a più dello spazio disponibile su disco. E ricorda che a Oracle piace separare la logica dal fisico: lo stesso DDL logico ha un limite fisico diverso su due sistemi con blocchi diversi. –

risposta

7

Come hai scoperto, e come ha sottolineato Alex Poole, ci sono dei limiti per le dimensioni di un singolo file di dati. I file di piccole dimensioni sono limitati a 128 GB e i file di grandi dimensioni sono limitati a 128 TB, a seconda delle dimensioni del blocco. (Ma non si desidera modificare le dimensioni del blocco solo per aumentare tali limiti.) Il limite di dimensioni nel comando create tablespace è presente solo se si desidera limitare ulteriormente la dimensione.

Questo può essere un po 'di confusione. Probabilmente non ti interessa gestire i file e vuoi che "funzioni solo". Gestione archiviazione del database è sempre andando essere fastidioso, ma qui ci sono alcune cose che puoi fare:

  1. Mantenga i vostri spazi tabelle al minimo.sono alcuni rari casi in cui è utile suddividere i dati in molti piccoli spazi tabella. Ma quei rari benefici sono di solito superati in numero dal dolore che sperimenterai nella gestione di tutti quegli oggetti.
  2. Prendere l'abitudine di aggiungere sempre più di un file di dati. Se si sta utilizzando ASM (che non consiglierei se si tratta di un'istanza locale), non vi è quasi alcun motivo per non diventare "pazzi" quando si aggiungono file di dati. Anche se non stai usando l'ASM, dovresti comunque diventare un po 'pazzo. Se si imposta la dimensione originale su un valore basso, non si è vicini al limite di MAX_FILES e non si ha a che fare con uno dei tablespace speciali come UNDO e TEMP, non c'è penalità per l'aggiunta di altri file. Non preoccuparti troppo di allocare più spazio potenziale rispetto al tuo disco rigido. Questo fa impazzire alcuni DBA, ma devi valutare la possibilità di esaurire lo spazio del sistema operativo rispetto alla possibilità di esaurire lo spazio in un centinaio di file. (In entrambi i casi, l'applicazione si blocca.)
  3. Impostare il parametro RESUMABLE_TIMEOUT. Quindi le istruzioni SQL verranno sospese, potrebbe generare un avviso, saranno elencate in DBA_RESUMABLE e attenderanno pazientemente più spazio. Questo è molto utile nei data warehouse.

Perché si chiama "illimitato"?

Direi che la parola chiave UNLIMITED è un errore storico. Oracle ha avuto la stessa limitazione delle dimensioni del file dal at least version 7 e forse prima. Oracle 7 è stato rilasciato nel 1992, quando un 1GB hard drive cost $1995. Forse ogni sistema operativo in quel momento aveva una limitazione delle dimensioni del file inferiore a quella. Forse era ragionevole pensare a 128 GB come "illimitato".

+0

Nel mio caso, non devo preoccuparmi di esaurire lo spazio una volta che è stato importato poiché questo database è di sola lettura. Ciò su cui sono ancora confuso perché Maxsize accetta "illimitato" quando non è veramente illimitato. Ad esempio, se creo un database inizialmente piccolo in un tablespace "illimitato" (utilizzando il cmd tablespace create nel mio esempio), otterrò un ORA-01652 una volta che il database raggiungerà i 34 GB? Dai tuoi suggerimenti dovrei creare un datafile aggiuntivo per ulteriore spazio. Lo spazio HD non è davvero un problema per me, quello che mi piacerebbe evitare è l'ORA-01652 inaspettato. – spots

+1

@spots - Penso che quello che Jon sta dicendo è che piuttosto che creare un file di dati aggiuntivo quando colpisci o ti chiudi il limite di 32 GB, crei 10 (o 100, o qualsiasi altro) file di dati quando crei il tablespace per la prima volta; cresceranno tutti e non vedrete un problema finché non saranno tutti pieni, quando arrivate a 320 GB (o 3200 GB, ...). –

+0

@spots la parola chiave "unlimited" si riferisce solo alla clausola autoextend. significa che i file di dati possono crescere fino a raggiungere i loro limiti fisici. La maggior parte dei sistemi di produzione non usa comunque la clausola autoextend (per alcuni buoni motivi). Ad esempio, è possibile che si verifichino dei problemi quando le dimensioni del file di dati raggiungono il limite del sistema operativo o quando i file di dati occupano il 100% del file system e Oracle improvvisamente non è in grado di estendere le dimensioni del file di controllo. Quando ciò accade, è facile non rischiare di risuscitare il database. – ibre5041

Problemi correlati