oracle 資料庫鎖表處理 ORA-00031
今日執行刪除業務系統表中的一部分待修復資料中,出現鎖表情況,具體如下:
(1) 備份待刪除表中的待刪除資料
create table t_renewal_stats_data_20120712 tablespace tabbak as select * from t_renewal_stats_data s where s.stat_item_id>1057 and s.work_month<201206;
(2)執行資料刪除
delete from t_renewal_stats_data s where s.stat_item_id>1057 and s.work_month<201206;
執行過程中發現鎖表,語句卡起執行不了
(3)檢查是否鎖表
select sid,serial#,username,SCHEMANAME,osuser,MACHINE,
terminal,PROGRAM,owner,object_name,object_type,o.object_id
from dba_objects o,v$locked_object l,v$session s
where o.object_id=l.object_id and s.sid=l.session_id;
發現有兩個程式鎖表
931 , 12562 和 1008 , 15043
(4)oracle級kill掉該session:
--alter system kill session '&sid,&serial#';
SQL> alter system kill session '931,12562';
System altered.
因在查詢鎖表前已經將sid 為1008 的客戶端的plsql developer 工具關閉,但伺服器系統程式依然存在
所以kill oracle 級session中出現 ORA-00031錯誤
如下:
SQL> alter system kill session '1008,15043';
alter system kill session '1008,15043'
*
ERROR at line 1:
ORA-00031: session marked for kill
(5)根據sid 查出系統級的程式號並檢驗:
select spid from v$process where addr = (select paddr from v$session s where s.SID=1008);
得出 spid 為 8642
驗證該系統程式號是否對應oracle級程式
select sid from v$session where paddr = (select addr from v$process where spid=8642);
得出 sid 為 1008
驗證通過
(6)系統級檢視 8642 程式是否為客戶端連線資料庫程式
[oraprod@D0-XXXX ~]$ ps -ef | grep 8642
oraprod 1487 1455 0 15:59 pts/0 00:00:00 grep 8642
oraprod 8642 1 0 Jul11 ? 00:01:41 oracleXXXX (LOCAL=NO)
可確認為客戶端程式,則可殺掉 (如果為資料庫例項服務程式則不可輕易kill 掉,否則資料庫將無法修復)
(7)作業系統級kill掉session: (生產系統需仔細確認,然後kill)
[oraprod@D0-XXXX ~]$ kill -9 8642
檢驗是否殺掉
[oraprod@D0-XXXX ~]$ ps -ef | grep 8642
oraprod 1511 1455 0 16:00 pts/0 00:00:00 grep 8642
該系統程式被殺掉
(8)執行刪除資料操作
delete from t_renewal_stats_data s where s.stat_item_id>1057 and s.work_month<201206;
SQL>
228 rows deleted
刪除完成
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24558279/viewspace-735297/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ora-00031:session marked for kill處理oracle中殺不掉的鎖SessionOracle
- ORA-00031:session marked for kill處理oracle中殺不掉鎖的程式SessionOracle
- 資料庫優化之表碎片處理資料庫優化
- ZT:處理Oracle資料庫中一張有效的Drop大表Oracle資料庫
- [Oracle報錯處理]ORA-00031: session marked for killOracleSession
- Oracle 死鎖處理Oracle
- Oracle死鎖處理Oracle
- ORACLE資料庫dataguard配置,rman移機,dx鎖處Oracle資料庫
- oracle 資料庫的鎖Oracle資料庫
- 資料庫鎖表與阻塞資料庫
- Oracle TX鎖的處理Oracle
- SQL Server 資料庫查詢死鎖的處理步驟SQLServer資料庫
- Oracle資料庫無效物件問題處理Oracle資料庫物件
- Oracle資料庫處理多媒體資訊(轉)Oracle資料庫
- mysql,sqlserver資料庫單表資料過大的處理方式MySqlServer資料庫
- DBus資料庫表結構變更處理方案資料庫
- 資料庫之建立表前的判斷處理資料庫
- 轉載oracle資料庫鎖Oracle資料庫
- [資料庫][分庫分表]分庫分表之後,id主鍵如何處理資料庫
- ORACLE資料庫壞塊的處理 (處理無物件壞快的方法)Oracle資料庫物件
- oracle鎖表問題處理 v$lock v$locked_objectOracleObject
- ORACLE死鎖及處理方式Oracle
- oracle 死鎖查詢處理Oracle
- ORACLE鎖等待的處理方法Oracle
- 處理Oracle Session中的鎖OracleSession
- 處理表鎖定的情況
- 一次ORACLE資料庫undo壞塊處理Oracle資料庫
- Oracle資料庫中的逐行處理問題NEOracle資料庫
- 近期處理的Oracle資料庫問題總結Oracle資料庫
- ORACLE資料庫事務處理和故障恢復Oracle資料庫
- 教你如何處理Oracle資料庫中的壞塊Oracle資料庫
- MySQL處理資料庫和表的常用命令MySql資料庫
- 資料庫壞塊處理資料庫
- zabbix資料庫日常處理資料庫
- ORACLE資料庫壞塊的處理 (一次壞快處理過程)Oracle資料庫
- Oracle 重複資料處理Oracle
- oracle大批次資料處理Oracle
- 海量資料處理_表分割槽