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. SQL Server 视图修改后有错怎么办?

    sp_refreshview 视图名:刷新指定视图 spsqlrefreshallviews:刷新全部视图

  2. iOS 开发进程与线程

    进程(process)是一块包含了某些资源的内存区域.操作系统利用进程把它的工作划分为一些功能单元.进程中所包含的一个或多个执行单元称为线程(thread).进程还拥有一个私有的虚拟地址空间,该空间仅 ...

  3. Insert BLOB && CLOB from PL/SQL and JDBC

    For PL/SQL 1)Create Directory Where BLOB resides. create or replace directory temp as '/oradata2'; - ...

  4. JQuery:JQuery语法、选择器、事件处理

    JQuery语法:   通过 jQuery,您可以选取(查询,query) HTML 元素,并对它们执行"操作"(actions). 一.语法:jQuery 语法是通过选取 HTM ...

  5. Spring 3.x jar 包详解 与 依赖关系(转)

    以下的内容我会持续更新(当然是我有新发现的时候); 以下内容是我在网上搜索.整理.修改的而成的内容.由于很多内容都是转载了,无法追溯到源头,因此无法一一对原作者进行道谢. 这几天,我查阅大量的官方的文 ...

  6. 1.Oracle数据库概述

    Oracle数据库概述 1.1Oracle结构图 1.1如何访问数据库 a.本机直接通过sock(套接字)方式访问  IPC UDP协议 ,不需要网络 b.通过tcp建立连接到oracle服务器 1. ...

  7. Linux绑定双网卡

    Linux绑定双网卡 1. 配置参数文件 版本在centos6以下在/etc/modproe.conf文件中配置,版本是centos6.x或以上在/etc/modproe.d/目录下配置. 2.    ...

  8. 图像分割之(五)活动轮廓模型之Snake模型简介

    在"图像分割之(一)概述"中咱们简单了解了目前主流的图像分割方法.下面咱们主要学习下基于能量泛函的分割方法.这里学习下Snake模型简单的知识,Level Set(水平集)模型会在 ...

  9. 一表格简单明了区分BI和大数据

    大数据和BI两词现阶段处于刷屏状况,但是,很多人对于这两词确傻傻分不清.改怎么区别呢?本文将从概念.应用.发展趋势等多个角度对大数据和BI进行区分. BI(Business Intelligence) ...

  10. javascript_获取iframe框架中元素节点的属性值

    1. DOM:文档对象模型 [window 对象] 它是一个顶层对象,而不是另一个对象的属性即浏览器的窗口. [document 对象] 该对象是window和frames对象的一个属性,是显示于窗口 ...