oracle連線超時自動斷開問題[轉]

xlfsy發表於2011-08-26

今天接到客戶電話,描述新建的oracle 11.1.0.7 RAC資料庫中,當一個使用者連線到資料庫上以後,如果在某一段時間內沒有任何動作的話,該程式就會自己中斷,這樣在應用程

序就會因為程式超時自動斷開而不能正常執行。
分析原因,應該是該程式的使用者的概要檔案(profile)配置問題。
發現使用者所在的profile的IDLE_TIME為30。即30秒該程式沒有任何操作,就會自動斷開。

PROFILE的管理(資原始檔)
當需要設定資源限制時,必須設定資料庫系統啟動引數RESOURCE_LIMIT,此引數預設值為FALSE
可以使用如下命令來啟動當前資源限制:
alter system set RESOURCE_LIMIT=true;
當需要以後啟動時也啟動限制,必須在init.ora中設定
RESOURCE_LIMIT=true

建立語法:
CREATE PROFILE profile LIMIT
{ resource_parameters | password_parameters }
[ resource_parameters | password_parameters ]...;

{ { SESSIONS_PER_USER | CPU_PER_SESSION | CPU_PER_CALL | CONNECT_TIME | IDLE_TIME
| LOGICAL_READS_PER_SESSION | LOGICAL_READS_PER_CALL | COMPOSITE_LIMIT }
{ integer | UNLIMITED | DEFAULT }
| PRIVATE_SGA { integer [ K | M ] | UNLIMITED | DEFAULT }
}

{ { FAILED_LOGIN_ATTEMPTS | PASSWORD_LIFE_TIME | PASSWORD_REUSE_TIME
| PASSWORD_REUSE_MAX | PASSWORD_LOCK_TIME | PASSWORD_GRACE_TIME }
{ expr | UNLIMITED | DEFAULT }
| PASSWORD_VERIFY_FUNCTION { function | NULL | DEFAULT }
}

CREATE PROFILE new_profile
LIMIT PASSWORD_REUSE_MAX DEFAULT
PASSWORD_REUSE_TIME UNLIMITED;

CREATE PROFILE app_user LIMIT
SESSIONS_PER_USER UNLIMITED
CPU_PER_SESSION UNLIMITED
CPU_PER_CALL 3000
CONNECT_TIME 45
LOGICAL_READS_PER_SESSION DEFAULT
LOGICAL_READS_PER_CALL 1000
PRIVATE_SGA 15K
COMPOSITE_LIMIT 5000000;

CREATE PROFILE app_user2 LIMIT
FAILED_LOGIN_ATTEMPTS 5
PASSWORD_LIFE_TIME 60
PASSWORD_REUSE_TIME 60
PASSWORD_REUSE_MAX UNLIMITED
PASSWORD_VERIFY_FUNCTION verify_function
PASSWORD_LOCK_TIME 1/24
PASSWORD_GRACE_TIME 10;

一、PROFILE的管理內容:
1、CPU的時間
2、I/O的使用
3、IDLE TIME(空閒時間)
4、CONNECT TIME(連線時間)
5、併發會話數量
6、口令機制:

二、DEFAULT PROFILE:
1、所有的使用者建立時都會被指定這個PROFILE
2、DEFAULT PROFILE的內容為空,無限制

三、PROFILE的劃分:
If a user attempts to perform an operation that exceeds the limit for other session resources,
Oracle aborts the operation, rolls back the current statement, and immediately returns an error.
The user can then commit or roll back the current transaction, and must then end the session.
that exceeds the limit(超過限制) for other session resources(範圍之外的其他資源)
被理解為:連線控制資源範圍之外的其他資源。

當一個使用者試圖操作超過限制的資源時,Oracle終止當前操作,取消正在執行的處理,並且返回一個錯誤,
使用者可以提交或回滾當前事物,之後必須斷開會話。

如果一個使用者試圖操作一個超出他限制的資源,Oracle將放棄這個操作,取消正在執行的處理,並立即返
回一個錯誤。這個使用者然後提交或回滾當前的處理,之後必須終止這個會話。

