Lock Compartilhado 10g x Lock Compartilhado 11g

DBA Geral (instalação, configuração do banco, scripts do Sql*Plus, shell scripts, batch scripts, etc...)
Responder
diegoleite
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 115
Registrado em: Sáb, 10 Nov 2007 2:54 pm
Localização: rio de janeiro
Att,


Diego Leite
DBA ORACLE

Informações do Ambiente:
* Versão do Oracle: 10g e 11g
* Sistema Operacional: Oracle Enterprise linux 4.5 / 5


Talves isso seja algum bug do 11g ou algo que não faca sentido ate que
me provem ao contrario.poderia me ajudar??!!!



Estava Fazendo um teste de Travas do ORACLE Repare no ORACLE 10g como
se comporta.

OBSERVE:
Ao emitir o comando DML (UPDATE) na SESSAO1 e não encerrar a
transação (commit;).
já na SESSAO2 a tentativa de emitir cum DDL(ALTER TABLE) Recebi a
seguinte mensagem

Selecionar tudo

"ORA-00054: o recurso está

ocupado e é obtido com o NOWAIT especificado" 
devido ao lock na Tabela. (CORRETO).



Estava Fazendo um teste de Travas do ORACLE Repare no ORACLE 11g como
se comporta.

OBSERVE:
O mesmo processo feito no no 11G,e foi visto que ele não locka a
tabela e faz a alteração com o comando DDL(ALTER TABLE), já com o
DDL(DROP TABLE) ele emite a seguinte mensagem:

Selecionar tudo

"ORA-00054: o recurso
está ocupado e é obtido com o NOWAIT especificado ou o timeout expirou."

Esse processo ocorre com a sessao1 aberta.


Selecionar tudo

PROMPT============= SESSAO 1 ORACLE 10G ======================
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.

Selecionar tudo

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



==================================================================================================

Selecionar tudo

PROMPT============= SESSAO 1 ORACLE 11G ======================

Selecionar tudo

SQL> SHOW USER
USER é SESSAO1

SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
PL/SQL Release 11.1.0.6.0 - Production
CORE    11.1.0.6.0      Production
TNS for Linux: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.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.

Selecionar tudo

PROMPT============= SESSAO 2 ORACLE 11G ======================

Selecionar tudo

SQL> SHOW USER
USER é SESSAO2

SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
PL/SQL Release 11.1.0.6.0 - Production
CORE    11.1.0.6.0      Production
TNS for Linux: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 - Production

SQL> select * from teste;

D
-
X
1

SQL> alter table teste add c date;

Tabela alterada.


SQL> DROP TABLE TESTE;
DROP TABLE TESTE
          *
ERRO na linha 1:
ORA-00054: o recurso está ocupado e é obtido com o NOWAIT especificado ou o
timeout expirou
diegoleite
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 115
Registrado em: Sáb, 10 Nov 2007 2:54 pm
Localização: rio de janeiro
Att,


Diego Leite
DBA ORACLE

Estranho um forum que sempre participei ativamente.. niguem se posiciona??nem uma ideia?? opiniao que seja!!!
rogenaro
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Sex, 30 Mar 2007 7:26 pm
Localização: Londrina - PR
Rafael O. Genaro

Será que não seria devido à nova funcionalidade DDL Wait do 11g? O parâmetro ddl_lock_timeout estava setado em sua sessão?

Como não tenho essa versão aqui não dá para ver como essa funionalidade se comporta, mas aparentemente explica o que deve ter ocorrido com o comando alter table.

No entanto, não entendi por que o mesmo não ocorreu com o drop table (a julgar pela documentação, esta opção seria válida para qualquer comando DDL...) será que o erro foi referente ao timeout do comando alter table?

Por que caso contrário o comportamento realmente estaria "meio" estranho...
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante