Impossible de démarrer Oracle (11g1) en raison d'une mauvaise configuration de la mémoire (ORA-00837)

8

J'ai décidé de réduire l'allocation de mémoire d'une instance de développeur local et on m'a dit que la commande suivante avait fait le travail;

alter system set memory_max_target = 512M scope = spfile;

Ce que je suppose, car je ne peux plus démarrer l'instance Oracle en question. C'est l'erreur que j'obtiens en essayant de me connecter en tant qu'utilisateur non-DBA;

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

Lors de la connexion en tant que SYSDBA, j'obtiens ce qui suit;

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

("Connecté à une instance inactive." Est ma traduction d'un message d'erreur localisé, peut-être pas exactement correct) Donc, je suis dans une situation de capture 22, je ne peux pas modifier les paramètres de mémoire sans démarrer, et je peux ne démarre pas.

Existe-t-il un moyen de modifier ces paramètres hors ligne?

MaxH
la source

Réponses:

9

Si vous démarrez votre instance à l'aide d'un fichier de paramètres de serveur (une version binaire du fichier de paramètres d'initialisation, spfile), vous pouvez extraire les paramètres d'initialisation dans un fichier de paramètres d'initialisation en texte brut (pfile), les modifier, puis démarrer votre instance avec une mémoire modifiée paramètres.

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

Modifiez vos paramètres liés à la mémoire dans myinit.oraet démarrez votre instance à l'aide de cette nouvelle configuration:

sql> startup pfile='myinit.ora';

Vous pouvez ensuite enregistrer vos paramètres dans un fichier SPF avec la commande suivante:

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

Et démarrez votre base de données comme d'habitude:

sql> startup;
Yasir Arsanukaev
la source
1
Cela a parfaitement fonctionné. Le seul changement que je devais faire de mon côté était de remplacer ORCL par le SID de l'instance en question. J'ai défini le paramètre memory_target-parameter sur la même valeur que le paramètre memory_max_target-parameter, ce qui n'est peut-être pas optimal, mais cela a permis de démarrer.
MaxH
Oui, les noms des spfiles avec lesquels Oracle essaie de commencer sont spfileSID.oraet spfile.ora, puis il essaie de lire à partir de pfile init.orasi aucun spfile n'a été trouvé. Soit dit en passant, il MEMORY_MAX_TARGETpeut être beaucoup plus élevé que MEMORY_TARGETs'il ne peut pas être modifié dynamiquement - l'instance doit être renvoyée.
Yasir Arsanukaev
Oups, en initSID.orafait, non init.ora.
Yasir Arsanukaev
1

Les premières versions 11gR1 ont ce bug. Ils ne démarreront pas si memory_target a été défini sur 2 Go (et plus). Mettez à niveau vers 11gR2 (ou 11.1.0.7) ou utilisez des paramètres SGA / PGA "classiques" (sga_target, sga_max_size, pga_aggregate_target).

ibre5041
la source
Comment cela est-il lié à "ORA-00837: valeur spécifiée de MEMORY_TARGET supérieure à MEMORY_MAX_TARGET" sur laquelle OP note?
Yasir Arsanukaev
1

En supposant que vous utilisez Linux OS: avez-vous vérifié la taille du système de fichiers / dev / shm? La taille de ce fs doit être suffisamment longue pour s'adapter à votre SGA. Sinon, essayez de remonter avec '-o size = xxx'.

user22020
la source
Avez-vous déjà lu la cause de la panne identifiée par le numéro d'erreur Oracle dans OP (ORA-00837)?
Yasir Arsanukaev