Oi Cláudio.
O erro 30389 ocorre porque os dois SELECTs podem dar resultados diferentes
(por causa do 1=1).
Se você confia que os resultados serão iguais, altere o parâmetro
QUERY_REWRITE_INTEGRITY para TRUSTED. Este parâmetro pode ser alterado
apenas para a sessão.

Ricardo Portilho Proni
http://nervinformatica.com.br

Oracle ACE Member ♠
Oracle Database 10g Administrator Certified Professional
Oracle Database 10g: RAC Administrator Certified Expert
Oracle Database 10g: Managing Oracle on Linux Certified Expert
Microsoft Certified Database Administrator
Microsoft Certified Technology Specialist: SQL Server 2005
Microsoft Certified IT Professional: Database Administrator
Certified MySQL Database Administrator
IBM Certified Database Administrator
Sybase Adaptive Server Administrator Associate


Em 10 de maio de 2010 16:55, Claudinho <claudin...@yahoo.com.br> escreveu:

>
>
> Boa tarde pessoal,
>
> Tenho um banco de dados para o qual é enviado um comando com hint.
> A hint está fazendo besteira, o plano de execução fica muito melhor sem
> ela.
> Ao invés de alterar a aplicação direto, gostaríamos de fazer alguns teste
> antes para validar o real ganho no processo. Segundo a Oracle seria possível
> remover a hint utilizando o DBMS_ADVANCED_REWRITE, porém estou tendo
> dificuldades ao utilizar este recurso.
>
> Segue um cenário que ilustra o problema que estamos encontrando:
>
> Tenho um usuário user1 e uma tabela tabtest;
> create table tabtest (num integer, mensag varchar2(10));
>
> Tentei então eliminar a hint reescrevendo o plano:
>
> SQL> BEGIN
>   2  SYS.DBMS_ADVANCED_REWRITE.DECLARE_REWRITE_EQUIVALENCE (
>   3  NAME             => 'Teste',
>   4  SOURCE_STMT      => 'Select /*+ rule*/ NUM, MENSAG from user1.tabtest
> order by NUM',
>   5  DESTINATION_STMT => 'Select NUM, MENSAG from user1.tabtest order by
> NUM',
>   6  VALIDATE         => FALSE,
>   7  REWRITE_MODE     => 'TEXT_MATCH');
>   8  END;
>   9  /
> BEGIN
> *
> ERRO na linha 1:
> ORA-30394: source statement identical to the destination statement
> ORA-06512: at "SYS.DBMS_ADVANCED_REWRITE", line 29
> ORA-06512: at "SYS.DBMS_ADVANCED_REWRITE", line 185
> ORA-06512: at line 2
>
> Apesar de os comandos não serem idênticos, o Oracle entede que são. Ao
> tentar diferenciá-los (where 1=1) obtenho um outro erro:
>
> SQL> BEGIN
>   2  SYS.DBMS_ADVANCED_REWRITE.DECLARE_REWRITE_EQUIVALENCE (
>   3  NAME             => 'Teste',
>   4  SOURCE_STMT      => 'Select /*+ rule*/ NUM, MENSAG from user1.tabtest
> order by NUM',
>   5  DESTINATION_STMT => 'Select NUM, MENSAG from user1.tabtest where 1=1
> order by NUM',
>   6  VALIDATE         => FALSE,
>   7  REWRITE_MODE     => 'TEXT_MATCH');
>   8  END;
>   9  /
> BEGIN
> *
> ERRO na linha 1:
> ORA-30389: the source statement is not compatible with the destination
> statement
> ORA-00907: missing right parenthesis
> ORA-06512: at "SYS.DBMS_ADVANCED_REWRITE", line 29
> ORA-06512: at "SYS.DBMS_ADVANCED_REWRITE", line 185
> ORA-06512: at line 2
>
>
> Alguém já passou por isso?
> Alguma sugestão?
>
>
>
> Atenciosamente,
> Cláudio Moraes
>
>
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]

Responder a