由于内存配置错误,无法启动 Oracle (11g1) (ORA-00837)

Max*_*axH 8 oracle oracle-11g memory

我决定减少本地开发人员实例的内存分配,并被告知以下命令完成了这项工作;

alter system set memory_max_target = 512M scope = spfile;
Run Code Online (Sandbox Code Playgroud)

我猜是这样,因为我无法再启动有问题的 Oracle 实例。这是我尝试以非 DBA 用户身份连接时遇到的错误;

ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Run Code Online (Sandbox Code Playgroud)

以 SYSDBA 身份连接时,我得到以下信息;

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
Run Code Online (Sandbox Code Playgroud)

(“连接到非活动实例。”是我对本地化错误消息的翻译,可能不完全正确) 所以,我处于 ​​catch 22 情况,我无法在不启动的情况下更改内存参数,我可以不启动。

有没有办法离线更改这些参数?

Yas*_*irA 9

如果您使用服务器参数文件(初始化参数文件 spfile 的二进制版本)启动您的实例,您可以将初始化参数提取到纯文本初始化参数文件 (pfile) 中,更改它们,然后使用修改后的内存启动您的实例参数。

sql> create pfile='myinit.ora' from spfile='spfileORCL.ora';
Run Code Online (Sandbox Code Playgroud)

myinit.ora使用此新配置修改您的内存相关参数并启动您的实例:

sql> startup pfile='myinit.ora';
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用以下命令将设置保存回 spfile:

sql> create spfile='spfileORCL.ora' from pfile='myinit.ora';
Run Code Online (Sandbox Code Playgroud)

并像往常一样启动您的数据库:

sql> startup;
Run Code Online (Sandbox Code Playgroud)