› Fóruns › Banco de dados Oracle › BLOCO DE DADOS ORACLE DANIFICADO !!!!!! › BLOCO DE DADOS ORACLE DANIFICADO !!!!!!
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)