0% found this document useful (0 votes)
26 views6 pages

Eliminando Blocos Corrompidos No Xe

The document describes steps taken to identify and repair a corrupted block in a database table. It shows the use of commands like SELECT and ALTER TABLE to find the corrupted block, skip it to allow moving the table, and removing the skip. The corrupted block was in the SYSTEMUSER.PESSOA_FISICA table stored in file 5.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
26 views6 pages

Eliminando Blocos Corrompidos No Xe

The document describes steps taken to identify and repair a corrupted block in a database table. It shows the use of commands like SELECT and ALTER TABLE to find the corrupted block, skip it to allow moving the table, and removing the skip. The corrupted block was in the SYSTEMUSER.PESSOA_FISICA table stored in file 5.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 6

ELIMINANDO BLOCOS CORROMPIDOS

██████████████████████████████████████████

SQL> SELECT * FROM v$database_block_corruption;

FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO


---------- ---------- ---------- ------------------ ---------
5 48466 1 0 CORRUPT

SQL> Select * from dba_free_space where file_id=5 and 48466 between block_id and
block_id + blocks -1;

no rows selected

SQL>

set lines 234


col owner for a15
col segment_type for a15
col segment_name format a30
col partition_name for a15
SELECT e.owner, e.segment_type, e.segment_name, e.partition_name, c.file#
, greatest(e.block_id, c.block#) corr_start_block#
, least(e.block_id+e.blocks-1, c.block#+c.blocks-1) corr_end_block#
, least(e.block_id+e.blocks-1, c.block#+c.blocks-1)
- greatest(e.block_id, c.block#) + 1 blocks_corrupted
, null description
FROM dba_extents e, v$database_block_corruption c
WHERE e.file_id = c.file#
AND e.block_id <= c.block# + c.blocks - 1
AND e.block_id + e.blocks - 1 >= c.block#
UNION
SELECT s.owner, s.segment_type, s.segment_name, s.partition_name, c.file#
, header_block corr_start_block#
, header_block corr_end_block#
, 1 blocks_corrupted
, 'Segment Header' description
FROM dba_segments s, v$database_block_corruption c
WHERE s.header_file = c.file#
AND s.header_block between c.block# and c.block# + c.blocks - 1
UNION
SELECT null owner, null segment_type, null segment_name, null partition_name,
c.file#
, greatest(f.block_id, c.block#) corr_start_block#
, least(f.block_id+f.blocks-1, c.block#+c.blocks-1) corr_end_block#
, least(f.block_id+f.blocks-1, c.block#+c.blocks-1)
- greatest(f.block_id, c.block#) + 1 blocks_corrupted
, 'Free Block' description
FROM dba_free_space f, v$database_block_corruption c
WHERE f.file_id = c.file#
AND f.block_id <= c.block# + c.blocks - 1
AND f.block_id + f.blocks - 1 >= c.block#
ORDER BY file#, corr_start_block#;
OWNER SEGMENT_TYPE SEGMENT_NAME PARTITION_NAME
FILE# CORR_START_BLOCK# CORR_END_BLOCK# BLOCKS_CORRUPTED DESCRIPTION
--------------- --------------- ------------------------------ ---------------
---------- ----------------- --------------- ---------------- --------------
SYSTEMUSER TABLE PESSOA_FISICA
5 48466 48466 1

SQL>

CREATE TABLE "SYSTEMUSER"."PESSOA_FISICA"


( "ID_PFI" NUMBER(9,0) NOT NULL ENABLE,
"CD_SITUACAO" NUMBER(1,0) NOT NULL ENABLE,
"NM_PFI" VARCHAR2(50) NOT NULL ENABLE,
"CD_SEXO" CHAR(1) DEFAULT '1' NOT NULL ENABLE,
"NR_CPF" NUMBER(11,0),
"NR_RG" VARCHAR2(13),
"CD_ORGAO_EMISSOR_RG" VARCHAR2(3),
"ID_EST_EMISSOR_RG" VARCHAR2(2),
"DT_EMISSAO_RG" DATE,
"DT_NASC" DATE,
"ID_CID_NATURAL" NUMBER(9,0),
"ID_PAI_NACIONAL" VARCHAR2(4),
"ID_PFS" NUMBER(4,0),
"CD_ESTADO_CIVIL" NUMBER(1,0) DEFAULT 1,
"VL_RENDA_MENSAL" NUMBER(15,2),
"NM_PSEUDONIMO" VARCHAR2(50),
"NM_PFI_COMPLETO" VARCHAR2(80),
"DT_ULT_ALTERACAO" DATE,
CONSTRAINT "PFI_PK" PRIMARY KEY ("ID_PFI")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 393216 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "INDICES" ENABLE,
CONSTRAINT "PFI_PFI2_UK" UNIQUE ("NR_CPF")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 327680 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "INDICES" ENABLE,
CHECK (cd_estado_civil IN ( 1 , 2 , 3 , 4 , 5 , 6 , 7 )) ENABLE,
CHECK (vl_renda_mensal BETWEEN 0 AND 9999999999999.99) ENABLE,
CHECK (cd_situacao IN ( 1 , 2 , 3 , 4 )) ENABLE,
CHECK (cd_sexo IN ( 'M' , 'F' )) ENABLE,
CHECK ( cd_estado_civil IN ( 1 , 2 , 3 , 4 , 5 , 6 , 7 ) ) ENABLE,
CHECK ( vl_renda_mensal BETWEEN 0 AND 9999999999999.99 ) ENABLE,
CHECK ( cd_situacao IN ( 1 , 2 , 3 , 4 ) ) ENABLE,
CHECK ( cd_sexo IN ( 'M' , 'F' ) ) ENABLE,
CHECK ( cd_estado_civil IN ( 1 , 2 , 3 , 4 , 5 , 6 , 7 ) ) ENABLE,
CHECK ( cd_estado_civil IN ( 1 , 2 , 3 , 4 , 5 , 6 , 7 ) ) ENABLE,
CHECK ( vl_renda_mensal BETWEEN 0 AND 9999999999999.99 ) ENABLE,
CHECK ( cd_situacao IN ( 1 , 2 , 3 , 4 ) ) ENABLE,
CHECK ( cd_sexo IN ( 'M' , 'F' ) ) ENABLE,
CHECK ( cd_estado_civil IN ( 1 , 2 , 3 , 4 , 5 , 6 , 7 ) ) ENABLE,
CHECK ( cd_estado_civil IN ( 1 , 2 , 3 , 4 , 5 , 6 , 7 ) ) ENABLE,
CHECK ( vl_renda_mensal BETWEEN 0 AND 9999999999999.99 ) ENABLE,
CHECK ( cd_situacao IN ( 1 , 2 , 3 , 4 ) ) ENABLE,
CHECK ( cd_sexo IN ( 'M' , 'F' ) ) ENABLE,
CHECK ( cd_estado_civil IN ( 1 , 2 , 3 , 4 , 5 , 6 , 7 ) ) ENABLE,
CHECK ( cd_estado_civil IN ( 1 , 2 , 3 , 4 , 5 , 6 , 7 ) ) ENABLE,
CHECK ( vl_renda_mensal BETWEEN 0 AND 9999999999999.99 ) ENABLE,
CHECK ( cd_situacao IN ( 1 , 2 , 3 , 4 ) ) ENABLE,
CHECK ( cd_sexo IN ( 'M' , 'F' ) ) ENABLE,
CHECK ( cd_estado_civil IN ( 1 , 2 , 3 , 4 , 5 , 6 , 7 ) ) ENABLE,
CHECK ( cd_estado_civil IN ( 1 , 2 , 3 , 4 , 5 , 6 , 7 ) ) ENABLE,
CHECK ( vl_renda_mensal BETWEEN 0 AND 9999999999999.99 ) ENABLE,
CHECK ( cd_situacao IN ( 1 , 2 , 3 , 4 ) ) ENABLE,
CHECK ( cd_sexo IN ( 'M' , 'F' ) ) ENABLE,
CHECK ( cd_estado_civil IN ( 1 , 2 , 3 , 4 , 5 , 6 , 7 ) ) ENABLE,
CONSTRAINT "PFI_PFS_FK" FOREIGN KEY ("ID_PFS")
REFERENCES "SYSTEMUSER"."PROFISSAO" ("ID_PFS") ENABLE
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 2097152 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "DADOS" ENABLE ROW MOVEMENT ;

SQL> Select BYTES/1024 KBYTES from dba_free_space where file_id=5 and 48466 between
block_id and block_id + blocks -1;

no rows selected

SQL>

SQL> select segment_name, segment_type, owner


from dba_extents
where file_id =5
and 48466 between block_id
and block_id + blocks -1 ;

SEGMENT_NAME SEGMENT_TYPE OWNER


------------------------------ --------------- ---------------
PESSOA_FISICA TABLE SYSTEMUSER

SQL> Select * from dba_free_space where file_id=5 and 48466 between block_id and
block_id + blocks -1;

no rows selected

SQL>
SQL> @segmap

Tablespace FILE_ID File Name


MAXEXTEND(MB) INCREMENT(MB) AE Total Bytes Used
Free
--------------- ---------- -------------------------------------------------------
---------------- ---------------- --- -------------------- --------------------
--------------------
DADOS 5 /usr/lib/oracle/xe/oradata/XE/dados.dbf
1,900 50 YES 1,681,915,904 923,205,632
758,710,272
INDICES 6 /usr/lib/oracle/xe/oradata/XE/indices01.dbf
1,800 50 YES 953,221,120 857,669,632
95,551,488
LOBS 4 /usr/lib/oracle/xe/oradata/XE/lobs01.dbf
100 5 YES 41,943,040 20,578,304
21,364,736
SYSAUX 3 /usr/lib/oracle/xe/oradata/XE/sysaux.dbf
1,024 10 YES 542,113,792 528,285,696
13,828,096
SYSTEM 1 /usr/lib/oracle/xe/oradata/XE/system.dbf
600 10 YES 443,613,184 426,311,680
17,301,504
UNDO 2 /usr/lib/oracle/xe/oradata/XE/undo.dbf
3,072 10 YES 300,941,312 53,149,696
247,791,616

6 rows selected.

Enter value for tbs: DADOS


old 16: WHERE tablespace_name = '&&TBS'
new 16: WHERE tablespace_name = 'DADOS'
old 26: WHERE tablespace_name = '&&TBS'
new 26: WHERE tablespace_name = 'DADOS'
Enter value for file_id: 5
old 28: WHERE file_id = &&FILE_ID
new 28: WHERE file_id = 5

...
...
48137 48264 .99 SYSTEMUSER CONTATO_CLIENTE
TABLE
48265 48304 .3 SYSTEMUSER LOG_ATUALIZA_CLIENTE_CLI
TABLE
48305 48392 .68 free
48393 48520 .99 SYSTEMUSER PESSOA_FISICA
TABLE <<<<<<
48521 48648 .99 SYSTEMUSER PESSOA_FISICA
TABLE
48649 48776 .99 SYSTEMUSER PESSOA_FISICA
TABLE
...
...
...
SQL> alter table SYSTEMUSER.PESSOA_FISICA move;
alter table SYSTEMUSER.PESSOA_FISICA move
*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 5, block # 48466)
ORA-01110: data file 5: '/usr/lib/oracle/xe/oradata/XE/dados.dbf'

SQL> exec dbms_repair.skip_corrupt_blocks (schema_name => '&schema_name',


object_name => '&object_name', object_type => dbms_repair.table_object, flags =>
dbms_repair.SKIP_FLAG);
Enter value for schema_name: SYSTEMUSER
Enter value for object_name: PESSOA_FISICA

PL/SQL procedure successfully completed.

SQL> alter table SYSTEMUSER.PESSOA_FISICA move;

Table altered.

SQL> alter table table_name move tablespace tablespace_name;^C

SQL> exec dbms_repair.skip_corrupt_blocks (schema_name => '&schema_name',


object_name => '&object_name', object_type => dbms_repair.table_object, flags =>
dbms_repair.NOSKIP_FLAG);
Enter value for schema_name: SYSTEMUSER
Enter value for object_name: PESSOA_FISICA

PL/SQL procedure successfully completed.

SQL>

SQL> !ls ../


autostart catnoawr.sql gera_zlixo1.sh gera_zlixo2.sh gera_zlixo3.sh
LIMPEZA_XE_4.0.sql LIMPEZA_XE_5.0.sql LIMPEZA_XE_6.0.sql scripts zlixo1.sql
zlixo2.sql zlixo3.sql

SQL> @../LIMPEZA_XE_6.0.sql

rman target /

Backup validate check logical datafile 5;

Starting backup at 28-MAR-23


using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=528 devtype=DISK
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00006 name=/usr/lib/oracle/xe/oradata/XE/indices01.dbf
channel ORA_DISK_1: backup set complete, elapsed time: 00:01:05
Finished backup at 28-MAR-23

RMAN>

Recovery Manager complete.

sqlplus / as sysdba

Select * from v$database_block_corruption ;

no rows selected

SQL>

You might also like