DATA BLOCK CORRUPTION : ORA-1578 해결 방법
제품 : ORACLE SERVER
작성날짜 : 2005-08-18
DATA BLOCK CORRUPTION : ORA-1578 해결 방법
=========================================
모든 오라클 데이타 블럭은 sequence 번호(seq)와 incarnation 번호(inc)를
갖고 있다. ORA-1578 에러는 seq=0 이고 inc <> 0 (새로운 블럭이 아님)일 때
발생한다. ORA-1578 에러는 ORA-600[3339] 에러와 함께 발생하곤 한다.
ORA-1578 에러가 발생하면 corruption이 발생한 화일 번호와 블럭 번호를
알려준다. 여기서는 이 때의 화일번호를 f, 블럭번호를 b 라고 부르기로 한다.
<해결 방법>
1) 우선 해야 할 일은 어떠한 오브젝트가 corrupt 되었는가를 알아내는 것이다.
다음의 스크립트를 이용하면 알 수 있다.
SQL>select segment_name, segment_type
from dba_extents
where file_id = f and
b between block_id and block_id + blocks - 1;
2) 만약 해당 세그먼트가 인덱스이면 drop 시키고 다시 생성하면 된다.
3) 만약 해당 세그먼트가 테이블이면 corrupt된 블럭의 데이타는 손상된 것이다.
4) 만약 해당 테이블이 들어있는 export 화일이 있다면 손상된 테이블을 drop
시키고 import 받는 것이 제일 간단한 방법이다. 하지만, 만약 export 받은
화일이 없거나 backup해 놓은 화일도 없다면 해당 테이블에 인덱스가 생성되어
있는 경우에 한해서 다음의 방법을 사용해서 복구를 하도록 한다.
5) 해당 테이블에 대한 인덱스가 생성되어 있다면 이를 이용해서 corrupt된
블럭을 피해갈 수 있다. 이 방법은 다음과 같다.
- empno, ename, deptno 를 컬럼으로 가지는 emp 테이블이 corrupt 되었다고
가정하자. 그리고, empno 컬럼에 인덱스가 생성되어 있다고 하자. 클러스터화
되지 않은 모든 테이블은 Unique한 rowid를 가진다.
rowid를 varchar2/hexadecimal 형식으로 표현하려면 rowidtochar 함수를 이용
한다.
SQL> select rowidtochar(rowid) from emp;
rowid는 총 18자로 block address(8자), dot(1자), row address(4자),
dot(1자), file address(4자)로 구성되어 있다.
SQL> select empno, rowid
from emp
where empno > 0
위의 스크립트를 실행시키면 다음과 같은 결과를 얻게 된다.
EMPNO ROWID
100 00000003.0000.0006
101 00000003.0001.0006
102 00000003.0002.0006
103 00000003.0003.0006
500 00000004.0000.000A
501 00000004.0001.000A
755 0000001A.0005.000A
756 0000001A.000C.000A
만약 인덱스가 character 컬럼에 대한 것이었다면 위의 query 문장을 다음과 같
이 바꿀 수 있다.
SQL> select empno, rowid
from emp
where empno > '';
예를 들어 다음과 같은 에러 메시지가 떨어졌다고 하자.
01578, 00000, "ORACLE data block corrupted (file # 10, block # 4)
그러면, 다음의 스크립트를 사용하여 손상된 블럭에 있는 employee 에 대한
empno를 구할 수 있다.
SQL> select empno from emp
where empno > 0
and rowidtochar(rowid) like '00000004.%.000A';
EMPNO ROWID
500 00000004.0000.000A
501 00000004.0001.000A
이제 emp 테이블과 같은 구조를 갖는 새로운 테이블을 만든다.
SQL> create table temp
as select * from emp
where 1 = 2;
그런 다음 손상된 부분을 피해서 새로운 테이블에 손상된 테이블의 데이타를
추가한다.
SQL> insert into temp select * from emp where empno < 500;
SQL> insert into temp select * from emp where empno > 501;
손상된 테이블을 drop 시키고 temp 테이블의 이름을 emp로 변경한다.
그리고, 백업된 자료나 문서 자료를 통하여 손상된 부분에 대한 정보를 추가한다.
6) 손상된 블럭에 여러 개의 row가 존재하고 있다면 다음의 방법을 이용한다.
SQL> create table empnos as
select empno from emp
where empno > 0
and rowidtochar(rowid) not like '00000004.%.000A';
이 스크립트를 이용하면 손상된 block에 포함되지 않는 empno들을 알 수 있다.
다음의 스크립트를 계속 실행시켜 복구를 한다.
SQL> create table temp as select * from emp where 1 = 2;
SQL> insert into temp
select emp.empno, emp.ename, emp.deptno
from emp, empnos
where emp.empno > 0
and emp.empno = empnos.empno;
7) 만약 Data Dictionary의 table이나 index에서 손상된 block이 발생했다면
지원을 요청해야 한다.
Hi,
Take a look in the following Metalink Notes:
- DBMS_REPAIR example - Doc ID: NOTE:68013.1
- Handling Oracle Block Corruptions in Oracle7/8/8i/9i/10g - Doc ID: NOTE:28814.
- Prevention, Detection and Repair of Database Corruption - Doc ID: NOTE:76375.1
Cheers,
Francisco Munoz Alvarez
http://www.oraclenz.com
Similar Messages
-
BLOCK CORRUPTION (ORA-1578) 처리 (ORACLE 8I NEW FEATURE)
제품 : ORACLE SERVER
작성날짜 : 2002-05-31
BLOCK CORRUPTION (ORA-1578) 처리 (ORACLE 8I NEW FEATURE)
========================================================
PURPOSE
Block Corruption의 처리 방안에 대해 알아본다.
Problem Description
block corruption 시 10210, 10211,10231 의 event 를 사용해서
해당 block 을 skip 할 수도 있지만 V8.1 이상에서는
dbms_repair.fix_corrupt_blocks ,
dbms_repair.skip_corrupt_block 를 이용하여
corrupt가 발생한 block을 detect하고 skip, 또는 repair해주는 방안이
제시되고 있다.
Workaround
Solution Description
- 먼저 detecting 을 위해 db_block_checking =true 를 init.ora 에 set
- dbms_repair 의 package 를 사용하는데 이 package 는 dbmsrpr.sql,
prvtrpr.plb를 수행한다 .
- sys 로 접속하여 package 를 실행한다.
다음의 예제를 살펴보자
T1 테이블에 corrupt 된 block 이 있다고 가정한다.
SQL> desc t1
Name Null? Type
COL1 NOT NULL NUMBER(38)
COL2 CHAR(512)
SQL> analyze table t1 validate structure;
analyze table t1 validate structure
ERROR at line 1:
ORA-01498: block check failure - see trace file
이때 ANALYZE로 부터 발생된 trace file 에 corrupt 된 block 에 3 row 의
(nrows = 3) data 가 있음을 알수 있다고 가정하자.
DBMS_REPAIR.ADMIN_TABLES (repair and orphan key)
================================================
ADMIN_TABLES 은 table 을 위한 repair table과,인덱스를 위한 orphan key
tables을 제공한다.
SQL> @adminCreate
SQL> connect sys/change_on_install
Connected.
SQL>
SQL> -- Repair Table
SQL>
SQL> declare
2 begin
3 -- Create repair table
4 dbms_repair.admin_tables (
5 -- table_name => 'REPAIR_TABLE',
6 table_type => dbms_repair.repair_table,
7 action => dbms_repair.create_action,
8 tablespace => 'USERS'); -- default TS of SYS if not specified
9 end;
10 /
PL/SQL procedure successfully completed.
SQL> select owner, object_name, object_type
2 from dba_objects
3 where object_name like '%REPAIR_TABLE';
OWNER OBJECT_NAME OBJECT_TYPE
SYS DBA_REPAIR_TABLE VIEW
SYS REPAIR_TABLE TABLE
SQL>
SQL> -- Orphan Key Table
SQL>
SQL> declare
2 begin
3 -- Create orphan key table
4 dbms_repair.admin_tables (
5 table_type => dbms_repair.orphan_table,
6 action => dbms_repair.create_action,
7 tablespace => 'USERS'); -- default TS of SYS if not specified
8 end;
9 /
PL/SQL procedure successfully completed.
SQL> select owner, object_name, object_type
2 from dba_objects
3 where object_name like '%ORPHAN_KEY_TABLE';
OWNER OBJECT_NAME OBJECT_TYPE
SYS DBA_ORPHAN_KEY_TABLE VIEW
SYS ORPHAN_KEY_TABLE TABLE
DBMS_REPAIR.CHECK_OBJECT
=========================
CHECK_OBJECT procedure 는 기술된 object를 check 하고, repair 를 위한 정보를 수집하기 위함이다.
SQL> @checkObject
SQL> set serveroutput on
SQL>
SQL> declare
2 rpr_count int;
3 begin
4 rpr_count := 0;
5 dbms_repair.check_object (
6 schema_name => 'SYSTEM',
7 object_name => 'T1',
8 repair_table_name => 'REPAIR_TABLE',
9 corrupt_count => rpr_count);
10 dbms_output.put_line('repair count: ' || to_char(rpr_count));
11 end;
12 /
repair count: 1
PL/SQL procedure successfully completed.
SQL> desc repair_table
Name Null? Type
OBJECT_ID NOT NULL NUMBER
TABLESPACE_ID NOT NULL NUMBER
RELATIVE_FILE_ID NOT NULL NUMBER
BLOCK_ID NOT NULL NUMBER
CORRUPT_TYPE NOT NULL NUMBER
SCHEMA_NAME NOT NULL VARCHAR2(30)
OBJECT_NAME NOT NULL VARCHAR2(30)
BASEOBJECT_NAME VARCHAR2(30)
PARTITION_NAME VARCHAR2(30)
CORRUPT_DESCRIPTION VARCHAR2(2000)
REPAIR_DESCRIPTION VARCHAR2(200)
MARKED_CORRUPT NOT NULL VARCHAR2(10)
CHECK_TIMESTAMP NOT NULL DATE
FIX_TIMESTAMP DATE
REFORMAT_TIMESTAMP DATE
SQL> select object_name, block_id, corrupt_type, marked_corrupt,
2 corrupt_description, repair_description
3 from repair_table;
OBJECT_NAME BLOCK_ID CORRUPT_TYPE MARKED_COR
CORRUPT_DESCRIPTION
REPAIR_DESCRIPTION
T1 3 1 FALSE
kdbchk: row locked by non-existent transaction
table=0 slot=0
lockid=32 ktbbhitc=1
mark block software corrupt
Data Extraction
===============
repair table에 의하면 file 6 ,block 3 에 corrupt 이 났음을 알수 있다
그러나 아직 이 block 은 corrupt 로 mark 되어 있지 않으므로 필요 data 를
추출하여야 한다.
1. ALTER SYSTEM DUMP (nrows = 3) 에 의해 block안에 있는 row수를 결정한다.
2. corrupt object를 select 하여 가능한 정보를 추출한다.
SQL> -- The following query can be used to salvage data from a corrupt block.
SQL> -- Creating a temporary table facilitates data insertion.
SQL> create table temp_t1 as
2 select * from system.t1
3 where dbms_rowid.rowid_block_number(rowid) = 3
4 and dbms_rowid.rowid_to_absolute_fno (rowid, 'SYSTEM','T1') = 6;
Table created.
SQL> select col1 from temp_t1;
COL1
2
3
DBMS_REPAIR.FIX_CORRUPT_BLOCKS (ORA-1578)
============================================
FIX_CORRUPT_BLOCKS procedure는 repair table 의 정보를 이용하여 corrupt
blocks 을 fix 한다
그러나 아직 full table scan 시 여전히 error 가 발생한다
SQL> declare
2 fix_count int;
3 begin
4 fix_count := 0;
5 dbms_repair.fix_corrupt_blocks (
6 schema_name => 'SYSTEM',
7 object_name => 'T1',
8 object_type => dbms_repair.table_object,
9 repair_table_name => 'REPAIR_TABLE',
10 fix_count => fix_count);
11 dbms_output.put_line('fix count: ' || to_char(fix_count));
12 end;
13 /
fix count: 1
PL/SQL procedure successfully completed.
SQL> select object_name, block_id, marked_corrupt
2 from repair_table;
OBJECT_NAME BLOCK_ID MARKED_COR
T1 3 TRUE
SQL> select * from system.t1;
select * from system.t1
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 6, block # 3)
ORA-01110: data file 6: '/tmp/ts_corrupt.dbf'
DBMS_REPAIR.DUMP_ORPHAN_KEYS
==============================
DUMP_ORPHAN_KEYS는 corrupt data 에 해당하는 index 를 나타내 준다
SQL> select index_name from dba_indexes
2 where table_name in (select distinct object_name from repair_table);
INDEX_NAME
T1_PK
SQL> @dumpOrphanKeys
SQL> set serveroutput on
SQL>
SQL> declare
2 key_count int;
3 begin
4 key_count := 0;
5 dbms_repair.dump_orphan_keys (
6 schema_name => 'SYSTEM',
7 object_name => 'T1_PK',
8 object_type => dbms_repair.index_object,
9 repair_table_name => 'REPAIR_TABLE',
10 orphan_table_name => 'ORPHAN_KEY_TABLE',
11 key_count => key_count);
12 dbms_output.put_line('orphan key count: ' || to_char(key_count));
13 end;
14 /
orphan key count: 3
PL/SQL procedure successfully completed.
SQL> desc orphan_key_table
Name Null? Type
SCHEMA_NAME NOT NULL VARCHAR2(30)
INDEX_NAME NOT NULL VARCHAR2(30)
IPART_NAME VARCHAR2(30)
INDEX_ID NOT NULL NUMBER
TABLE_NAME NOT NULL VARCHAR2(30)
PART_NAME VARCHAR2(30)
TABLE_ID NOT NULL NUMBER
KEYROWID NOT NULL ROWID
KEY NOT NULL ROWID
DUMP_TIMESTAMP NOT NULL DATE
SQL> select index_name, count(*) from orphan_key_table
2 group by index_name;
INDEX_NAME COUNT(*)
T1_PK 3
Note: orphan key table의 index 는 다시 rebuild 되어야 한다.
DBMS_REPAIR.SKIP_CORRUPT_BLOCKS
===============================
SKIP_CORRUPT_BLOCKS 은 table 과 index 의 corrupt block 을 skip 하는 것을 enable/disable 을 실시한다.
Suggestion: SKIP_CORRUPT_BLOCKS 가 enabled되면 orphan key table의 모든
index 는 모두 rebuild 되어야 한다. ( all index associated with object
if DUMP_ORPHAN_KEYS was omitted).
SQL> @skipCorruptBlocks
SQL> declare
2 begin
3 dbms_repair.skip_corrupt_blocks (
4 schema_name => 'SYSTEM',
5 object_name => 'T1',
6 object_type => dbms_repair.table_object,
7 flags => dbms_repair.skip_flag);
8 end;
9 /
PL/SQL procedure successfully completed.
SQL> select table_name, skip_corrupt from dba_tables
2 where table_name = 'T1';
TABLE_NAME SKIP_COR
T1 ENABLED
SQL> -- rows in corrupt block skipped, no errors on full table scan
SQL> select * from system.t1;
COL1 COL2
4 dddd
5 eeee
--> Notice the pk index has not yet been corrected.
SQL> insert into system.t1 values (1,'aaaa');
insert into system.t1 values (1,'aaaa')
SQL> select * from system.t1 where col1 = 1;
no rows selected
DBMS_REPAIR.REBUILD_FREELISTS
===============================
REBUILD_FREELISTS rebuilds freelists for the specified object.
SQL> declare
2 begin
3 dbms_repair.rebuild_freelists (
4 schema_name => 'SYSTEM',
5 object_name => 'T1',
6 object_type => dbms_repair.table_object);
7 end;
8 /
PL/SQL procedure successfully completed.
Rebuild Index
=============
Note: Every index identified in the orphan key table should be rebuilt to
ensure consistent results.
SQL> alter index system.t1_pk rebuild online;
Index altered.
SQL> insert into system.t1 values (1, 'aaaa');
1 row created.
SQL> select * from system.t1;
COL1 COL2
4 dddd
5 eeee
1 aaaa
Reference Document
------------------Try look to alert<SID>.log file for full error report (you could paste it here).
Also from alert log you could get real values for db_block_buffers and shared_pool_size parameters that used during instance startup. -
Need advice on ORA-01578: ORACLE data block corrupted
We have a development database server version- 10.2.0.3 with materialized views refresh as complete every morning. Yesterday we had a power failure and the server went down and database was shutdown unexpectedly.
When we restarted the database after the server restarted, we found some of the datablocks got corrupted . Following were the exceptions that we saw in the alert.log.
Errors in file /i01_01/app/oracle/product/10.2.0/db_1/admin/orcl9/bdump/orcl9_smon_7547.trc:
ORA-01578: ORACLE data block corrupted (file # 11, block # 257712)
ORA-01110: data file 11: '/i01_01/app/oracle/product/10.2.0/oradata/orcl9/ts_gen_data_02.dbf'
ORACLE Instance orcl9 (pid = 8) - Error 1578 encountered while recovering transaction (9, 38) on object 54463
I tried the following query to see the segment type.
select owner, segment_name, segment_type from dba_extents where file_id =11 and 257712 between block_id and block_id + blocks - 1;
OWNER
SEGMENT_NAME
SEGMENT_TYPE
VISH
INVENTORY_TXN
TABLE
where " INVENTORY_TXN " is a materialized view that was using the block that got corrupted. I can always recreate the MV by dropping and recreating it. Will it solve the problem???
If not, how can I recover/repair the block.???
Can anyone advice on this. Thanks very much in advance.To recover a corrupted block,the best way out is to use Blockrecover command of RMAN. So you would need RmAN backup to perform the operation.But first ypu you need to ensure that this is a persistent error or not? Is this error is coming repeatedly or just once it happened?
About Blockrecover command,read here,
http://download.oracle.com/docs/cd/B19306_01/backup.102/b14191/rcmrecov005.htm#BRADV157
HTH
Aman.... -
ORA-01578: ORACLE data block corrupted
Dera Guru's,
In SAP i have following error in Oracle Database
SQL error in the database when accessing a table
"Database error text........: "ORA-01578: ORACLE data block corrupted (file #
38, block # 72576) ORA-01110: data file 38:
'K:\ORACLE\D01\SAPDATA4\D01_12\D01.DATA12'"
How can i resolve it.Please guide me...
Thank you for your help and advice....Error: ORA-01578 (ORA-1578)
Text: ORACLE data block corrupted (file # %s, block # %s)
Cause: The data block indicated was corrupted, mostly due to software errors.
Action: Try to restore the segment containing the block indicated. This
may involve dropping the segment and recreating it. If there
is a trace file, report the errors in it to your ORACLE
representative.
Do you already identify the object corrupted ?
What kind of backup do you have ?
Edited by: marcopb on Sep 10, 2012 2:47 PM -
Hi,
I am running into a data corruption issue.
My database is:
SQL> select banner from v$version;
BANNER
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production
The following information is written to the alert.log File
alert.log File
Mon Nov 07 17:24:12 2011
Starting ORACLE instance (normal)
LICENSE_MAX_SESSION = 0
LICENSE_SESSIONS_WARNING = 0
Picked latch-free SCN scheme 2
Using LOG_ARCHIVE_DEST_1 parameter default value as USE_DB_RECOVERY_FILE_DEST
Autotune of undo retention is turned on.
IMODE=BR
ILAT =27
LICENSE_MAX_USERS = 0
SYS auditing is disabled
Starting up:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production.
ORACLE_HOME = /home/oracle/dbhome
System name: Linux
Node name: dbl-ora
Release: 2.6.18-274.3.1.el5 (This is rhel5.7 or CentOs5.7)
Version: #1 SMP Tue Sep 6 20:14:03 EDT 2011
Machine: i686 / vm
Mon Nov 07 19:42:14 2011
Corrupt Block Found
TSN = 0, TSNAME = SYSTEM
RFN = 1, BLK = 52346, RDBA = 4246650
OBJN = 225, OBJD = 225, OBJECT = IDL_UB1$, SUBOBJECT =
SEGMENT OWNER = SYS, SEGMENT TYPE = Table Segment
Errors in file /home/oracle/diag/rdbms/ora11/K/trace/K_ora_5425.trc (incident=11053):
ORA-01578: ORACLE data block corrupted (file # 1, block # 52346)
ORA-01110: data file 1: '/home/oracle/oradata/ora11/system01.dbf'
Incident details in: /home/oracle/diag/rdbms/ora11/K/incident/incdir_11053/K_ora_5425_i11053.trc
I was even able to detect the row that is generating the issue.
In my case the obj# 33573 until 33577 are causing the issue,
though I have no idea what sort of objects are affected.
SQL> select * from idl_ub1$ where obj#=33572;
OBJ# PART VERSION PIECE# LENGTH P
33572 1 0 0 9032 F
SQL> select * from idl_ub1$ where obj#=33573;
ERROR:
ORA-01578: ORACLE data block corrupted (file # 1, block # 52346)
ORA-01110: data file 1: '/home/oracle/oradata/ora11/system01.dbf'
no rows selected
SQL> select * from idl_ub1$ where obj#=33577;
ERROR:
ORA-01578: ORACLE data block corrupted (file # 1, block # 52358)
ORA-01110: data file 1: '/home/oracle/oradata/ora11/system01.dbf'
no rows selected
SQL> select * from idl_ub1$ where obj#=33578;
OBJ# PART VERSION PIECE# LENGTH P
33578 1 0 0 9032 F
Any idea, how to fix this problem without recreating the whole database?
Thanks in advance.
wmager
Edited by: magerxr on Nov 7, 2011 8:27 AMmagerxr wrote:
Thanks again for your quick advise.
Here comes the result of dbv against my system tablespace.
[oracle@dbl-ora ~]$ dbv FILE=/home/oracle/oradata/ora11/system01.dbf
DBVERIFY: Release 11.2.0.3.0 - Production on Mon Nov 7 22:39:11 2011
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
DBVERIFY - Verification starting : FILE = /home/oracle/oradata/ora11/system01.dbf
Page 52346 is influx - most likely media corrupt
Corrupt block relative dba: 0x0040cc7a (file 1, block 52346)
Fractured block found during dbv:
Data in bad block:
type: 6 format: 2 rdba: 0x0040cc7a
last change scn: 0x0000.0010acfa seq: 0x1 flg: 0x04
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0x00000000
check value in block header: 0x8fda
computed block checksum: 0xaafbselect owner, segment_type, segment_name from dba_extents
where file_id = 1 and 52346 between block_id and block_id+blocks-1;
>
Page 52347 is marked corrupt
Corrupt block relative dba: 0x0040cc7b (file 1, block 52347)
Bad header found during dbv:
Data in bad block:
type: 1 format: 6 rdba: 0x0000a206
last change scn: 0xacfa.0040cc7b seq: 0x10 flg: 0x00
spare1: 0xfa spare2: 0xac spare3: 0x401
consistency value in tail: 0x00000000
check value in block header: 0x0
block checksum disabled
select owner, segment_type, segment_name from dba_extents
where file_id = 1 and 52347 between block_id and block_id+blocks-1;
Page 52361 is marked corrupt
Corrupt block relative dba: 0x0040cc89 (file 1, block 52361)
Bad header found during dbv:
Data in bad block:
type: 1 format: 6 rdba: 0x0000a206
last change scn: 0xacfb.0040cc89 seq: 0x10 flg: 0x00
spare1: 0xfb spare2: 0xac spare3: 0x401
consistency value in tail: 0x32298500
check value in block header: 0x0
block checksum disabled
select owner, segment_type, segment_name from dba_extents
where file_id = 1 and 52361 between block_id and block_id+blocks-1;
>
>
DBVERIFY - Verification complete
Total Pages Examined : 122880
Total Pages Processed (Data) : 81298
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 22307
Total Pages Failing (Index): 0
Total Pages Processed (Other): 3349
Total Pages Processed (Seg) : 1
Total Pages Failing (Seg) : 0
Total Pages Empty : 15910
Total Pages Marked Corrupt : 16
Total Pages Influx : 1
Total Pages Encrypted : 0
Highest block SCN : 4064615 (0.4064615)post results from 3 SQL above -
ORA-01578: ORACLE data block corrupted (file # 1, block # 53713)
When i tried to export data from db (Oracle 11g, 64bit on Linux)
Im getting following error
About to export specified users ...
. exporting pre-schema procedural objects and actions
EXP-00008: ORACLE error 604 encountered
ORA-00604: error occurred at recursive SQL level 1
ORA-01578: ORACLE data block corrupted (file # 1, block # 53713)
ORA-01110: data file 1: '/u02/oradata/RSDB1/system01.dbf'
EXP-00083: The previous problem occurred when calling EXFSYS.DBMS_EXPFIL_DEPASEX P.schema_info_exp
EXP-00008: ORACLE error 604 encountered
ORA-00604: error occurred at recursive SQL level 1
ORA-01578: ORACLE data block corrupted (file # 1, block # 55497)
ORA-01110: data file 1: '/u02/oradata/RSDB1/system01.dbf'
EXP-00083: The previous problem occurred when calling SYS.DBMS_CUBE_EXP.schema_i nfo_exp
. exporting foreign function library names for user WB_APP_MANAGER
. exporting PUBLIC type synonyms
EXP-00008: ORACLE error 604 encountered
ORA-00604: error occurred at recursive SQL level 1
ORA-01578: ORACLE data block corrupted (file # 1, block # 44638)
ORA-01110: data file 1: '/u02/oradata/RSDB1/system01.dbf'
EXP-00000: Export terminated unsuccessfully
I donot understand how to solve this issue Please help me to solve this issue..
Thanks891620 wrote:
When i tried to export data from db (Oracle 11g, 64bit on Linux)
Im getting following error
About to export specified users ...
. exporting pre-schema procedural objects and actions
EXP-00008: ORACLE error 604 encountered
ORA-00604: error occurred at recursive SQL level 1
ORA-01578: ORACLE data block corrupted (file # 1, block # 53713)
ORA-01110: data file 1: '/u02/oradata/RSDB1/system01.dbf'
EXP-00083: The previous problem occurred when calling EXFSYS.DBMS_EXPFIL_DEPASEX P.schema_info_exp
EXP-00008: ORACLE error 604 encountered
ORA-00604: error occurred at recursive SQL level 1
ORA-01578: ORACLE data block corrupted (file # 1, block # 55497)
ORA-01110: data file 1: '/u02/oradata/RSDB1/system01.dbf'
EXP-00083: The previous problem occurred when calling SYS.DBMS_CUBE_EXP.schema_i nfo_exp
. exporting foreign function library names for user WB_APP_MANAGER
. exporting PUBLIC type synonyms
EXP-00008: ORACLE error 604 encountered
ORA-00604: error occurred at recursive SQL level 1
ORA-01578: ORACLE data block corrupted (file # 1, block # 44638)
ORA-01110: data file 1: '/u02/oradata/RSDB1/system01.dbf'
EXP-00000: Export terminated unsuccessfully
I donot understand how to solve this issue Please help me to solve this issue..
Thanksrun dbv against '/u02/oradata/RSDB1/system01.dbf'
& post results back here
dbv
DBVERIFY: Release 11.2.0.1.0 - Production on Fri Oct 14 20:39:11 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Keyword Description (Default)
FILE File to Verify (NONE)
START Start Block (First Block of File)
END End Block (Last Block of File)
BLOCKSIZE Logical Block Size (8192)
LOGFILE Output Log (NONE)
FEEDBACK Display Progress (0)
PARFILE Parameter File (NONE)
USERID Username/Password (NONE)
SEGMENT_ID Segment ID (tsn.relfile.block) (NONE)
HIGH_SCN Highest Block SCN To Verify (NONE)
(scn_wrap.scn_base OR scn) -
ORA-01578: ORACLE data block corrupted on tables in sysaux tablespace
Dear Experts,
From the alert log file we noticed data block corruptions on one of our datafiles. After further investigation, we realized that the corruptions were on 3 of the AWR related tables in the SYSAUX tablespace:
1. WRH$_LIBRARYCACHE
2. WRH$_TEMPSTATXS
3. WRI$_ALERT_OUTSTANDING
The bad news is that we may not have a valid rman backup to do the recovery due to the retention policy - RECOVERY WINDOW OF 2 DAYS. Since this is a development database with limited monitoring, we did not discover the corruption until 6 days later. The issue happened about 6 days ago (about Christmas time).
So, what are our recovery options? Can someone advice? We are thinking about drop and recreate the 3 affected v$WR* tables, but not quite sure about the impact to the system if we drop and recreate the 3 objects. Did someone experience this type of recovery. If you did, what are your approaches?
We are running oracle 10.2.0.3 version.
I greatly appreciate your input and suggestion. Thanks!!!as long as you have a backup of ur database before christmas, you can use the " MAXDAYS " cmd to get ur backup working so long as you have not used delete obsolote....had a same sistuation....where i had a backup and trying to restore it ...kept saying no valid backup...after going thru some stuff...found the MAXDAYS cmd to use my backup...here is an example ...
$ rman target /
Recovery Manager: Release 10.2.0.2.0 - Production on Sun Apr 6 09:05:44 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
connected to target database (not started)
RMAN> SET DBID=1528894801
executing command: SET DBID
RMAN> startup force nomount;
startup failed: ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/u01/app/oracle/product/10.2.0/db_1/dbs/initsameera.ora'
starting Oracle instance without parameter file for retrival of spfile
Oracle instance started
Total System Global Area 159383552 bytes
Fixed Size 1259672 bytes
Variable Size 58722152 bytes
Database Buffers 92274688 bytes
Redo Buffers 7127040 bytes
RMAN> set controlfile autobackup format for device type disk to '/u99/backup/sameera/control_spfile_%F';
executing command: SET CONTROLFILE AUTOBACKUP FORMAT
using target database control file instead of recovery catalog
RMAN> run
2> {
3> allocate channel p1 type disk;
4> restore spfile to pfile '/u01/app/oracle/product/10.2.0/db_1/dbs/initsameera.ora' from autobackup;
5> shutdown abort;
6> }
allocated channel: p1
channel p1: sid=36 devtype=DISK
Starting restore at 06-APR-08
channel p1: looking for autobackup on day: 20080406
channel p1: looking for autobackup on day: 20080405
channel p1: looking for autobackup on day: 20080404
channel p1: looking for autobackup on day: 20080403
channel p1: looking for autobackup on day: 20080402
channel p1: looking for autobackup on day: 20080401
channel p1: looking for autobackup on day: 20080331
channel p1: no autobackup in 7 days found
released channel: p1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 04/06/2008 09:09:09
RMAN-06172: no autobackup found or specified handle is not a valid copy or piece
Solution:
RMAN> shutdown abort;
RMAN> EXIT;
$ ps -ef |grep pmon
oracle 2891 2856 0 09:05 pts/1 00:00:00 grep pmon
oracle 7448 1 0 Apr05 ? 00:00:00 ora_pmon_primary
$export ORACLE_SID=sameera
$ rman target /
Recovery Manager: Release 10.2.0.2.0 - Production on Sun Apr 6 09:05:44 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
connected to target database (not started)
RMAN> SET DBID=1528894801
executing command: SET DBID
RMAN> startup force nomount;
startup failed: ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/u01/app/oracle/product/10.2.0/db_1/db s/initsameera.ora'
starting Oracle instance without parameter file for retrival of spfile
Oracle instance started
Total System Global Area 159383552 bytes
Fixed Size 1259672 bytes
Variable Size 58722152 bytes
Database Buffers 92274688 bytes
Redo Buffers 7127040 bytes
RMAN> set controlfile autobackup format for device type disk to '/u99/backup/sameera/control_spfile_%F';
executing command: SET CONTROLFILE AUTOBACKUP FORMAT
using target database control file instead of recovery catalog
RMAN> run
2> {
3> allocate channel p1 type disk;
4> restore spfile to pfile '/u01/app/oracle/product/10.2.0/db_1/dbs/initsameera.ora' from autobackup maxdays 15;
5> shutdown abort;
6> }
released channel: ORA_DISK_1
allocated channel: p1
channel p1: sid=36 devtype=DISK
Starting restore at 06-APR-08
channel p1: looking for autobackup on day: 20080406
channel p1: looking for autobackup on day: 20080405
channel p1: looking for autobackup on day: 20080404
channel p1: looking for autobackup on day: 20080403
channel p1: looking for autobackup on day: 20080402
channel p1: looking for autobackup on day: 20080401
channel p1: looking for autobackup on day: 20080331
channel p1: looking for autobackup on day: 20080330
channel p1: looking for autobackup on day: 20080329
channel p1: looking for autobackup on day: 20080328
channel p1: looking for autobackup on day: 20080327
channel p1: looking for autobackup on day: 20080326
channel p1: looking for autobackup on day: 20080325
channel p1: looking for autobackup on day: 20080324
channel p1: looking for autobackup on day: 20080323
channel p1: autobackup found: /u99/backup/sameera/control_spfile_c-1528894801-20080323-00
channel p1: SPFILE restore from autobackup complete
Finished restore at 06-APR-08
Oracle instance shut down
Check to make sure if initsameera.ora exists in $ORACLE_HOME/dbs location.
$ cd $ORACLE_HOME/dbs
$ ls -ltr
total 7052
-rw-r----- 1 oracle oinstall 2560 Apr 5 13:21 spfileprimary.ora
-rw-r----- 1 oracle oinstall 7061504 Apr 5 13:23 snapcf_primary.f
-rw-rw---- 1 oracle oinstall 1544 Apr 5 18:42 hc_sameera.dat
-rw-r--r-- 1 oracle oinstall 1087 Apr 6 09:12 initsameera.ora
$ pwd
/u01/app/oracle/product/10.2.0/db_1/dbs
$ -
Data Block Corruption in sysaux01
dear all,
analyze table SYSMAN.MGMT_METRICS_RAW validate structure cascade ;
ORA-01578: ORACLE data block corrupted (file # 3, block # 31263)
ORA-01110: data file 3: '/u01/app/oracle/oradata/denimlhr/sysaux01.dbf'
We create 'REPAIR_TEST' Table by follwoing comand
begin
dbms_repair.admin_tables(
table_name => 'REPAIR_TEST',
table_type => dbms_repair.repair_table,
action => dbms_repair.create_action,
tablespace => 'SYSAUX'
end;
We execute the following quey
declare corr_count binary_integer;
begin
corr_count := 0;
dbms_repair.CHECK_OBJECT (
schema_name => 'SYSMAN',
object_name => 'MGMT_METRICS_RAW',
partition_name => null,
object_type => dbms_repair.table_object,
repair_table_name => 'REPAIR_TEST',
flags => null,
relative_fno => null,
block_start => null,
block_end => null,
corrupt_count => corr_count
dbms_output.put_line(to_char(corr_count));
end;
NOW THE FOLLOWING ERROR IS Occuring .
ORA-24123: feature IOT support is not yet implemented
ORA-06512: at "SYS.DBMS_REPAIR", line 293
ORA-06512: at line 6
please Advise
Regards/WaseemWhat's your db version?
Which error now you want to track ?The block corruption one or the one which is in bold?
IF the one wich is in bold is the issue than here is what Oracle says about it,
ORA-24123: feature string is not yet implemented
Cause: An attempt was made to use the specified feature, but the feature is not yet implemented.
Action: Do not attempt to use the feature.
Aman.... -
Data block corrupted on standby database (logical corruption)
Hi all,
we are getting the below error on our DRSITE,it is MANUAL PHYSCIAL STANDBY DATABSE...
The following error has occurred:
ORA-01578: ORACLE data block corrupted (file # 3, block # 3236947)
ORA-01110: data file 3: '/bkp/oradata/orcl_raw_cadata01'
ORA-26040: Data block was loaded using the NOLOGGING option
I have checked in the Primary database, that there are some object which are not being logged into the redo logfiles.....
SQL> select table_name,INDEX_NAME,logging from dba_indexes where logging='NO'
TABLE_NAME INDEX_NAME LOG
MENU_MENUS NUX_MENU_MENUS_01 NO
MENU_USER_MENUS MENU_USER_MENUS_X NO
OM_CITY IDM_OM_CITY_CITY_NAME NO
OM_EMPLOYER EMPLR_CODE_PK NO
OM_EMPLOYER IDM_EMPLR_EMPLR_NAME NOOM_STUDENT_HEAD OM_STUDENT_HEAD_HEAD_UK01 NO
OT_DAK_ENTRY_DETL DED_SYS_ID_PK NO
OT_DAK_ENTRY_HEAD DEH_SYS_ID_PK NO
OT_DAK_ENTRY_HEAD IDM_DEH_DT_APPL_REGION NO
OT_DAK_ENTRY_HEAD IDM_DEH_REGION_CODE NO
OT_DAK_REFUNDS_DETL DRD_SYS_ID_PK NO
TABLE_NAME INDEX_NAME LOG
OT_MEM_FEE_COL_DETL IDM_MFCD_MFCH_SYS_ID NO
OM_STUDENT_HEAD IDM_STUD_COURSE NO
13 rows selected.
so the main problem is in the OM_EMPOYER tables if i would delete the indexes from that table recreate it again with the logging clause,and then apply the archvied logs to the DRSITE.WILL THE problem will resolve.
Pls suggest me...Hi..
Firstly how did you confirm that it was that index only.Can you post the output of
SELECT tablespace_name, segment_type, owner, segment_name
FROM dba_extents WHERE file_id = 3 and 3236947 between block_id
AND block_id + blocks - 1;
This query can take time, if are sure that its the index don't fire this command .
Secondly, when you will drop and recreate the index, it will be logged into the redo logfile.This information will be be logged in to an the archivelog file as its the replica of the redo logfile. Then when you apply this archive log maually, it will drop that index and then recreate it using the same sql.
HTH
Anand -
Hi
I have a partitioned table which has bitmap indexes on it.
Some of the bitmap indexes are giving datablock corruption error. Currently I am dropping the index and recreating it.
Is there any other way to resolve this issue?
Thanks.What type of system is this - OLTP or Datawarehouse ?
Since you did not post the exact Oracle error received, lets try some educated guess. Are you getting this error:
ORA-01578: ORACLE data block corrupted (file # string, block # string)
Cause: The data block indicated was corrupted, mostly due to software errors.
Action: Try to restore the segment containing the block indicated. This may involve dropping the segment and recreating it. If there is a trace file, report the errors in it to your ORACLE representative.
Did you see if there was something more useful in the trace file (if created)? -
I'm on 9i R2 Patch 7 on a Microsoft Windows Server 2003.
How do you fix data block corruption in a Table?
Is the some way to retrieve the data from the Table drop it then recreate and reimport the data?
or do you have to succumb with restoring the Database from the last known good backup?Hey, you can do the BMR (Block Media Recovery).
Since block corruption is to few subsets of blocks, i.e. a single table, you dont need to restore from the previous valid backup, you can simply do the following to achieve BMR.
Connect to rman and run the following:
run{ backup validate database};
Once the above commend is finishes, exit from RMAN and connect to the database as / as sysdba and use the following view to know the details required for BMR.
select * from V$backup_corruption;
The above queries gives you file# and block# information. Once you have the information do the BMR using following command at the RMAN prompt:
run {blockrecover datafile # block #};
# : indicated the datafile number and block number from the above view.
Let me know if you have any further issues.
You can also use view V$DATABASE_BLOCK_CORRUPTION to view the file# and corrupted blocks information.
Jaffar -
How to overcome from Data block corruption error
Hi,
I am using one table when i was deleting one row, i encountered "Data block corruption error".
Kindly suggest solutions for the same.
Regards,
AbhishekIf you have a recovery manager backup, then you can perform a block recovery operation, after the information shown on the error message where the file# and the block# are displayed you can perform the block recovery operation.
Syntax for the block recovery operation can be found here : BLOCKRECOVER
In case of an index block, it is enough to rebuild the index.
In case you have a regular backup with archivelog enabled you can restore the damaged datafile and perform a simple file recovery operation.
One more additional tip that can be used, you may be interested in using the DBMS_REPAIR package unit.
Finally, I suggest you to check the complete datafile using dbv (Database Verifier) utility to find out if there are more corrupt blocks in your datafile, and proactively run this utility as a maintenance task.
~ Madrid -
How create data block corruption for test DBMS_REPAIR
Hello to all
I wanna create data block corruption in a table for testing Dbms_repair
is it possible ? if yes please say to me how I can do it ,by example please
thanksthank you so much that link was helpful (specially it's last respond)
I could create data block corruption and I tested DBMS_REPAIR and RMAN for data block recovery
but now I got head spin that if we have rman backup from database so using dbms_repair is what for?
while we can recover corrupted data blocks
please guide me
thanks -
Ora-01113 and ora-01110 -- Data Block Corruption
Running 10g no backup and noarchivelog.
I put the datafile offline so I can bring up the database. Can anyone help me figure out how to fix the Bad datafile?
Thank You,TRACE FILE INFORMATION
SQL> select pa.value || '/' || i.instance_name || '_ora_'
2 || pr.spid || '.trc' as trace_file
3 from v$session s, v$process pr, v$parameter pa, v$instance i
4 where s.username = user and s.paddr = pr.addr
5* and pa.name='user_dump_dest';
TRACE_FILE
/oracle/admin/ora9i/udump/ora9i_ora_25199.trcDUMPING A TABLE BLOCK
SQL> select file_id,block_id,bytes,blocks
2 from dba_extents
3 where owner='P' and segment_name='EMP';
FILE_ID BLOCK_ID BYTES BLOCKS
3 9 65,536 8next is to find out the tablespace name and the datafile...
SQL> select tablespace_name,file_name from dba_data_files
2 where relative_fno = 3;
TABLESPACE_NAME FILE_NAME
USER_DATA /oradata3/ora9i/user_data01.dbfNow that we know which file and blocks hold our table, let’s dump a sample block of the table. This is done as follows:
SQL> alter system dump datafile 3 block 10;System altered.
Let’s now look at the contents of dumping one block.
Start dump data blocks tsn: 3 file#: 3 minblk 10 maxblk 10
buffer tsn: 3 rdba: 0x00c0000a (3/10)
scn: 0x0000.00046911 seq: 0x02 flg: 0x04 tail: 0x69110602
frmt: 0x02 chkval: 0x579d type: 0x06=trans data
Block header dump: 0x00c0000a
Object id on Block? Y
seg/obj: 0x6d9c csc: 0x00.46911 itc: 2 flg: O typ: 1 - DATA
fsl: 0 fnx: 0x0 ver: 0x01
Itl Xid Uba Flag Lck Scn/Fsc
0x01 xid: 0x0005.02f.0000010c uba: 0x00806f10.00ca.28 C--- 0 scn 0x0000.00046900
0x02 xid: 0x0003.01c.00000101 uba: 0x00800033.0099.04 C--- 0 scn 0x0000.00046906
This is the beginning of the data block dump. The first line tells us that we are dumping file#3, starting at block# 10 (minblk), and finishing with block# 10 (maxblk). Had we dumped more than one data block, these values would represent a range. The relative data block address (rdba) is 0x00c0000a. For more information on the rdba, refer to a later section in this paper. At the end of this line, we can see in parentheses that the rdba corresponds to file# 3, block# 10 (3/10).
The third line describes the SCN of the data block. In our case, the SCN is 0x0000.00046911. The tail of the data block is composed of the last two bytes of the SCN (6911) appended with the type (06) and the sequence (02). If the decomposition of the tail does not match these three values, then the system knows that the block is inconsistent and needs to be recovered. While this tail value shows up at the beginning of the block dump, it is physically stored at the end of the data block.
The block type shows up on the fourth line. Some of the valid types correspond to the following table:
Type Meaning
0x02 undo block
0x06 table or index data block
0x0e undo segment header
0x10 data segment header block
0x17 bitmapped data segment headeri hope it will help... -
Oracle 10g + VMware Workstation 6.5 = data block corruption?
I'm trying to run Oracle 10g on VMWare Workstation 6.5 (host and guest are windows 2003)
I've noticed a couple times that I easily get block corruptions and wonder if there are some settings to lower the risk.
Note this is a DEV machine, not a production machine.
I don't know if Oracle supports the set up but I'm sure many people are running Oracle in Vmware so I'm looking to those who have done so successfully.
Anyone know of special precautions in either Vmware or Oracle config to limit the risk on block corruption?
According to VMWare, ESX is a perfect platorm so maybe I should move from Workstation to ESX, maybe it has to do with Windows in VM and Linux would work better.
Anyone has some info on why Oracle has block corruption on VMware Workstation (windows/windows)?
Other people with positive/negative experience on VMWare Workstation (mention OS's and Oracle version please)
(before someone tells me it's not supported, also see these pages on vmware.com:
http://blogs.vmware.com/performance/2007/11/ten-reasons-why.html
http://blogs.vmware.com/oracle/2009/03/a-perspective-support-for-vmware-with-oracle.html)
Edited by: phmeert on Feb 26, 2010 4:27 PMWell, it's indeed not for production, I use it for product demos and small development tasks, there is no critical data in my database but I wished I could run Oracle inside a VM on my laptop...
It works reasonably well (I even have run multiple VM's (Workstation) with Oracle insde on 1 laptop (4 GB Ram, Core Duo), but sooner or later it gives some problems. If there is any setting that can lower the risk would be great.
I was thinking of installing ORacle VM but apparently my laptop is not compatible with that (nor with ESX for that matter).
Anyone use plain Xen (which seems to support any processor) + Oracle on Linux ??
I can't install Oracle natively on the machine directly since I need the capabilities of a VM in respect of easy backup + I have many different applications and databases so depending on what I need to show, I just start a different VM
The VM provides the capabilities to move back to previous situation, exchaning demos with collegues, have multiple parallel copies with different configurations (depending on customer), etc...
... installing natively is too much of hassle, we used to swap hard disks but that's a pain when the hardware changes, at least with VMWare WS you can run it on pretty much any computer.
How do other people deal with this type of situation?? We have ESX on a hosted environment but internet access is not always available...
It seems stable enough to run my demos (I'm doing this for quite a while but the block corruption seems to happen sooner or later)
The problem is that I first need to get the demo installed without corruptions. Once it's installed I can just restart from that situation over and over again, but obviously I don't want to run the risk of having a disk corruption in the middle of a demo.
Maybe you are looking for
-
10.9.2 Reboot loop no Displayport working
Installed 10.9.2 last night, had to revert back to 10.9. Apparently if there is a display connected to the Displayport the system kernel panic. I have 2 display and if I unplug the Led CinemaDisplay from the Displayport it will boot fine on the Dvi c
-
Is it possible to create a zoom region by window in Flash player
Hi all I am desperately looking online to see it this is possible: And not having much luck, The user views our map in flashplayer and can zoom into an area by defining a window (left hand mouse button, click >hold and drag to define size of window.
-
Color Shift - Save To Web - There really is an issue
OK, Every article I have read about this topic indicates that the user does not really grasp colour management fully. However, I'm going to stick my neck out, and suggest that there really is an issue with either PS or Fireworks CS5, and here's why.
-
Hi, I want to know who are the approvers for a Particular POs? Where can i find this information. When i go to the PO and then go to the "Release Strategy",it is just displaying Buyer, L1,L2 approver etc.? Where can i find the names of the buyer ,L1
-
Is it possible to load multi applet whose version is different ?
Is it possible to load on same browser multi applet whose version of JRE is different (1.3.1 and 1.4.2) at same time? These applets are loaded <OBJECT> tag. If Not, is there documentation written above things are specification. Thank you for advance.