Impossibile avviare Oracle (11g1) a causa di una configurazione della memoria errata (ORA-00837)


8

Ho deciso di ridurre l'allocazione di memoria di un'istanza di sviluppatore locale e mi è stato detto che il seguente comando ha fatto il lavoro;

alter system set memory_max_target = 512M scope = spfile;

Il che immagino abbia fatto, dal momento che non posso più avviare l'istanza Oracle in questione. Questo è l'errore che ottengo quando provo a connettermi come utente non DBA;

ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist

Quando mi connetto come SYSDBA ottengo quanto segue;

Connected to an inactive instance.
SQL>startup nomount;
ORA-00837: Specified value of MEMORY_TARGET greater than MEMORY_MAX_TARGET
SQL>alter system set memory_max_target = 2G scope = spfile;
ORA-01034: ORACLE not available

("Connesso a un'istanza inattiva." È la mia traduzione di un messaggio di errore localizzato, potrebbe non essere esattamente corretto) Quindi, mi trovo in una situazione di cattura 22, non posso cambiare i parametri di memoria senza avviarlo, e posso non avviare.

C'è un modo per modificare questi parametri offline?

Risposte:


9

Se si avvia l'istanza utilizzando un file dei parametri del server (una versione binaria del file dei parametri di inizializzazione, spfile), è possibile estrarre i parametri di inizializzazione in un file di parametri di inizializzazione in testo semplice (pfile), modificarli e quindi avviare l'istanza con memoria modificata parametri.

sql> create pfile='myinit.ora' from spfile='spfileORCL.ora';

Modifica i parametri relativi alla memoria myinit.orae avvia l'istanza utilizzando questa nuova configurazione:

sql> startup pfile='myinit.ora';

È quindi possibile salvare le impostazioni in uno spfile con il seguente comando:

sql> create spfile='spfileORCL.ora' from pfile='myinit.ora';

E avvia il tuo database come al solito:

sql> startup;

1
Questo ha funzionato perfettamente. L'unica modifica che dovevo fare dalla mia parte era sostituire ORCL con il SID dell'istanza in questione. Ho impostato il parametro memory_target sullo stesso valore del parametro memory_max_target, che potrebbe non essere ottimale, ma ha reso possibile l'avvio.
Max

Sì, i nomi degli spfile con cui Oracle tenta di iniziare sono spfileSID.orae spfile.ora, quindi, cerca di leggere dal file init.orase non viene trovato alcun file. A proposito, MEMORY_MAX_TARGETpotrebbe anche essere molte volte più grande di MEMORY_TARGETquanto non possa essere modificato in modo dinamico - l'istanza deve essere rimbalzata.
Yasir Arsanukaev il

Oops, in initSID.orarealtà non lo è init.ora.
Yasir Arsanukaev,

1

Le prime versioni di 11gR1 hanno questo bug. Non si avvieranno se memory_target è stato impostato su 2 GB (e altro). Eseguire l'aggiornamento a 11gR2 (o 11.1.0.7) o utilizzare parametri "classici" SGA / PGA (sga_target, sga_max_size, pga_aggregate_target).


In che modo ciò è correlato a "ORA-00837: valore specificato di MEMORY_TARGET maggiore di MEMORY_MAX_TARGET" di cui l'OP prende nota?
Yasir Arsanukaev il

1

Supponendo che tu stia utilizzando il sistema operativo Linux: hai controllato la dimensione del filesystem / dev / shm? La dimensione di questo fs deve essere abbastanza lunga da adattarsi al tuo SGA. In caso contrario, prova a rimontare con '-o size = xxx'.


Hai mai letto la causa dell'errore identificata dal numero di errore Oracle in OP (ORA-00837)?
Yasir Arsanukaev,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.