天天看點

Oracle資料庫無法建立連接配接TNS-12540 TNS-12560 TNS-00510

使用者報告,伺服器啟動一段時間以後,無法建立資料庫連接配接,重新啟動幾分鐘以後,再次無法連接配接

檢查啟動的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保留足夠的記憶體空間.

繼續閱讀