解決ORA-00020錯誤
阿新 • • 發佈:2018-11-17
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
專案上使用的Oracle伺服器經常出現無法登陸的情況,嘗試檢視資料庫dump檔案,沒有發現在無法登陸時的報錯資訊,使用SecureCRT連線伺服器登入sqlplus時出現錯誤"ORA-00020: maximum number of processes (150) exceeded",解決方法如下:
開始時懷疑資料庫死鎖,通常這種情況下可以通過查詢下列表/檢視,殺死死鎖的程序解決:
V$LOCK | 列出當前Oracle持有的鎖和未解決的鎖請求 |
V$SESSION | 列出當前連線到資料庫的Session資訊 |
DBA_BLOCKERS | 顯示鎖住物件的會話 |
DBA_WAITERS | 顯示等待被鎖住物件的會話 |
DBA_DDL_LOCKS | 列出所有DDL鎖和未解決的DDL鎖請求 |
DBA_DML_LOCKS | 列出所有DML鎖和未解決的DML鎖請求 |
DBA_LOCK | 列出所有鎖和latch,以及所有未解決的鎖請求 |
DBA_LOCK_INTERNAL | 每個鎖或latch顯示一行,每個未解決的鎖請求顯示一行 |
通過查詢V$SESSION檢視,發現連線總量已達到上限150,由於在做Oracle ADF開發,該OracleDB作為開發資料庫,連線較多屬於允許範圍內,遂增大最大連線數,修改對應init.ora檔案中"procdsses=150",重啟DB。
10g裡面如此修改無效,可以通過sqlplus連線至資料庫
SQL> show parameter processes; //檢視processes連線數設定
SQL> show parameter sessions; //檢視sessions連線數設定
SQL> alter system set processes=300 scope=spfile; //設定processes連線數
不需要設定sessions連線數,sessions連線數為processes * 1.1 + 5
重啟DB,問題解決。
附:用於確定鎖住資料庫物件的鎖的SQL
select c.owner,
c.object_name,
c.object_type,
b.sid,
b.serial#,
b.status,
b.osuser,
b.machine
from v$locked_object a,
v$session b,
dba_objects c
where b.sid = a.session_id
and a.object_id = c.object_id;