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