oracle commit session,Oracle session总结
Oracle session總結(jié) 收藏
從上周起,服務(wù)器Oracle數(shù)據(jù)庫出現(xiàn)問題,用不到半天,就會報maxsession(150)的問題,肯定是數(shù)據(jù)庫的會話超過最大數(shù)了。
由于服務(wù)器跑的是文件傳輸應(yīng)用,占用的請求和會話肯定很大,因此用戶數(shù)不大就已經(jīng)讓oracle的會話數(shù)達(dá)到最大值。
處理方式不外乎兩種:擴(kuò)大oracle最大session數(shù)以及清除inactive會話,當(dāng)然還有,就是從數(shù)據(jù)庫連接池和程序bug上面下手。
從各處收集了一些查看當(dāng)前會話的語句,記錄一下:
1.select count(*) from v$session;
select count(*) from v$process;
查看當(dāng)前總會話數(shù)和進(jìn)程數(shù),這兩個視圖就是跟會話及進(jìn)程有關(guān)的重要視圖啦,信息都是從這里面取的。
2.查詢那些應(yīng)用的連接數(shù)此時是多少
select? b.MACHINE, b.PROGRAM , count(*) from v$process a, v$session b where a.ADDR = b.PADDR and? b.USERNAME is not null?? group by? b.MACHINE? , b.PROGRAM order by count(*) desc;
3.查詢是否有死鎖
select * from v$locked_object;
如果查詢結(jié)果為no rows selected,說明數(shù)據(jù)庫中沒有死鎖。否則說明數(shù)據(jù)庫中存在死鎖。
接下來說明一下會話的狀態(tài):
1.active 處于此狀態(tài)的會話,表示正在執(zhí)行,處于活動狀態(tài)。
2.killed 處于此狀態(tài)的會話,表示出現(xiàn)了錯誤,正在回滾,當(dāng)然,也是占用系統(tǒng)資源的。還有一點(diǎn)就是,killed的狀態(tài)一般會持續(xù)較長時間,而且用windows下 的工具pl/sql developer來kill掉,是不管用的,要用命令:alter system kill session 'sid,serial#' ;
3.inactive 處于此狀態(tài)的會話表示不是正在執(zhí)行的,比如select語句已經(jīng)完成。我一開始以為,只要是inactive狀態(tài)的會話,就是該殺,為什么不釋放呢。其 實(shí),inactive對數(shù)據(jù)庫本身沒有什么影響,但是如果程序沒有及時commit,那么就會造成占用過多會話。解決inactive的方法最好的就是在oracle中直接設(shè)置超時時間,也是有兩種方法,區(qū)別暫時還不清楚:
1.修改sqlnet.ora文件,新增expire_time=x(單位是分鐘)
我的sqlnet.ora位置在D:\oracle\ora92\network\admin
2.通過ALTER PROFILE DEFAULT LIMIT IDLE_TIME 10; 命令修改,記得重啟下oracle。
來自 “ ITPUB博客 ” ,鏈接:http://blog.itpub.net/25897606/viewspace-705152/,如需轉(zhuǎn)載,請注明出處,否則將追究法律責(zé)任。
總結(jié)
以上是生活随笔為你收集整理的oracle commit session,Oracle session总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决win10中chm内容显示为空白的问
- 下一篇: oracle连接数一直超出,Oracle