ORA-00845 錯誤處理

pingley發表於2012-03-27
ORA-00845 錯誤處理
今天蛋疼的我打算調整下memory_max_target 引數.因為我想提高memory_target的值,
進而提升sga_target的值,然後再提高shared_pool_size 的值,因為我發現資料庫中
library cache pinhitratio  比較低。因為我知道分配給資料庫系統的資源比較緊張所有
我不打算從別的池割出記憶體來給共享池。
SQL> show parameter memory_max_target;
NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------------------
memory_max_target                    big integer 400M
SQL> show parameter memory_target;
NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------------------
memory_target                        big integer 400M
SQL> alter system set memory_max_target=600M scope=spfile;
System altered.
關閉例項
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
重啟例項。
SQL> startup
ORA-00845: MEMORY_TARGET not supported on this system
本以為一切會好好的,沒想到出現了錯誤。
SQL> quit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@zeng ~]$ 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 大小的問題.
[oracle@zeng ~]$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              17G   15G  706M  96% /
tmpfs                 590M     0  590M   0% /dev/shm
/dev/sda1             194M   24M  161M  13% /boot
/dev/sdb5             4.6G   76M  4.3G   2% /work
/dev/sdb6             2.8G   69M  2.6G   3% /back
根據上面的錯誤資訊,我腦海中飄過了oracle 11gR2 安裝文件裡面的一句話。趕緊去找找。
在oracle 11gR2 安裝文件(for linux x86)裡面有這麼一段話:
Starting with Oracle Database 11g, the Automatic Memory Management feature
requires more shared memory (/dev/shm)and file descriptors. The shared memory
should be sized to be at least the greater of MEMORY_MAX_TARGET and MEMORY_TARGET 
for each Oracle instance on the computer.
現在問題已經很清楚了,就是那個共享記憶體不足(/dev/shm).
root@zeng ~]# mount -o remount,size=1G /dev/shm
[root@zeng ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              17G   15G  706M  96% /
tmpfs                 1.0G     0  1.0G   0% /dev/shm
/dev/sda1             194M   24M  161M  13% /boot
/dev/sdb5             4.6G   76M  4.3G   2% /work
/dev/sdb6             2.8G   69M  2.6G   3% /back
再來啟動資料庫。
[oracle@zeng ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Tue Mar 27 20:52:47 2012
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area  627732480 bytes
Fixed Size                  1338336 bytes
Variable Size             461374496 bytes
Database Buffers          159383552 bytes
Redo Buffers                5636096 bytes
Database mounted.
Database opened.
在回頭來看看那個/dev/shm 的變化
[oracle@zeng ~]$ df -h /dev/shm
Filesystem            Size  Used Avail Use% Mounted on
tmpfs                 1.0G  300M  725M  30% /dev/shm
已經被用掉30%了。
隨便來學習一下那個/dev/shm ,查詢掛載資訊可以知道,裝置/dev/shm 對應的檔案系統是
tmpfs(temporality file system)。預設的大小是RAM 的一半。我先把資料庫關停在進行下面
的操作。
[root@zeng ~]# df -h /dev/shm
Filesystem            Size  Used Avail Use% Mounted on
tmpfs                 1.0G     0  1.0G   0% /dev/shm
/dev/shm 預設使用的是實體記憶體,並且使用虛擬記憶體來置換共享記憶體中存放不下的資料,或者暫時
不需要的資料。所以儲存在/dev/shm 中的資料(檔案)是臨時的,因為實際上是儲存在虛擬記憶體中,
當運用程式關閉以後其中的內容就不復存在了,比如這裡當關閉oracle 資料庫以後/dev/shm 的佔用
率就變成0%了,另外系統重啟也會導致/dev/shm 中的資料丟失。這個裝置或者檔案系統的主要作用是
當一個程式在共享記憶體中佔用了一部分的時候,其他有許可權的程式可以訪問這部分資料。這樣可以提高
系統的效能。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26110315/viewspace-719685/,如需轉載,請註明出處,否則將追究法律責任。

相關文章