oracle 鎖問題的解決
可以用Spotlight軟體對資料庫的執行狀態進行監控。
當出現session鎖時,我們要及時進行處理.
1. 檢視哪些session鎖:
SQL語句:select 'alter system kill session '''||sid||','||serial#||''';' from v$session where sid in (select sid from v$lock where block = 1);
SQL> select 'alter system kill session '''||sid||','||serial#||''';' from v$session where sid in (select sid from v$lock where block = 1);
'ALTERSYSTEMKILLSESSION'''||SID||','||SERIAL#||''';'
--------------------------------------------------------------------------------
alter system kill session '132,731';
alter system kill session '275,15205';
alter system kill session '308,206';
alter system kill session '407,3510';
2. 檢視session鎖.
sql語句:select s.sid, q.sql_text from v$sqltext q, v$session s
where q.address = s.sql_address
and s.sid = &sid
order by piece;
SQL> select s.sid,q.sql_text from v$sqltext q, v$session s where q.address = s.sql_address and s.sid in (select sid from v$lock where block = 1) order by piece;
SID SQL_TEXT
---------- ----------------------------------------------------------------
77 UPDATE PROFILE_USER SET ID=1,COMPANY_ID=2,CUSTOMER_ID=3,NAMED
77 _INSURED_ID=4,LOGIN=5,ROLE_ID=6,PASSWORD=7,EMAIL=8,TIME_ZON
77 E=9 WHERE PROFILE_USER.ID=:34
3 rows selected.
3. kill鎖的程式.
SQL語句:alter system kill session '77,22198';
SQL> alter system kill session '391,48398';
System altered.
4. 檢視誰鎖了誰。
select s1.username || [email='@']'@'[/email] || s1.machine
|| ' ( SID=' || s1.sid || ' ) is blocking '
|| s2.username || [email='@']'@'[/email] || s2.machine || ' ( SID=' || s2.sid || ' ) ' AS blocking_status
from v$lock l1, v$session s1, v$lock l2, v$session s2
where s1.sid=l1.sid and s2.sid=l2.sid
and l1.BLOCK=1 and l2.request > 0
and l1.id1 = l2.id1
and l2.id2 = l2.id2 ;
注:
> : 重定向輸出,將檔案的標準輸出重新定向輸出到檔案,或將資料檔案作為另一程式的標準輸入內容。
| :UNIX管道:將一檔案的輸出作為另一檔案的輸入.
在執行SQL語句試:alter system kill session '391,48398'(sid為391); 應當注意對於sid在100以下的應當謹慎,可能該程式對應某個application,如對應某個事務,可以kill.
------------------------------------------------------csdn 網友的SQL-------------------------------
SELECT sn.username, m.SID,sn.SERIAL#, m.TYPE,
DECODE (m.lmode,
0, 'None',
1, 'Null',
2, 'Row Share',
3, 'Row Excl.',
4, 'Share',
5, 'S/Row Excl.',
6, 'Exclusive',
lmode, LTRIM (TO_CHAR (lmode, '990'))
) lmode,
DECODE (m.request,
0, 'None',
1, 'Null',
2, 'Row Share',
3, 'Row Excl.',
4, 'Share',
5, 'S/Row Excl.',
6, 'Exclusive',
request, LTRIM (TO_CHAR (m.request, '990'))
) request,
m.id1, m.id2
FROM v$session sn, v$lock m
WHERE (sn.SID = m.SID AND m.request != 0) --存在鎖請求,即被阻塞
OR ( sn.SID = m.SID --不存在鎖請求,但是鎖定的物件被其他會話請求鎖定
AND m.request = 0
AND lmode != 4
AND (id1, id2) IN (
SELECT s.id1, s.id2
FROM v$lock s
WHERE request != 0 AND s.id1 = m.id1
AND s.id2 = m.id2)
)
ORDER BY id1, id2, m.request;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/235507/viewspace-705778/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 解決鎖表問題Oracle
- oracle 解鎖的問題Oracle
- 解決Oracle死鎖問題步驟Oracle
- Oracle觸發器死鎖問題解決Oracle觸發器
- oracle外來鍵索引解決父表鎖定問題Oracle索引
- openldap+NFS 鎖問題解決LDANFS
- SQLserver 程式被死鎖問題解決SQLServer
- oracle壞塊問題的解決Oracle
- oracle鎖表問題Oracle
- Mysql使用kill命令解決死鎖問題MySql
- 用分散式鎖解決併發問題分散式
- Redis分散式鎖解決搶購問題Redis分散式
- 通過 sysprocesses 解決Sql死鎖問題SQL
- 解決SQL Server 2005中鎖的問題SQLServer
- oracle字元亂碼問題的解決Oracle字元
- oracle的2G問題解決Oracle
- Mysql(MyISAM)的讀寫互斥鎖問題的解決方法MySql
- 死鎖問題排查過程-間隙鎖的復現以及解決
- 運維必備-解決鎖問題的全過程運維
- 故障解析丨一次死鎖問題的解決
- Java 程式死鎖問題原理及解決方案Java
- 解決SQL2005死鎖問題SQL
- 解決「問題」,不要解決問題
- oracle imp字符集問題的解決Oracle
- 解決Oracle序列跳號問題Oracle
- JDBC Oracle executeUpdate 卡死問題解決JDBCOracle
- 解決問題oracle學習篇Oracle
- 解決oracle中not like效率問題Oracle
- 什麼是鎖?深入分析解讀MySQL鎖,解決幻讀問題!MySql
- 能幫你解決90%以上Java面試中的鎖問題(Java中的鎖)Java面試
- 解決Oracle死鎖的快捷方法Oracle
- 批量解決oracle鎖等待的方法Oracle
- Oracle資源正忙,要求指定NOWAIT——Oracle解鎖問題OracleAI
- redis分散式鎖的問題和解決Redis分散式
- 手把手教你分析解決MySQL死鎖問題MySql
- redis實現分散式鎖---實操---問題解決Redis分散式
- [oracle]解決centos 7下oracle的中文亂碼問題OracleCentOS
- Oracle DRM引起的問題解決一例Oracle