ddl_lock_timeout 与 ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

FROM http://blog.csdn.net/jgmydsai/article/details/10523969

[sql]  view plain copy
  1. Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0   
  2. Connected as [email protected]:1521/orcl  
  3.   
  4. SQL>   
  5. SQL> INSERT INTO TEST SELECT 1 FROM dual WHERE NOT EXISTS(SELECT * FROM TEST);  
  6. 1 row inserted  
  7. SQL> COMMIT;  
  8. Commit complete  
  9. SQL> BEGIN  
  10.   2    DBMS_SCHEDULER.CREATE_JOB(JOB_NAME   => 'TEST_JOB',  
  11.   3                              JOB_TYPE   => 'PLSQL_BLOCK',  
  12.   4                              JOB_ACTION => 'declare  
  13.   5      v_date date := sysdate + 10 / 24 / 60 / 60;  
  14.   6    begin  
  15.   7      loop  
  16.   8        dbms_lock.sleep(1);  
  17.   9        update test set t1 = t1 + 1;  
  18.  10        exit when sysdate >= v_date;  
  19.  11      end loop;  
  20.  12        commit;  
  21.  13    end;',  
  22.  14                              START_DATE => SYSDATE,  
  23.  15                              ENABLED    => TRUE,  
  24.  16                              AUTO_DROP  => TRUE);  
  25.  17    DBMS_LOCK.SLEEP(5);  
  26.  18  END;  
  27.  19  /  
  28. PL/SQL procedure successfully completed  
  29. SQL> TRUNCATE TABLE TEST;  
  30. TRUNCATE TABLE TEST  
  31. ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired  
  32.   
  33. SQL>   
[sql]  view plain copy
  1. SQL> show parameter ddl_lock;  
  2. NAME                                 TYPE        VALUE  
  3. ------------------------------------ ----------- ------------------------------  
  4. ddl_lock_timeout                     integer     0  
  5.   
  6. SQL> alter session set ddl_lock_timeout=10;  
  7. Session altered  
  8.   
  9. SQL>   
  10. SQL> INSERT INTO TEST SELECT 1 FROM dual WHERE NOT EXISTS(SELECT * FROM TEST);  
  11. rows inserted  
  12. SQL> COMMIT;  
  13. Commit complete  
  14. SQL> BEGIN  
  15.   2    DBMS_SCHEDULER.CREATE_JOB(JOB_NAME   => 'TEST_JOB',  
  16.   3                              JOB_TYPE   => 'PLSQL_BLOCK',  
  17.   4                              JOB_ACTION => 'declare  
  18.   5      v_date date := sysdate + 10 / 24 / 60 / 60;  
  19.   6    begin  
  20.   7      loop  
  21.   8        dbms_lock.sleep(1);  
  22.   9        update test set t1 = t1 + 1;  
  23.  10        exit when sysdate >= v_date;  
  24.  11      end loop;  
  25.  12        commit;  
  26.  13    end;',  
  27.  14                              START_DATE => SYSDATE,  
  28.  15                              ENABLED    => TRUE,  
  29.  16                              AUTO_DROP  => TRUE);  
  30.  17    DBMS_LOCK.SLEEP(5);  
  31.  18  END;  
  32.  19  /  
  33. PL/SQL procedure successfully completed  
  34. SQL> TRUNCATE TABLE TEST;  
  35. Table truncated  
  36.   
  37. SQL>   

你可能感兴趣的:(ddl_lock_timeout 与 ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired)