數據塊恢復總結oracle
1、說明app
1.一、壞塊故障現象ide
ERROR at line 1:工具
ORA-01578: ORACLE data block corrupted (file # 7, block # 19846)ui
ORA-01110: data file 7: '+DATA/orcl/datafile/jxc1.270.1010446343’ spa
1.二、壞塊類型rest
數據壞塊 orm
索引壞塊 索引
其它損壞 flux
1.三、檢驗壞塊的方式
$dbv file=/opt/oracle/oradata/mycdb/system01.dbf
RMAN> validate database|datefile xx;
1.四、壞塊處理
如有有效的rman備份則恢復語句以下:
recover datafile 7 block 19846;
recover corruption list; validate 檢測後可用該語句進行恢復
若僅有數據泵備份,則從數據泵恢復該表數據到備份的狀態。
impdp directory=dump dumpfile=bfapp20.dump SCHEMAS=BFAPP20 include=table:"\=\'T_OBJ\'"
impdp directory=dump dumpfile=bfapp20.dump tables=BFAPP20.T_OBJ
無備份,屏蔽掉壞塊,拯救部分數據。
啓用10231內部事件 alter system set events='10231 trace name context forever,level 10’;
關閉10231內部事件 alter system set events='10231 trace name context off’;
2、實戰演練
2.一、構造數據損壞壞塊
一、建立表插入數據
create table t as select object_id,object_name from dba_objects;
insert into t select * from t;
create index t_obj_id on t (object_id);
SQL> exec dbms_stats.gather_table_stats('ZX1','T',CASCADE=>TRUE);
PL/SQL procedure successfully completed.
2.二、查詢表佔用塊相關信息
SQL> select owner,segment_name,header_file,header_block,blocks from dba_segments where owner='ZX1' and segment_name='T';
OWNER SEGMENT_NAME HEADER_FILE HEADER_BLOCK BLOCKS
--------------- -------------------- ----------- ------------ ----------
ZX1 T 54 130 1024
SQL> select rowid,
dbms_rowid.rowid_relative_fno(rowid) rel_fno,
dbms_rowid.rowid_block_number(rowid) blockno,
dbms_rowid.rowid_row_number(rowid) rowno
from T WHERE ROWNUM<=10;
ROWID REL_FNO BLOCKNO ROWNO
------------------ ---------- ---------- ----------
AAAR88AA2AAAACDAAA 54 131 0
AAAR88AA2AAAACDAAB 54 131 1
AAAR88AA2AAAACDAAC 54 131 2
AAAR88AA2AAAACDAAD 54 131 3
AAAR88AA2AAAACDAAE 54 131 4
AAAR88AA2AAAACDAAF 54 131 5
AAAR88AA2AAAACDAAG 54 131 6
AAAR88AA2AAAACDAAH 54 131 7
AAAR88AA2AAAACDAAI 54 131 8
AAAR88AA2AAAACDAAJ 54 131 9
10 rows selected.
2.三、查詢索引所在的塊
SQL> select owner,segment_name,header_file,header_block,blocks from dba_segments where owner='ZX1' and segment_name='T_OBJ_ID';
OWNER SEGMENT_NAME HEADER_FILE HEADER_BLOCK BLOCKS
--------------- ------------------------------ ----------- ------------ ----------
ZX1 T_OBJ_ID 54 1154 384
2.四、建立數據壞塊
[oracle@oracle18c1 ~]$ rman target sys/Pa44w0rd@192.168.5.40:1521/mypdb1
Recovery Manager: Release 18.0.0.0.0 - Production on Fri Jun 5 14:19:25 2020
Version 18.3.0.0.0
Copyright (c) 1982, 2018, Oracle and/or its affiliates. All rights reserved.
connected to target database: MYCDB:MYPDB1 (DBID=2302914177)
RMAN> blockrecover datafile 54 block 131 clear;
Starting recover at 05-JUN-20
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=209 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=204 device type=DISK
Finished recover at 05-JUN-20
2.五、建立索引壞塊
RMAN> blockrecover datafile 54 block 1159 clear;
Starting recover at 05-JUN-20
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=19 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=147 device type=DISK
Finished recover at 05-JUN-20
2.六、查詢觸發數據壞塊
SQL> select count(*) from zx1.t;
select count(*) from zx1.t
*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 54, block # 131)
ORA-01110: data file 54: '/opt/oracle/oradata/mycdb/mypdb1/jxc.dbf'
2.七、查詢觸發索引壞塊
SQL> select count(*) from zx1.t where object_id<=10000;
select count(*) from zx1.t where object_id<=10000
*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 54, block # 1159)
ORA-01110: data file 54: '/opt/oracle/oradata/mycdb/mypdb1/jxc.dbf'
2.八、使用dbv工具檢驗壞塊信息
[oracle@oracle18c1 ~]$ dbv file=/opt/oracle/oradata/mycdb/mypdb1/jxc.dbf
DBVERIFY: Release 18.0.0.0.0 - Production on Fri Jun 5 15:48:49 2020
Copyright (c) 1982, 2018, Oracle and/or its affiliates. All rights reserved.
DBVERIFY - Verification starting : FILE = /opt/oracle/oradata/mycdb/mypdb1/jxc.dbf
Page 131 is marked corrupt
Corrupt block relative dba: 0x0d800083 (file 54, block 131)
Bad check value found during dbv:
Data in bad block:
type: 6 format: 2 rdba: 0x0d800083
last change scn: 0x0000.0000.003a64ed seq: 0x2 flg: 0x04
spare3: 0x0
consistency value in tail: 0x64ed0602
check value in block header: 0xf584
computed block checksum: 0x6100
Page 1159 is marked corrupt
Corrupt block relative dba: 0x0d800487 (file 54, block 1159)
Bad check value found during dbv:
Data in bad block:
type: 6 format: 2 rdba: 0x0d800487
last change scn: 0x4700.0000.003a651a seq: 0x2 flg: 0x04
spare3: 0x0
consistency value in tail: 0x651a0602
check value in block header: 0x2fe7
computed block checksum: 0x4700
DBVERIFY - Verification complete
Total Pages Examined : 128000
Total Pages Processed (Data) : 937
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 322
Total Pages Failing (Index): 0
Total Pages Processed (Other): 165
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 126574
Total Pages Marked Corrupt : 2
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 3827002 (0.3827002)
2.9 validate 命令驗證
[oracle@oracle18c1 ~]$ rman target sys/Pa44w0rd@192.168.5.40/mypdb1
Recovery Manager: Release 18.0.0.0.0 - Production on Fri Jun 5 15:50:21 2020
Version 18.3.0.0.0
Copyright (c) 1982, 2018, Oracle and/or its affiliates. All rights reserved.
connected to target database: MYCDB:MYPDB1 (DBID=2302914177)
RMAN> validate datafile 54;
Starting validate at 05-JUN-20
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=213 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=10 device type=DISK
channel ORA_DISK_1: starting validation of datafile
channel ORA_DISK_1: specifying datafile(s) for validation
input datafile file number=00054 name=/opt/oracle/oradata/mycdb/mypdb1/jxc.dbf
channel ORA_DISK_1: validation complete, elapsed time: 00:00:15
List of Datafiles
=================
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
54 FAILED 0 126574 128000 3827002
File Name: /opt/oracle/oradata/mycdb/mypdb1/jxc.dbf
Block Type Blocks Failing Blocks Processed
---------- -------------- ----------------
Data 1 938
Index 1 323
Other 0 165
validate found one or more corrupt blocks
See trace file /opt/oracle/diag/rdbms/mycdb/mycdb/trace/mycdb_ora_18140.trc for details
Finished validate at 05-JUN-20
注意:該視圖的更新須要執行validate命令。
SQL> select * from V$DATABASE_BLOCK_CORRUPTION;
FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO CON_ID
---------- ---------- ---------- ------------------ --------- ----------
54 131 1 3826925 CHECKSUM 3
54 1159 1 5.1161E+18 CHECKSUM 3
2.十、索引壞塊修復
SQL> alter index ZX1.T_OBJ_ID rebuild online;
Index altered.
SQL> select * from V$DATABASE_BLOCK_CORRUPTION;
FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO CON_ID
---------- ---------- ---------- ------------------ --------- ----------
54 131 1 3826925 CHECKSUM 3
54 1159 1 5.1161E+18 CHECKSUM 3
SQL> select count(*) from ZX1.T where object_id<=20000;
COUNT(*)
----------
39534
2.十一、數據壞塊修復
一、無備份時處理
SQL> select count(*) from ZX1.T;
select count(*) from ZX1.T
*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 54, block # 131)
ORA-01110: data file 54: '/opt/oracle/oradata/mycdb/mypdb1/jxc.dbf'
SQL> alter system set events='10231 trace name context forever,level 10';
System altered.
SQL> select count(*) from ZX1.T;
COUNT(*)
----------
145362
二、有rman備份時處理
[oracle@oracle18c1 ~]$ rman target sys/Pa44w0rd@192.168.5.40/mypdb1
Recovery Manager: Release 18.0.0.0.0 - Production on Fri Jun 5 16:19:30 2020
Version 18.3.0.0.0
Copyright (c) 1982, 2018, Oracle and/or its affiliates. All rights reserved.
connected to target database: MYCDB:MYPDB1 (DBID=2302914177)
RMAN> recover datafile 54 block 131;
Starting recover at 05-JUN-20
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=84 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=152 device type=DISK
channel ORA_DISK_1: restoring block(s)
channel ORA_DISK_1: specifying block(s) to restore from backup set
restoring blocks of datafile 00054
channel ORA_DISK_1: reading from backup piece /backup/fullbk.1qv1vvtp_1_1
channel ORA_DISK_1: piece handle=/backup/fullbk.1qv1vvtp_1_1 tag=TAG20200605T112752
channel ORA_DISK_1: restored block(s) from backup piece 1
channel ORA_DISK_1: block restore complete, elapsed time: 00:00:01
starting media recovery
media recovery complete, elapsed time: 00:00:03
Finished recover at 05-JUN-20
RMAN> select count(*) from ZX1.T;
COUNT(*)
----------
145700
3、只有數據泵備份時處理方式
方式1
[oracle@oracle ~]$ impdp directory=dump dumpfile=bfapp20.dump SCHEMAS=BFAPP20 include=table:"\=\'T_OBJ\'"
Import: Release 11.2.0.3.0 - Production on Wed Mar 25 19:47:03 2020
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Username: / as sysdba
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
Master table "SYS"."SYS_IMPORT_SCHEMA_01" successfully loaded/unloaded
Starting "SYS"."SYS_IMPORT_SCHEMA_01": /******** AS SYSDBA directory=dump dumpfile=bfapp20.dump SCHEMAS=BFAPP20 include=table:\=\'T_OBJ\'
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "BFAPP20"."T_OBJ" 2.385 MB 74914 rows
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "SYS"."SYS_IMPORT_SCHEMA_01" successfully completed at 19:47:10
方式2
[oracle@oracle ~]$ impdp directory=dump dumpfile=bfapp20.dump tables=BFAPP20.T_OBJ
Import: Release 11.2.0.3.0 - Production on Wed Mar 25 19:47:35 2020
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Username: / as sysdba
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
Master table "SYS"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded
Starting "SYS"."SYS_IMPORT_TABLE_01": /******** AS SYSDBA directory=dump dumpfile=bfapp20.dump tables=BFAPP20.T_OBJ
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "BFAPP20"."T_OBJ" 2.385 MB 74914 rows
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "SYS"."SYS_IMPORT_TABLE_01" successfully completed at 19:47:42