熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle錯誤案例:ORA-00235

2013-11-13 15:54:02  來源: Oracle 

  TNS 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 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 reexecute the operation Verify that the Oracle Server executable is present and has execute permissions enabled Ensure that the Oracle environment is specified correctly in LISTENERORA 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 TNS:internal limit restriction exceeded

  Cause Too many TNS connections open simultaneously

  Action Wait for connections to close and retry

  TNS 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 errorsFor further details turn on tracing and reexecute the operation Turn off tracing when the operation is complete

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

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

  TNS: TNS:internal limit restriction exceeded

  TNS: TNS:protocol adapter error

  TNS: Internal limit restriction exceeded

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

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

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

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

  總結TNSTNSTNSTNS解決過程

  一 環境

   平台 IBM AXG內存 windows k advServer sp + oracle 獨占模式

   內存分配相關參數

  processes=

  shared_pool_size=

  large_pool_size=

  java_pool_size=

  db_block_buffers=

  db_block_size=

  log_buffer=

  log_checkpoint_interval=

  sort_area_size=

  sort_area_retained_size=

  open_cursors=

  job_queue_processes=

  job_queue_interval=

  max_dump_file_size=

   最大並發用戶數個左右

  二 故障現象

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

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

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

  

  JUL :: * (CONNECT_DATA=(SID=ORCL)(CID=(PROGRAM=***EXE)(HOST=*******)(USER=*****))) * (ADDRESS=(PROTOCOL=tcp)(HOST=*******)(PORT=)) * establish * ORCL *

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

  TNS: TNS:internal limit restriction exceeded

  TNS: TNSrotocol adapter error

  TNS: Internal limit restriction exceeded

  bit Windows Error: : Exec format error

  JUL :: * (CONNECT_DATA=(SID=ORCL)(CID=(PROGRAM=***EXE)(HOST=*****)(USER=***))) * (ADDRESS=(PROTOCOL=tcp)(HOST=******)(PORT=)) * establish * ORCL *

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

  TNS: TNS:internal limit restriction exceeded

  TNS: TNSrotocol adapter error

  TNS: Internal limit restriction exceeded

  bit Windows Error: : Exec format error

  

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

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

  三 原因分析

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

  四 解決過程

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

   重置initora參數文件調小以下四個參數的值

  short_area_size

  hash_area_size

  bitmap_merge_area_size

  create_bitmap_area_seze

  open_cursone

   調小SGA的大小

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

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

   將oracle改為mts模式

   更換操作系統為windows NT 企業版

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

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

  ) 使用PSE內存

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

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

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

  D:\oracle\ora\bin>orastack oracleexe

  Couldnt open file with CreateFile()

  GetLastError() ==

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

  D:\oracle\ora\bin>orastack oracleexe

  Dump of file oracleexe

  Current Reserved Memory per Thread =

  Current Committed Memory per Thread =

  New Reserved Memory per Thread =

  D:\oracle\ora\bin>orastack tnslsnrexe

  Dump of file tnslsnrexe

  Current Reserved Memory per Thread =

  Current Committed Memory per Thread =

  New Reserved Memory per Thread =

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

  五 小結

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


From:http://tw.wingwit.com/Article/program/Oracle/201311/17484.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.