oracle數據庫連接緩慢


1、檢查oracle用戶的資源上限:
cat /etc/security/limits.conf
oracle soft nproc 2047  # oracle告警線程
oracle hard nproc 16384  # oracle最大線程
oracle soft nofile 1024 # oracle用戶最大告警文件打開數量
oracle hard nofile 65536 # oracle用戶最大文件打開數量
這是oracle用戶的配置,然后目前oracle使用的最大進程是多少呢 ?

2、檢查oracle用戶使用的最大進程 

[root~]# ps -U oracle |wc -l

2007

進程使用沒問題,文件數呢?

3、檢查oracle用戶使用的文件打開數

[root~]# lsof |grep oracle |wc -l

60896

4、發現文件數60896,比最大告警數1024 多出60倍!!問題就在這里了,查看了一下網上,多是改大limits上限,我嘗試改了一下,雖然管用,但是打開的文件數卻一直增長,治標不治本

5、所以查看一下oracle用戶所打開的文件都是什么很有必要

[root]# lsof |grep oracle > oracle.txt

打開oracle.txt文件,發現大部分文件都是sendmail或者postdrop,光這倆就占了5.4W多個文件數,百度sendmail和postdrop,發現是因為定時任務會啟動郵件postfix進行發送郵件,但是服務器中沒有進行sendmail配置,所以導致postdrop,這些就變成僵屍文件,一直打開無法關閉了,在oracle用戶下6、把定時任務設置成不發郵件

 crontab -e

MAILTO ="" --不發郵件

7、然后刪除sendmail和postdrop相關的進程

 ps -ef | grep sendmail | grep -v grep | awk '{print $2}' | xargs kill

 ps -ef | grep postdrop | grep -v grep | awk '{print $2}' | xargs kill

8、再查oracle用戶文件打開數

[root]# lsof |grep oracle |wc -l

8476

 

==================================

 

近日,公司ORACLE服務器突如其來的宕機了,經過重裝一系列的折騰終於解決了。終於發現自己對ORACLE理解還不夠。

 先列舉一下幾個問題的解決方案:

 問題一:ORA-12514 TNS 監聽程序當前無法識別連接描述符中請求服務

 解決方案:通過重啟服務的方式啟動數據庫,嘗試連接。如果未解決修改listener.ora文件,配置靜態監聽。

 總結:正確添加listener.ora;重新啟動了oracle服務器,並檢查oracle所有服務是否啟動;oracle客戶端Net Cofiguration Assistant正確添加或重新配置實例名 

 

問題二:ORA-12518: TNS: 監聽程序無法分發客戶機連接

 解決方案:一般出現此情況較少,首先檢查數據庫服務是否啟動 ,如果數據庫服務啟動請通過sqlplus命令登錄dba執行startup命令啟動數據庫實例。

 cmd>sqlplus connect sys/sys as sysdba>startup

 

問題三:通過plsql等工具連接oracle速度慢,需要10幾秒以上,甚至長時間連接不上,通過命令啟動和關閉oralce偵聽時連接也很慢。

 解決方案:這種情況發生通常有兩種情況,

 第一種是機器名(hostname)的問題,需要修改listener.ora文件或者重新建立監聽即可。

 第二種方式是我此次遇到的問題,oracle多個人開發用,持續時間比較久,偵聽日至過大,導致連接慢。這種方法的解決方案是刪除或重命名原有偵聽日至。

 lsnrctl set log_status off

 rename listener.log listener.old

 lsnrctl set log_status on 

 總結一下新了解到的知識:

 1.在windows中,windows服務中的oracle服務啟動了不代表oracle實例一樣啟動了。

 開始菜單->oracle配置和移植工具->Administration Assistant for Windows

 左側菜單上找到數據庫菜單,下方實例上右鍵啟動關閉選項。

 oracle實例選項卡中有"服務啟動時啟動實例",和"服務停止時關閉實例"兩個選項。

 

2.oracle相關命令

 #啟動監聽

 lsnrctl start

 #關閉監聽

 lsnrctl stop

 用lsnrctl reload重啟監聽器,此命令可以代替lsnrctl stop和lsnrctl start。重啟將會在不需要關閉和啟動監聽器的情況下讀取listener.ora的配置。

 

#啟動oradb數據庫服務

 net start OracleServiceORCL

 #關閉oradb數據庫服務

 net stop OracleServiceORCL

 

#啟動dbconsole服務

 emctl start dbconsole

 #停止dbconsole服務

 emctl stop dbconsole

 

