文章詳情頁
案例學習Oracle錯誤:TNS-00510
瀏覽:2日期:2023-11-12 13:45:39
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.......=.102403 最大并發用戶數: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 error02-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_cursone2 調小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:oracleora81bin>orastack oracle.exe 500000 Couldn't open file with CreateFile() GetLastError() == 32停止oracle服務和TNS服務,再運行以上命令 D:oracleora81bin>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:oracleora81bin>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方式。
排行榜