【Linux/Oracle】ORA-00031:標記要終止的會話 解決


在PL/SQL操作了一條delete語句用於刪除這張1.4億條數據的表,執行了12個小時還沒刪完

(經DB指導,量級大的需要使用truncate table table_name 進行刪除)

--查詢當前進程 
SELECT l.session_id sid, s.serial#, l.locked_mode 鎖模式, l.oracle_username 登錄用戶, l.os_user_name 登錄機器用戶名, s.machine 機器名, s.terminal 終端用戶名, o.object_name 被鎖對象名, s.logon_time 登錄數據庫時間 FROM v$locked_object l, all_objects o, v$session s WHERE l.object_id = o.object_id AND l.session_id = s.sid ORDER BY sid, s.serial#;

 

 

 查詢發下 SID為962的對象被鎖了

嘗試使用   alter system kill session 'SID,SERTAL';   殺掉會話進程

alter system kill session '962,23413';

提示了 ORA-00031: 標記要終止的會話

經查 :如果出現題目的錯誤,則說明在數據庫級不能殺掉該死鎖進程,需要到操作系統級來處理了。如下圖所示:

 

 

①可以通過下列語句查詢: 
select a.spid,b.sid,b.serial#,b.username 
from v$process a,v$session b 
where a.addr=b.paddr 
and b.status='KILLED';
 
②如果利用上面的命令殺死一個進程后,進程狀態被置為"killed",但是鎖定的資源很長時間沒有被釋放,那么可以在OS級再殺死相應的進程(線程),首先執行下面的語句獲得進程(線程)號: 
select b.spid,a.osuser,b.program 
  from v$session a,v$process b 
 where a.paddr=b.addr 
   and a.sid=962    --962就是上面的sid
 
[root@crb-db1 ~]# su - oracle            --切換到oracle 用戶
Last login: Thu Jun 10 10:59:03 CST 2021 on pts/0
[oracle@crb-db1 ~]$ ps -ef | grep smon     --SMON(system monitor process)系統監控后台進程

                                                                      --ps命令將某個進程顯示出來

                                                 --grep命令是查找

                    --中間的|是管道命令 是指ps命令與grep同時執行

                    --grep命令是查找,是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。

                   --grep全稱是Global Regular Expression Print,表示全局正則表達式版本,它的使用權限是所有用戶。

                   --select  *  from   v$session  where  sid=962;     根據sid查addr  

                   --select  *  from  v$process where  addr='0000000508DF6488'    查pid

UID      :程序被該 UID 所擁有

PID      :就是這個程序的 ID 

PPID    :則是其上級父程序的ID

C          :CPU使用的資源百分比

STIME :系統啟動時間

TTY     :登入者的終端機位置

TIME   :使用掉的CPU時間。

 

CMD   :所下達的是什么指令

UID            PID       PPID   C  STIME    TTY        TIME                          CMD
oracle    1819  1779  0 12:59 pts/1    00:00:00 grep --color=auto smon
oracle   10125     1  0  2020 ?        00:15:06 ora_smon_orcl
[oracle@crb-db1 ~]$ ps -ef | grep 55754 --55754 即第②步根據SID查詢出的spid
oracle    1821  1779  0 12:59 pts/1    00:00:00 grep --color=auto 55754
oracle   55754     1  1 Jun09 ?        00:16:26 oracleorcl (LOCAL=NO)
[oracle@crb-db1 ~]$ kill -9 55754
[oracle@crb-db1 ~]$ 
[oracle@crb-db1 ~]$ ^C
[oracle@crb-db1 ~]$ timed out waiting for input: auto-logout
[root@crb-db1 ~]# timed out waiting for input: auto-logout
Connection closing...Socket close.

Connection closed by foreign host.

成功解決

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM