ORACLE 邏輯壞塊真實案例ORA-01578 ORA-01110
現象:
ORACLE Instance ojs1a (pid = 26) - Error 1578 encountered while recovering transaction (173, 11) on object 4054036.
Errors in file /oracle/app/oracle/diag/rdbms/orajs1/ojs1a/trace/ojs1a_smon_176306.trc:
ORA-01578: ORACLE data block corrupted (file # 1004, block # 488211)
ORA-01110: data file 1004: '/dev/rvg06lv015'
Sat Apr 18 13:33:54 2015
Thread 1 advanced to log sequence 1547143 (LGWR switch)
Current log# 10 seq# 1547143 mem# 0: /dev/rd8_redolv1_1
ORACLE Instance ojs1a (pid = 26) - Error 1578 encountered while recovering transaction (176, 12) on object 4043711.
Errors in file /oracle/app/oracle/diag/rdbms/orajs1/ojs1a/trace/ojs1a_smon_176306.trc:
ORA-01578: ORACLE data block corrupted (file # 1133, block # 865723)
ORA-01110: data file 1133: '/dev/rvg06lv073'
Sat Apr 18 13:33:57 2015
Archived Log entry 2782056 added for thread 1 sequence 1547142 ID 0x41a4b0c0 dest 1:
ORACLE Instance ojs1a (pid = 26) - Error 1578 encountered while recovering transaction (86, 20) on object 4043711.
Errors in file /oracle/app/oracle/diag/rdbms/orajs1/ojs1a/trace/ojs1a_smon_176306.trc:
ORA-01578: ORACLE data block corrupted (file # 1133, block # 865723)
ORA-01110: data file 1133: '/dev/rvg06lv073'
ORACLE Instance ojs1a (pid = 26) - Error 1578 encountered while recovering transaction (89, 32) on object 4054036.
Errors in file /oracle/app/oracle/diag/rdbms/orajs1/ojs1a/trace/ojs1a_smon_176306.trc:
ORA-01578: ORACLE data block corrupted (file # 1087, block # 498755)
ORA-01110: data file 1087: '/dev/rvg06lv049'
Sat Apr 18 13:34:05 2015
ORACLE Instance ojs1a (pid = 26) - Error 1578 encountered while recovering transaction (102, 12) on object 4054036.
Errors in file /oracle/app/oracle/diag/rdbms/orajs1/ojs1a/trace/ojs1a_smon_176306.trc:
ORA-01578: ORACLE data block corrupted (file # 1087, block # 498755)
ORA-01110: data file 1087: '/dev/rvg06lv049'
ORACLE Instance ojs1a (pid = 26) - Error 1578 encountered while recovering transaction (105, 12) on object 4054036.
Errors in file /oracle/app/oracle/diag/rdbms/orajs1/ojs1a/trace/ojs1a_smon_176306.trc:
ORA-01578: ORACLE data block corrupted (file # 1087, block # 498755)
問題處理步聚:
1.檢視操盤系統日誌未發現作業系統報錯因此可以說明該壞塊是邏輯壞塊;
2.用DBV或RMAN檢查是否存在壞塊(BDV可以檢查物理和邏輯壞塊);
--dbv校驗
[oracle@tjs1a] /oracle> dbv file=/dev/rvg06lv049 blocksize=16384
DBVERIFY: Release 11.2.0.2.0 - Production on Sat Apr 18 13:44:09 2015
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
DBVERIFY - Verification starting : FILE = /dev/rvg06lv049
DBV-00200: Block, DBA 268934211, already marked corrupt
csc(0x0bd1.2eb80a06) higher than block scn(0x0000.00000000)
Page 498755 failed with check code 6054
DBVERIFY - Verification complete
Total Pages Examined : 1048512
Total Pages Processed (Data) : 823753
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 221725
Total Pages Failing (Index): 1
Total Pages Processed (Other): 2974
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 60
Total Pages Marked Corrupt : 1
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 849573888 (3025.849573888)
[oracle@tjs1a] /oracle>
You have mail in /usr/spool/mail/oracle
--RMAN 校驗
rman target /
backup check logical validate database;
透過下面這條命令,並不是做一個備份 ,只是對檔案做一次校驗,當然也可以發現壞塊
RMAN> backup validate datafile 1004;
RMAN> exit
Recovery Manager complete.
檢查完檢視
SQL> select * from v$database_block_corruption;
FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO
---------- ---------- ---------- ------------------ ---------
4 131 1 2.7119E+14 FRACTURED
3.檢視壞塊對應的物件
--透過object_id檢視
select owner,object_name,object_type from dba_objects where object_id='4043711';
SQL> select owner,index_name,table_name from dba_indexes where index_name in ('UN_PK_STLGPRSCNGKEY','UN_PK_STLGPRSLTECNGKEY');
OWNER INDEX_NAME TABLE_NAME
------------------------------ ------------------------------ ------------------------------
SDSETTLE UN_PK_STLGPRSCNGKEY STLGPRSCNGKEY
SDSETTLE UN_PK_STLGPRSLTECNGKEY STLGPRSLTECNGKEY
Select owner,segment_name,segment_type from dba_extents where file_id=1087 and 498755 between block_id and block_id+blocks-1;
4.如果是索引可以進行重建;
5.如果是表且沒有備份的情況下可以透過dbms_repair.skip_corrupt_blocks跳過壞塊,然後重建(注:使用skip_corrupt_blocks只能使oracle跳過Oracle能夠讀出的塊,而如果在作業系統層read呼叫就失敗的,則不能跳過該過。甚至於該會話也可能會被中斷。遇到這樣的情況,使用dd命令或作業系統的copy(cp)命令都不能複製該檔案,rman也不能備份該檔案)
例:SQL> analyze table test.t1 VALIDATE STRUCTURE CASCADE;
analyze table test.t1 validate structure
*
ERROR 位於第 1 行:
ORA-01578: ORACLE 資料塊損壞(檔案號10,塊號1447)
ORA-01110: 資料檔案 10: ‘D:\ORACLE\ORADATA\XJ\TEST01.DBF’
SQL>> begin
2 dbms_repair.admin_tables (
3 table_name => ‘REPAIR_TABLE’,
4 table_type => dbms_repair.repair_table,
5 action => dbms_repair.create_action,
6 tablespace => ‘SYSTEM’);
7 end;
8 /
PL/SQL 過程已成功完成。
SQL> set serveroutput
on
SQL> declare
2 rpr_count int;
3 begin
4 rpr_count := 0;
5 dbms_repair.check_object (
6 schema_name => ‘TEST’,
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 過程已成功完成。
SQL> select object_name, block_id, corrupt_type,
marked_corrupt,corrupt_description,
2 repair_description from
repair_table;
OBJECT_NAME BLOCK_ID CORRUPT_TYPE MARKED_COR CORRUPT_DESCRIPTION REPAIR_DESCRIPTION
————- ———- ———— ———- ——————– ——————–
T1 1447 6148 TRUE mark block software
corrupt
T1 1447 6148 TRUE mark block software
corrupt
SQL> declare
2 fix_count int;
3 begin
4 fix_count := 0;
5 dbms_repair.fix_corrupt_blocks (
6 schema_name => ‘TEST’,
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: 0
PL/SQL 過程已成功完成。
SQL> begin
2 dbms_repair.skip_corrupt_blocks (
3 schema_name => ‘TEST’,
4 object_name => ‘T1′,
5 object_type => dbms_repair.table_object,
6 flags => dbms_repair.skip_flag);
7 end;
8 /
PL/SQL 過程已成功完成。
SQL> select table_name, skip_corrupt from dba_tables where table_name = ‘T1′ and owner=’TEST’;
TABLE_NAME SKIP_COR
—————————— ——–
T1 ENABLED
SQL> select count(*) from test.t1;
COUNT(*)
———-
28762
6.如果是表且有備份,可以透過不完全恢復來解決;
7.如果是表且自從出現壞塊還沒有進行備份的話,可以透過rman直接對壞塊進行恢復
blockrecover datafile 1087 block 498755;
本案例是分析索引出現壞塊,且是邏輯壞塊,因此只需要重建分割槽索引即可:
解決方法
alter index SDSETTLE.UN_PK_STLGPRSCNGKEY rebuild partition KEY20150418_0 online parallel 16;
alter index SDSETTLE.UN_PK_STLGPRSLTECNGKEY rebuild partition KEY20150418_0 online parallel 16;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30345407/viewspace-2150642/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 11.1 邏輯壞塊Oracle
- Oracle上的邏輯壞塊和物理壞塊Oracle
- Oracle資料庫塊的物理損壞與邏輯損壞Oracle資料庫
- oracle 壞塊問題 ora-01578Oracle
- [20140424]oracle的邏輯壞塊.txtOracle
- ORACLE壞塊(ORA-01578)處理方法Oracle
- ORACLE壞塊(ORA-01578)處理方法(zt)Oracle
- ORA-01578(資料塊損壞)跳過壞塊
- ORA-01578壞塊解決方法
- Oracle如何進行塊介質的恢復?(有邏輯壞塊是如何處理)Oracle
- [20190311]關於oracle物理與邏輯壞塊.txtOracle
- ORA-01578(資料塊損壞)跳過壞塊處理辦法
- Oracle資料庫壞塊典型案例分析Oracle資料庫
- Oracle 9i資料壞塊的處理(ORA-01578) ztOracle
- 利用oracle9i blockrecover 修復ORA-01578壞塊問題OracleBloC
- Oracle資料庫壞塊典型案例擴充Oracle資料庫
- ORA-01578 壞塊原因模擬及解決方法
- 系統慢慢變壞的邏輯
- oracle壞塊(二)Oracle
- Oracle資料庫壞塊(corruption)-物理壞塊Oracle資料庫
- Oracle的邏輯結構(表空間、段、區間、塊)——Oracle資料塊(二)Oracle
- Oracle壞塊修復處理實驗Oracle
- Oracle壞塊處理Oracle
- oracle壞塊Block CorruptionsOracleBloC
- 檢查 oracle 壞塊Oracle
- ORACLE 壞塊處理Oracle
- ORA-00600: internal error code, arguments: [kcratr_scan_lastbwr]邏輯壞塊解決ErrorAST
- oracle 邏輯結構Oracle
- ORACLE壞塊總結(轉)Oracle
- ORACLE壞塊總結2Oracle
- oracle 壞塊問題急救Oracle
- EXP匯出ORA-01578(資料塊損壞)錯誤解決方法
- oracle邏輯讀過程Oracle
- Oracle邏輯讀詳解Oracle
- oracle的邏輯結構Oracle
- 機器學習-邏輯迴歸:從技術原理到案例實戰機器學習邏輯迴歸
- 資料庫壞塊解決案例一則資料庫
- oracle壞塊修復例項Oracle