ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 修改PGA和SGA大小参数引起的启动故障解决

修改PGA和SGA大小参数引起的启动故障解决

原创 Linux操作系统 作者:realkid4 时间:2011-12-28 10:24:06 0 删除 编辑

几天前,一个朋友遇到一个故障问题,来电咨询笔者。故障解决后,他将故障解决记录和相关资料发给笔者。虽然不是什么很大的故障点,但是笔者觉得还是一个很好的案例积累。在征得朋友的同意后,就写成此文。

 

1、故障发生

 

朋友专注的是一个数据仓库系统的开发。由于种种原因,目前测试只能在一台Window 2003为服务器的PC上进行。数据库服务器为Oracle 10gR2,机器内存为4G

 

在测试一个大作业时候,朋友发现运行时间过长,超过了容忍范围。所以,检查相应配置。之后,他发现Oracle SGA的空间只有1GPGA设置也只有256M。他想通过扩大这两个参数来增加可使用的内存资源。于是问题发生了。

 

他将SGA_TARGET参数调节为2G以上,PGA相应值也进行了调整。重启数据库后,启动出错。

 

 

SQL> startup

ORA-00093: pga_aggregate_target must be between 10M and 4096G-1

SQL> show parameter pga_agg

ORA-01034: ORACLE not available

 

 

2、问题分析和解决

 

从现象上看,应该是参数文件信息修改导致启动实例过程失败。我们说Oracle启动是分为三个阶段,分别为unmountmountopen

 

Unmount阶段进行的主要是实例Instance启动,后台进程初始化和共享内存分配。同时,定位到controlfile位置,为下一步mount阶段做准备。

 

SGAPGA分配,是定义在参数文件spfile上的。所以在startup unmount阶段,数据库启动就已经失败了。

 

那么,我们解决问题的关键就在两个问题上,首先需要找出之前使用的参数数值(上次正常启动使用的),其次就是将错误的PGA/SGA值修改掉。

 

幸好朋友之前为了发现性能问题,生成过一次AWR报告。在AWR报告的最后部分,是包括init参数信息的。

 

 

其中就包括了被修改的参数原有取值。

 

另一个问题就是关于spfile的修改。Oracle目前采用的参数文件都是二进制格式的spfile。只有在预设位置的spfile没有的情况下,Oracle才会去寻找pfile格式参数文件。

 

那么,我们首先需要将spfile转化为pfile,才能进行修改。

 

 

SQL> create pfile = 'E:\oracle\product\10.2.0\db_1\dbs\tmp_init.ora' from spfile;

文件已创建。

 

 

用编辑工具可以打开tmp_init.ora文件。将其修改为正确的取值。

 

 

*.open_cursors=300

*.pga_aggregate_target=268435456

*.processes=200

*.remote_login_passwordfile='EXCLUSIVE'

*.sessions=60

*.sga_max_size=1073741824

*.sga_target=1073741824

*.undo_management='AUTO'

*.undo_tablespace='UNDOTBS1'

 

 

最后保存tmp_init.ora文件。使用这个文件启动数据库进入unmount阶段。

 

 

SQL> startup nomount pfile='E:\oracle\product\10.2.0\db_1\dbs\tmp_init.ora'

ORACLE 例程已经启动。

 

Total System Global Area 1073741824 bytes

Fixed Size                  1250044 bytes

Variable Size             276827396 bytes

Database Buffers          788529152 bytes

Redo Buffers                7135232 bytes

 

 

之后尝试进入mountopen阶段。

 

 

SQL> alter database mount;

数据库已更改。

 

SQL> alter database open;

数据库已更改。

 

 

应用访问故障消失。但是,我们当前启动时使用ASCII格式的pfile参数,要将其更新到spfile中,才能算最后解决问题。

 

 

SQL> create spfile from pfile='E:\oracle\product\10.2.0\db_1\dbs\tmp_init.ora';

文件已创建。

 

 

为确保没有问题,重新启动一下数据库。

 

 

SQL> conn sys/sys@sdno as sysdba

已连接。

SQL> shutdown immediate;

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup

ORACLE 例程已经启动。

 

Total System Global Area 1073741824 bytes

Fixed Size                  1253124 bytes

Variable Size             100663548 bytes

Database Buffers          964689920 bytes

Redo Buffers                7135232 bytes

数据库装载完毕。

数据库已经打开。

SQL>

 

 

故障解决。

 

最后,我们可以思考一下朋友的系统命名有4G内存,为什么不让设置2GSGA空间?

 

笔者猜想,可能还是与服务器操作系统版本有关。32bit系统下的Oracle,虽然系统可以访问到最多4G的内存,但是SGA存在1.7G的限制。虽然网络上有关于Windows2003突破1.7G限制的方法,但是并不是推荐使用的。

 

所以,笔者建议朋友去检查一下操作系统的位数版本。如果是32bit的,可以考虑提升软件应配置,安装为64bitOS。这样就可以更有效的使用内存。

 

 

3、结论

 

Oracle数据库是一个复杂灵活的系统,相关的知识点多不胜数。这个故障虽小,但是却集合了不少的知识点。故障场景也是我们经常会遇到的,记录下来待有需要的朋友待查。

未命名.JPG

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17203031/viewspace-714049/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
求道~

注册时间:2010-11-30

  • 博文量
    545
  • 访问量
    7566680