Pessoal, 
 

 Quero identicar algumas tabelas com blocos corrompidos.
 Sei que posso usar o RMAN, com o commando backup validate e checar a view 
apropriada para ver os blocos corrompidos e depois através do RMAN mesmo 
corrigi-los.
 Mas a dúvida aqui é outra.
 

 Estou tentando utilizar a DBMS_REPAIR. Dei grant para o usuário, criei as 
tabelas REPAIR_TABLE e ORPHAN_KEY_TABLE e criei uma procedure para ler todas as 
tabelas. A procedure coloco abaixo:
 

 Porém ao executá-la, ela me retorna uma exceção -600 ,  pude perceber que o 
problema é na instrução "OBJECT_NAME => i.table_name ",  se coloco  
"OBJECT_NAME => 'nome_tabela' " ai funciona sem problemas, mas quero passar 
dinamicamente o nome das tabelas, para checar todas.
 

 Alguém teria alguma idéia?
 

 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
 SUSE Linux Enterprise Server 11 SP1  (x86_64)

 

 Obrigado
 

 Fernando
 

 

 

 CREATE OR REPLACE PROCEDURE proc030
 as

  num_corrupt INT;

 begin

 

 delete from cerv.log10 ;
 

 for i in    (    select table_name from user_tables where 1=1   and table_name 
not in ( select view_name from user_views)
   ) LOOP
  
   num_corrupt := 0;
  
   sys.DBMS_REPAIR.CHECK_OBJECT ( SCHEMA_NAME => 'CERV' ,  OBJECT_NAME => 
i.table_name  ,  REPAIR_TABLE_NAME => 'REPAIR_TABLE',  CORRUPT_COUNT =>  
num_corrupt);
 

   insert into cerv.log10(log) values ( i.table_name) ;
    
 end loop;
 

 

   EXCEPTION when others then
   dbms_output.put_line('procd004 '|| sqlcode );
 

 

 end;
 
 /
 

  

Responder a