說明:【oracle問題集】是博主平時操作資料庫遇到的問題以及解決方案。
執行語句:表示操作資料庫過程
出錯現象:表示操作資料庫過程出現錯誤現象
出錯原因:表示出現錯誤的原因
解決方案:表示解決錯誤的方法
相關知識:表示與這個主題相關的知識
========================================================================
執行語句:
啟動Oracle資料庫(startup)
出錯現象:
ORA-00845: MEMORY_TARGET not supported on this system
錯誤原因:
由於設定SGA的大小超過了作業系統/dev/shm的大小
解決方案:
第一種方法:修改初始化參數,使得初始化參數中的SGA設定小於/dev/shm的大小.
第二種方法:是調整/dev/shm的大小
調整/dev/shm的方法如下:
[root@localhost ~]# vim /etc/fstab
tmpfs /dev/shm tmpfs defaults,size=10240M 0 0 【修改tmpfs大小】
[root@localhost ~]# umount /dev/shm
[root@localhost ~]# mount /dev/ssh
[root@localhost ~]# df -h /dev/shm
檔案系統 容量 已用 可用 已用% 掛載點
tmpfs 10G 0 10G 0% /dev/shm
相關知識
A、tmpfs有以下特點:
- tmpfs 是一個檔案系統,而不是塊裝置;您只是安裝它,它就可以使用了。
- 動態檔案系統的大小。
- tmpfs 的另一個主要的好處是它閃電般的速度。因為典型的 tmpfs 檔案系統會完全駐留在 RAM 中,讀寫幾乎可以是瞬間的。
- tmpfs 資料在重新啟動之後不會保留,因為虛擬記憶體本質上就是易失的。所以有必要做一些指令碼做諸如載入、綁定的操作。
B.linux /dev/shm 預設容量
linux下/dev/shm的容量預設最大為記憶體的一半大小,使用df -h命令可以看到。但它並不會真正的佔用這塊記憶體,如果/dev/shm/下沒有任何檔案,它佔用的記憶體實際上就是0位元組;如果它最大為1G,裡頭放有100M檔案,那剩餘的900M仍然可為其它應用程式所使用,但它所佔用的100M記憶體,是絕不會被系統回收重新劃分的,否則誰還敢往裡頭存檔案呢?
通過df -h查看linux /dev/shm的大小
[root@db1 shm]# df -h /dev/shm
Filesystem Size Used Avail Use% Mounted on
tmpfs 1.5G 0 1.5G 0% /dev/shm
C.linux /dev/shm 容量(大小)調整
linux /dev/shm容量(大小)是可以調整,在有些情況下(如oracle資料庫)預設的最大一半記憶體不夠用,並且預設的inode數量很低一般都要調高些,這時可以用mount命令來管理它。
mount -o size=1500M -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm
在2G的機器上,將最大容量調到1.5G,並且inode數量調到1000000,這意味著大致可存入最多一百萬個小檔案
通過/etc/fstab檔案來修改/dev/shm的容量(增加size選項即可),修改後,重新掛載即可:
[root@db1 shm]# grep tmpfs /etc/fstab
tmpfs /dev/shm tmpfs defaults,size=2G 0 0
[root@db1 /]# umount /dev/shm
[root@db1 /]# mount /dev/shm
[root@db1 /]# df -h /dev/shm
Filesystem Size Used Avail Use% Mounted on
tmpfs 2.0G 0 2.0G 0% /dev/shm
[root@db1 /]# # mount -o remount /dev/shm
[root@db1 /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rootvg-lv01 97G 9.2G 83G 10% /
/dev/sda1 99M 15M 80M 16% /boot
tmpfs 2.0G 0 2.0G 0% /dev/shm