如果是呼叫限制時,Oracle終止當前操作,取消正在執行的處理,並且返回一個錯誤,回滾整個事務。

1、CALL級LIMITE:
物件是語句:
當該語句資源使用溢位時:
A、該語句終止
B、事物回退
C、SESSION連線保持

2、SESSION級LIMITE:
物件是:整個會話過程
溢位時:連線終止

四、如何管理一個PROFILE
1、CREATE PROFILE
2、分配給一個使用者
3、象開關一樣開啟限制。

五、如何建立一個PROFILE:
1、命令:
CREATE PROFILE 名稱
LIMIT
SESSION_PER_USER 2
CPU_PER_SESSION 1000
IDLE_TIME 60 使用者在資料庫終止前,可以讓連線空閒多長時間(分鐘)
CONNECT_TIME 480

六、限制引數:
0、UNLIMITED 取消資源限制
DEFAULT 缺剩資源限制,即使用default資源限制

1、CONNECT_TIME :一個連線會話的最長連線時間(分鐘)
當使用者會話時間超過CONNECT_TIME指定的時間,Oracle將回滾當前事務,並且結束他的會話
IDLE_TIME :一個連線會話的最長連線時間
當使用者空閒時間超過IDLE_TIME指定的時間,Oracle將回滾當前事務,並且結束他的會話

2、SESSIONS_PER_USER:一個使用者允許同時(併發)會話的總數,超過後系統禁止該使用者的後續會話,並返回錯誤:
ORA-02391 exceeded simultaneous SESSIONS_PER_USER limit


3、SESSION級LIMITE:
CPU_PER_SESSION:定義了一個SESSION佔用的CPU的時間(1/100 秒),當達到這個限制使用者不能在此會話中執行任何操作,
此時必須先斷開連線,再連線才行。
CPU_PER_CALL :限制每次呼叫SQL語句期間(parse、execute、fetch)可用的CPU時間總量,單位是百分之一秒。達到限制時
語句以報錯結束。不同於CPU_PER_SESSION的是,沒達到CPU_PER_SESSION限制,還可以進行新的查詢。

4、LOGICAL_READS_PER_SESSION: 一個會話允許讀寫的邏輯塊的數量限制

5、CALL級LIMITE
CPU_PER_CALL:每個語句佔用的CPU時間
LOGICAL_READS_PER_CALL:一次呼叫的SQL期間,允許讀資料庫塊數限制
6、PRIVATE_SGA:一個會話允許分配的最大SGA大小,使用K/M定義
COMPOSITE_LIMIT:一個會話的資源成本限制,CPU_PER_SESSION, CONNECT_TIME, LOGICAL_READS_PER_SESSION, and PRIVATE_SGA

七、分配給一個使用者:
CREATE USER 名稱。。。。。。
PROFILE 名稱
ALTER USER 名稱 PROFILE 名稱

八、開啟資源限制:
1、RESOURCE_LIMT:資原始檔中含有
2、ALTER SYSTEM SET RESOURCE_LIMIT=TRUE;
3、預設不開啟

九、修改PROFIE的內容:
1、ALTER PROFILE 名稱引數 新值
2、對於當前連線修改不生效。

DROP一個PROFILE
1、DROP PROFILE 名稱
刪除一個新的尚未分配給使用者的PROFILE,
2、DROP PROFILE 名稱 CASCADE
3、注意事項
A、一旦PROFILE被刪除,使用者被自動載入DEFAULT PROFILE
B、對於當前連線無影響
C、DEFAULT PROFILE不可以被刪除

十、資訊獲取:
1、DBA_USERS:
使用者名稱,PROFILE
2、DBA_PROFILES:
PROFILE及各種限制引數的值
每個使用者的限制:PROFILE(關鍵欄位)

