Come posso modificare il SID di un'istanza di Oracle XE
-
03-07-2019 - |
Domanda
Avevo bisogno di cambiare il SID di un database Oracle XE (non il nome del servizio) in modo che corrispondesse a un database di produzione.
Quando ho provato a cercare online, la maggior parte delle pagine descriveva la modifica o l'aggiunta di un nome di servizio tramite tnsnames.ora; non è quello che dovevo fare.
Soluzione
La asktom l'articolo ha la risposta, ma la formattazione e la verbosità rendono difficile seguire, quindi ecco un riassunto:
[XE_HOME] indica dove è installato Oracle XE. Normalmente si tratta di C: \ oraclexe \ app \ oracle \ product \ 10.2.0 \ server
.
Assicurati di avere i privilegi di amministratore o la procedura fallirà.
- Configura lo SPFILE (puoi rimuovere il vecchio file se vuoi)
-
copia [XE_HOME] \ dbs \ spfileXE.ora [XE_HOME] \ dbs \ spfileNEW_SID_NAME.ora
-
copia [XE_HOME] \ database \ initXE.ora [XE_HOME] \ database \ initNEW_SID_NAME.ora
- Modifica
[XE_HOME] \ database \ initNEW_SID_NAME.ora
: dovrebbe contenere una sola riga come questa:SPFILE = '[XE_HOME] \ server \ dbs / spfileNEW_SID_NAME.ora'
-
- Spegni e sostituisci il vecchio servizio con un nuovo:
-
sqlplus / as sysdba
ed eseguishutdown
-
lsnrctl stop
-
oradim -new -sid NEW_SID_NAME -startmode auto -pfile [XE_HOME] \ database \ initNEW_SID_NAME.ora
-
oradim -delete -sid XE
-
lsnrctl start
-
- Aggiorna la proprietà dell'ambiente ORACLE_SID (Impostazioni di sistema > Advanced > Environment)
- Forza Oracle a registrarsi con il listener
-
sqlplus / as sysdba
ed eseguialter register system;
-
È possibile verificare che il SID sia stato modificato eseguendo la seguente query: selezionare nome_istanza da v $ istanza;
Altri suggerimenti
Asktom ha la risposta , ho dovuto passare molti google-fu per arrivarci.
Ho avuto dei problemi con la soluzione pubblicata da Johannes, quindi ho dovuto fare qualche passo in più. Quando ho provato a connettermi a Oracle (passaggio 4) facendo sqlplus / as sysdba ho ottenuto:
ERROR: ORA-12560: TNS:protocol adapter error
La soluzione per questo era l'esecuzione della seguente riga:
oradim -start -sid NEW_SID_NAME
Quindi connettermi con / ha funzionato bene, ma provare a connettermi a NEW_SID_NAME con il sistema o l'HR mi ha dato un altro problema:
ERROR: ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
Ho verificato che con la query seleziona nome_istanza da v $ istanza;
che il listener sarebbe NEW_SID_NAME, e così ha fatto. Ma eseguendo lsnrctl status
nella riga di comando o interrogando selezionare il nome da dba_services;
non ha mostrato NEW_SID_NAME come listener.
La soluzione di questo problema era l'esecuzione della seguente frase su sqlplus:
alter system set service_names='NEW_SID_NAME';
Forse dovrai eseguire alter register di sistema;
anche dopo questo
Dopo aver eseguito questi due passaggi, posso collegarmi a NEW_SID_NAME con sistema e risorse umane.
Spero che sia d'aiuto
Nella versione 11g, tutta la soluzione precedente non funzionava ... Ricevo sempre il seguente errore quando provo a fare sqlplus / as sysdba :
ERRORE: ORA-12560: TNS: errore dell'adattatore di protocollo
Fortunatamente ho trovato uno script per fare ciò che volevo fare sotto [XE_HOME] \ config \ scripts. Lo script si chiama XE.bat e crea un'istanza da zero di un nuovo database chiedendoti la password sys lungo il processo. Quindi quello che ho fatto è stato:
- Interrompi e rimuovi l'eventuale servizio esistente:
oradim -delete -sid XE
- Ferma l'ascoltatore
- Configura lo SPFILE come spiegato da Johannes
- Crea una copia dello script XE.bat, puoi nominarlo come preferisci
-
Modifica la copia dello script come segue:
- Modifica riga " set ORACLE_SID = XE " su " imposta ORACLE_SID = NEW_SID_NAME "
- Cambia ovunque vedi " -sid XE " a " -sid NEW_SID_NAME "
- Aggiorna la riga in cui chiama " orapwd.exe " comando per puntare a un file chiamato PWDNEW_SID_NAME.ora anziché PWDXE.ora
- Aggiorna la riga che riecheggia spfileXE.ora in initXE.ora per echo spfileNEW_SID_NAME.ora in initNEW_SID_NAME.ora (questa parte può rendere inutile il passaggio 3 ma preferisco farlo comunque, nel caso ...)
-
Esegui lo script ... Ti chiederà alcune volte la password di SISTEMA dicendo
Immettere il valore per 1:
o
Immettere il valore per 2:
Ecco fatto, il nuovo database con il tuo NEW_SID_NAME è attivo e funzionante !!