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.