Amigo,
Trata-se de um Lock compartilhado.
Ao emitir os comandos insert,delete,update e select for update na tabela o oracle cria uma trava compartilhada e uma exclusiva. Enquanto você não finalizar a transacao (commit ou rollback;). você de outra sessao não vai conseguir Atualizar a tabela com um comando DDL. O Que podera ser feito é a ataulizacao da tabela na mesma sessao lembrando que ao emitir um ddl apos um dml essa transacao sera validada com um COMMIT;
Segue um Exemplo.. de alguns testes que fiz a algum tempo atras. Por Acaso foi nesse proprio Forum..
sessao 1
Selecionar tudo
SQL> SHOW USER
USER é SESSAO1
SQL> SELECT * FROM V$VERSION;
BANNER
----------------------------------------------------------------
Oracle Database 10g Release 10.2.0.1.0 - Production
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
SQL> create table teste as select * from dual;
Tabela criada.
SQL> insert into teste values('1');
1 linha criada.
SQL> commit;
Commit concluído.
SQL> update teste set DUMMY='2';
2 linhas atualizadas.
PROMPT============= SESSAO 2 ORACLE 10G ======================
sessao 2
Selecionar tudo
SQL> SHOW USER
USER é SESSAO2
SQL> SELECT * FROM V$VERSION;
BANNER
----------------------------------------------------------------
Oracle Database 10g Release 10.2.0.1.0 - Production
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
SQL> select * from teste;
D
-
X
1
SQL> alter table teste add c date;
alter table teste add c date
*
ERRO na linha 1:
ORA-00054: o recurso está ocupado e é obtido com o NOWAIT especificado
Espero ter Ajudado!