8月22號遇到一個單位在導入分配的分錄時,出現行鎖定的錯誤。終止被鎖Oracle進程,進程爲KILLED狀態,但很長時間數據庫鎖依然還存在。執行OS進程KILL,數據庫鎖還未釋放。後來此問題由同事解決,瞭解到是強制執行了強制刷新數據庫緩存操作。(刷新數據庫緩存會短時間內會影響數據庫運行效率)
原因分析:
在殺掉了相關數據庫進程和OS進程,數據庫鎖還存在,這是因爲Cache的影響,需要手動刷新Buffer Cache,以促使Oracle重新執行物理訪問。
在殺掉了相關數據庫進程和OS進程,數據庫鎖還存在,這是因爲Cache的影響,需要手動刷新Buffer Cache,以促使Oracle重新執行物理訪問。
解決辦法:
以下三條語句可以清除cache:
1、在Oracle9i裏,Oracle提供了一個內部事件,用以強制刷新Buffer Cache,語法爲:
alter session set events 'immediate trace name flush_cache level 1';
2、針對session,語法爲:
alter session set events = 'immediate trace name flush_cache';
alter session set events = 'immediate trace name flush_cache';
3、針對整個系統,語法爲:
alter system set events = 'immediate trace name flush_cache';
alter system set events = 'immediate trace name flush_cache';