Oracle11g新引入的memory_target以及ORA-00845: MEMORY_TARGET not supported on this system的产生

Oracle9i引入pga_aggregate_target,可以自动对PGA进行调整;

Oracle10引入sga_target,可以自动对SGA进行调整。

Oracle11g则对这两部分进行综合,引入memory_target,可以自动调整所有的内存,这就是新引入的自动内存管理特性。

 

 

下面我们通过以下的几个命令来让大家清楚memory_target 的设置与PGASGA的关系:

 

SQL> alter system set memory_target=200m scope=spfile;
System altered.
SQL> alter system set sga_target=0 scope=spfile;
System altered.
SQL> alter system set pga_aggregate_target=0 scope=spfile;
System altered.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup
ORACLE instance started.

Total System Global Area  209235968 bytes
Fixed Size                  1298920 bytes
Variable Size             150998552 bytes
Database Buffers           54525952 bytes
Redo Buffers                2412544 bytes
Database mounted.
Database opened.

设置memory_target参数后,实际上Oracle会自动设置并调整以下两个参数来分配SGAPGA的内存,这和Oracle10g自动设置sga_target后分配db_cache_sizeshared_pool_size的机制是一样的


SQL> select a.ksppinm name,b.ksppstvl value
  2  from x$ksppi a,x$ksppcv b
  3  where a.indx=b.indx
  4  and (a.ksppinm like '%sga_target%'
  5   or a.ksppinm like '%pga_aggregate_target%');



NAME                                           VALUE
---------------------------------------- ------------------------------
sga_target                                   0
__sga_target                                125829120
pga_aggregate_target                     0
__pga_aggregate_target                 79691776

 

 

下面我们了解一下ORA-00845的由来与解决方案:


如果memory_max_target/memory_target设置过大,可能导致instance无法启动,报ORA-00845错误
SQL> alter system set memory_max_target=300m scope=spfile;
System altered.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORA-00845: MEMORY_TARGET not supported on this system

这个错误有点误导,实际上这并不是说该平台版本上不支持AMM特性,只是设置的memory_max_target超过了系统中设置的share memory/dev/shm)而已。在Oracle11g for linux中似乎使用了一种新的机制来管理共享内存段,而不是传统的sys  /dev/shm了。在alert.ora中可以找到更准确的错误描述

 

 

解决这个问题的办法之一是增加tmpfs文件系统的容量。

修改/etc/fstabtmpfs对应的行,

将原来的  tmpfs  /dev/shm  tmpfs  defaults   0   0

改成      tmpfs  /dev/shm  tmpfs  defaults,size=1024M   0   0 ,这样tmpfs增大为1G

size参数也可以用G作单位:size1G

重新mount /dev/shm使之生效:

# mount -o remount /dev/shm

马上可以用"df -h"命令检查变化。

 

 

修改实例的MEMORY_TARGET参数。(这个在数据库关着的时候是行不能通的,用上面的那种比较彻底)

这个方法用alter system set memory_target=200M;

本文参考于CSDN博客 http://blog.csdn.net/guwu9528/archive/2008/09/11/2915164.aspx

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值