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 完全關閉,且資料庫不應在使用中。
其他替代方案如下:
  1. 尋找並停止防止專用鎖定的階段作業。
  2. 在 Oracle 11g 中,您可以設定 ddl_lock_timeout(例如,容許 DDL 等待物件變成可用) ,只要指定您要它等待的時間長度即可:
    SQL> alter session set ddl_lock_timeout = 600;
    Session altered.