Logical block corruption in an unused block which is a part of index
Hi All,
During RMAN backup level 0 I am getting a corrupted block my DB:
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of backup command on t20 channel at 07/22/2009 21:30:49
ORA-19566: exceeded limit of 0 corrupt blocks for file /oracle/oradata/DB2/plind05_02.dbf
SQL> select * from v$database_block_corruption;
FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO
2950 1879477 1 1.0124E+13 LOGICAL
SQL> SELECT tablespace_name, partition_name,segment_type, owner, segment_name FROM dba_extents WHERE file_id = 2950 and 1879477 between block_id AND block_id + blocks - 1;
no rows selected
So this block does not belong to any object.
SQL > select * from dba_free_space where file_id= 2950 and 1879477 between block_id and block_id blocks -1;+
TABLESPACE_NAME FILE_ID BLOCK_ID BYTES BLOCKS RELATIVE_FNO
USAGIDX_200907 2950 1879433 1048576 128 909
But it exists in dba_free_space so it belongs to file space usage bitmap.
DB Verify shows:
myserver:/oracle/rman/DB2:DBINST1> dbv file=/oracle/oradata/DB2/plind05_02.dbf BLOCKSIZE=8192
DBVERIFY: Release 10.2.0.4.0 - Production on Wed Jul 29 13:47:38 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
DBVERIFY - Verification starting : FILE = /oracle/oradata/DB2/plind05_02.dbf
Block Checking: DBA = -480465494, Block Type = KTB-managed data block
**** row 2: key out of order
---- end index block validation
Page 1879477 failed with check code 6401
DBVERIFY - Verification complete
Total Pages Examined : 4194176
Total Pages Processed (Data) : 0
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 3404935
Total Pages Failing (Index): 1
Total Pages Processed (Other): 569
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 788672
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Highest block SCN : 1795222745 (2360.1795222745)
Now, I have identified that this block belongs to an index subpartition so I have rebuild it with alter index ... rebuild subpartition... However, the RMAN backup still fails and DBV still reports an error.
I know that we could simply recreate the index but the problem is that its quite big (>6GB and table is >7TB).
My strong feeling is that the cause of this is that corrupted blocks will still be reported by RMAN and DBV until they are reused and reformatted.
My question is:
How can I reuse or reformat a block which does not belong to any object?
Hi,
Yes you're right, you need to reformat that block.
For that you need to allocate that block to a table, and fill that table with data until high water mark goes higher than block 1879477.
This isthe way I've done it once:
1) check the free space size below that block:
select sum(bytes)/1024/1024 before from dba_free_space where file_id=1879477 and block_id <= 1503738;
Let's say it is 6000 MB
2) create a dummy table, allocate enough extents to fill the size returned from the previous query
This does not format blocks, but the advantage of allocate extents is that you can specify size and datafile:
alter table allocate extents size 6000M datafile '/oracle/oradata/DB2/plind05_02.dbf';
you can check dba_extents to see if it covers block 1879477. If not, try to add a little more extents.
3) fill the table with data to fill those extents.
One idea is to insert one rows into the table, then use 'alter table test minimize records_per_block;' so that each block will have 2 rows maximum.
check the number of blocks (from dba_segments). Say you have 768000 blocks. Then you need to insert 768000/2 rows:
insert into ... select ... from dual connect by level < (768000/2)
4) check the high water mark has reach the end of all extents (compare dba_tables.blocks and dba_segemnts.blocks)
5) if not enough, try to add a little more rows.
Be careful that you don't go too far (especially if you have extensible datafile). Unfortunately, maxextents is ignored on LMT :(
6) now, your block should be reformatted. Just drop the dummy table.
Regards,
Franck.
Similar Messages
-
Block corruption in Free Space
Hi,
Environment:-
Oralce 10.2.0
Windows platform
I am facing problem of Logical block corruption.
RMAN validate block corruption (DBVerify as well) But no entry in Alert log file.
When I check Which segment has block corruption I found that block corruption are in free blocks of tablespace (DBA_FREE_SPACE).
To Fix it I create table and allocate corrupted block to that table. I confirm corrupted block allocation in table (using DBA_EXTENTS).
But when I insert rows in that table to reuse corrupted block Oracle give error of ora-1578 Block corruption, and I am not able to reuse corrupted block(as many expert suggest to overcome block corruption in free space).
I dropped table and recreate and repeat this process many times but still no success.
So. can anybody help me on this.
I appreciate your efforts and time you spend to read this
ThanksHello,
Please check the link i posted.
Example: Detecting Corruption
The CHECK_OBJECT procedure checks the specified object, and populates the repair table with information about corruptions and repair directives. You can optionally specify a range, partition name, or subpartition name when you want to check a portion of an object.
Validation consists of checking all blocks in the object that have not previously been marked corrupt. For each block, the transaction and data layer portions are checked for self consistency. During CHECK_OBJECT, if a block is encountered that has a corrupt buffer cache header, then that block is skipped.
The following is an example of executing the CHECK_OBJECT procedure for the scott.dept table.
SET SERVEROUTPUT ON
DECLARE num_corrupt INT;
BEGIN
num_corrupt := 0;
DBMS_REPAIR.CHECK_OBJECT (
SCHEMA_NAME => 'SCOTT',
OBJECT_NAME => 'DEPT',
REPAIR_TABLE_NAME => 'REPAIR_TABLE',
CORRUPT_COUNT => num_corrupt);
DBMS_OUTPUT.PUT_LINE('number corrupt: ' || TO_CHAR (num_corrupt));
END;
SQL*Plus outputs the following line, indicating one corruption:
number corrupt: 1 -
Hi All
Is there any specific reason or what have possible to cause on the data block corruption in the oracle database.Block corruption is while the data is being written to the data blocks, if the write to the block fails abruptly, I mean that there is a partial write in the block, may be because of power disruption or I/O problem, leaving no time for header to be updated, or row data to be populated, oracle leaves the block corrupt.In case of block corruption you can normally use the database unless you try to read that particular block, against which it shoots up the block corruption error.Generally block corruption occurs if write fails on the block, when the transaction is being committed
ORA-01578:
ORACLE data block corrupted (file # string, block # string)
Whenever we encounter above error message mean we have BLOCK CORRUPTION.
We can find detail information about block corruption in alert.log file
Two types of block corruption can happens
- Physical corruption (media corrupt)
- Logical corruption (soft corrupt)
Physical corruption can be caused by defected memory boards, controllers or broken sectors on a hard disk;
Logical corruption can among other reasons be caused by an attempt to recover through a NOLOGGING action. -
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.... -
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. -
Block corruption recovery!!
Hi. all.
I am testing a recovery in the event of block corruption.
As far as I know, the solution to block corruption is as followings:
1. BlockRecover command (RMAN)
2. drop the table and import from backup dump file
3. DBMS_REPAIR package
4. complete recovery from online full backup
My question is whether No. 4 is possible or not.
step 1 : bring the datafile offline
step 2 : restore the datafile from the last backup(online backup)
step 3: recover the datafile, applying archive logs and online redo logs
step 4 : bring the datafile online
The above steps are enough for block corruption recovery?
I need to make a document about block corruption issue, but
I have no experience of recovering block corruption.
Thanks in advance.
Best Regards.If few blocks are corrupted, it is advisable to run the BMR (block media recover, staring with 9i). This option provides the availability of other data present in datafile.
Option 4 is okay when most of the data block in a datafile got corrupted.
To know how many blocks got corrupted in the datafile, run the following:
SELECT * FROM V$DATABASE_BLOCK_CORRUPTION;
SELECT * FROM V$COPY_CORRUPTION;
SELECT * FROM V$BACKUP_CORRUPTION;
You need to look into corrution_type and blocks columns in the v$database_block_corruption view as it gives the reason for block corruption and number of blocks are corrupted in a datafile.
Jaffar -
OSB Unused block compression and Undo backup compression
Dear all.
I know that osb backup software is faster than other vendor software especially oracle database backup area.
There are two special method (Unused block compression and Undo backup compression)
But, normally in case of comparable product using same RMAN API(Veritas/Legato etc...), they only backup used block and skip unused block, right?
I'm confused, what is different from used block only backup and unused block compression.
Please explain detail about unused block compression and Undo backup compression.
Sorry about my poor knowledge.
Thanks.This is explained in detail in the OSB technical white paper:
http://www.oracle.com/technetwork/products/secure-backup/learnmore/osb-103-twp-166804.pdf
Let me know if you have any questions
Donna -
Diff between logical and physical block corruption
What is the difference between Physical and Logical block corruption.
Dbverify utility, analyze command is used to check the logical block corruption not the physical one am i correct??
When i get
ORA-01578: ORACLE data block corrupted (file # 9, block # 13)
ORA-01110: data file 9: '/oracle/dbs/tbs_91.f'
ORA-01578: ORACLE data block corrupted (file # 2, block # 19)
ORA-01110: data file 2: '/oracle/dbs/tbs_21.f'
How to conform that this a logical or physical block corruption???
please through some light regarding this....
kumareshthe following link may help u
http://download-east.oracle.com/docs/cd/B19306_01/backup.102/b14191/rcmconc1012.htm -
Hi all,
i have database 11.2.0.1.0 on linux 5. on this database we found so many block corruption with are related to indexes.
some of the indexes rebuiled, and rebuilded indexes are working fine. But we have so many indexes corrupted.
SQL> select count(*) from v$database_block_corruption;
COUNT(*)
2347
SQL>
i verified by from RMAN logical check also.
if i keep on rebuilding these indexes it will take long time and maily may impact on performance.
Could you please suggest what is the best possible ways to get out from this.
thanks a lot.899329 wrote:
Hi all,
i have database 11.2.0.1.0 on linux 5. on this database we found so many block corruption with are related to indexes.
some of the indexes rebuiled, and rebuilded indexes are working fine. But we have so many indexes corrupted.
SQL> select count(*) from v$database_block_corruption;
COUNT(*)
2347
SQL>
i verified by from RMAN logical check also.
if i keep on rebuilding these indexes it will take long time and maily may impact on performance.
Could you please suggest what is the best possible ways to get out from this.
thanks a lot.Replace the sick disk. -
Logical Block corruption - not enough RMAN backups
I have to deal with logical block corruption but these guys do not have enough rman backups to go back enough to recover blocks.
All bad blocks are in SYSAUX and it seems because of it EM doesn't work as it's suppose to do. I dropped and recreated EM repository hoping it will clean itself but .... no.
Any ideas?
Oracle Linux 4.7 i386
Oracle 10.2.0.4OCCUPANT_NAME OCCUPANT_DESC SCHEMA_NAME MOVE_PROCEDURE MOVE_PROCEDURE_DESC SPACE_USAGE_KBYTES
EM Enterprise Manager Repository SYSMAN emd_maintenance.move_em_tblspc Move Procedure for Enterprise Manager Repository 52800
EM_MONITORING_USER Enterprise Manager Monitoring User DBSNMP *** MOVE PROCEDURE NOT APPLICABLE *** 1600 -
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 -
RMAN logical backup containing unused blocks
Dear Experts
When i taking logical backup of datafile from RMAN utility i notify that it will also backed up all unused blocks from datafile, so what i need to do, how to avoid that unused block from being backed up while taking logical backup of datafiles.
System details as follows
HP Itanium server
OS - Redhet Linux 5
DB - Oracle10g
Suggest me urgent.Here i am gonna show you the backup statistics for only those problematic datafiles
DFNAME DATAFILE_BLCKS BLOCKS DIFF
/san_index/oradata/orcl/rajemitra_index1.dbf 1695744 9818 1685926
/san_index/oradata/orcl/rajemitra_index2.dbf 1716224 8527 1707697
/san_index/oradata/orcl/rajemitra_index3.dbf 1622016 9727 1612289
/san_index/oradata/orcl/rajemitra_index4.dbf 1622016 9808 1612208
/san_index/oradata/orcl/rajemitra_index1.dbf 1695744 24823 1670921
/san_index/oradata/orcl/rajemitra_index2.dbf 1716224 19891 1696333
/san_index/oradata/orcl/rajemitra_index3.dbf 1622016 20591 1601425
/san_index/oradata/orcl/rajemitra_index4.dbf 1622016 17026 1604990
/san_index/oradata/orcl/rajemitra_index1.dbf 1695744 21239 1674505
/san_index/oradata/orcl/rajemitra_index2.dbf 1716224 17843 1698381
/san_index/oradata/orcl/rajemitra_index3.dbf 1622016 19820 1602196
/san_index/oradata/orcl/rajemitra_index4.dbf 1622016 14429 1607587
/san_index/oradata/orcl/rajemitra_index1.dbf 1695744 33885 1661859
/san_index/oradata/orcl/rajemitra_index2.dbf 1716224 41480 1674744
/san_index/oradata/orcl/rajemitra_index3.dbf 1622016 32338 1589678
/san_index/oradata/orcl/rajemitra_index4.dbf 1622016 26288 1595728
/san_index/oradata/orcl/rajemitra_index1.dbf 1695744 10504 1685240
/san_index/oradata/orcl/rajemitra_index2.dbf 1716224 18169 1698055
/san_index/oradata/orcl/rajemitra_index3.dbf 1622016 16195 1605821
/san_index/oradata/orcl/rajemitra_index4.dbf 1622016 11974 1610042
/san_index/oradata/orcl/rajemitra_index1.dbf 1695744 16938 1678806
/san_index/oradata/orcl/rajemitra_index2.dbf 1716224 25688 1690536
/san_index/oradata/orcl/rajemitra_index3.dbf 1622016 30653 1591363
/san_index/oradata/orcl/rajemitra_index4.dbf 1622016 20611 1601405
/san_index/oradata/orcl/rajemitra_index1.dbf 1695744 965385 730359
/san_index/oradata/orcl/rajemitra_index2.dbf 1716224 1010354 705870
/san_index/oradata/orcl/rajemitra_index4.dbf 1622016 1004034 617982
/san_index/oradata/orcl/rajemitra_index1.dbf 1695744 1695397 347
/san_index/oradata/orcl/rajemitra_index2.dbf 1716224 1713435 2789
/san_index/oradata/orcl/rajemitra_index3.dbf 1622016 1621255 761
/san_index/oradata/orcl/rajemitra_index4.dbf 1622016 1620287 1729
/san_index/oradata/orcl/rajemitra_index1.dbf 1695744 1695397 347
/san_index/oradata/orcl/rajemitra_index5.dbf 1171456 1170831 625
/san_index/oradata/orcl/rajemitra_index1.dbf 1695744 1695397 347
/san_index/oradata/orcl/rajemitra_index2.dbf 1716224 1713470 2754
/san_index/oradata/orcl/rajemitra_index3.dbf 1622016 1621261 755
/san_index/oradata/orcl/rajemitra_index4.dbf 1622016 1620364 1652
/san_index/oradata/orcl/rajemitra_index5.dbf 1171456 48547 1122909
/san_index/oradata/orcl/rajemitra_index1.dbf 1695744 47875 1647869
/san_index/oradata/orcl/rajemitra_index2.dbf 1716224 19725 1696499
/san_index/oradata/orcl/rajemitra_index3.dbf 1622016 26205 1595811
/san_index/oradata/orcl/rajemitra_index4.dbf 1622016 56040 1565976
/san_index/oradata/orcl/rajemitra_index5.dbf 1171456 31859 1139597
/san_index/oradata/orcl/rajemitra_index1.dbf 1695744 29509 1666235
/san_index/oradata/orcl/rajemitra_index2.dbf 1716224 20767 1695457
/san_index/oradata/orcl/rajemitra_index3.dbf 1622016 13210 1608806
/san_index/oradata/orcl/rajemitra_index4.dbf 1622016 31411 1590605 -
Checking block corruption, why in alert it is saying Error in trace file
Hi,
I am using Oracle 10g 10.2.0.1 with linux 32 bit
I wanted to check block corruption using RMAN by following statement
backup validate check logical database;
when i executed the statement, following was the output
Starting backup at 09-MAY-08
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=91 devtype=DISK
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00004 name=/u01/app/oracle/oradata/test/users01.dbf
input datafile fno=00008 name=/u01/app/oracle/oradata/test/workflowuser
input datafile fno=00001 name=/u01/app/oracle/oradata/test/system01.dbf
input datafile fno=00003 name=/u01/app/oracle/oradata/test/sysaux01.dbf
input datafile fno=00010 name=/u01/app/oracle/oradata/test/ifan
input datafile fno=00002 name=/u01/app/oracle/oradata/test/undotbs01.dbf
input datafile fno=00007 name=/u01/app/oracle/oradata/test/taker
input datafile fno=00009 name=/u01/app/oracle/oradata/test/testing1
input datafile fno=00005 name=/u01/app/oracle/oradata/test/brokerdb
input datafile fno=00006 name=/u01/app/oracle/oradata/test/moneio
input datafile fno=00011 name=/u01/app/oracle/oradata/test/web1
input datafile fno=00012 name=/u01/app/oracle/oradata/test/e1
input datafile fno=00013 name=/u01/app/oracle/oradata/test/ind1
channel ORA_DISK_1: backup set complete, elapsed time: 00:06:57
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
including current control file in backupset
including current SPFILE in backupset
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:02
Finished backup at 09-MAY-08
and when i do the following query
select * from v$database_block_corruption in sqlplus
then there was no row
so it means there is no logical corruption, but when i am looking at alert log file it is giving following lines
Fri May 9 10:14:04 2008
Errors in file /u01/app/oracle/admin/test/udump/test_ora_6606.trc:
Fri May 9 10:14:04 2008
Errors in file /u01/app/oracle/admin/test/udump/test_ora_6606.trc:
Fri May 9 10:14:04 2008
Errors in file /u01/app/oracle/admin/test/udump/test_ora_6606.trc
and in above trace file following contents
/u01/app/oracle/admin/test4/udump/test_ora_6606.trc
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1
System name: Linux
Node name: test
Release: 2.6.18-5-686
Version: #1 SMP Wed Oct 3 00:12:50 UTC 2007
Machine: i686
Instance name: test
Redo thread mounted by this instance: 1
Oracle process number: 61
Unix process pid: 6606, image: oracle@test (TNS V1-V3)
*** 2008-05-09 10:14:04.093
*** ACTION NAME:(0000040 STARTED19) 2008-05-09 10:14:04.071
*** MODULE NAME:(backup full datafile) 2008-05-09 10:14:04.071
*** SERVICE NAME:(SYS$USERS) 2008-05-09 10:14:04.071
*** SESSION ID:(91.40318) 2008-05-09 10:14:04.071
Is it normal, why the in alert file it is saying that Error in.
And it did not create any backupset in folder of flash recovery but in Enterprise manager it is showing last backup on 09-may-2008, why ?
Regards,See logical corruption is normally termed as the internal inconsistancy within the block which is not caused by Oracle but by the user.So if you find internal inconsistancy than the best option is to look at the user and ask him to get the values sorted out.If the internal inconsistancy is some thig like index fragmentation sort of things or index entry pointing to a null rowid than they are termed as the logical corruption and they should not impact your normal as he data is already there and there is no issue in reading the block as such.
The term "corrupted blocks" I would call both in the tables and backup for those data blocks which are unreadable by Oracle which actualy is Physical corruption.
If i am doing the checking at 2:00 am, does it take more than two hours.I didnt understand this.
what can we do for Physical corruptionThis will need the block to be recovered with the Block Recover command of RMAN and a good backup.Read about it here,
http://download.oracle.com/docs/cd/B19306_01/backup.102/b14194/rcmsynta010.htm
About the Logical and Physical corruption checks , check here
http://download-west.oracle.com/docs/cd/B19306_01/backup.102/b14191/rcmconc1012.htm
Aman.... -
How to respond to physical block corruption??
Hi, all.
As far as I know, there are two types of block corruption.
1. logical block corruption
2. physical block corruption
In case of logical block corruption, there are a few method of how to take care of it.
such as BMR with rman, media recovery, and dbms package.
In case of physical block corruption, how can I respond to this type of errors?
Does physical block corruption of a disk mean disk failure??
If so, I have to replace the disk? Or, is there any other way to solve
this type of errors?
In addition, how can I know that the block corruption is caused by logical problems
or physical problems??
Thanks and Regards.> In case of physical block corruption, how can I respond to this type of
errors?
Round around in circles, screaming at the top of your voice "we're all going to die!".
Hey, why that funny looks? It works. And it scares the stuffings out of management and colleagues... ;-)
> Does physical block corruption of a disk mean disk failure??
If by physical corruption you mean that reading a data block results in I/O errors and a corrupt/incomplete read buffer, then yes. The "disk" is failing - or more correctly, the I/O h/w is failing. It may not be the disk itself. It could be a problem with the HBA, a controller card, etc.
In exceptional cases it may not even be a h/w issue. It could be a s/w induced error. I once got physical I/O errors reported by Oracle. The problem was traced to an incompatibility between the ASMlib kernel module and EMC Powerpath. The SAN disks & h/w were fine.
> If so, I have to replace the disk? Or, is there any other way to solve
this type of errors?
There should be some kind of diagnostics you can run on the disks to determine if they are failing. Simply replacing a disk because there seems to be a physical corruption problem may not solve the problem itself.
You need to identify the actual problem. Which means looking at all Oracle traces/dumps in this regard, looking at the kernel logs, manually dumping blocks to see the results, using whatever I/O & disk diagnostic tools available, etc.
> In addition, how can I know that the block corruption is caused by logical
problems or physical problems??
That depends on what you define as logical and physical corruption. The latter means to me that I cannot get the data off the disk without some kind of I/O error. Logical means that the data can be read just fine, but is garbage. Which could simply mean GIGO without implying any kind of underlaying h/w failure. -
Frequent block Corruption....
Hi,
Oracle documents mentioned , block corruption rarely happens but i have to frequently face this problem ,mostly logical corruption. And when this happens i have to recover that datafile from the backup which is very much time consuming and loss to business.
What should i do to prevent these corruption....both logical and physical???
Can anyone share their experience to solve the problem taking proper precaution??
Thanks and Regards,844860 wrote:
I am not sure...how to find the answer???Perhaps there was no block corruption? After all, you have the best h/w on the market and how could it cause corrupted data blocks when an Oracle I/O call give it a data block to write to disk?
Or perhaps you are lying to yourself about this "best in the market" b/s?
Block corruption means that the data block Oracle writes from memory to disk, does not arrive on the disk intact - or that the block is afterwards read from disk 'incorrectly' and arrives in memory as a corrupted block.
If this happens frequently, there are two basic core issues:
- this is h/w related (old failing disks, errors in storage system, etc)
- this is s/w related (the I/O fabric layer and driver used for I/O is faulty/buggy)
The h/w related one is usually easy to diagnose as h/w tests and probes can be done (e.g. running smartctl for SMART analysis of disks).
The s/w related one is IMO a bit more difficult to diagnose. I have seen this with using ASMLib with certain 3rd party driver software, with older OFED driver version for SRP (Scsi Remote direct memory access Protocol), and so on.
Bottom line is that block corruption generates errors and you need to look from the top of the s/w stack down to bottom of the h/w stack to see where these errors are being recorded and what the errors are saying is wrong.
Maybe you are looking for
-
Tunes disappear from folder - but still play in iTunes???
I can play songs in iTunes that have disappeared from the iTunes music folder. Maybe I'm fundamentally misunderstanding something, but this has me baffled. Here's what's happened: I was looking at my iTunes music folder in Finder. I double-clicked on
-
How can I upgrade from Infinity to 56K dial-up?
I have had Infinity for about a month. At first everything was great, 38Mbps. I am about 25m from the cabinet where the optical fibre is terminated so I expected this to be quite consistent. Seven days ago the speed dropped to about 5Mbps and over th
-
Image Loaded From Database not Visible in JLabel
import java.sql.*; import javax.swing.*; import java.awt.*; public class consqlimage public consqlimage() try Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection("jd
-
Adding Text to a Slideshow of images....
Hi, I am still on iDVD 4.0.1 so could somebody please answer a couple of, hopefully, easy questions to help make my mind up about whether I should opt to buy the new iLife package (currently on version 06). I have created a slideshow and want to add
-
hey guys, copy and paste into after effects worked like a charm with CS5.5, but now when i copy and paste to CS6 is gives me a After Effects Error 17::18: zero denominator converting ratio denominators the're m4v files, but that's never been a proble