TNS-12500解決過(guò)程(zt) TNS-12500解決過(guò)程 一 環(huán)境: 1 平臺(tái): HP,2G內(nèi)存 windows 2k advServer sp3 + oracle 817 獨(dú)占模式 2 內(nèi)存分配相關(guān)參數(shù) ..processes................=.350 ..shared_pool_size.........=.314572800 ..large_pool_size..........=.614400 ..java_pool_size...........=.0 ..db_block_buffers.........=.67372 ..db_block_size............=.16384 ..log_buffer...............=.163840 ..log_checkpoint_interval..=.10000 ..sort_area_size...........=.52428800 ..sort_area_retained_size..=.52428800 ..open_cursors.............=.300 ..job_queue_processes......=.4 ..job_queue_interval.......=.10 ..max_dump_file_size.......=.10240 3 最大并發(fā)用戶(hù)數(shù):100個(gè)左右 二 故障現(xiàn)象: ....當(dāng)用戶(hù)數(shù)達(dá)到一定的數(shù)量時(shí)(30多)客戶(hù)端連接服務(wù)器時(shí)報(bào)TNS-12500錯(cuò)誤,此時(shí)已連接到服務(wù)器的用戶(hù)能正常訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)。 ....首先查看警告日志文件,未見(jiàn)到明顯錯(cuò)誤信息。 ....查看listner.log文件,發(fā)現(xiàn)如下信息(很多個(gè)類(lèi)似的錯(cuò)誤記錄,摘兩個(gè)上來(lái)) ......................... 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 ..................... 此時(shí),原來(lái)已連接上服務(wù)器的用戶(hù)還能正常使用。查看此時(shí)session達(dá)到50多個(gè)。 ....重啟oracle服務(wù)后,能連接新的用戶(hù)數(shù),但當(dāng)并發(fā)用戶(hù)數(shù)達(dá)到15個(gè)以上時(shí),再次報(bào)同樣的錯(cuò)誤 三 原因分析: ....系統(tǒng)資源耗竭,意味著系統(tǒng)分配給oracle的內(nèi)存用盡了。雖然我們有2G的物理內(nèi)存,但正常情況下系統(tǒng)只能給oracle分配1.3G的內(nèi)存,這1.3G的內(nèi)存中,包括了SGA、PGA等oracle需要使用的全部?jī)?nèi)存。在獨(dú)占模式下,每一個(gè)用戶(hù)將單獨(dú)分配50M(Sort_area_size)左右的內(nèi)存。在本例中,UGA分配了約2G,按每一個(gè)用戶(hù)分配50M內(nèi)存計(jì)算,連接數(shù)達(dá)到15個(gè)時(shí),總分配內(nèi)存已達(dá)到2G,將不能再增加新的連接數(shù)。如果要解決這個(gè)問(wèn)題,在不做大的調(diào)整的前提下,要么減小SGA大小,要么減小為每一個(gè)會(huì)話(huà)分配的內(nèi)存大小,以能連接更多的用戶(hù)。 四 解決過(guò)程: ....查閱了oracle文檔,文檔里提出來(lái)了幾個(gè)解決的辦法: 1 重置init.ora參數(shù)文件,調(diào)小以下四個(gè)參數(shù)的值: ....sort_area_size ....hash_area_size ....bitmap_merge_area_size ....create_bitmap_area_seze ....open_cursone 2 減小oracle Job隊(duì)列數(shù)量(job_queue_processes)和并發(fā)隊(duì)列數(shù)(parallel_max_servers) 3 重置并減小會(huì)話(huà)/線(xiàn)程使用的堆棧大小 4 將oracle改為mts模式 ....結(jié)合本實(shí)例的具體情況,決定調(diào)整的主要目標(biāo)為減小用戶(hù)的PGA大小。 ....構(gòu)成PGA的主要內(nèi)容有sort_area_size, hash_area_size, open_cursor, 以及oracle 堆棧和TNS 堆棧。在本實(shí)例中,排序區(qū)為64K,hash區(qū)為128K(缺少值),打開(kāi)的游標(biāo)數(shù)與應(yīng)用有關(guān),不能隨便減小了,然而oracle堆棧和TNS堆棧都是1M,卻有較大的減小的余地。因此,調(diào)整的目標(biāo)定為減小這兩個(gè)堆棧的大小。 ....使用orastack 命令來(lái)減小這兩個(gè)堆棧的大?。? D:\oracle\ora81\bin>orastack oracle.exe 500000 Couldn‘t open file with CreateFile() GetLastError() == 32 ....停止oracle服務(wù)和TNS服務(wù),再運(yùn)行以上命令 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 重新啟動(dòng)oracle服務(wù)和TNS服務(wù),打開(kāi)數(shù)據(jù)庫(kù),用戶(hù)連接到服務(wù)器,經(jīng)測(cè)試,用戶(hù)數(shù)到50以上時(shí)數(shù)據(jù)庫(kù)仍然運(yùn)行正常,解決了本實(shí)例存在的問(wèn)題。 五 小結(jié) ....事實(shí)上,正如oracle文檔所指出的那樣,要增加用戶(hù)連接數(shù)的途徑很多,除了減小用戶(hù)堆棧之外,還可以減小SGA,或者是更改成MTS方式,或者是使用第三方工具增加oracle可用內(nèi)存。在本安全應(yīng)用中,宜將兩者(減小用戶(hù)堆棧與增加oracle可用內(nèi)存)結(jié)合起來(lái)使用,以提高數(shù)據(jù)庫(kù)性能。但是,這種方式下,同樣不可能無(wú)限制地增加用戶(hù)連接數(shù)。要想使用戶(hù)連接數(shù)達(dá)到更大,則應(yīng)使用MTS方式。 |
|