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.

   

更多参考

有关Oracle RAC请参考
     使用crs_setperm修改RAC资源的所有者及权限     使用crs_profile管理RAC资源配置文件     RAC 数据库的启动与关闭     再说 Oracle RAC services     Services in Oracle Database 10g     Migrate datbase from single instance to Oracle RAC     Oracle RAC 连接到指定实例     Oracle RAC 负载均衡测试(结合服务器端与客户端)     Oracle RAC 服务器端连接负载均衡(Load Balance)     Oracle RAC 客户端连接负载均衡(Load Balance)     ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora)
     ORACLE RAC 监听配置 (listener.ora tnsnames.ora)     配置 RAC 负载均衡与故障转移     CRS-1006 , CRS-0215 故障一例 
     基于Linux (RHEL 5.5) 安装Oracle 10g RAC
     使用 runcluvfy 校验Oracle RAC安装环境

有关Oracle 网络配置相关基础以及概念性的问题请参考:
     配置非默认端口的动态服务注册
     配置sqlnet.ora限制IP访问Oracle     Oracle 监听器日志配置与管理
     设置 Oracle 监听器密码(LISTENER)     配置ORACLE 客户端连接到数据库

有关基于用户管理的备份和备份恢复的概念请参考
     Oracle 冷备份     Oracle 热备份     Oracle 备份恢复概念     Oracle 实例恢复     Oracle 基于用户管理恢复的处理     SYSTEM 表空间管理及备份恢复     SYSAUX表空间管理及恢复     Oracle 基于备份控制文件的恢复(unsing backup controlfile)

有关RMAN的备份恢复与管理请参考
     RMAN 概述及其体系结构     RMAN 配置、监控与管理     RMAN 备份详解     RMAN 还原与恢复     RMAN catalog 的创建和使用     基于catalog 创建RMAN存储脚本     基于catalog 的RMAN 备份与恢复     RMAN 备份路径困惑     使用RMAN实现异机备份恢复(WIN平台)     使用RMAN迁移文件系统数据库到ASM     linux 下RMAN备份shell脚本     使用RMAN迁移数据库到异机

有关ORACLE体系结构请参考
     Oracle 表空间与数据文件     Oracle 密码文件     Oracle 参数文件     Oracle 联机重做日志文件(ONLINE LOG FILE)     Oracle 控制文件(CONTROLFILE)     Oracle 归档日志     Oracle 回滚(ROLLBACK)和撤销(UNDO)     Oracle 数据库实例启动关闭过程     Oracle 10g SGA 的自动化管理     Oracle 实例和Oracle数据库(Oracle体系结构)

ORA-000845 与 /dev/shm(tempfs)的更多相关文章

  1. oracle对/dev/shm的使用

    查看共享内存打开的文件数 [root@db2 ~]# lsof -n | grep /dev/shm | wc -l 34693 共享内存中总共文件数 [root@db2 ~]# ls -l /dev ...

  2. 浅析/dev/shm

    一,/dev/shm 概念 /dev/shm 是一个tmpfs文件系统,临时文件系统,是基于内存的文件系统,也就是说/dev/shm中的文件是直接写入内存的,而不占用硬盘空间. 在Centos和Red ...

  3. Linux下的tmpfs文件系统(/dev/shm)

    转自:http://www.2cto.com/os/201411/354888.html 介绍 /dev/shm/是一个使用就是tmpfs文件系统的设备,其实就是一个特殊的文件系统.redhat中默认 ...

  4. linux下的/dev/shm目录

    linux下的/dev/shm目录 linux中/dev目录下一般都是一些设备文件,例如磁盘.内存.摄像头等. /dev/shm这个目录是linux下一个利用内存虚拟出来的一个目录,这个目录中的文件都 ...

  5. 巧用linux服务器的/dev/shm/,如果合理使用,可以避开磁盘IO不给力,提高网站访问速度。

    巧用linux服务器的/dev/shm/ 巧用linux服务器的/dev/shm/,如果合理使用,可以避开磁盘IO不给力,提高网站访问速度. 首先让我们认识一下,什么是tmpfs和/dev/shm/? ...

  6. dev/shm time in linux

    统计文件夹大小: du -hx --max=1 : du -sk :du -hsc 重新组织行分隔符进行显示: echo "abc,dd,bach,dong,jing,shang,china ...

  7. linux概念之/dev/shm

    Linux默认(CentOS)/dev/shm分区的大小是系统物理内存的50%, 虽说使用/dev/shm对文件操作的效率会高很多,但是目前各发行软件中却很少有使用它的(除了前面提到的Oracle), ...

  8. /dev/shm

    /dev/shm/是linux下一个特殊的目录,因为这个目录不在硬盘上,而是在内存里. /dev /shm/需要注意的一个是容量问题,在linux下,它默认最大为内存的一半大小,使用df -h命令可以 ...

  9. 用linux服务器下的/dev/shm/来释放磁盘的压力

    巧用linux服务器下的/dev/shm/来释放磁盘的压力 浏览:646 | 更新:2013-06-18 18:08 | 标签: 磁盘 tmpfs是Linux/Unix系统上的一种基于内存的文件系统. ...

随机推荐

  1. .NET(c#)new关键字的三种用法

    前几天去家公司面试,有一道这样的题:写出c#中new关键字的三种用法,思前想后挖空心思也只想出了两种用法,回来查了下msdn,还真是有第三种用法:用于在泛型声明中约束可能用作类型参数的参数的类型,这是 ...

  2. 项目重新部署后报The attribute required is undefined for the annotation type XmlElementRef

    在另外一台机器上部署项目,项目导进Eclipse中发现有异常 public class BooleanFeatureType extends FeatureBaseType{ @XmlElementR ...

  3. VMWare虚拟机下为Ubuntu 12.04.1配置静态IP_转

    转自:http://www.cnblogs.com/objectorl/archive/2012/09/27/vmware-ubuntu-nat-static-ip-settings.html 背景在 ...

  4. Android Framework框架_转

    选自<Android内核剖析> Framework定义了客户端组件和服务端组件功能及接口.包含3个主要部分:服务端,客户端和Linux驱动. (一)服务端 服务端主要包含两个重要类,分别是 ...

  5. MAC下Android的Eclipse开发环境的搭建

    一.Eclipse的下载 到网站:http://www.eclipse.org/downloads/ 上,由于我们是用Java开发的所以步骤如下: 1.  找到"Eclipse IDE fo ...

  6. [转载]Oracle修改表空间大小

    Oracle修改表空间大小 使用Oracle10g建立数据库后,向数据库中导入了部分数据,第二天继续向数据库中导入数据表时发生错误: 查了很多资料发现原来是Oracle表空间限制,导致无法继续导入数据 ...

  7. HTML是什么

    HTML(Hyper Text Mark-up Language )即超文本标记语言,是 WWW 的描述语言,由 Tim Berners-lee提出.设计 HTML 语言的目的是为了能把存放在一台电脑 ...

  8. java io读书笔记(2)什么是stream

    什么是stream?stream就是一个长度不确定的有序字节序列. Input streams move bytes of data into a Java program from some gen ...

  9. tableview隐藏多余分割线

    - (void)setExtraCellLineHidden: (UITableView *)tableView{ UIView *view =[ [UIView alloc]init]; view. ...

  10. zabbix监控路由器所有接口信息

    zabbix监控路由器所有接口信息 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 1.首先在服务器端安装snmp工具 [root@bogon yinzhengjie]# yum - ...