11.2資料庫登入出現library cache lock等待(二)
客戶的11.2.0.2 RAC for Linux X86-64環境的資料庫在登入時,發現出現長時間等待。
這一篇描述現象重現過程。
11.2資料庫登入出現library cache lock等待(一):
上一篇描述了客戶的11.2.0.2 RAC for Linux X86-64環境出現library cache lock的問題,同事回來後想要模擬這個現象,在Windows環境下的11.2.0.1上卻沒有模擬出來,我也在Windows上的11.2.0.1上嘗試了一下,結果沒有出現library cache lock等待,但是出現了row cache lock等待事件。
測試步驟很簡單,開啟三個sqlplus,其中一個設定SET TIME ON,獲取時間資訊,並不斷的已錯誤的使用者名稱密碼嘗試連線資料庫。另一個會話以正確的使用者名稱和密碼連線到資料庫,設定SQLPROMPT為SQL2>,以便於和第一個會話區別。最後一個會話以SYS登入資料庫,檢查會話的等待狀態:
SQL> SET TIME ON
08:34:41 SQL> CONN TEST/A@192.25.1.100/TEST112
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
08:34:42 SQL> CONN
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
08:34:42 SQL> CONN
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
08:34:43 SQL> CONN
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
08:34:44 SQL> CONN
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
08:34:46 SQL> CONN
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
08:34:49 SQL> CONN
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
08:34:54 SQL> CONN
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
08:34:59 SQL> CONN
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
08:35:05 SQL> CONN
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
08:35:12 SQL> CONN
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
08:35:21 SQL> CONN
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
08:35:30 SQL> CONN
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
08:35:40 SQL> CONN
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
08:35:50 SQL> CONN
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
08:36:01 SQL> CONN
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
08:36:01 SQL> CONN
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
08:36:01 SQL> CONN
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
08:36:01 SQL> CONN
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
08:36:02 SQL> CONN
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
08:36:05 SQL> CONN
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
.
.
.
08:38:00 SQL> CONN
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
08:38:10 SQL> CONN
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
08:38:20 SQL> CONN
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
08:38:30 SQL>
可以看到,會話1登入失敗的等待時間從1秒慢慢漲到了10秒,隨後又縮短到1秒以內,最後又一次漲到了10秒。
之所以等待時間被重置,是因為會話2上成功的執行一次登入:
SQL> CONN TEST/TEST@192.25.1.100/TEST112
已連線。
SQL> SET SQLP 'SQL2> '
SQL2> CONN TEST/TEST@192.25.1.100/TEST112
已連線。
SQL2>
會話2的登入成功,使得會話1上10秒的延遲驗證被重置到1秒以內。
最後看一下V$SESSION檢視查詢的等待資訊:
SQL> SELECT SID, USERNAME, PROGRAM, EVENT, SECONDS_IN_WAIT
2
FROM V$SESSION
3
WHERE NVL(USERNAME, 'OTHER') != USER
4
AND NVL(PROGRAM, 'OTHER') NOT LIKE 'ORACLE.EXE%';
SID USERNAME PROGRAM EVENT
SECONDS_IN_WAIT
---------- ---------- --------------- -------------------------------------
---------------
12 sqlplusw.exe SQL*Net message from client 4
63 TEST sqlplusw.exe SQL*Net message from client 89
SQL> SELECT SID, USERNAME, PROGRAM, EVENT, SECONDS_IN_WAIT
2
FROM V$SESSION
3
WHERE NVL(USERNAME, 'OTHER') != USER
4
AND NVL(PROGRAM, 'OTHER') NOT LIKE 'ORACLE.EXE%';
SID USERNAME PROGRAM EVENT
SECONDS_IN_WAIT
---------- ---------- --------------- -------------------------------------
---------------
12 sqlplusw.exe SQL*Net message from client 2
63 TEST sqlplusw.exe SQL*Net message from client 103
SQL> SELECT SID, USERNAME, PROGRAM, EVENT, SECONDS_IN_WAIT
2
FROM V$SESSION
3
WHERE NVL(USERNAME, 'OTHER') != USER
4
AND NVL(PROGRAM, 'OTHER') NOT LIKE 'ORACLE.EXE%';
SID USERNAME PROGRAM EVENT SECONDS_IN_WAIT
---------- ---------- --------------- -------------------------------------
---------------
12 sqlplusw.exe SQL*Net message from client 6
63 TEST sqlplusw.exe SQL*Net message from client 107
SQL> SELECT SID, USERNAME, PROGRAM, EVENT, SECONDS_IN_WAIT
2
FROM V$SESSION
3
WHERE NVL(USERNAME, 'OTHER') != USER
4
AND NVL(PROGRAM, 'OTHER') NOT LIKE 'ORACLE.EXE%';
SID USERNAME PROGRAM EVENT SECONDS_IN_WAIT
---------- ---------- --------------- -------------------------------------
---------------
12 sqlplusw.exe SQL*Net message from client 8
63 TEST sqlplusw.exe SQL*Net message from client 143
SQL> SELECT SID, USERNAME, PROGRAM, EVENT, SECONDS_IN_WAIT
2
FROM V$SESSION
3
WHERE NVL(USERNAME, 'OTHER') != USER
4
AND NVL(PROGRAM, 'OTHER') NOT LIKE 'ORACLE.EXE%';
SID USERNAME PROGRAM EVENT SECONDS_IN_WAIT
---------- ---------- --------------- -------------------------------------
---------------
12 sqlplusw.exe SQL*Net message from client 1
63 sqlplusw.exe row
cache lock 1
SQL> SELECT SID, USERNAME, PROGRAM, EVENT, SECONDS_IN_WAIT
2
FROM V$SESSION
3
WHERE NVL(USERNAME, 'OTHER') != USER
4
AND NVL(PROGRAM, 'OTHER') NOT LIKE 'ORACLE.EXE%';
SID USERNAME PROGRAM
EVENT SECONDS_IN_WAIT
---------- ---------- --------------- -------------------------------------
---------------
12 sqlplusw.exe SQL*Net message from client 4
63 sqlplusw.exe row cache lock 4
SQL> SELECT SID, USERNAME, PROGRAM, EVENT, SECONDS_IN_WAIT
2
FROM V$SESSION
3
WHERE NVL(USERNAME, 'OTHER') != USER
4
AND NVL(PROGRAM, 'OTHER') NOT LIKE 'ORACLE.EXE%';
SID USERNAME PROGRAM EVENT
SECONDS_IN_WAIT
---------- ---------- --------------- -------------------------------------
---------------
12 sqlplusw.exe SQL*Net message from client 6
63 sqlplusw.exe row cache lock 6
SQL> SELECT SID, USERNAME, PROGRAM, EVENT, SECONDS_IN_WAIT
2
FROM V$SESSION
3
WHERE NVL(USERNAME, 'OTHER') != USER
4
AND NVL(PROGRAM, 'OTHER') NOT LIKE 'ORACLE.EXE%';
SID USERNAME PROGRAM EVENT
SECONDS_IN_WAIT
---------- ---------- --------------- -------------------------------------
---------------
12 sqlplusw.exe SQL*Net message from client 9
63 sqlplusw.exe row cache lock 8
SQL> SELECT SID, USERNAME, PROGRAM, EVENT, SECONDS_IN_WAIT
2
FROM V$SESSION
3
WHERE NVL(USERNAME, 'OTHER') != USER
4
AND NVL(PROGRAM, 'OTHER') NOT LIKE 'ORACLE.EXE%';
SID USERNAME PROGRAM EVENT
SECONDS_IN_WAIT
---------- ---------- --------------- -------------------------------------
---------------
63 TEST sqlplusw.exe SQL*Net message from client 1
69 sqlplusw.exe SQL*Net message from client 0
可以看到,如果只有一個會話連線資料庫失敗,則不會導致任何異常等待的出現,如果這時存在另一個會話以同樣的使用者名稱來訪問資料庫,那麼不管這個使用者使用的密碼是否正確,都會引發row cache lock等待事件。
而同樣的測試在11.2.0.2的環境中,出現的等待是library cache lock。檢查了一下,當前的row cache lock等待事件,實際上是11.2.0.1的一個bug:Bug 9720182: DUE TO ROW CACHE LOCK WAIT EVENTS IN DATABASE APPLICATION GOT HUNG。
Oracle提供了專門的PATCH可以解決這個問題,其實解決這個問題的最有效的辦法,就是避免使用者使用不正確的密碼來連線資料庫。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-710844/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- latch:library cache lock等待事件事件
- library cache pin和library cache lock(二)
- [20240827]分析為什麼出現library cache lock等待事件2.txt事件
- [20240828]分析為什麼出現library cache lock等待事件5.txt事件
- 【TUNE_ORACLE】等待事件之“library cache lock”Oracle事件
- library cache pin和library cache lock(一)
- library cache pin和library cache lock (zt)
- library cache lock和library cache bin實驗_2.0
- 【等待事件】library cache pin事件
- Library Cache最佳化篇(一)降低library cache lock和library cache pin的方法
- [20240920]跟蹤library cache lock library cache pin使用gdb.txt
- [20240824]跟蹤library cache lock library cache pin使用gdb.txt
- Oracle 11g 密碼延遲認證與 library cache lock 等待Oracle密碼
- 當刪除oracle資料庫user時發生row cache lock 等待事件Oracle資料庫事件
- 【ASM_ORACLE】Library Cache最佳化篇(二)Library cache load lock的概念和解決辦法ASMOracle
- Library Cache 診斷:Lock, Pin 以及 Load Lock (文件 ID 1548524.1)
- 一次library cache lock 問題分析
- [20241105]跟蹤library cache lock library cache pin使用gdb(11g)2.txt
- [20241108]跟蹤library cache lock library cache pin使用gdb(11g)4.txt
- [20241108]跟蹤library cache lock library cache pin使用gdb(11g)3.txt
- 【TUNE_ORACLE】等待事件之“library cache pins”Oracle事件
- cache資料庫入門教程資料庫
- 【ASK_ORACLE】Library cache pin 與 library load lock的關係和區別Oracle
- 【ASK_ORACLE】Library Cache概念篇(二)之Library Cache Pin的定義Oracle
- 金倉資料庫KingbaseES等待事件之LWLock lock_manager資料庫事件
- 重啟大法失效?詳述Oracle11g因JDBC bug引發異常Library Cache Lock等待處理事件OracleJDBC事件
- 徹底搞清楚library cache lock的成因和解決方法(轉)
- Oracle Library cacheOracle
- Lock物件Condition介面實現等待/通知物件
- library cache pin(轉)
- 10.註冊和登入功能實現(3)—— 註冊資料寫入資料庫資料庫
- 在登入資料庫的使用!sql資料庫SQL
- CAS 5.3使用MySQL資料庫登入MySql資料庫
- 資料庫登入留痕功能新增資料庫
- 透過等待看資料庫資料庫
- [20190402]Library Cache mutex.txtMutex
- [20210507]dump library_cache.txt
- Oracle11g 密碼延遲認證導致library cache lock的情況分析Oracle密碼
- GaussDB資料庫SQL系列-LOCK TABLE資料庫SQL