一次資料庫無法登陸的問題及排查
今天在中午的時候,收到客戶的郵件,說資料庫訪問有問題了,趕緊連到生產環境檢視。
結果在嘗試登入的時候報了listener的錯誤,感覺像是listener停了一樣。
> sqlplus n1/n1@xxxx
SQL*Plus: Release 11.2.0.2.0 Production on Mon Dec 29 12:33:23 2014
Copyright (c) 1982, 2010, Oracle. All rights reserved.
ERROR:
ORA-12541: TNS:no listener
結果在嘗試登入的時候報了listener的錯誤,感覺像是listener停了一樣。
> sqlplus n1/n1@xxxx
SQL*Plus: Release 11.2.0.2.0 Production on Mon Dec 29 12:33:23 2014
Copyright (c) 1982, 2010, Oracle. All rights reserved.
ERROR:
ORA-12541: TNS:no listener
Enter user-name:
ERROR:
ORA-12536: TNS:operation would block
當我再次登入資料庫伺服器的時候突然看到報了一行錯誤。提示系統資源的問題。
Last login: Mon Dec 29 12:33:55 2014 from xxxxxxx
-bash: fork: Resource temporarily unavailable
等我重新登入的時候,沒有使用tns連線的時候還是報錯。
> sqlplus n1/n1
SQL*Plus: Release 11.2.0.2.0 Production on Mon Dec 29 12:38:11 2014
Copyright (c) 1982, 2010, Oracle. All rights reserved.
ERROR:
ORA-12536: TNS:operation would block
根據以往碰到的問題情況,是session滿了,這個庫目前設定的session數支援近10000個session。連線暫時出現問題,趕緊先檢視下系統級的程式情況。
-bash-3.2$ ps -ef|wc -l
9513
-bash-3.2$ ps -ef|grep oracle|wc -l
8103
在稍等待了幾秒,再次嘗試終於連進資料庫了,我使用如下的sql語句定位了基本的問題情況。
set feed off
set verify off
set line 132
set pages 200
col username format a15
col sql_id format a20
col sql_address format a20
col machine format a30
col osuser format a15
col logon_time format a10
col program format a35
break on report
compute sum of cnt on report
select status,count(*) cnt from v$session group by status;
select USERNAME,OSUSER,machine, program,status,count(*) cnt from v$session group by status,USERNAME,OSUSER,machine, program having count(*)>2 order by cnt desc;
select USERNAME,OSUSER,machine, program,status,to_char(logon_time,'yyyy-mm-dd')logon_date,count(*) cnt from v$session group by status,USERNAME,OSUSER,machine, program,to_char(logon_time,'yyyy-mm-dd') order by username,osuser,cnt desc;
語句執行的結果如下,結果做了一些修改。
STATUS CNT
-------- ----------
ACTIVE 90
INACTIVE 8985
----------
sum 9075
USERNAME OSUSER MACHINE PROGRAM STATUS CNT
--------------- --------------- ------------------------------ ----------------------------------- -------- ----------
DAPPC mwrk01 client1 JDBC Thin Client INACTIVE 6215
DAPPC rwrk01 client1 JDBC Thin Client INACTIVE 126
CCCBSCUST01 pggate client3 extract@xxxxxxxx (TNS V1-V3) INACTIVE 90
DAPPC uwl45 client4 JDBC Thin Client INACTIVE 84
DAPPC uwl15 client1 JDBC Thin Client INACTIVE 83
----------
sum 6598
COUNT(*) OSUSER PREV_HASH_VALUE PREV_SQL_ID
---------- --------------- -------------------- --------------- -------------
1326 mwrk01 201716277 dqaf35060bwjp
1972 arwrk01 2096946154 f41ncsxygtqza
534 mwrk01 3203606695 dm03006zg6a57
可以看到在mwrk01這個使用者上已經有好幾千個session執行著同樣的sql語句。檢視這些session的登入時間還是能發現一些潛在的問題。
USERNAME OSUSER MACHINE PROGRAM STATUS LOGON_DATE CNT
--------------- --------------- ------------------------------ ----------------------------------- -------- ---------- ----------
DAPPC mwrk01 client1 JDBC Thin Client INACTIVE 2014-12-29 1206
DAPPC mwrk01 client1 JDBC Thin Client INACTIVE 2014-12-27 990
DAPPC mwrk01 client1 JDBC Thin Client INACTIVE 2014-12-28 664
DAPPC mwrk01 client1 JDBC Thin Client INACTIVE 2014-12-26 498
DAPPC mwrk01 client1 JDBC Thin Client INACTIVE 2014-12-24 168
DAPPC mwrk01 client1 JDBC Thin Client INACTIVE 2014-12-22 99
DAPPC mwrk01 client1 JDBC Thin Client INACTIVE 2014-12-23 38
對應的sql語句都是同一個Insert操作。
這是一個每天都需要執行的job,但是根據開發的反饋這些job執行完就會停掉。
從上面的情況來看似乎沒有按照預期的方式來執行。
這種問題按照以往的思路都是已經基本定論,配合開發來做進一步的排查了。發現很多問題再深入一點,還是會有一些收穫,對於這個問題開發主動找到我,我們大概聊了下,他們反饋說這個job執行的頻率並不高。每天一次
,他們也很納悶為什麼還存在著幾天前的session,問題又迴歸到我這了,不過也是可以理解,我和他們解釋說,如果一個job從客戶端斷開後,是會被資料庫的後臺程式清理掉的,如果一直沒有釋放session就很可能是一直存在著
未完成的事務,從這個思路來考慮,有大量的session都在執行同樣的insert操作,從業務上講也是存在問題的,他們解釋說根據新的業務處理,每處理一個外部檔案,都會有一個單獨的session在處理。
我就追問那是都處理完成之後是等待都處理完了再commit還是每處理一個就commit,他們就有些支支吾吾了,說在這塊沒做過變化,都是處理完成再提交。
這樣問題就比較明朗了。我建議他們再確認一下事務結束的處理,以前是一個session處理多個檔案,都是每處理一個檔案commit一次,最後考慮到效能是在處理完成後再commit,這次的變更使用了多個session處理,
把事務的處理部分再做變更,很可能就忽略了那個部分。如果是那種情況的話,很可能就會導致大量的session佔用。最後他們反饋說這個地方確實存在著一定的問題,問題的處理就進入開發修復的階段了。
ERROR:
ORA-12536: TNS:operation would block
Last login: Mon Dec 29 12:33:55 2014 from xxxxxxx
-bash: fork: Resource temporarily unavailable
等我重新登入的時候,沒有使用tns連線的時候還是報錯。
> sqlplus n1/n1
SQL*Plus: Release 11.2.0.2.0 Production on Mon Dec 29 12:38:11 2014
Copyright (c) 1982, 2010, Oracle. All rights reserved.
ERROR:
ORA-12536: TNS:operation would block
根據以往碰到的問題情況,是session滿了,這個庫目前設定的session數支援近10000個session。連線暫時出現問題,趕緊先檢視下系統級的程式情況。
-bash-3.2$ ps -ef|wc -l
9513
-bash-3.2$ ps -ef|grep oracle|wc -l
8103
在稍等待了幾秒,再次嘗試終於連進資料庫了,我使用如下的sql語句定位了基本的問題情況。
set feed off
set verify off
set line 132
set pages 200
col username format a15
col sql_id format a20
col sql_address format a20
col machine format a30
col osuser format a15
col logon_time format a10
col program format a35
break on report
compute sum of cnt on report
select status,count(*) cnt from v$session group by status;
select USERNAME,OSUSER,machine, program,status,count(*) cnt from v$session group by status,USERNAME,OSUSER,machine, program having count(*)>2 order by cnt desc;
select USERNAME,OSUSER,machine, program,status,to_char(logon_time,'yyyy-mm-dd')logon_date,count(*) cnt from v$session group by status,USERNAME,OSUSER,machine, program,to_char(logon_time,'yyyy-mm-dd') order by username,osuser,cnt desc;
語句執行的結果如下,結果做了一些修改。
STATUS CNT
-------- ----------
ACTIVE 90
INACTIVE 8985
----------
sum 9075
USERNAME OSUSER MACHINE PROGRAM STATUS CNT
--------------- --------------- ------------------------------ ----------------------------------- -------- ----------
DAPPC mwrk01 client1 JDBC Thin Client INACTIVE 6215
DAPPC rwrk01 client1 JDBC Thin Client INACTIVE 126
CCCBSCUST01 pggate client3 extract@xxxxxxxx (TNS V1-V3) INACTIVE 90
DAPPC uwl45 client4 JDBC Thin Client INACTIVE 84
DAPPC uwl15 client1 JDBC Thin Client INACTIVE 83
----------
sum 6598
COUNT(*) OSUSER PREV_HASH_VALUE PREV_SQL_ID
---------- --------------- -------------------- --------------- -------------
1326 mwrk01 201716277 dqaf35060bwjp
1972 arwrk01 2096946154 f41ncsxygtqza
534 mwrk01 3203606695 dm03006zg6a57
可以看到在mwrk01這個使用者上已經有好幾千個session執行著同樣的sql語句。檢視這些session的登入時間還是能發現一些潛在的問題。
USERNAME OSUSER MACHINE PROGRAM STATUS LOGON_DATE CNT
--------------- --------------- ------------------------------ ----------------------------------- -------- ---------- ----------
DAPPC mwrk01 client1 JDBC Thin Client INACTIVE 2014-12-29 1206
DAPPC mwrk01 client1 JDBC Thin Client INACTIVE 2014-12-27 990
DAPPC mwrk01 client1 JDBC Thin Client INACTIVE 2014-12-28 664
DAPPC mwrk01 client1 JDBC Thin Client INACTIVE 2014-12-26 498
DAPPC mwrk01 client1 JDBC Thin Client INACTIVE 2014-12-24 168
DAPPC mwrk01 client1 JDBC Thin Client INACTIVE 2014-12-22 99
DAPPC mwrk01 client1 JDBC Thin Client INACTIVE 2014-12-23 38
對應的sql語句都是同一個Insert操作。
這是一個每天都需要執行的job,但是根據開發的反饋這些job執行完就會停掉。
從上面的情況來看似乎沒有按照預期的方式來執行。
這種問題按照以往的思路都是已經基本定論,配合開發來做進一步的排查了。發現很多問題再深入一點,還是會有一些收穫,對於這個問題開發主動找到我,我們大概聊了下,他們反饋說這個job執行的頻率並不高。每天一次
,他們也很納悶為什麼還存在著幾天前的session,問題又迴歸到我這了,不過也是可以理解,我和他們解釋說,如果一個job從客戶端斷開後,是會被資料庫的後臺程式清理掉的,如果一直沒有釋放session就很可能是一直存在著
未完成的事務,從這個思路來考慮,有大量的session都在執行同樣的insert操作,從業務上講也是存在問題的,他們解釋說根據新的業務處理,每處理一個外部檔案,都會有一個單獨的session在處理。
我就追問那是都處理完成之後是等待都處理完了再commit還是每處理一個就commit,他們就有些支支吾吾了,說在這塊沒做過變化,都是處理完成再提交。
這樣問題就比較明朗了。我建議他們再確認一下事務結束的處理,以前是一個session處理多個檔案,都是每處理一個檔案commit一次,最後考慮到效能是在處理完成後再commit,這次的變更使用了多個session處理,
把事務的處理部分再做變更,很可能就忽略了那個部分。如果是那種情況的話,很可能就會導致大量的session佔用。最後他們反饋說這個地方確實存在著一定的問題,問題的處理就進入開發修復的階段了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-1405510/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一次資料庫無法登陸的"問題"及排查資料庫
- vsftp無法使用root登陸的問題FTP
- 記一次 MySQL 資料庫問題排查MySql資料庫
- 一次資料庫響應緩慢的問題排查資料庫
- Solaris下root無法從遠端登陸的問題
- 誤修改ORACLE_HOME導致無法登陸資料庫Oracle資料庫
- cacti登陸出現報錯:資料庫無法連線資料庫
- solaris修改root shell後無法登陸的問題解決
- 資料庫突然當機無法open的問題及解決資料庫
- Linux Centos 普通使用者無法登陸SSH 問題LinuxCentOS
- Linux CentOS普通使用者無法登陸SSH問題LinuxCentOS
- 網站無法登陸網站
- 一次資料庫無法啟動問題的處理-ORA-00845資料庫
- IOS safari瀏覽器登陸時Cookie無法儲存的問題iOS瀏覽器Cookie
- 一次詭異的線上資料庫的死鎖問題排查過程資料庫
- listener的ORACLE_HOME配置出錯導致無法遠端登陸資料庫Oracle資料庫
- 10G密碼版本使用者無法登陸問題密碼
- itm tep無法登陸問題(錯誤號:KFWITM392E)
- 虛擬平臺客戶端無法登陸問題記錄客戶端
- 記一次hadoop yarn環境無法提交任務的問題排查HadoopYarn
- SYS使用者可以登入,其他使用者無法登陸的問題處理
- 利用遠端來修復本地計算機無法登陸的問題計算機
- 【問題處理】“sqlplus / as sysdba”無法登陸——多餘的斜槓!SQL
- 資料庫shutdown之後無法啟動的問題資料庫
- PUBLIC資料庫鏈無法刪除的問題(二)資料庫
- PUBLIC資料庫鏈無法刪除的問題(一)資料庫
- ajax資料無法更新問題原因及解決
- 無法連線windows例項的問題排查Windows
- Linux SSH 無法登陸Linux
- RMAN登陸及連線target資料庫的步驟方法資料庫
- 一次無法mount資料庫的經歷資料庫
- 客戶端無法連線資料庫的小問題客戶端資料庫
- 歸檔問題導致的資料庫無法啟動資料庫
- 資料問題排查思路
- [HP-UX] ftp無法登陸UXFTP
- IDEA無法連線docker中的資料庫的問題IdeaDocker資料庫
- Oracle日常問題處理-資料庫無法啟動Oracle資料庫
- Oracle日常問題-資料庫無法啟動(案例二)Oracle資料庫