使用者報告,伺服器啟動一段時間以後,無法建立資料庫連接配接,重新啟動幾分鐘以後,再次無法連接配接
檢查啟動的Oracle程序
檢查Alert.log警報日志檔案
Tue Mar 23 13:40:45 2004
skgpspawn failed:category = 27142, depinfo = 12, op = fork, loc = skgpspawn3
skgpspawn failed:category = 27142, depinfo = 12, op = fork, loc = skgpspawn3
skgpspawn failed:category = 27142, depinfo = 12, op = fork, loc = skgpspawn3
該提示說明資料庫無法spawn a new session.
$ oerr ora 27142
27142, 0000, "could not create new process"
// *Cause: OS system call
// *Action: check errno and if possible increase the number of processes
檢查監聽器
oracle>lsnrctl services
在listener.log中找到了相關錯誤資訊
TNS-12540: TNS/243/272/263/254/263/366/304/332/262/277/274/253/317/336/317/336/326/306
TNS-12560: TNS: /320/255/322/351/312/312/305/344/306/367/264/355/316/363
TNS-00510: /263/254/263/366/304/332/262/277/274/253/317/336/317/336/326/306
Solaris Error: 12: Not enough space
/home1/oracle/app/network/log>grep -w 12 /usr/include/sys/errno.h
#define ENOMEM 12 /* Not enough core
Here "core" means memory, including real RAM memory and swap space.
檢查資料庫的SGA設定
發現SGA設定為: 622299344 bytes
接近600M
對于RAM小于1G的系統,Dedicated模式下,Oracle的SGA一般不應超過1/2實體記憶體.
減小SGA,為系統保留足夠的記憶體.
增加swap區
wapplatform:/>df -k
檔案系統 千位元組 用了 可用 容量 挂接在
/dev/dsk/c0t1d0s0 3099093 105421 2931691 4% /
/dev/dsk/c0t2d0s0 10325760 8359637 1862866 82% /usr
/proc 0 0 0 0% /proc
fd 0 0 0 0% /dev/fd
mnttab 0 0 0 0% /etc/mnttab
/dev/dsk/c0t1d0s3 1018382 285914 671366 30% /var
swap 3904 24 3880 1% /var/run
swap 3936 56 3880 2% /tmp
/dev/dsk/c0t1d0s5 1671823 459202 1162467 29% /opt
/dev/dsk/c0t2d0s7 7087473 6068462 948137 87% /export/home
/dev/dsk/c2t1d0s7 17413250 15900222 1338896 93% /export/home2
/dev/dsk/c0t3d0s7 17413250 13749782 3489336 80% /export/home1
/dev/dsk/c0t1d0s1 771110 382410 334723 54% /usr/openwin
/export/home/wapgw/luke
7087473 6068462 948137 87% /home/wap
wapplatform:/var/swap>cd /export/home1
wapplatform:/export/home1>ls
TT_DB lost+found oracle oracli9
wapplatform:/export/home1>mkdir swap
wapplatform:/export/home1>cd swap
wapplatform:/export/home1/swap>mkfile -v 1g swapfile1
swapfile1 1073741824 bytes
wapplatform:/export/home1/swap>id
uid=0(root) gid=1(other)
wapplatform:/export/home1/swap>swap -a /export/home1/swap/swapfile1
wapplatform:/export/home1/swap>swap -s
總數:配置設定了 623160k 位元組 + 保留 162704k = 已使用 785864k,1010936k 可用
問題總結:
Oracle資料庫問題的解決從來就離不開作業系統
很多時候我們必須通過作業系統一級的手段來診斷并解決問題.
關于作業系統
一般Swap區的推薦值為2XRAM
如果Ram很大,不一定非要把Swap設定為2xSwap
但是通常至少設定Swap = Ram
如果Swap區過小,在系統繁忙期間
産生大量交換無法換到磁盤,就會出現問題.
如本案例就是這樣。
另外,如果系統Ram較小
通常設定SGA < 1/2 Ram
要為Server process及OS保留足夠的記憶體空間.