Oracle19C ora-00821 sga_target is too small导致的数据库无法启动问题(Windows系统)

1.问题现象及原因

启动数据库失败,提示sga_target is too small

本人是因为Oracle RDBMS Kernel Executable这个进程占用内存太多,所以自行将sga_target调小了导致的,修改用的语句如下:

alter system set sga_target=512m scope=spfile;
alter system set sga_max_size=512m scope=spfile; 

网上能搜到很多解决方案,但要么不适用,要么是针对Linus环境的,本文介绍Windows系统对应解决方案。 

 2.问题解决思路

需要将spfile里的sga_target值调大才能启动数据库,但是需要先启动数据库才能改sga_target值,死循环了属于是。

2.1首先是要找到spfile对应的文件,通过尝试直接修改spfile文件里sga_target的值一次性解决

很多其他答案说这个文件在Oracle安装目录\dbs文件夹下面,叫init.ora,看着很像,但实际上不是。我是在Oracle安装目录\database下找到的INITORCL.ORA,可能会有人不是这个名称,本质是init+全局数据库名.ora,一般都默认的orcl,如果自己改过数据库名称,那么这个文件的名称也会相应变化。

右键用记事本打开,可以找到sga_target,题主改成1G了,需要换算成byte(sga_max_size也要改,≥sga_target即可)

修改后保存。

2.2用修改后的spfile文件来启动数据库

SQL> startup spfile='D:\Oracle19c\WINDOWS.X64_193000_db_home\database\INITORCL.ora';
SP2-0714: 无效的        STARTUP 选项组合

启动失败,周树人不承认自己是鲁迅导致的。把spfile改成pfile再试一下

SQL> startup pfile='D:\Oracle19c\WINDOWS.X64_193000_db_home\database\INITORCL.ora';
ORACLE 例程已经启动。

启动成功(想知道原因的,可以百度下spfile和pfile的区别)

到这里还没有结束,如果重启的话,系统还是会默认从spfile启动,且系统默认的sga_target参数值还是512m(修改前的),数据库还是启不来。直接用原语句修复spfile的sga_target也不行,会提示:

SQL> alter system set sga_target=1024m scope=spfile;
alter system set sga_target=1024m scope=spfile
*
第 1 行出现错误:
ORA-32001: 已请求写入 SPFILE, 但是没有正在使用的 SPFILE

2.3利用pfile覆盖spfile,再用spfile启动

通过上面的步骤可以发现,INITORCL.ORA其实是pfile文件,不是spfile,前台无法找到spfile文件,用语句直接修改也行不通,但是pfile是能找到实体并修改的,那就用修改后的pfile来覆盖spfile好了

SQL> create spfile from pfile;

文件已创建。

接着关闭数据库

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> exit
从 Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0 断开

重启

C:\Users\omy>sqlplus / as sysdba;

SQL*Plus: Release 19.0.0.0.0 - Production on 星期五 10月 20 11:27:51 2023
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

已连接到空闲例程。

SQL> startup
ORACLE 例程已经启动。

注意,这里没有用startup pfile=...,说明系统是从spfile重启的,且启动成功了

到这里还是没有结束,如果后面电脑重启的话,数据库还是会启不来

解铃还需系铃人,再用原来的语句把sga_target改大吧

SQL> alter system set sga_target=1024m scope=spfile;

系统已更改。

SQL> alter system set sga_max_size=1024m scope=spfile;

系统已更改。

最好再关闭重启一下

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup;
ORACLE 例程已经启动。

Total System Global Area 1073738560 bytes
Fixed Size                  9036608 bytes
Variable Size             469762048 bytes
Database Buffers          587202560 bytes
Redo Buffers                7737344 bytes
数据库装载完毕。
数据库已经打开。

3.总结

3.1首先是找到pfile文件,它是Oracle安装目录database下的init+全局数据库名.ora

3.2记事本打开pfile文件,修改参数值sga_target和sga_max_size

3.3用pfile启动数据库,再用pfile覆盖spfile

3.4关闭数据库,重启(从spfile启动)

3.5语句修改sga_target和sga_max_size参数值

3.6再重启

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle 19c是一款广泛使用的关系型数据库管理系统ORA-12541错误是一种TNS无法解析指定的连接标识符所引起的错误,表示远程主机或服务无法到达。 产生ORA-12541错误的原因可能有以下几种: 1. TNS服务没有正常启动:验证Oracle数据库实例中的监听器是否已经启动。你可以通过运行lsnrctl status命令检查监听器状态。如果监听器没有正常启动,请尝试启动它。 2. 主机名或IP地址错误:确保你输入的主机名或IP地址是正确的。你可以通过ping命令来验证远程主机是否可达。 3. 端口号错误:检查连接字符串中使用的端口号是否是正确的。Oracle数据库默认使用的端口号是1521。 4. 防火墙或安全组问题:当你在本地无法访问Oracle数据库实例时,有可能是由于本机的防火墙或安全组规则禁止了连接。请确保防火墙或安全组规则允许你的本机访问指定的端口。 解决ORA-12541错误的方法如下: 1. 确保Oracle数据库实例中的监听器已经正常启动。 2. 检查主机名或IP地址是否正确。 3. 验证连接字符串中的端口号是否正确。 4. 检查防火墙或安全组规则,确保允许本机访问指定的端口。 总结:ORA-12541错误表示无法连接到远程主机或服务。通过检查监听器状态、确认主机名或IP地址、验证端口号以及检查防火墙或安全组规则,你可以解决这个错误并成功连接到Oracle数据库实例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值