一次误修改sga_max_size值过大后导致数据库无法启动的解决方法

 先讲一下我的环境:

数据库:Oracle 9.2.0.1 for Windows
操作系统:Windows 2003 Server
硬件:2*至强E5310     4GB内存

  今天我在做数据库操作的时候,发现对400多万条的数据进行一次select count(*)操作居然用了60多秒,而在另一台小型机上对同样数据的表进行相同的select count(*)操作时只要1秒。所以我到网上查了些资料,有人说可以修改sga_max_size值。

  于是,我把Oracle的sga_max_size修改为2G,修改完后Oracle要求我重启数据库,我就按要求重启了。

  结果,惨剧发生了:数据库无法正常启动。当时我就傻眼了,相关的应用都被逼中断了,过了一会就有人打电话来问怎么回事了。

  在网上搜了一遍,没找到解决的方法,后来就去http://www.itpub.net论坛发贴问高手了。那里的高手挺热心的,很快就有了回复,http://www.itpub.net/thread-1029045-1-1.html

  在得到回复之前,我在网上看到有人说sga_max_size的值最大只能设到1.7G,超过了Oracle就起不来了。哎,好后悔啊,后悔我太贪心了。

  接着,我看到在硬盘的<Oracle安装目录>/Ora92/database下有个spfileXXX.ora,用记事本打开后,前面的一段是乱码,但在后面有sga_max_size=XXXXXX的字符串。当时我以为把这个参数后面的值改一下就可以了。于是我就把sga_max_size的值改小成1G,并用记事本保存了一下。然后重启服务器,结果数据库还是没有启动起来。

  我回到论坛的贴子,发现有好几个人进行了回复。

  有人回答说在<Oracle安装目录>/admin/XXX/pfile下建pfile文件。我按照方法在此目录下建了一个init.ora文本文件,在文件里加了两行:
  SPFILE='D:/Oracle/ora92/database/spfileXXX.ora'
        sga_max_size=1228m

  然后在sqlplus里运行:startup pfile='D:/Oracle/Admin/XXX/pfile/init.ora'

  本来以为可以运行了,但最终结果还是没有成功启动数据库。

  接着有人说不能修改spfileXXX.ora文件,不然会被破坏文件结构。这时,我开始暗自庆幸自己在修改spfileXXX.ora文件之前先做了个备份。于是,我把备份的那个文件恢复出来,然后再运行startup pfile='D:/Oracle/Admin/XXX/pfile/init.ora',这时看到“数据库已打开”、“数据库已启动”字样的我终于松了一口气,Oracle终于正常了,我又看到了原来的那些数据。

  到这时,我还以为数据库已经恢复正常,于是我把服务器重启了一下,想看看数据库是否能正常自启动。

  结果呢?电话又来了,不断有人问:数据库是不是又不正常了?

  查了一下原因,发现spfile里的那个sga_max_size的值还是原来的2G,晕倒,数据库正常运行后忘了保存sga_max_size的值了。

  于是,我按照上面的方法重新运行startup pfile='D:/Oracle/Admin/XXX/pfile/init.ora',本以为数据库能正常启动,但事与愿违,系统提示“shared memory ... exist”。接着无论我怎么改init.ora这个pfile文件,数据库就是起不来。

  这是怎么回事?刚才还能正常解决问题的方法怎么行不通了?经过反复思考,想起刚才成功解决问题前,我曾修改过spfile文件破坏了其文件结构,而这次在启动前spfile文件一直是正常的文件结构。是不是因为这次正常的spfile文件导致了数据库的某些进程一直在运行而出现“shared memory ... exist”错误提示的出现?

  想到这,我把正常的spfile文件备份了一份,然后对spfile文件进行了修改并保存。重启服务器,把备份的正常spfile文件恢复,接着运行startup pfile='D:/Oracle/Admin/XXX/pfile/init.ora'。

  哈哈,终于又看到“数据库已经启动”的提示,高兴之余不忘了把数据库的sga_max_size参数的正常值保存下来:

        alter system set sga_max_size=1170m scope=spfile;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞天神笔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值