1. 程式人生 > >解決ORA-00020錯誤

解決ORA-00020錯誤

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!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;
           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述