今天做了幾個背景删除表記錄的運作的腳本,結果發現系統的/dev/shm目錄下有很多以ora_開頭的檔案,都有什麼用途。雖然經常在linux系統下看到shm裝置,但卻從沒有太多的關心
shm到底是幹什麼用的。為此,特地在網上找了資料,下面作了個小整理:
(1)什麼是/dev/shm
它就是所謂的tmpfs,從名字可以看出是一個臨時的檔案系統,有人說跟ramdisk(虛拟磁盤),但不一樣。使用/dev/shm的好處就是讀取資料相當快,因為典型的 tmpfs 檔案系統會
完全駐留在 RAM 中,讀寫幾乎可以是瞬間的。同時,要注意的是,在/dev/shm中的檔案在系統重新開機後會被清除掉。
tmpfs預設大小一般為實體記憶體的一半,當然可以修改tmpfs的大小。一般在fstab上可以看到
tmpfs /dev/shm tmpfs defaults 0 0
如果要将tmpfs的大小修改為4G,可以對上面的做适當的修改即可,如:
tmpfs /dev/shm tmpfs defaults,size=4096M 0 0
(2)/dev/shm對oracle 11g的影響
ORACLE 從11g版本開始,引入了一個自動記憶體管理(Automatic Memory Management)特性,該特性需要更多的共享記憶體(/dev/shm),是以如果決定應用該特性的話, 必須要確定共享記憶體大于ORACLE 中初始化參數MEMORY_MAX_TARGET 和MEMORY_TARGET(特别提示,這兩個參數即自動記憶體管理特性對應的初始化參數)的值。
SQL> show parameter MEMORY_MAX_TARGET
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
memory_max_target big integer 6400M
SQL> show parameter MEMORY_TARGET
memory_target big integer 6400M
如果在初始化參數中設定了MEMORY_MAX_TARGET 和MEMORY_TARGET 兩參數為非0 值,并且不符合系統共享記憶體,則ORACLE 資料庫啟動時,就會觸發ORA-00845:MEMORY_TARGET
not supported on this system 錯誤。
下面的摘自yangtingkun的技術文檔:
http://yangtingkun.itpub.net/post/468/408235
Oracle 11g的Linux版本在修改了MEMORY_TARGET或者SGA_TARGET後啟動可能會報錯:
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORA-00845: MEMORY_TARGET not supported on this system
這個問題是由于設定SGA的大小超過了作業系統/dev/shm的大小:
[root@enterprice64 ~]# df -k /dev/shm
Filesystem 1K-blocks Used Available Use% Mounted on
tmpfs 4089416 0 4089416 0% /dev/shm
Oracle在metalink的文檔:Doc ID:Note:460506.1中進行了說明。解決這個問題隻有兩個方法,一種是修改初始化參數,使得初始化參數中SGA的設定小于/dev/shm的大小,
另一種方法就是調整/dev/shm的大小。
修改/dev/shm的大小可以通過修改/etc/fstab來實作:
[root@enterprice64 ~]# vi /etc/fstab
LABEL=/ / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
LABEL=/data /data ext3 defaults 1 2
devpts /dev/pts devpts gid=5,mode=620 0 0
#tmpfs /dev/shm tmpfs defaults 0 0
tmpfs /dev/shm tmpfs defaults,size=10240M 0 0
LABEL=/home /home ext3 defaults 1 2
LABEL=/opt /opt ext3 defaults 1 2
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
LABEL=/usr /usr ext3 defaults 1 2
LABEL=/var /var ext3 defaults 1 2
LABEL=SWAP-sda8 swap swap defaults 0 0
~
"/etc/fstab" 13L, 965C written
[root@enterprice64 ~]# umount /dev/shm
[root@enterprice64 ~]# mount /dev/shm
tmpfs 10485760 0 10485760 0% /dev/shm
[root@enterprice64 ~]# su - oracle
[oracle@enterprice64 ~]$ sqlplus "/ as sysdba"
SQL*Plus: Release 11.1.0.6.0 - Production on Tue Oct 23 15:42:42 2007
Copyright (c) 1982, 2007, Oracle. All rights reserved.
Connected to an idle instance.
ORACLE instance started.
Total System Global Area 4743446528 bytes
Fixed Size 2143824 bytes
Variable Size 3892316592 bytes
Database Buffers 805306368 bytes
Redo Buffers 43679744 bytes
Database mounted.
Database opened.
修改/etc/fstab,重新mount /dev/shm,然後就可以啟動資料庫了。
本文轉自vcdog 51CTO部落格,原文連結:http://blog.51cto.com/255361/837479,如需轉載請自行聯系原作者