Oracle报错:ORA-00845: MEMORY_TARGET not supported on this system(二)

2014-11-24 17:33:46 · 作者: · 浏览: 3
df -k

Filesystem 1K-blocks Used Available Use% Mounted on
shmfs 6291456 832356 5459100 14% /dev/shm
Solution
Increase the /dev/shm mountpoint size.
For example:
# mount -t tmpfs shmfs -o size=7g /dev/shm
To make this change persistent across system restarts, add an entry in /etc/fstab similar to the following:
shmfs /dev/shm tmpfs size=7g 0


如上的内容不仅讲出了错误的原因,而且还大概的说了一下在oracle 11g中的自动内存管理,并且给出了该错误的解决的命令


3、问题的深入探究,到底什么是 /dev/shm
首先来看一下linux系统中已经挂载的文件系统
[oracle@night ~]$ df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sda2 ext3 16G 11G 3.9G 74% /
/dev/sda3 ext3 1.6G 37M 1.4G 3% /tmp
/dev/sda1 ext3 99M 12M 83M 13% /boot
tmpfs tmpfs 252M 0 252M 0% /dev/shm


可以看出我已经挂载了/dev/shm,但是该分区的文件系统并不是普通的文件系统类型,而是tmpfs文件系统类型,那么什么是tmpfs格式的文件系统类型呢?
tmpfs是linux的一种临时文件系统,它的大小是不固定的,默认的大小是实际内存的一半。
[root@night ~]# free -m
total used free shared buffers cached
Mem: 503 368 134 0 26 283
-/+ buffers/cache: 58 444
Swap: 2525 0 2525
[root@night ~]# df -Th /dev/shm/
文件系统 类型 容量 已用 可用 已用% 挂载点
tmpfs tmpfs 252M 0 252M 0% /dev/shm
[root@night ~]#


默认的挂载点是/dev/shm,/dev/shm其实就是一个目录,所以tmpfs也可以挂载到一个自定义的目录。
[root@night ~]# file /dev/shm/
/dev/shm/: sticky directory
[root@night ~]# ll -d /dev/shm/
drwxrwxrwt 2 root root 40 07-25 21:43 /dev/shm/
[root@night ~]#


tmpfs可以使用系统内存,也可以使用swap,所以我可以把tmpfs的size适当的调高一点。
由于tmpfs是存在于内存中的,所以在卸载tmpfs或者是关机重启linux操作系统的时候,tmpfs的内容就会丢失。
tmpfs是基于内存的,而swap是基于磁盘的,所以两者是不同的,而且tmpfs的IO很高。


4、解决问题
前面已经知道了报错是由于/dev/shm过小导致的,而且/dev/shm是一个tmpfs的文件系统,该文件系统是基于内存的,大小是随着物理内存的大小动态改变的,一般为物理内存的一半;tmpfs文件系统可以使用物理内容,也可以使用swap。
那么根据这么内容,来处理问题
首先看一下物理内存和swap的大小
[root@night ~]# free -m
total used free shared buffers cached
Mem: 503 369 134 0 26 283
-/+ buffers/cache: 58 444
Swap: 2525 0 2525
[root@night ~]#


由上可知道,RAM为500M左右,SWAP为2G


修改tmpfs大小,用root用户
[root@night ~]# vim /etc/fstab


内容如下
LABEL=/ / ext3 defaults 1 1
LABEL=/tmp /tmp ext3 defaults 1 2
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults,size=1G 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
LABEL=SWAP-sda5 swap swap defaults 0 0
~


重新挂载/dev/shm
[root@night ~]# umount /dev/shm/
[root@night ~]# mount /dev/shm/
[root@night ~]# mount
/dev/sda2 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda3 on /tmp type ext3 (rw)
/dev/sda1 on /boot type ext3 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
none on /proc/fs/vmblock/mountPoint type vmblock (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
tmpfs on /dev/shm type tmpfs (rw,size=1G)
[root@night ~]# df -Th /dev/shm/
文件系统 类型 容量 已用 可用 已用% 挂载点
tmpfs tmpfs 1.0G 0 1.0G 0% /dev/shm
[root@night ~]#


现在重新启动oracle服务(切换oracle用户)
[oracle@night ~]$ df -Th /dev/shm/
文件系统 类型 容量 已用 可用 已用% 挂载点
tmpfs tmpfs 1.0G 0 1.0G 0% /dev/shm
[oracle@night ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Thu Jul 25 22:05:01 2013
Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> conn sys/ as sysdba
Enter password:
Connected to