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.

È stato utile?

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à.

  1. Configura lo SPFILE (puoi rimuovere il vecchio file se vuoi)
    1. copia [XE_HOME] \ dbs \ spfileXE.ora [XE_HOME] \ dbs \ spfileNEW_SID_NAME.ora
    2. copia [XE_HOME] \ database \ initXE.ora [XE_HOME] \ database \ initNEW_SID_NAME.ora
    3. Modifica [XE_HOME] \ database \ initNEW_SID_NAME.ora : dovrebbe contenere una sola riga come questa: SPFILE = '[XE_HOME] \ server \ dbs / spfileNEW_SID_NAME.ora'
  2. Spegni e sostituisci il vecchio servizio con un nuovo:
    1. sqlplus / as sysdba ed esegui shutdown
    2. lsnrctl stop
    3. oradim -new -sid NEW_SID_NAME -startmode auto -pfile [XE_HOME] \ database \ initNEW_SID_NAME.ora
    4. oradim -delete -sid XE
    5. lsnrctl start
  3. Aggiorna la proprietà dell'ambiente ORACLE_SID (Impostazioni di sistema > Advanced > Environment)
  4. Forza Oracle a registrarsi con il listener
    • sqlplus / as sysdba ed esegui alter 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:

  1. Interrompi e rimuovi l'eventuale servizio esistente:
  

oradim -delete -sid XE

  1. Ferma l'ascoltatore
  2. Configura lo SPFILE come spiegato da Johannes
  3. Crea una copia dello script XE.bat, puoi nominarlo come preferisci
  4. Modifica la copia dello script come segue:

    1. Modifica riga " set ORACLE_SID = XE " su " imposta ORACLE_SID = NEW_SID_NAME "
    2. Cambia ovunque vedi " -sid XE " a " -sid NEW_SID_NAME "
    3. Aggiorna la riga in cui chiama " orapwd.exe " comando per puntare a un file chiamato PWDNEW_SID_NAME.ora anziché PWDXE.ora
    4. 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 ...)
  5. 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 !!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top