日期:2014-05-16  浏览次数:20439 次

oracle9i修改sga_max_size引起问题解决
为了改善oracle性能,尝试修改某些参数,结果修改sga_max_size=2G后数据库启动失败(后来才知道最大值不能超过1.7G),再启动的时候报:

ORA-27123: unable to attach to shared memory segment
Linux Error: 22: Invalid argument


这时候用sysdba登录,已经不能修改参数了。经过疯狂Google后,用以下方法解决:

1、用另外的pflie启动数据库

startup pfile='${ORACLE_BASE}/admin/***(sid)/pfile/init***(sid).ora'

pfile文件去上面那个目录找找,一般会有,没有的话去别的机器上面拷一个回来,没有,我就不知道该怎么搞了,你也别看下去了。

2、生成spfile。这个时候数据库是正常跑起来了,但是还改不了参数的,会报一下错误:
ORA-32001: write to SPFILE requested but no SPFILE specified at startup

正常用startup启动也还是不行的,所以要先生成spfile。用这个命令:
create spfile from pfile='${ORACLE_BASE}/admin/***(sid)/pfile/init***(sid).ora'


3、关掉它,再起来。这步不知道是不是一定要的,习惯性喜欢重启(最有效的排障手段呀)。
shutdown immediate;
startup;

4、现在正常了,改改参数吧,这次可别改错了。
alter system set sga_max_size=1500M scope=spfile;


没问题,数据库可以继续跑。有问题只能说各有各的不幸,慢慢Google吧。

据说pfile是不能直接编辑的,我编辑过没跑起来,当然我不确定是因为我编辑过所以不行了,但是推荐还是别改它了。

搞数据库的新手,郁闷得很,但是这次还是学到一点点东西:
1、数据库可以在startup的时候指定一个pfile(其实我不是很明白pfile是什么来的,不过我知道它很重要,下次一定备份一个能用的).
2、pfile可以通过spfile建一个。用下面的命令(路径自己指定):
create pfile='/opt/oracle/init.ora' from spfile;

3、通过指定pfile启动数据库后,要切到spfile(不然你每次指定pfile启动吧,不过其实spfile是什么?)。用下面的命令:
create spfile from pfile='${ORACLE_BASE}/admin/***(sid)/pfile/init***(sid).ora'