殺會話之查詢鎖表的物件及相關操作
主題:殺會話之查詢鎖表的物件及相關操作
作者:基毛飛上天
場景:今天有個小哥哥跟我說:他們正在truncate一張表,但是卻報了錯誤,你可以幫我們看下是什麼導致資源正在繁忙嗎?順便就幫我們殺掉會話吧!
報錯內容如下:
處理思路:
(1)透過相關語句查詢出佔用該表資源的會話sid和serial#,以及process
(2)找到相關資訊之後,需要殺會話,殺process程式
1. 透過v$locked_object、dba_objects、v$session和v$process等檢視找出相關的資訊
2. 根據SQL_ID查詢對應的SQL語句
瞭解下這個操作是否導致資源繁忙。
3. 殺會話
殺會話也不是那麼容易就能殺掉的喔,需要等待一些時間
4. 檢視會話的狀態
5. 查process程式
6. 檢視會話是否存在
7. 收工結束
作者:基毛飛上天
場景:今天有個小哥哥跟我說:他們正在truncate一張表,但是卻報了錯誤,你可以幫我們看下是什麼導致資源正在繁忙嗎?順便就幫我們殺掉會話吧!
報錯內容如下:
點選(此處)摺疊或開啟
-
SQL> truncate table ZJDB.T_TABLE;
-
truncate table ZJDB.T_TABLE
-
*
-
ERROR at line 1:
- ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
(1)透過相關語句查詢出佔用該表資源的會話sid和serial#,以及process
(2)找到相關資訊之後,需要殺會話,殺process程式
1. 透過v$locked_object、dba_objects、v$session和v$process等檢視找出相關的資訊
點選(此處)摺疊或開啟
-
select object_name ,machine ,s.program ,
-
s.sid,s.serial#
-
p.spid as os_pid ,
-
s.sql_address,
-
l.locked_mode,
-
s.username,
-
s.process,
-
s.sql_id
-
from v$locked_object l,dba_objects o ,v$session s ,v$process p
-
where l.object_id=o.object_id
-
and l.session_id=s.sid
-
and s.paddr=p.addr
-
and object_name='T_TABLE' and o.owner='ZJDB'
- order
-
by 1
- ;
-
OBJECT_NAME MACHINE PROGRAM sid serial# OS_PID SQL_ADDRESS LOCKED_MODE USERNAME PROCESS SQL_ID
------------- ------------- ---------------- ----- ------ --------- ------------- ----------- -------- ---------- -------------
T_TABLE RACZJ-DB01 plsqldev.~~ 5489 21743 4202874 071113A2QA1CC0 3 SCOTT 5416:7556 7qaxjdqwm4tkf
2. 根據SQL_ID查詢對應的SQL語句
瞭解下這個操作是否導致資源繁忙。
點選(此處)摺疊或開啟
-
SQL> SELECT SQL_TEXT FROM V$SQLTEXT WHERE SQL_ID = '7qaxjdqwm4tkf' ORDER BY PIECE;
- delete from /*+parallel(t,4)*/ from ZJDB.T_TABLE t where id=10;
殺會話也不是那麼容易就能殺掉的喔,需要等待一些時間
點選(此處)摺疊或開啟
- SQL> alter system kill session '5489,21743';
alter system /*AP_HW_20180423_6351799*/ kill session '5389,21743'
*
ERROR at line 1:
ORA-00031: session marked for kill
*
ERROR at line 1:
ORA-00031: session marked for kill
點選(此處)摺疊或開啟
-
SQL> select sid,serial#,status from v$session where sid =5489 and serial#=21743;
-
-
SID SERIAL# STATUS
-
---------- ---------- --------
- 5389 41743 KILLED
5. 查process程式
點選(此處)摺疊或開啟
-
$ps -ef|grep 4392874
-
0 17:09:20 pts/0 0:00 grep 4202874
- 9 10:08:17 - 19:18 oracle RAZJDB1 (LOCAL=NO) --刷出非本地連線資訊
$ps -ef|grep 4392874 |grep LOCAL=NO|awk '{print " -9 "$2}' --刷出可以直接用於kill的資訊
-9 4392874
$ps -ef|grep 4392874 |grep LOCAL=NO|awk '{print " -9 "$2}'|xargs kill --殺process
-9 4392874
$ps -ef|grep 4392874 |grep LOCAL=NO|awk '{print " -9 "$2}'|xargs kill --殺process
$
點選(此處)摺疊或開啟
-
SQL> alter system kill session '5489,21743';
-
alter system kill session '5489,21743'
-
*
-
ERROR at line 1:
- ORA-00030: User session ID does not exist.
7. 收工結束
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29734436/viewspace-2155350/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle查詢並殺掉鎖表及物件的session及相關係統程式Oracle物件Session
- 鎖表的相關資訊查詢
- 會話及物件查詢會話物件
- [鎖機制] 鎖相關查詢
- oracle 中查詢被鎖的物件,並殺死死鎖程式的方法Oracle物件
- Django筆記十五之in查詢及date日期相關過濾操作Django筆記
- sql 開發篇一 之 表鎖查詢及解鎖SQL
- MySQL 之慢查詢相關操作MySql
- 查詢資料庫物件所屬的filegroup及相關SQL資料庫物件SQL
- 如何透過sid查詢造成死鎖的sql語句,並殺死會話SQL會話
- 如何通過sid查詢造成死鎖的sql語句,並殺死會話SQL會話
- 表空間相關查詢
- v$session/v$process檢視涉及的相關會話資訊的查詢Session會話
- 查詢基表的相關檢視
- linux下查詢程式及終止程式操作的相關命令Linux
- oracle 查詢殺死死鎖方案Oracle
- 查詢鎖表 - 誰鎖住了我的表
- Oracle 表空間查詢相關sqlOracleSQL
- 相關子查詢&非相關子查詢概念
- 查詢鎖的狀況的物件物件
- 表死鎖查詢及處理辦法
- 查詢物件是否被鎖物件
- ORACLE 鎖表的解決方法及查詢引起鎖表SQL語句[轉]OracleSQL
- ORACLE 鎖表的解決方法及查詢引起鎖表SQL語句方法OracleSQL
- 查詢處理死鎖會話的sql語句(轉貼)會話SQL
- mysql鎖表查詢MySql
- Oracle 查詢鎖之間的依賴關係Oracle
- Oracle阻塞會話查詢Oracle會話
- UNDO相關查詢
- 查詢鎖表記錄
- MySql 鎖表 查詢 命令MySql
- 列表及相關操作
- 字典及相關操作
- 查詢當前執行的sql及相關內容SQL
- 廣義表的相關操作
- 資料結構:二叉查詢樹的相關操作資料結構
- CURL查詢ES相關
- MySQL 相關子查詢MySql