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再重启