十一、PROFILE的口令機制限制
1、限制內容
A、限制連續多少次登入失敗,使用者被加鎖
B、限制口令的生命週期
C、限制口令的使用間隔
2、限制生效的前提:
A、RESOURCE_LIMIT:=TRUE
B、ORACLERDBMSADMINUTLPWDMG.SQL
3、如何建立口令機制:
CREATE PROFILE 名稱
SESSIONS_PER_USER
.....
password_life_time 30
failed_log_attempts 3
password_reuse_time 3
4、引數的含義:
A、FAILED_LOGIN_ATTEMPTS :當連續登陸失敗次數達到該引數指定值時,使用者被加鎖;
經過DBA解鎖(或PASSWORD_LOCK_TIME天)後可繼續使用
B、PASSWORD_LIFE_TIME :口令的有效期(天),預設為UNLIMITED
C、PASSWORD_LOCK_TIME :帳戶因FAILED_LOGIN_ATTEMPTS鎖定時,加鎖天數
D、PASSWORD_GRACE_TIME :口令修改的寬限期(天)
E、PASSWORD_REUSE_TIME :口令被修改後原有口令隔多少天被重新使用,預設為UNLIMITED
F、PASSWORD_REUSE_MAX :口令被修改後原有口令被修改多少次才允許被重新使用。
G、PASSWORD_VERIFY_FUNCTION:口令效驗函式

十二、錯誤資訊及解決方法
ORA-02390 exceeded COMPOSITE_LIMIT, you are being logged off
Cause: The COMPOSITE_LIMIT for the profile is exceeded. That is, the weighted sum of the connection time, logical reads per session, CPU usage per session, and private SGA space used during the session exceeded the limit set by the COMPOSITE_LIMIT clause set in the user profile.
Action: If this happens often, ask the database administrator to raise the COMPOSITE_LIMIT of the user profile, or determine which resource is used the most and raise the limit on that resource.

ORA-02391 exceeded simultaneous SESSIONS_PER_USER limit
Cause: An attempt was made to exceed the maximum number of concurrent sessions allowed by the SESSIONS_PER_USER clause of the user profile.
Action: End one or more concurrent sessions or ask the database administrator to increase the SESSIONS_PER_USER limit of the user profile. For more information about SESSIONS_PER_USER and the database administrator's specific tasks of adjusting concurrent sessions, see the Oracle9i SQL Reference and the Oracle9i Database Administrator's Guide.

ORA-02392 exceeded session limit on CPU usage, you are being logged off
Cause: An attempt was made to exceed the maximum CPU usage allowed by the CPU_PER_SESSION clause of the user profile.
Action: If this happens often, ask the database administrator to increase the CPU_PER_SESSION limit of the user profile.

ORA-02393 exceeded call limit on CPU usage
Cause: An attempt was made to exceed the maximum CPU time for a call, a parse, execute, or fetch, allowed by the CPU_PER_CALL clause of the user profile.
Action: If this happens often, ask the database administrator to increase the CPU_PER_CALL limit of the user profile.

ORA-02394 exceeded session limit on IO usage, you are being logged off
Cause: An attempt was made to exceed the maximum I/O allowed by the LOGICAL_READS_PER_SESSION clause of the user profile.
Action: If this happens often, ask the database administrator to increase the LOGICAL_READS_PER_SESSION limit of the user profile.

ORA-02395 exceeded call limit on IO usage
Cause: An attempt was made to exceed the maximum I/O for a call, a parse, execute, or fetch, allowed by the LOGICAL_READS_PER_CALL clause of the user profile.
Action: If this happens often, ask the database administrator to increase the LOGICAL_READS_PER_CALL limit of the user profile.

ORA-02396 exceeded maximum idle time, please connect again
Cause: A user has exceeded the maximum time allowed to remain idle.
Action: The user must reconnect to the database.

ORA-02397 exceeded PRIVATE_SGA limit, you are being logged off
Cause: This error occurs only when using a multi-threaded server.
Action: Contact the database administrator to expand the PRIVATE_SGA limit.
[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14844492/viewspace-1054414/,如需轉載,請註明出處,否則將追究法律責任。

相關文章