Getting around ORA-00054 in Oracle 10g

14 Aug. 2012

In 10g, if you are trying to make DDL changes on a busy object, you’re met with:

ORA-00054: resource busy and acquire with NOWAIT specified

If you google how to fix this, you're told to re-run the transaction, or find out what’s locking the object. If you're trying to make schema changes on a live system in a scripted/automated way, you don't want to interfere with production processes and you need to deal with re-running the transaction in an automated way. This is the solution:

  1. DECLARE resource_busy EXCEPTION;
  2. PRAGMA EXCEPTION_INIT(resource_busy, -54);
  3. PROCEDURE try_change IS
  4. BEGIN
  5. dbms_lock.sleep(0.5);
  6. EXECUTE IMMEDIATE 'alter table .....';
  7. EXCEPTION WHEN resource_busy THEN try_change;
  8. END;
  9. BEGIN
  10. try_change;
  11. END;
  12. /

 

Neuen Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.

Restricted HTML

  • Erlaubte HTML-Tags: <a href hreflang target> <em> <strong> <cite> <blockquote cite> <pre> <ul type> <ol start type> <li> <dl> <dt> <dd> <h4 id> <h5 id> <h6 id>
  • Zeilenumbrüche und Absätze werden automatisch erzeugt.
  • Website- und E-Mail-Adressen werden automatisch in Links umgewandelt.

Angebot innerhalb von 24 Stunden

Ob ein großes kommerzielles System, oder eine kleine Business Seite, wir schicken ein Angebot ab innerhalb von 24 Stunden nachdem Sie diese Taste drücken: Angebot anfordern