Pular para o conteúdo

Fóruns Banco de dados Oracle BLOCO DE DADOS ORACLE DANIFICADO !!!!!! BLOCO DE DADOS ORACLE DANIFICADO !!!!!!

#101583
DBA_LUCAS
Participante

    Muito obrigado pela ajuda Felipe , Utilizei uma procedure ao invés do dbms para a recuperação e deu certo , segue abaixo o passo a passo:

    *Select para verificar o tipo de objeto que esta corrompido.

    select tablespace_name, relative_fno,
    segment_type, owner, segment_name
    from dba_extents
    where file_id =
    and between block_id and block_id + blocks -1

    *Procedure para recuperar o arquivo de dados:

    CREATE OR REPLACE PROCEDURE “SYS”.”UTLVERBLK” (PSCHEMA IN
    VARCHAR2, /* SCHEMA NAME, OWNER /
    POBJECT IN VARCHAR2,
    /
    OBJECT_NAME /
    POBJTYP IN NUMBER) IS
    /
    1-TABLE, 2-INDEX, 3-CLUSTER /
    /

                     PROCEDURE............UTLVERBKL
                     FUNCAO...............RESOLVER PROBLEMA DE CORRUPTED BLOCK
                     DATA.................14/03/2004
                     AUTHOR...............RENAN MEDEIROS
    
                */
                CRITAB      VARCHAR2(1)    := 'S';
                NUMBLK      BINARY_INTEGER := 0;
                BEGIN
                /*
                   VERIFICA SE PRECISA CRIAR TABELA DE REPARO
                */
                BEGIN
                     SELECT 'N' INTO CRITAB
                     FROM   USER_TABLES
                     WHERE  TABLE_NAME ='REPAIR_UTLVERBLK_TAB_'||POBJTYP;
                     EXCEPTION
                         WHEN NO_DATA_FOUND THEN NULL;
                END;
                DBMS_OUTPUT.ENABLE (120000);
                IF   CRITAB = 'S'
                THEN 
    

    DBMS_REPAIR.ADMIN_TABLES(‘REPAIR_UTLVERBLK_TAB_’||POBJTYP,1,POBJTYP);
    END IF;
    DBMS_REPAIR.CHECK_OBJECT ( PSCHEMA,
    POBJECT,
    NULL,
    POBJTYP,

    ‘REPAIR_UTLVERBLK_TAB_’||POBJTYP,
    NULL,
    NULL,
    NULL,
    NULL,
    NUMBLK);

                DBMS_OUTPUT.PUT_LINE('UTLVERBLK V.1.0/14/03/2005 - CHECK OBJECT 
    

    – ‘||TO_CHAR(SYSDATE,’DD/MM/YYYY-HH24:MI:SS’));
    DBMS_OUTPUT.PUT_LINE(‘== SCHEMA => ‘||PSCHEMA);
    DBMS_OUTPUT.PUT_LINE(‘== OBJECT => ‘||POBJECT);
    DBMS_OUTPUT.PUT_LINE(‘== OBJTYPE => ‘||POBJTYP||’ – 1=>
    TABLE, 2=> INDEX, 3=> CLUSTER’);
    DBMS_OUTPUT.PUT_LINE(‘== BLOCKS => ‘||NUMBLK);
    DBMS_OUTPUT.PUT_LINE(‘== REPAIRTAB =>
    REPAIR_UTLVERBLK_TAB_’||POBJTYP);

                DBMS_REPAIR.FIX_CORRUPT_BLOCKS( PSCHEMA,
                                                POBJECT,
                                                NULL,
                                                POBJTYP,
    

    ‘REPAIR_UTLVERBLK_TAB_’||POBJTYP,
    NULL,
    NUMBLK);
    DBMS_OUTPUT.PUT_LINE(‘UTLVERBLK V.1.0-14/03/2005 – FIX
    CORRUPTED BLOCKS – ‘||TO_CHAR(SYSDATE,’DD/MM/YYYY-HH24:MI:SS’));
    DBMS_OUTPUT.PUT_LINE(‘== SCHEMA => ‘||PSCHEMA);
    DBMS_OUTPUT.PUT_LINE(‘== OBJECT => ‘||POBJECT);
    DBMS_OUTPUT.PUT_LINE(‘== OBJTYPE => ‘||POBJTYP||’ – 1=>
    TABLE, 2=> INDEX, 3=> CLUSTER’);
    DBMS_OUTPUT.PUT_LINE(‘== BLOCKS => ‘||NUMBLK);

                DBMS_REPAIR.SKIP_CORRUPT_BLOCKS(PSCHEMA,
                                                POBJECT,
                                                POBJTYP,
                                                1);
                DBMS_OUTPUT.PUT_LINE('UTLVERBLK V.1.0-14/03/2005 - SKIP CORRUPT 
    

    BLOCKS – ‘||TO_CHAR(SYSDATE,’DD/MM/YYYY-HH24:MI:SS’));
    DBMS_OUTPUT.PUT_LINE(‘== SCHEMA => ‘||PSCHEMA);
    DBMS_OUTPUT.PUT_LINE(‘== OBJECT => ‘||POBJECT);
    DBMS_OUTPUT.PUT_LINE(‘== OBJTYPE => ‘||POBJTYP||’ – 1=>
    TABLE, 2=> INDEX, 3=> CLUSTER’);

                END UTLVERBLK;
    

    /

    *Executar procedure

    SET SERVEROUTPUT ON;

    EXEC UTLVERBLK(‘OWNER’,’OBJECT_NAME’,OBJECT_TYPE);

    sendo que OBJECT_TYPE=1 (TABLE), OBJECT_TYPE=2 (INDEX) e OBJECT_TYPE=3 (CLUSTER)