#啟動數據庫

 system>sqlplus connect sys/sys as sysdba

 sql>startup

 #停止數據庫

 sql>shutdown immediate

 要啟動或者停止服務,必須擁有sysdba的權限。

 

shutdown命令參數:

 Normal 需要等待所有的用戶斷開連接,需要在所有連接用戶斷開后才執行關閉數據庫任務,所以有的時候看起來好象命令沒有運行一樣!在執行這個命令后不允許新的連接.

 Immediate 等待用戶完成當前的語句 (推薦),在用戶執行完正在執行的語句后就斷開用戶連接,並不允許新用戶連接。 

 Transactional 等待用戶完成當前的事務,在擁護執行完當前事物后斷開連接,並不允許新的用戶連接數據庫。  

 Abort 不做任何等待,直接關閉數據庫,執行強行斷開連接並直接關閉數據庫。

 前三種方式不會丟失用戶數據。第四種情況對於緊急關閉數據庫才使用。

 

數據庫的啟動

 數據庫啟動使用startup命令,它有三種情況 

 第一種:不帶參數,啟動數據庫實例並打開數據庫,以便用戶使用數據庫,在多數情況下,使用這種方式! 

 第二種:帶nomount參數,只啟動數據庫實例,但不打開數據庫,在你希望創建一個新的數據庫時使用,或者在你需要這樣的時候使用! 

 第三種:帶mount參數,在進行數據庫更名的時候采用。這個時候數據庫就打開並可以使用了! 

 其他問題:

 提示:環境變量 ORACLE_SID 未定義,請定義。

 設置 ORACLE_SID =WLW (WLW是我的實例名,也是服務名) C:\Documents and Settings\xcl>set ORACLE_SID=WLW(注意大寫)

 Oracle 10g錯誤:shared memory realm does not exist的分析與解決容,情況是這樣的:在連接Oracle 10g時出現了錯誤:“shared memory realm does not exist”,如下圖所示:

 

硬盤格式的文件存儲文件限制:

 NTFS(Windows):支持最大分區2TB,最大文件2TB

 FAT16(Windows):支持最大分區2GB,最大文件2GB

 FAT32(Windows):支持最大分區128GB,最大文件4GB

 HPFS(OS/2):支持最大分區2TB,最大文件2GB

 EXT2和EXT3(Linux):支持最大分區4TB,最大文件2GB

 JFS(AIX):支持最大分區4P(block size=4k),最大文件4P

 XFS(IRIX):這是個正經的64位的文件系統,可以支持9E(2的63次方)的分區

 ===========================================

最近給同事虛擬機上安裝了一個11g數據庫,發現一個奇怪的問題,用windows客戶段連接時候非常慢,慢到不能容忍的地步,但是本地os驗證登錄沒有問題,速度非常快,初步定為問題出在監聽上,於是我tnsping了一下,結果有點吃驚,要么是報錯類似的報錯有TNS-12535: TNS:operation timed out等,要么就是可以tnsping通,但是時間基本是五位數的。既然可以偶爾ping通,那么防火牆的原因排除了,而且我確定防火牆是關閉的而且disable了的。

猜測:是不是網絡通信問題?

           如果是網絡通信異常,那么我去虛擬機上easyconnect一下,應該要正常才對,結果是跟windows客戶端連接一樣慢。

嘗試重啟監聽也卡半天然后報錯。

 

監聽日志有這么一條WARNING: Subscription for node down event still pending異常記錄

 

 

無奈的求助百度,谷歌。。。 

1.防火牆                  ---早都已經關閉了

2.修改/etc/hosts文件,把不用的注釋掉               ---並沒有什么用,虛擬機是新裝的,里面也沒有什么多余信息

3.嘗試ping 主機                                                  ---非常快

4.listener.log日志過大(超過4G)                      ---剛剛安裝的數據庫,日志文件很小

5.查看v$session  看是不是有大量會話接入或者有沒有定時job        ---然並沒有,畢竟自己的虛擬機,也只有一台windows在連

6.重啟監聽                                                          --試過了,並沒有用,就連查看狀態都非常卡

。。。

看了好多帖子,發現都幫不到我

在最后發現一根救命稻草:服務器本身的DNS起作用了,DNS一起作用,hosts就有問題了

修改/etc/resolv.conf,里面內容都注釋掉(你也可以把這個文件mv到別的地方做備份,直接把原來路徑下的刪掉)

再次測試

果然問題出在這里,再次用windows端工具去連,速度也是非常快了。

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM