Marcio! Muito obrigado. Consegui resolver o problema. Na verdade eu estava informando errado os campos no UPDATE. Valeu!! Atenciosamente,
Jader Resende de Souza ________________________________ De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de Marcio Portes Enviada em: sexta-feira, 27 de julho de 2007 20:42 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] Comando MERGE Jader, Voce deve estar usando a versão 10.1, que é onde essa mensagem está desajustada, ora vem do dbms_scheduler, ora do merge. O problema no seu merge está no update: na medida em que voce tenta alterar um campo da cláusula ON. Se minha dedução estiver errada, faça um exemplo no sqlplus copiando e colando para a lista assim como vou fazer a seguir. ops$marcio:LX10G> create table t1 ( pk int primary key, c1 varchar2(10) ); Table created. ops$marcio:LX10G> create table t2 ( pk int primary key, c1 varchar2(10) ); Table created. ops$marcio:LX10G> ops$marcio:LX10G> insert into t1 values ( 1, 'Abacate' ); 1 row created. ops$marcio:LX10G> insert into t1 values ( 2, 'Tomate' ); 1 row created. ops$marcio:LX10G> ops$marcio:LX10G> insert into t2 values ( 1, 'vai mudar' ); 1 row created. ops$marcio:LX10G> ops$marcio:LX10G> ops$marcio:LX10G> select * from t1; PK C1 ------------- ---------- 1 Abacate 2 Tomate 2 rows selected. ops$marcio:LX10G> select * from t2; PK C1 ------------- ---------- 1 vai mudar 1 row selected. ops$marcio:LX10G> ops$marcio:LX10G> ops$marcio:LX10G> merge into t2 A using (select t1.pk, t1.c1 from t1) B on ( B.pk = A.pk ) 2 when matched then update set A.c1 = B.c1 3 when not matched then insert ( A.pk, A.c1 ) values ( B.pk, B.c1 ) 4 / 2 rows merged. ops$marcio:LX10G> ops$marcio:LX10G> select * from t1; PK C1 ------------- ---------- 1 Abacate 2 Tomate 2 rows selected. ops$marcio:LX10G> select * from t2; PK C1 ------------- ---------- 1 Abacate 2 Tomate 2 rows selected. ops$marcio:LX10G> ops$marcio:LX10G> rollback; Rollback complete. ops$marcio:LX10G> ops$marcio:LX10G> merge into t2 A using (select t1.pk, t1.c1 from t1) B on ( B.pk = A.pk ) 2 when matched then update set A.pk = B.pk 3 when not matched then insert ( A.pk, A.c1 ) values ( B.pk, B.c1 ) 4 / merge into t2 A using (select t1.pk, t1.c1 from t1) B on ( B.pk = A.pk ) * ERROR at line 1: ORA-38104: Columns referenced in the ON Clause cannot be updated: "A"."PK" ops$marcio:LX10G> Veja que eu não consigo reproduzir a sua mensagem de erro já que meu oracle é o 10.2 abraços, On 7/27/07, Jader Resende de Souza - Gestor de Atendimento - Núcleo Relatório Suporte - Engeman EAM <[EMAIL PROTECTED] <mailto:jader.resende%40engeman.com.br> > wrote: > > Senhores, > Boa tarde. > > Estou tentando executar o comando MERGE da seguinte forma: > > MERGE INTO user_tab2 A > USING (select user_tab1.u_pk_cod, user_tab1.u_desc from user_tab1) B > ON (A.u_pk_cod = B.u_pk_cod) > WHEN MATCHED THEN UPDATE SET A.u_pk_cod = B.u_pk_cod > WHEN NOT MATCHED THEN INSERT (A.u_pk_cod, A.u_desc) > VALUES (B.u_pk_cod, B.u_desc) > > > Estou tendo como retorno o seguinte erro: > > ORA-27432: a etapa não existe para a cadeia . > > Alguém sabe me dizer o que pode ser isso? > > Jader! > > > > ________________________________ > > De: oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> <oracle_br%40yahoogrupos.com.br> [mailto: > oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> <oracle_br%40yahoogrupos.com.br>] Em > nome de jlchiappa > Enviada em: sexta-feira, 27 de julho de 2007 15:22 > Para: oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> <oracle_br%40yahoogrupos.com.br> > Assunto: [oracle_br] Re: Erro de ORA - Urgente > > "- O erro é no disco, certo?" > > PODE SER, como pode não ser : como já dito algumas vezes aqui, > necessariamente durante a operação do banco Oracle os blocos ** são > ** carregados pra RAM e lá permanecem um tempo, mesmo depois dum > COMMIT, certamente um pente de memória ruim ** PODE SIM SENHOR ** > corromper um bloco.... Da mesma forma bugs podem causar isso, seja no > SO, seja no próprio banco, seja em drivers/utilitários/aplicativos de > SO (como softwares de storage, por exemplo)... E finalmente, > tranquilamente ERROS DE OPERAÇÂO podem causar corrupção, como por > exemplo recover de banco após uma operação NOLOGGING, um operador > querendo (via utilitário do sistema, como antivírus ou soft de backup > não-compatíveis) manipular arquivos do banco Oracle com banco > aberto.... > > "Tem alguma forma de corrigir este problema?" > > Sem dúvida, o procedimento será : > > a. para emergencialmente se livrar da condição de erro, é localizar o > segmento e o extent localizados no bloco corrupto (consultando a > DBA_EXTENTS), feito isso SE o segmento for do tipo que possa ser re- > construído sem perda (como um índice, por exemplo), marque o bloco > como indisponível via DBMS_REPAIR (cheque os manuais de Admin pra > sintaxe e modo de usar), e reconstrua o segmento. Caso esse bloco > seja de um segmento de dados, que vc não pode perder, OU vc faz um > block recover (se vc tiver backup RMAN atualizado) OU vc marca como > inusável o bloco, dropa o segmento e volta backup (o procedimento > exato varia de acordo com a tua política de backup), OU se não tiver > backup atualizado vc pode tentar fazer um SALVAGE desse segmento , a > nota Subject: Handling Oracle Block Corruptions in > Oracle7/8/8i/9i/10g , de Doc ID: Note:28814.1 te lista as opções > todas citadas. > > b. o MAIS IMPORTANTE, depois que vc passou a poder acessar o tal > dado, vc IMEDIATAMENTE TEM QUE descobrir a causa, senão isso vai se > repetir DE NOVO, e de NOVO, e DE NOVO..... Pra isso, é chamar uma > Empresa de manutenção de hardware, que vai fazer um check ** PROFUNDO > ** no hardware (ie, discos, RAM, controladora, placa-mãe, etc) do teu > srevidor, ** levantar ** com o pessoal da Operação o que foi feito > recentemente nessa máquina, que softs rodaram/foram instalados > recentemente, E abrir chamado com a Oracle e com o teu Suporte de SO, > pra ver o caso de bugs. > > []s > > Chiappa > > --- Em oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> <oracle_br%40yahoogrupos.com.br><mailto: > oracle_br%40yahoogrupos.com.br> , > "cegoncalvesvr" > <[EMAIL PROTECTED]> escreveu > > > > Ola meus amigos, > > > > Utilizando o sistema, no momento de gerar um relatorio, surgiu > o > > seguinte erro no sistema: > > > > ORA:01578 - Bloco de dados Oracle danificado (arquivo numero.13, > > bloco num.845288). ORA:01110-13 do arquivo de > > dados: 'E\Oracle\Oradata\cssj\MV2000_I.DBF - (Tablespace) > > > > Fui no servidor e abri o arquivo alert, o erro esta abaixo: > > Corrupt block relative dba: 0x034ce5e8 (file 13, block 845288) > > Bad check value found during buffer read > > Data in bad block - > > type: 6 format: 2 rdba: 0x034ce5e8 > > last change scn: 0x0000.057a7f29 seq: 0x2 flg: 0x04 > > consistency value in tail: 0x7f290602 > > check value in block header: 0xdea1, computed block checksum: > 0x1000 > > spare1: 0x0, spare2: 0x0, spare3: 0x0 > > *** > > Reread of rdba: 0x034ce5e8 (file 13, block 845288) found same > > corrupted data > > > > - O erro é no disco, certo? > > Tem alguma forma de corrigir este problema? > > Isolar a area defeituosa? > > > > Aguardo. > > Obrigado a todos. > > > > [As partes desta mensagem que não continham texto foram removidas] > > > -- Marcio Portes Material Tecnico em Portugues - http://mportes.blogspot.com <http://mportes.blogspot.com> Practical Learning Oracle - http://mportes.blogspot.com/2006/02/practical-learning-oracle.html <http://mportes.blogspot.com/2006/02/practical-learning-oracle.html> [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas]