ITPub博客

首页 > 数据库 > Oracle > 修改sga_max_size大小后重启数据库报 ORA-00851

修改sga_max_size大小后重启数据库报 ORA-00851

原创 Oracle 作者:warren20 时间:2015-03-06 00:00:46 0 删除 编辑

今天看到网上的一个评论,就做了一个实验:

step1: 修改 db_cache_size 的大小, 报如下错吴

           SQL>  alter system set db_cache_size=350M scope=both;

       

step2: 修改sga_max_size的大小

     SQL>  alter system set sga_max_size=850M scope=spfile;

    

step3: 关闭数据库    

    SQL> shutdown immediate;

step4:  启动数据库,错误来了:

SQL> startup

    

    提示 SGA_MAX_SIZE 的大小比 MEMORY_TARGET 大,所以启动不了

    在网上搜索可一下,觉的这个解释比较贴切:

memory_target是oracle11g用于自动内存管理的,它与memory_max_target是成对出现的,是11g内存管理上的新特 性,这一特性的出现使得pga+sga做为整体内存使用被一致的纳入自动管理范畴。简而言之memory_target就是整个实例所能使用的内存大小, 包括PGA和SGA的整体大小,在MEMORY_TARGET的内存大小之内,PGA和SGA所用的内存可以根据当前负载情况自动相互转换。 

如果当初始设定的MEMORY_TARGET的内存不够当前数据库使用的时候,Oracle11g还提供了另外一个初始化参数 MEMORY_MAX_TARGET,当原始设定的内存不够使用的时候,可以手工来动态 调节MEMORY_TARGET的大小,但是不允许超过MEMORY_MAX_TARGET的值。  

由此可见sga的尺寸是不能大于memory_target的。所以我们要调整memory_target和memory_max_target的值高于sga_max_size。


step5:解决SGA_MAX_SIZE 的大小比 MEMORY_TARGET 大导致数据无法启动的错误

由于数据库无法启动,只能调编辑参数文件:

SQL> create pfile='/tmp/pfile20150115.txt' from spfile;

[oracle@REDHAT6 tmp]$ vi/tmp/pfile20150115.txt 

        

将memory_target的值修改成1.2G(由于是本地虚拟机,所以比较小))

即:memory_target=1257889280

备份以前的参数文件

        

恢复参数文件:

SQL> create spfile from pfile='/tmp/pfile20150115.txt';

    

启动数据库:

    

OK,到此结束,数据库正常启动。

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

请登录后发表评论 登录
全部评论

注册时间:2015-03-03

  • 博文量
    56
  • 访问量
    376702