ORA 04021 等待鎖定物件時發生超時

2021-08-11 13:11:57 字數 977 閱讀 5572

背景:執行了乙個需要處理大量資料的儲存過程,時間非常長,手工中斷修改**後,重新編譯,儲存過程還在執行過程中,重新編譯則報該錯誤

解決:

1、查詢

查詢是否有正在執行的函式或儲存過程,所致物件鎖

sql>select name

from v$db_object_cache

where owner=』wisgdb』

and type in(『procedure』,』function』)

and locks > 0

adn pins > 0;

也可用查詢ddl鎖

select * from dba_ddl_locks

2、處理程序

alter system kill session 『21,149』;

3、出現另外乙個錯誤ora-00031

3.1 可以通過下列語句查詢:

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』;

發現21這個session的狀態已經變為killed

3.2如果利用上面的命令殺死乙個程序後,程序狀態被置為」killed」,但是鎖定的資源很長時間沒有被釋放,那麼可以在os級再殺死相應的程序(執行緒),首先執行下面的語句獲得程序(執行緒)號:

select b.spid,a.osuser,b.program

from v%process b,

v%process a

where a.paddr=b.addr and a.sid=21

3.3在os上殺死這個程序(執行緒)

在unix上,用root身份執行命令:#kill -9 21(即第2步查詢出的spid) (-9引數表示無條件終止)

不知為什麼,在部落格後台編輯時$符號不能正常顯示,所以用%替換

Selenium筆記(6)等待

1.簡介 在selenium操作瀏覽器的過程中,每一次請求url,selenium都會等待頁面載入完畢以後,才會將操作許可權再次交給我們的程式。但是,由於ajax和各種js 的非同步載入問題,所以我們在使用selenium的時候常常會遇到操作的元素還沒有載入出來,就會引發報錯。為了解決這個問題,se...

6 等待,只因曾經承諾

6 等待,只因曾經承諾 hub thread 中還有乙個函式沒有講,它就是try to freeze 這是與電源管理相關的函式。對大多數人來說,關於這個函式,了解就可以了。隨著linux開始支援suspended之後,有人提倡,每乙個核心程序都應該在適當的時候,呼叫try to freeze 什麼意...

3 1等待 通知機制(wait notify)

要點 wait 執行前在呼叫wait 之前,必須先要獲得物件鎖,即只有在同步方法或者同步 塊中呼叫wait 方法。執行作用 wait 使程序進入等待 阻塞狀態 在收到通知或者被中斷之前都會進入預執行佇列。執行之後1 執行wait 之後,當前執行緒釋放改物件鎖,在通知前與其他執行緒重新競爭資源 執行之...