新浪博客

ORA-00845,ORA-00844,ORA-00851:MEMORY_TARGET,PGA,SGA

2024-10-23 16:51阅读:
Memory_max_target 和 SGA PGA的关系
1.如果想开启AMM(auto memory management),需要设置memory_target,
想要设置该值就必须先设置memory_max_target,memory_target<=memory_max_target
2.memory_max_target/sga_max_size是静态参数, memory_target/sga_target/pga_aggregate_target为动态参数,
sga_max_size 为sga_target的最大值
3.设置memory_target后,sga_target+pga_aggregate_target=memory_target 且都为动态值,最大值为memory_target
启动数据库出现如下问题
SQL> startup
ORA-00844: Parameter not taking MEMORY_TARGET into account
ORA-00851: SGA_MAX_SIZE 734003200 cannot be set to more than MEMORY_TARGET 415236096.
ORA-00845,ORA-00844,ORA-00851:MEMORY_TARGET,PGA,SGA

如上问题原因 SGA_MAX_SIZE 比 MEMORY_TARGET 大导致


解决方法:
1.[oracle@PETER /]$ sqlplus / as sysdba
2. 通过spfile创建pfile,会覆盖原始存在的pfile文件数据
SQL> create pfile='/u01/oracle11g/product/11.2.0/dbs/init.ora' from spfile;
再去vi打开pfile文件init.ora,去修改memory_target参数,如上问题修改了 memory_target=815236096 比SGA_MAX_SIZE大就可以
3.再通过pfile文件重新创建spfile文件
SQL> create spfile from pfile='/u01/oracle11g/product/11.2.0/dbs/init.ora';
4.SQL> startup 能正常启动


调整sga的顺序,先调整tmpfs大小,再调整MEMORY_TARGET大小,最后调整SGA,
保证tmpfs>memory_target>sga+pga
---------------------------------------------------------------------------------
1.修改memory_max_target后,重启数据库报下图问题
ORA-00845,ORA-00844,ORA-00851:MEMORY_TARGET,PGA,SGA
在oracle 11g中新增的内存自动管理的参数Memory_target,它能自动调整SGA和PGA,
这个特性需要用到/dev/shm共享文件系统,而且要求/dev/shm必须大于Memory_target,
如果/dev/shm比Memory_target小就会报错。
解决方案
1.初始化参数Memory_target或Memory_max_target不能大于共享内存(/dev/shm),
为了解决这个问题,可以增大/dev/shm


在/etc/fstab里面,2个修改地方,
一是swap后面修改成defaults,size=11G,
二是tmpfs后面修改成defaults,size=11G,修改完,如下所示
ORA-00845,ORA-00844,ORA-00851:MEMORY_TARGET,PGA,SGA

修改完后,需要重新挂载一下,才能生效:
[root@PETER /]# mount -o remount,size=11G /dev/shm


再次启动数据库,就不会报错了,正常启动:
ORA-00845,ORA-00844,ORA-00851:MEMORY_TARGET,PGA,SGA

我的更多文章

下载客户端阅读体验更佳

APP专享