在開發使用過程中,一個存儲過程用到表TMP_DA_GMS,允許程序的時候報錯,后台查詢到錯誤原因是因為表里有個字段需要設置為可以為NULL,在PL_SQL中直接編寫語句
alter table TMP_DA_GMS modify brid NUMBER(11) null;
執行,報錯“ORA-14450:試圖訪問已經在使用的事務處理臨時表”;
有一個解決辦法是去重新啟動下Oracle服務,但是這個方法不可取,用戶正在使用時,是不能隨便重啟數據庫服務的,后來在網上找到了處理辦法,但是只告訴怎么
殺死導致死鎖的會話,怎么找關於這個表的session卻沒有提到,這里做個說明:
--找到表對象
select * from dba_objects where object_name='TMP_DA_GMS'
--找到該對象導致的鎖的Session會話,並編寫語句
select 'alter system kill session '''||SID||','||SERIAL#||''';' from V$session where SID in ( select sid from v$enqueue_lock t where t.type='TO' and id1='99879' )
--執行生成后的SQL語句解除死鎖