管理oracle11g内存设置 解决ora-02097 ora-00838 ora-00845报错问题

Oracle对内存的管理的 优化从未间断,从8i到11g不断地提出新的管理概念。每个本版都对内存管理进行了简化:
1、8i->9i:PGA的自动管理;
2、9i->10g:SGA的自动管理;
3、10g->11g:MEMORY(SGA+PGA)的自动管理。

在11g中oracle引入了自动化内存管理(Automatic Memory Management)概念,仅用两个参数就能完成oracle的内存管理工作。DBA的工作看来又要轻松不少了,看看两个参数:

MEMORY_TARGET:oracle所能使用的最大内存,该参数可以动态调整。

MEMORY_MAX_TARGET:MEMORY_TARGET参数所能动态设定的最大值,不能动态调整,需要重启数据库

注:oracle的内存管理方式可以根据本版向下兼容的,11g可以实现10g,9i,8i时的管理方式。


SQL> show parameter sga
NAME         TYPE VALUE
---------------- ----------- --------------
lock_sga      boolean     FALSE
pre_page_sga   boolean     FALSE
sga_max_size   big integer   12864M
sga_target    big integer    0


SQL> show parameter pga
NAME             TYPE    VALUE
--------------------  ----------- ----------
pga_aggregate_target big integer  0


SQL> show parameter mem
NAME                TYPE VALUE
------------------------- ----------- -----------
hi_shared_memory_address  integer  0
memory_max_target     big integer 12864M
memory_target        big integer 12864M
shared_memory_address    integer  0


可以总结一下MEMORY之间互相制约的顺序;

memory_max_target==>memory_target===>sga_max_size==>sga_target 

此外, Memory_target还有下面的这个:

Memory_Target = SGA_Target + pga_aggregate_target


案例一:

问题1、修改了sga_target/pga_aggregate_target的值,导致他们之和大于memory_target;

问题2、修改memory_target值,导致其小于sga_target/pga_aggregate_target之和,也会报错;

SQL>startup 启动数据库 报错:

ORA-02097: parameter cannot be modified because specified value is invalid

ORA-00838: Specified value of MEMORY_TARGET is too small, needs to be at least 4016M

问题概括:Memory_Target 小于 SGA_Target与 pga_aggregate_target之和


解决方法:

上述参数的配置信息都存放在$ORACLE_HOME/dbs/spfile.ora文件中,但是该文件为二进制文件,不可以直接修改;只能通过SQL语句创建出它的副本pfile文件进行修改vi/vim,然后替换即可。(此时DB已经被shutdown了,无法startup,但是仍可由spfile来创建pfile)


第一种解决方法: 还原先前状态,不做修改。

1)SQL>create pfile from spfile;

2)[oracle@ORACLE247 dbs]$ vim $ORACLE_HOME/dbs/initorcl.ora

3)删除行 *.sga_target=***** 

4)SYS> create spfile from pfile;

5)SYS> startup 即可


第二种方法,将sga_target修改为一个正确的值:

1)创建pfile初始化文档;

2)修改 *.sga_target=X (X等于MEMORY_TARGET的值减去PGA的值(大于10M,PGA最小值));

3)由修改后的PFILE创建SPFILE;

4)启动DB即可;


第三种方法,修改增大 *.memory_target的值,

1)与第二种方法类似,创建pfile初始化文档;

2)修改增大 *.memory_target=Y(Y值是不能大于/dev/shm tmpfs共享文件系统的大小,否则会报案例二的错);

[root@ORACLE247 ~]# df -h |grep /dev/shm
tmpfs                  16G  8.2G  7.5G  53% /dev/shm


案例二:问题:设置的Memory_Target值过大

SQL>startup 启动数据库 报错:

ORA-00845: MEMORY_TARGET not supported on this system


问题原因:物理内存大小>=Memory_Target大小设置>=/dev/shm tmpfs共享文件系统的大小


解决方法:

方法一:参照案例一中的方法三,修改Memory_Target大小;


方法二:修改/dev/shm 的大小,修改方法又有两种:

1)[root@ORACLE247 ~]# cat /etc/fstab | grep tmpfs 

这个是静态修改,需要重启系统才能生效。

2)[root@ORACLE247 ~]# mount -o remount,size=4G /dev/shm

这是通过重新挂载来修改其大小,不需要重启。

猜你喜欢

转载自blog.csdn.net/karloo/article/details/52156070