Domanda complessa (specie per me che lavoro con db Oracle ma non sono certo un esperto), comunque faccio un tentativo.
mettiamo che creo un db oracle da 2 giga... immagino che si allochi tutte le sue tabelline per ottimizzare le prestazioni...
Si.
cancello delle righe e si crea spazio che cmq sarà riutilizzato senza troppi problemi, credo, perchè la size totale non cala...
Si: quando cancelli records da una tabella i relativi blocchi vanno nella freelist
della tabella e saranno riutilizzati nei successivi INSERT e UPDATE.
quando i dati aumentano che succede? se la size supera i 2 giga iniziali viene allocato altro spazio, credo, ma quanto?
Quando allochi i tuoi 2GB iniziali, puoi anche decidere se e in che misura tale spazio può essere automaticamente esteso.
ho idea che dopo un pò di volte che fà così si frammenti un qualche tipo di indice, tipo MFT, e le prestazioni dovrebbero rallentare...
a quel punto che si fà?
Non sono sicuro di aver compreso il tuo dubbio qui: se stiamo parlando di un db in produzione, io parto dal presupposto che se il db si è preso dello spazio in più è perchè gli serve (se non tutto ora, comunque in futuro) per cui non mi preoccupo di "recuperare" lo spazio libero al suo interno. Se invece si parla di operazioni "straordinarie" (tipo cancellare qualche milione di righe da una tabella che so che in futuro non verrà più popolata così pesantemente) allora ci sono diverse soluzioni possibili, ma qui mi fermo per paura di dire qualcosa di impreciso o, peggio, errato. Di sicuro però ti posso dire che non è certo necessario reinstallare Oracle: puoi usare export/import, creare una nuova tablespace ed importare i dati da quella vecchia, ecc.
Infine, ma probabilmente già lo sai, differenze a riguardo ci possono essere tra diverse versioni di Oracle e tra diverse piattaforme.
HTH.
Alessandro