程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 案例學習Oracle錯誤:TNS-00510

案例學習Oracle錯誤:TNS-00510

編輯:Oracle數據庫基礎

TNS-00510 Internal limit restriction exceeded

Cause Too many files or sockets open simultaneously (or some other resource has been

depleted).

Action For further details, trace the Operation for protocol details.

TNS-12500 TNS:listener failed to start a dedicated server process

Cause The process of starting up a dedicated server process failed. The executable could not be found or the environment may be set up incorrectly.

Action Turn on tracing at the ADMIN level and re-execute the Operation. Verify that the

Oracle Server executable is present and has execute permissions enabled. Ensure that the Oracle environment is specifIEd correctly in LISTENER.ORA. The Oracle Protocol Adapter

that is being called may not be installed on the local hard drive. Check that the

correct Protocol Adapter are successfully linked. If the error persists, contact Oracle Customer Support.

TNS-12540 TNS:internal limit restriction exceeded

Cause Too many TNS connections open simultaneously.

Action Wait for connections to close and retry.

TNS-12560 TNS:protocol adapter error

Cause A generic protocol adapter error occurred.

Action Check addresses used for proper protocol specification. Before reporting this

error, look at the error stack and check for lower level transport errors.For further details, turn on tracing and re-execute the operation. Turn off tracing when the Operation is complete.

問:進程的數量會引起監聽器錯誤嗎?

TNS-12500: TNS:listener failed to start a dedicated server process

TNS-12540: TNS:internal limit restriction exceeded

TNS-12560: TNS:protocol adapter error

TNS-00510: Internal limit restriction exceeded

IBM/AIX RISC System/6000 Error: 11: Resource temporarily unavailable

我們在監聽器日志中發現如上的錯誤信息。服務器上每個用戶的最大進程數量被設置600 Oracle中的最大進程數量為600。進程最大的利用率是482,每個會話的最大利用率是490。會話的數量設置為840。

根據我所了解的,看起來進程的數量是沒有問題的。我們通過在這個機器上無法正確建立內存分頁空間而對此進行了證實,然而,一些人仍然告訴我們要在起始的時候增加進程的數量。我不同意這個觀點。我遺漏了什麼嗎?

答:TNS-510錯誤信息顯示了有太多的文件或者socket同時開放了(或者是其他一些資源耗盡了)。這是操作系統的限制,不是Oracle的限制。你需要確認你的AIX平台可以處理你在服務器上開放的這麼多的文件。這是“全部”文件,並不僅僅是Oracle數據庫文件。並且,你還需要確認你的AIX服務器可以正確處理全部數量的Oracle進程,而不僅僅是專用的服務器進程。Oracle的起始參數PROCESSES限制了專用的服務器進程數量。但是還有後台的進程(SMON, PMON, LGWR等),以及支持並行語句的進程,更不用說你的監聽器等了。我覺得你應該配置AIX來允許每個Unix用戶擁有更多的進程。

總結:TNS-12500,TNS-12540,TNS-12560,TNS-00510解決過程

一 環境:

1 平台: IBM AX360,4G內存 Windows 2k advServer sp3 + Oracle 816 獨占模式

2 內存分配相關參數

..processes................=.1000 
..shared_pool_size.........=.240000000 
..large_pool_size..........=.614400 
..Java_pool_size...........=.32768 
..db_block_buffers.........=.90000 
..db_block_size............=.4096 
..log_buffer...............=.163840 
..log_checkpoint_interval..=.10000 
..sort_area_size...........=.65536 
..sort_area_retained_size..=.65536 
..open_cursors.............=.100 
..job_queue_processes......=.4 
..job_queue_interval.......=.10 
..max_dump_file_size.......=.10240

3 最大並發用戶數:850個左右

二 故障現象:

當用戶數達到一定的數量時(700多)客戶端連接服務器時報ora-12560錯誤,緊跟著報ora-03114錯誤,不能連接到服務器。此時已連接到服務器的用戶能正常訪問數據庫。

首先查看警告日志文件,未見到明顯錯誤信息。

查看listner.log文件,發現如下信息(很多個類似的錯誤記錄,摘兩個上來)

02-JUL-2003 10:30:09 * (CONNECT_DATA=(SID=ORCL)(CID=(PROGRAM=***.EXE)(HOST=*******)
(USER=*****))) * (ADDRESS=(PROTOCOL=tcp)(HOST=*******)(PORT=1136)) * establish * 
ORCL * 12500 
TNS-12500: TNS:listener failed to start a dedicated server process 
.TNS-12540: TNS:internal limit restriction exceeded 
..TNS-12560: TNSrotocol adapter error 
...TNS-00510: Internal limit restriction exceeded 
....32-bit Windows Error: 8: Exec format error

