在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: 標記要終止的會話
經查 :如果出現題目的錯誤,則說明在數據庫級不能殺掉該死鎖進程,需要到操作系統級來處理了。如下圖所示:

[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. 成功解決
