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端工具去連,速度也是非常快了。