2 Metodi “sicuri” per il cambio del SID su un db ORACLE 11g


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.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.