ORA-00054 – resource busy and acquire with NOWAIT specified or timeout expired

1.) Texte aus oerr unter Linux

00054, 00000, „resource busy and acquire with NOWAIT specified or timeout expired“

// *Cause: Interested resource is busy.

// *Action: Retry if necessary or increase timeout.

2.) Erklärung

Diese Fehlermeldung tritt auf, wenn die Eigenschaft eines Objektes geändert werden soll, das Objekt jedoch bereits in Benutzung eines anderen Users ist. Das Objekt wurde hier bereits durch einen anderen User gesperrt. Soll z.B. eine Spalte in eine Tabelle eingefügt werden und ist diese Tabelle bereits in Verwendung eines anderen Users, wird diese Fehlermeldung angezeigt. Häufig tritt dieser Fall auch während des Neuaufbaus eines Indexes (rebuild) auf.

3.) Lösungsvorschläge

Ausführen des DDL-Statements in einem Zeitraum, in dem die Last auf dem System sehr gering ist.

Oder die Tabelle wird für die Dauer des DDL-Statements auf read only gesetzt.

SQL> alter table <tablename> read only;

Der Status der Tabelle ist in der View DBA_TABLES protokolliert.

SQL> select table_name, read_only from dba_tables where table_name = ‚ <table_name>‘;

Nach der Ausführung des DDL-Statements ist die Tabelle wieder auf read write zu setzen.

SQL> alter table <tablename> read write;

Hinweis: In Oracle Releases vor 11g muss der komplette Tablespace auf read only gesetzt warden mit

alter tablespace <tablespace_name> read only;

bzw.

alter tablespace <tablespace_name> read write;

Eine weitere Möglichkeit besteht darin, die Wait Option zu setzten. Dies geschieht durch das Setzen den Parameters DDL_LOCK_TIMEOUT auf einen Wert größer 0, da dieser Parameter standardmäßig auf 0 steht, was einem NOWAIT entspricht.