02-JUL-2003 10:30:10 * (CONNECT_DATA=(SID=ORCL)(CID=(PROGRAM=***.EXE)(HOST=*****)
(USER=***))) * (ADDRESS=(PROTOCOL=tcp)(HOST=******)(PORT=1203)) * establish * 
ORCL * 12500 
TNS-12500: TNS:listener failed to start a dedicated server process 
.TNS-12540: TNS:internal limit restriction exceeded 
..TNS-12560: TNSrotocol adapter error 
...TNS-00510: Internal limit restriction exceeded 
....32-bit Windows Error: 8: Exec format error

此時,原來已連接上服務器的用戶還能正常使用。查看此時session達到760多個。

重啟Oracle服務後,能連接新的用戶數,但當並發用戶數達到750個以上時,再次報同樣的錯誤

三 原因分析:

系統資源耗竭,意味著系統分配給oracle的內存用盡了。雖然我們有4G的物理內存,但正常情況下系統只能給oracle分配2G的內存,這2G的內存中,包括了SGA、PGA等Oracle需要使用的全部內存。在獨占模式下,每一個session將單獨分配2M左右的內存。在本例中,SGA分配了約600M,按每一個用戶分配2M內存計算,連接數達到750個時,總分配內存已達到2G,將不能再增加新的連接數。如果要解決這個問題,在不做大的調整的前提下,要麼減小SGA大小,要麼減小為每一個會話分配的內存大小,以能連接更多的用戶。

四 解決過程:

查閱了Oracle文檔,文檔裡提出來了幾個解決的辦法:

1 重置init.ora參數文件,調小以下四個參數的值:

short_area_size 
hash_area_size 
bitmap_merge_area_size 
create_bitmap_area_seze 
open_cursone

2 調小SGA的大小

3 減小Oracle Job隊列數量(job_queue_processes)和並發隊列數(parallel_max_servers)

4 重置並減小會話/線程使用的堆棧大小

5 將Oracle改為mts模式

6 更換操作系統為Windows NT 企業版

7 使用intel的ESMA硬件支持,即使用大內存

1) 在intel系統上使用 /3G 開關

2) 使用PSE36內存

結合本實例的具體情況,決定調整的主要目標為減小用戶的PGA大小。

....構成PGA的主要內容有short_area_size, hash_area_size, open_cursone, 以及oracle 堆棧和TNS 堆棧。在本實例中,排序區為64K,hash區為128K(缺少值),打開的游標數與應用有關,不能隨便減小了,然而Oracle堆棧和TNS堆棧都是1M,卻有較大的減小的余地。因此,調整的目標定為減小這兩個堆棧的大小。

使用orastack 命令來減小這兩個堆棧的大小:

D:\oracle\ora81\bin>orastack Oracle.exe 500000 
Couldn't open file with CreateFile() 
GetLastError() == 32

停止Oracle服務和TNS服務,再運行以上命令

D:\oracle\ora81\bin>orastack oracle.exe 500000 
Dump of file oracle.exe 
Current Reserved Memory per Thread = 1048576 
Current Committed Memory per Thread = 4096 
New Reserved Memory per Thread = 500000 
D:\Oracle\ora81\bin>orastack tnslsnr.exe 500000 
Dump of file tnslsnr.exe 
Current Reserved Memory per Thread = 1048576 
Current Committed Memory per Thread = 4096 
New Reserved Memory per Thread = 500000

重新啟動Oracle服務和TNS服務,打開數據庫,用戶連接到服務器,經測試,用戶數到1350以上時數據庫仍然運行正常,解決了本實例存在的問題。

五 小結

事實上,正如oracle文檔所指出的那樣,要增加用戶連接數的途徑很多,除了減小用戶堆棧之外,還可以減小SGA,或者是更改成MTS方式,或者是使用第三方工具增加oracle可用內存。本人前面小結過如何讓Oracle在32位的Windows操作系統上使用超過2G內存的方法( http://www.itpub.Net/showthread.PHP...15&pagenumber=1 ),在本安全應用中,宜將兩者(減小用戶堆棧與增加Oracle可用內存)結合起來使用,以提高數據庫性能。但是,這種方式下,同樣不可能無限制地增加用戶連接數。要想使用戶連接數達到更大,則應使用MTS方式。

國際來源:http://searchOracle.techtarget.com/ateQuestionNResponse/0,289625,sid41_cid

583536_tax294550,00.Html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved