程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> oracle查看被鎖的表和被鎖的進程以及殺掉這個進程,oracle

oracle查看被鎖的表和被鎖的進程以及殺掉這個進程,oracle

編輯:Oracle教程

oracle查看被鎖的表和被鎖的進程以及殺掉這個進程,oracle


-- 1. 查看被鎖的表

SELECT p.spid, a.serial#, c.object_name, b.session_id, b.oracle_username,b.os_user_name
FROM v$process p, v$session a, v$locked_object b, all_objects c
WHERE p.addr = a.paddr
AND a.process = b.process
AND c.object_id = b.object_id

-- 2. 查看是哪個進程鎖的

SELECT sid, serial#, username, status, osuser FROM v$session where serial# = '5002'

SELECT sid, serial#, username, status, osuser FROM v$session where serial# = '3789'

-- 3. 殺掉這個進程

alter system kill session 'sid,serial#';
alter system kill session '269,3789';
alter system kill session '34,4661';
alter system kill session '265,5002';
alter system kill session '289,1688';
alter system kill session '282,5799';

查看oracle是否鎖表之後, 然後如果我沒有DBA權限 怎殺掉進程或者解鎖表

第一種:
SQL>select session_id from v$locked_object;
49
SQL>SELECT sid, serial#, username FROM v$session where sid = 49;
49 554 system
SQL>ALTER SYSTEM KILL SESSION '49, 554';
第二種:
如果用的是客戶端登錄,直接關掉客戶端就可以了,因為你的客戶端也是個session
普通用戶也可以,因為是你這個用戶開啟這個進程,那麼你也可以關閉這個進程
 

oracle表中的記錄被某個用戶鎖住了,而且在瑣表的進程中找不到,有沒有辦法解決這個問題?

通過dba_objects查找表的object_id,再查v$lock中id1等於object_id的,在這行裡肯定有個不同於你SID的用戶擁有了這個表的鎖,它肯定在update這個表,長時間沒有commit,要麼找到這個client讓它commit或者rollback,要麼通過sid把它kill掉
下面還有幾個方法
a. $ORACLE_HOME/rdbms/admin/utllockt.sql 好用!
b.select blocking_session from v$session where blocking_session not is null 可以查出誰會阻塞會話 必須在10g中
c.dba_waiters 可以查詢阻塞源和目標
d. dba_blockers 僅有一列阻塞源
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved