Recentemente, dopo un urgente ripristino di un db su un ambiente diverso da quello sorgente (un ambiente di produzione su uno di collaudo), mi sono ritrovato a imprecare doverne cambiare il nome e diversi altri parametri.
L’ operazione delicata in questi casi è proprio quella del cambio del SID. Esistono due modi che ho sperimentato con esito positivo, il primo è più semplice e consiste nel usare l’ utility DBNEWID.
Dopo il ripristino ho dovuto tirarmi provvisoriamente su l’ istanza in modalità mount e per farlo, nel mio caso, ho in ordine:
* cambiato il sid sul bash_profile dell’utenza unix usata (e ovviamente reso attivo, con il comando source o con login o con su – etc. etc.);
* editato il file init.ora (solitamente initSID.ora) cambiandone il nome (appunto initNUOVOSID.ora) e tutti riferimenti al vecchio SID (dbname, path flashback/logs etc.);
* restartartato il listener (nel mio caso ho lasciato intatto il file listener.ora, visto che il vecchio SID sarà stato successivamente proprio quello che volevo riconfermare);
* SQL> startup mount exclusive ;
* nid target=sys/password DBNAME=nuovoSID SETNAME=Y ;
In questa maniera lo scopo è stato raggiunto e per tirare su il “nuovo” db ho dovuto solo:
* Ricambiare il sid sul enviroment dell’ utente di sistema per oracle;
* Spegnere il db.
* Ricreare l’ SPFILE con un:
SQL> create spfile from pfile=puntando al path di quello nuovo (initNUOVOSID.ora)
* SQL> startup
FINE.
————————————————-
Il secondo metodo come vi dicevo è piu complesso e lungo, consiste nel rifare la procedura a mano x la creazione del controlfile:
Bisogna innanzitutto ricordarsi il PATH settato x files di trace del db:
* SQL> show parameter USER_DUMP_DEST ;
Questo PATH ci servirà a prendere il trace generato dal comando:
* SQL> alter database backup controlfile to trace;
Come vedete dal comando in questa maniera avremmo il ddl per la creazione del cf all’interno del file trace
appena creato.
* Spegniamo il db appena ripristinato:
SQL> shutdown immediate ;
e dalla directory DUMPDEST preleviamo il trc-file corrispondente al controlfileToTrace;
* Editiamolo cominciando a eliminare tutte le righe prima della fase 2 ( Set #2. RESETLOGS case )
* Aggiungiamo un “REUSE” davanti il “SET” della riga: “create controlfile….” modificando il SID vecchio col nuovo, otterremo: “CREATE CONTROLFILE REUSE SET DATABASE “NUOVOSID” ……..
* Cancelliamo tutto quello che viene dopo “CHARACTER SET…”
* Salviamo il nostro file come script sql (.sql)
* Rinominiamo adesso il file initVECCHIOSID.ora in initNUOVOSID.ora (e modifichiamo all’interno i riferimenti al vecchio SID);
* Settiamo l’enviroment x l’ utenza unix e carichiamola.
* SQL> startup nomount ;
* lanciamo il file precedentemente modificato per la creazione del nuovo controlfile ;
* SQL> alter database open resetlogs (occhio alle dir nuove per i logs, il nome sarà il nuovo SID, ci sono già?)
* SQL> alter database rename global_name to
* SQL> alter database open;
* Ricreiamo la TABLESPACE temporanea.