Le parametre DDL_LOCK_TIMEOUT

A partir de la version 11g d’oracle un nouveau paramètre permettant de contrôler le timeout sur l’instruction DDL qui sont en attente des verrous DML ; ce parametre est par défaut à zero qui est le comportement existant dans les version 10g et avant, il s’agit de  ddl_lock_timeout voila un cas expliquant sont comportement :
L’état de ce parametre avant modification :

SQL> show parameter ddl
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
ddl_lock_timeout                     integer     0
enable_ddl_logging                   boolean     FALSE

SQL>-- créons maintenant un table de test  et simulons une modification :

SQL> create table usr(name varchar2(10),tr number(4));
Table creee.
SQL> insert into usr values('polo',20);
1 ligne creee.
SQL> insert into usr values('folo',30);
1 ligne creee.
SQL> insert into usr values('solo',40);
1 ligne creee.
SQL> commit;
Validation effectuee.
SQL> --
SQL> update usr set name='lolo' where name='folo';
1 ligne mise a jour.

On ouvre une autre session et on simule une suppression de la table, la première tentative  renvoi le message d’erreur sur le champ :
[oracle@sysagvm ~]$ sqlplus "/as sysdba"
SQL*Plus: Release 11.2.0.1.0 Production on Mon Nov 7 04:58:18 2011
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
Connecte a : Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options
SQL> SQL> SQL> set tim on 04:58:31 SQL> drop table usr; drop table usr            * ERREUR a la ligne 1 : ORA-00054: ressource occupee et acquisition avec NOWAIT ou temporisation indique

On modifie le paramètre au niveau session à 10 secondes, et on réessaye cette fois en attend la période spécifier dans le paramètre avant qu’Oracle nous renvoi le message d’erreur :
04:58:32 SQL> alter session set ddl_lock_timeout=10;
Session modifiee.
04:58:40 SQL> 04:58:41 SQL> drop table usr; drop table usr            * ERREUR a la ligne 1 : ORA-00054: ressource occupee et acquisition avec NOWAIT ou temporisation indique
04:58:53 SQL>

La valeur maximale de ce paramètre est  1000000 secondes ce qui signifie une attente infinie.