ORA-00054: 資源忙碌並獲得 NOWAIT 指定或逾時過期錯誤
我執行資料庫移轉 Script 或修改資料庫綱目時收到錯誤。
症狀
我收到下列錯誤:ORA-00054: resource busy and acquire with NOWAIT specified
or timeout expired。 我為何會收到此錯誤,以及如何阻止它?原因
資料定義語言 (DDL) 用於定義資料庫綱目,而資料操作語言 (DML) 用於修改資料庫中的表格。 為了保留資料完整性,資料庫會先鎖定表格或該表格內的列,然後再更新/讀取它 (各種模式,例如讀取、寫入、排除等)。 因為 DDL 及 DML 會影響表格內的所有列,所以它需要專用鎖定,且該表格內任何列上的現有鎖定會導致失敗。在 Oracle中,當 DDL 及 DML 遇到鎖定時,我們收到下列錯誤: ORA-00054: resource busy and
acquire with NOWAIT specified or timeout expired
解析問題
DDL 或資料庫移轉僅適用於在關閉時間期間執行。 所有產品服務都應該使用 $TOP/bin/go/stop_local.sh 完全關閉,且資料庫不應在使用中。其他替代方案如下:
- 尋找並停止防止專用鎖定的階段作業。
- 在 Oracle 11g 中,您可以設定 ddl_lock_timeout(例如,容許 DDL 等待物件變成可用) ,只要指定您要它等待的時間長度即可:
SQL> alter session set ddl_lock_timeout = 600;
Session altered.