Oracle (11g1) kann aufgrund einer schlechten Speicherkonfiguration nicht gestartet werden (ORA-00837)

8

Ich entschied mich, die Speicherzuweisung einer lokalen Entwicklerinstanz zu reduzieren, und mir wurde gesagt, dass der folgende Befehl die Aufgabe erledigte.

alter system set memory_max_target = 512M scope = spfile;

Das habe ich wohl getan, da ich die betreffende Oracle-Instanz nicht mehr starten kann. Dies ist der Fehler, den ich bekomme, wenn ich versuche, eine Verbindung als Nicht-DBA-Benutzer herzustellen.

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

Wenn ich mich als SYSDBA verbinde, erhalte ich Folgendes:

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

("Verbunden mit einer inaktiven Instanz." Ist meine Übersetzung einer lokalisierten Fehlermeldung, die möglicherweise nicht genau korrekt ist.) Ich bin also in einer Situation, in der es nicht möglich ist, die Speicherparameter zu ändern, ohne zu starten, und ich kann nicht starten.

Gibt es eine Möglichkeit, diese Parameter offline zu ändern?

MaxH
quelle

Antworten:

9

Wenn Sie Ihre Instanz mit einer Serverparameterdatei (eine binäre Version der Initialisierungsparameterdatei, spfile) starten, können Sie die Initialisierungsparameter in die Nur-Text-Initialisierungsparameterdatei (pfile) extrahieren, ändern und dann Ihre Instanz mit geändertem Speicher starten Parameter.

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

Ändern Sie Ihre speicherbezogenen Parameter in myinit.oraund starten Sie Ihre Instanz mit dieser neuen Konfiguration:

sql> startup pfile='myinit.ora';

Sie können Ihre Einstellungen dann mit dem folgenden Befehl in einer SP-Datei speichern:

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

Und starten Sie Ihre Datenbank wie gewohnt:

sql> startup;
Yasir Arsanukaev
quelle
1
Das hat perfekt funktioniert. Die einzige Änderung, die ich auf meiner Seite vornehmen musste, war, ORCL durch die SID der betreffenden Instanz zu ersetzen. Ich habe den memory_target-Parameter auf den gleichen Wert wie den memory_max_target-Parameter gesetzt, was möglicherweise nicht optimal ist, aber das Starten ermöglicht hat.
MaxH
Ja, die Namen der SP-Dateien, mit denen Oracle zu beginnen versucht, sind spfileSID.oraund spfile.oradann versucht es, aus pfile zu lesen, init.orawenn keine SP-Dateien gefunden wurden. Übrigens MEMORY_MAX_TARGETkann es um ein Vielfaches größer sein, als MEMORY_TARGETwenn es nicht dynamisch geändert werden kann - die Instanz muss zurückgeworfen werden.
Yasir Arsanukaev
Ups, das ist es initSID.oraeigentlich nicht init.ora.
Yasir Arsanukaev
1

Die frühen 11gR1-Versionen haben diesen Fehler. Sie werden nicht gestartet, wenn das memory_target auf 2 GB (und mehr) festgelegt wurde. Aktualisieren Sie entweder auf 11gR2 (oder 11.1.0.7) oder verwenden Sie "klassische" SGA / PGA-Parameter (sga_target, sga_max_size, pga_aggregate_target).

ibre5041
quelle
In welcher Beziehung steht dies zu "ORA-00837: Angegebener Wert von MEMORY_TARGET größer als MEMORY_MAX_TARGET", über den das OP berichtet?
Yasir Arsanukaev
1

Angenommen, Sie verwenden ein Linux-Betriebssystem: Haben Sie die Größe des Dateisystems / dev / shm überprüft? Die Größe dieses fs muss lang genug sein, um zu Ihrer SGA zu passen. Wenn nicht, versuchen Sie erneut mit '-o size = xxx'.

user22020
quelle
Haben Sie jemals die Fehlerursache gelesen, die durch die Oracle-Fehlernummer in OP (ORA-00837) identifiziert wird?
Yasir Arsanukaev