Mi è capitato di intervenire su un’istanza oracle di un cliente in cui era stato erroneamente aggiunto un datafile in un tablespace, ovvero era stato sbagliato il path è la cosa non è piacevole sopratutto in una installazione RAC (Real Application Cluster di Oracle).
Siccome il tablespace si trova su un istanza di produzione la cosa è diventata alquanto delicata, l’unica soluzione (fornita da un collega che lavora su oracle) era quella di prendere un blackup 0 esportare l’intero tablespace e ricrearlo ex-novo, ma questo implica la messa in down dei servizi ad esso legati (soluzione troppo drastica).
Girando per il forum oracle, vedo che dalla release 10.0.2 è possibile droppare un datafile senza la necessita di stoppare o cancellare l’intero tablespace, unica prerogativa e che il datafile deve essere vuoto!
Mi appresto tramite vpn a collegarmi al server oracle e con mia stra-grande soddisfazione noto che il datafile è vuoi ed ecco che usando i comandi sotto descritti o droppato il datafile e creato correttemente il suo sostituto risolvendo il problema.
Comandi usati:
1. bisogna loggarsi tramite sqlplus con le credenziali di sys CONNECT / AS SYSDBA
2. Visualizzare l’elenco dei tablespace presenti con il comando:
SQL> select tablespace_name from dba_tablespaces;
3. Visualizzare i datafile che compongono il tablespace da modificare:
select file_name from dba_data_files where tablespace_name=’NOME_TABLESPACE’;
4. Prendere nota del datafile da eliminare comprensivo del path, per
esempio il datafile si chiama datafile3.dbf e usare il seguente
comando:
SQL> alter tablespace richfinanziamenti drop datafile ‘/USARE/IL/PATH/COMPLETO/datafile3.dbf’;
Il datafile è stato rimosso, ora potete inserire il datafile corretto.
RICORDA IL DATAFILE PER ESSERE RIMOSSO DEVE ESSERE VUOTO.