前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ORA-000845 与 /dev/shm(tempfs)

ORA-000845 与 /dev/shm(tempfs)

作者头像
Leshami
发布2018-08-13 15:19:24
4140
发布2018-08-13 15:19:24
举报
文章被收录于专栏:乐沙弥的世界

    MEMORY_TARGET参数在Oracle 11g被引进,主要是用于控制Oracle对于系统内存的使用,首次将SGA与PGA整合到一起实现自动管理。一旦设置了MEMORY_TARGET参数值,Oracle会根据需要自动调整SGA与PGA以合理的分配及使用内存。但如果MEMORY_TARGET设置不当,就容易引起ORA-00845,因为MEMORY_TARGET与/dev/shm(tempfs)息息相关,本文即是对由此引发问题的描述。

1、故障现象 [oracle@linux1 catadb]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Wed Nov 13 21:38:41 2013

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to an idle instance.

idle> startup nomount; ORA-00845: MEMORY_TARGET not supported on this system

2、故障分析 [oracle@linux1 trace]$ oerr ora 00845 00845, 00000, "MEMORY_TARGET not supported on this system" // *Cause: The MEMORY_TARGET parameter was not supported on this operating system or /dev/shm was not sized correctly on Linux. // *Action: Refer to documentation for a list of supported operating systems. Or, size /dev/shm to be at least the SGA_MAX_SIZE on each Oracle instance running on the system.

#从上面的描述可知,/dev/shm的大小应该至少是当前系统每一个实例的SGA_MAX_SIZE,个人认为这个描述不是很准确

#下面查看告警日志 [oracle@linux1 trace]$ more alert_catadb.log  Wed Nov 13 21:38:48 2013 Starting ORACLE instance (normal) WARNING: You are trying to use the MEMORY_TARGET feature. This feature requires the /dev/shm file system to be mounted for at least 1073741824 bytes. /dev/shm is either not mounted or is mounted with available space less than this size. Please fix this so that MEMORY_TARGET can work as expected. Current available is 901312512 and used is 161312768 bytes. Ensure that the mount point is /dev/shm for this directory. memory_target needs larger /dev/shm

#告警日志给出了比较精确的描述,/dev/shm至少是1GB,因为我们的参数文件中定义的MEMORY_TARGET为1GB #同时也给出了/dev/shm当前已使用的和剩余空间的大小。剩余空间大小901312512不够1GB,因此需要考虑增加dev/shm或减少MEMORY_TARGET的值

#延伸思考 /dev/shm实际上就是对应到tmpfs,也可以称之为临时文件系统(不是块设备)。有点类似于Oracle数据库的临时表空间一样啊,用于加速和优化系统。 我们可以通过df -h来查看到该加载点,该目录并不位于磁盘,而是在内存里,默认情况下,其大小为当前内存的一半,该文件系统会被自动加载。 /dev/shm的分配是按需分配,如我们前面的错误描述,当前分配了1GB,实际使用了154MB,剩余860MB。也就是说这860MB依旧可分配给其他应用程序。 使用tmps文件系统有一些优点,可以实现动态文件系统大小,其次是由于驻留内存,可以闪电加速。重启后被清空,也就是相当于闪存。

#当前系统的/dev/shm [oracle@linux1 trace]$ df -h | grep shm           tmpfs                1014M  154M  860M  16% /dev/shm [oracle@linux1 ~]$ ls -hltr /dev/shm total 154M -rw-r----- 1 grid oinstall 4.0M Nov 14 11:06 ora_+ASM1_2686978_68 -rw-r----- 1 grid oinstall 4.0M Nov 14 11:06 ora_+ASM1_2686978_39 -rw-r----- 1 grid oinstall 4.0M Nov 14 11:06 ora_+ASM1_2686978_40 -rw-r----- 1 grid oinstall 4.0M Nov 14 11:06 ora_+ASM1_2686978_41 -rw-r----- 1 grid oinstall 4.0M Nov 14 11:06 ora_+ASM1_2686978_42     ............... -rw-r----- 1 grid oinstall 4.0M Nov 14 11:47 ora_+ASM1_2686978_66 -rw-r----- 1 grid oinstall 4.0M Nov 14 11:47 ora_+ASM1_2686978_52 -rw-r----- 1 grid oinstall 4.0M Nov 14 11:47 ora_+ASM1_2686978_67   

3、故障解决 从上面的情形可知,我们可以通过增加tempfs文件系统的大小或者是适当减少MEMORY_TARGET的值来解决 a、调整参数memory_target [oracle@linux1 ~]$ grep memory $ORACLE_HOME/dbs/initcatadb.ora memory_target=521M [oracle@linux1 ~]$ export ORACLE_SID=catadb [oracle@linux1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Thu Nov 14 11:51:57 2013

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to an idle instance.

idle> startup nomount; ORACLE instance started.

Total System Global Area  548216832 bytes Fixed Size                  1337804 bytes Variable Size             331351604 bytes Database Buffers          209715200 bytes Redo Buffers                5812224 bytes idle> shutdown abort; ORACLE instance shut down.

b、增加tempfs大小 [oracle@linux1 ~]$ grep memory $ORACLE_HOME/dbs/initcatadb.ora memory_target=1G #下面的方法用于临时调整tempfs的大小,重启后失效 #即将tempfs的大小调整到1200M,inode数量调整到1000000,此时大约可可存放一百万个小文件 [root@linux1 ~]# mount -o size=1200M -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm [root@linux1 ~]# df -h | grep shm tmpfs                 1.2G  154M  1.1G  13% /dev/shm [root@linux1 ~]# su - oracle [oracle@linux1 ~]$ export ORACLE_SID=catadb [oracle@linux1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Thu Nov 14 12:04:02 2013

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to an idle instance.

idle> startup nomount; ORACLE instance started.

Total System Global Area 1071333376 bytes Fixed Size                  1341312 bytes Variable Size             620759168 bytes Database Buffers          444596224 bytes Redo Buffers                4636672 bytes

# Author : Leshami #  Blog  : http://blog.csdn.net/leshami

#永久增加tempfs的大小,直接修改/etc/fstab vi /etc/fstab tmpfs /dev/shm tmpfs defaults,size=2048M 0 0 修改之后remount mount -o remount /dev/shm

4、Doc ID 1399209.1 Starting with Oracle Database 11g, the Automatic Memory Management feature requires more shared memory (/dev/shm) and file descriptors. The size of the shared memory must be at least the greater of the MEMORY_MAX_TARGET and MEMORY_TARGET parameters for each Oracle instance on the computer. If the MEMORY_MAX_TARGET parameter or the MEMORY_TARGET parameter is set to a nonzero value, and an incorrect size is assigned to the shared memory, it results in an ORA-00845 error at startup. On Linux systems, if the operating system /dev/shm mount size is too small for the Oracle system global area (SGA) and program global area (PGA), then you encounter the following error:

The cause of this error is an insufficient /dev/shm allocation. The total memory size of the SGA and PGA, which sets the initialization parameter MEMORY_TARGET or MEMORY_MAX_TARGET, cannot be greater than the shared memory file system (/dev/shm) on your operating system.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013年11月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档