rman validate(block head corrupted)

xiaoxiao2021-02-28  90

这篇文章主要是想要说明validate命令的基础语法,为此我故意破坏了一个表空间的文件头,当然在这之前我是有做好rman全库备份的. (您可千万别在生产库上乱来啊~~~)

rdbms information: SQL> select * from v$version where rownum<2 2 / BANNER ------------------------------------------------------------------------------------------------------------------------------------ Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

创建表空间

create tablespace test001 datafile size 20m autoextend on next 5m maxsize unlimited 2 /

这里我用了OMF,要不然我每次还得为文件想个名字

然后,创建一个segment(table t1)

SQL> alter user hdp default tablespace test001 2 / User altered. SQL> drop table t1 2 / Table dropped. SQL> create table t1 as select * from dba_objects 2 / Table created.

备份好该表空间

RMAN> backup tablespace test001 2> ; Starting backup at 14-AUG-17 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=70 device type=DISK allocated channel: ORA_DISK_2 (***ignore somethings***) Starting Control File and SPFILE Autobackup at 14-AUG-17 piece handle=/u02/backup/ORCL/autobackup/2017_08_14/o1_mf_s_951964101_ds16l5mn_.bkp comment=NONE Finished Control File and SPFILE Autobackup at 14-AUG-17 RMAN> [oracle@hdp datafile]$ ll -h total 21M -rw-r-----. 1 oracle oinstall 21M Aug 14 02:28 o1_mf_test001_ds16fwnb_.dbf [oracle@hdp datafile]$

故意破坏文件头(vim)

'hello world' ^^@^@^@^ÿ^@^@^@^@^@^@^@^@fð^@^@^@ ^@^@^@ @

这里我故意破坏了o1_mf_test001_ds16fwnb_.dbf 的head信息

再次查询 发现报错。t1表已经不可访问

SQL> conn hdp/123123 Connected. SQL> select * from t1 2 / select * from t1 * ERROR at line 1: ORA-01578: ORACLE data block corrupted (file # 5, block # 131) ORA-01110: data file 5: '/u02/oradata/ORCL/datafile/o1_mf_test001_ds16fwnb_.dbf'

这时候我们可以检测预警日志:

提示我们文件头有损坏

Reread of blocknum=1, file=/u02/oradata/ORCL/datafile/o1_mf_test001_ds16fwnb_.dbf. found same corrupt data Reread of blocknum=1, file=/u02/oradata/ORCL/datafile/o1_mf_test001_ds16fwnb_.dbf. found same corrupt data Reread of blocknum=1, file=/u02/oradata/ORCL/datafile/o1_mf_test001_ds16fwnb_.dbf. found same corrupt data Reread of blocknum=1, file=/u02/oradata/ORCL/datafile/o1_mf_test001_ds16fwnb_.dbf. found same corrupt data Reread of blocknum=1, file=/u02/oradata/ORCL/datafile/o1_mf_test001_ds16fwnb_.dbf. found same corrupt data Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/incident/incdir_31362/orcl_ora_2885_i31362.trc: ORA-19563: datafile header validation failed for file /u02/oradata/ORCL/datafile/o1_mf_test001_ds16fwnb_.dbf ORA-01251: Unknown File Header Version read for file number 5 ORA-01578: ORACLE data block corrupted (file # 5, block # 131) ORA-01110: data file 5: '/u02/oradata/ORCL/datafile/o1_mf_test001_ds16fwnb_.dbf' Mon Aug 14 02:32:31 2017 Dumping diagnostic data in directory=[cdmp_20170814023231], requested by (instance=1, osid=2885), summary=[incident=31361]. Mon Aug 14 02:32:34 2017

ORACLE 甚至连里面的对象,对象拥有者都提示了,这也是一个高级DBA以后要研究的方向

Reading datafile '/u02/oradata/ORCL/datafile/o1_mf_test001_ds16fwnb_.dbf' for corruption at rdba: 0x01400084 (file 5, block 132) Reread (file 5, block 132) found same corrupt data (no logical check) Corrupt Block Found TSN = 6, TSNAME = TEST001 RFN = 5, BLK = 131, RDBA = 20971651 OBJN = 87560, OBJD = 87560, OBJECT = T1, SUBOBJECT = SEGMENT OWNER = HDP, SEGMENT TYPE = Table Segment RMAN> validate datafile 5; Starting validate at 14-AUG-17 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=132 device type=DISK allocated channel: ORA_DISK_2 channel ORA_DISK_2: SID=197 device type=DISK allocated channel: ORA_DISK_3 channel ORA_DISK_3: SID=12 device type=DISK allocated channel: ORA_DISK_4 channel ORA_DISK_4: SID=73 device type=DISK allocated channel: ORA_DISK_5 channel ORA_DISK_5: SID=200 device type=DISK allocated channel: ORA_DISK_6 channel ORA_DISK_6: SID=134 device type=DISK RMAN-06169: could not read file header for datafile 5 error reason 7 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of validate command at 08/14/2017 02:41:15 RMAN-06056: could not access datafile 5

可以看到该文件已经无法访问了

RMAN> validate tablespace test001; Starting validate at 14-AUG-17 using channel ORA_DISK_1 using channel ORA_DISK_2 using channel ORA_DISK_3 using channel ORA_DISK_4 using channel ORA_DISK_5 using channel ORA_DISK_6 RMAN-06169: could not read file header for datafile 5 error reason 7 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of validate command at 08/14/2017 02:41:35 RMAN-06056: could not access datafile 5 RMAN> advise failure; RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of advise command at 08/14/2017 02:41:47 RMAN-07211: failure option not specified

意思是我们错误选项没有指定,原来错误不止一个

RMAN> list failure; List of Database Failures ========================= Failure ID Priority Status Time Detected Summary ---------- -------- --------- ------------- ------- 9248 HIGH OPEN 14-AUG-17 One or more non-system datafiles are corrupt 1454 HIGH OPEN 11-AUG-17 Tablespace 4: 'USERS' is offline 1442 HIGH OPEN 11-AUG-17 One or more non-system datafiles are offline RMAN> advise failure 9248; List of Database Failures ========================= Failure ID Priority Status Time Detected Summary ---------- -------- --------- ------------- ------- 9248 HIGH OPEN 14-AUG-17 One or more non-system datafiles are corrupt advise failure 提示我们数据不会有丢失,这是个好消息 analyzing automatic repair options; this may take some time using channel ORA_DISK_1 using channel ORA_DISK_2 using channel ORA_DISK_3 using channel ORA_DISK_4 using channel ORA_DISK_5 using channel ORA_DISK_6 analyzing automatic repair options complete Mandatory Manual Actions ======================== no manual actions available Optional Manual Actions ======================= no manual actions available Automated Repair Options ======================== Option Repair Description ------ ------------------ 1 Restore and recover datafile 5 Strategy: The repair includes complete media recovery with no data loss Repair script: /u01/app/oracle/diag/rdbms/orcl/orcl/hm/reco_2393879581.hm RMAN>

查看生成文件的内容:

[oracle@hdp datafile]$ cd /u01/app/oracle/diag/rdbms/orcl/orcl/hm/ [oracle@hdp hm]$ ls reco_2393879581.hm [oracle@hdp hm]$ vim reco_2393879581.hm [oracle@hdp hm]$ cat reco_2393879581.hm # restore and recover datafile sql 'alter database datafile 5 offline'; restore datafile 5; recover datafile 5; sql 'alter database datafile 5 online';

按这个提示的脚本来吧(当然自己敲也可以咯)

[oracle@hdp hm]$ rman target/ @reco_2393879581.hm (注意“/”后面的空格) Recovery Manager: Release 11.2.0.4.0 - Production on Mon Aug 14 02:45:45 2017 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: ORCL (DBID=1477533441) RMAN> # restore and recover datafile 2> sql 'alter database datafile 5 offline'; 3> restore datafile 5; 4> recover datafile 5; 5> sql 'alter database datafile 5 online'; 6> using target database control file instead of recovery catalog sql statement: alter database datafile 5 offline Starting restore at 14-AUG-17 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=71 device type=DISK allocated channel: ORA_DISK_2 channel ORA_DISK_2: SID=134 device type=DISK allocated channel: ORA_DISK_3 channel ORA_DISK_3: SID=200 device type=DISK allocated channel: ORA_DISK_4 channel ORA_DISK_4: SID=12 device type=DISK allocated channel: ORA_DISK_5 channel ORA_DISK_5: SID=70 device type=DISK allocated channel: ORA_DISK_6 channel ORA_DISK_6: SID=197 device type=DISK channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00005 to /u02/oradata/ORCL/datafile/o1_mf_test001_ds16fwnb_.dbf channel ORA_DISK_1: reading from backup piece /u02/backup/ORCL/backupset/2017_08_14/o1_mf_nnndf_TAG20170814T022820_ds16l4h6_.bkp channel ORA_DISK_1: piece handle=/u02/backup/ORCL/backupset/2017_08_14/o1_mf_nnndf_TAG20170814T022820_ds16l4h6_.bkp tag=TAG20170814T022820 channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 Finished restore at 14-AUG-17 Starting recover at 14-AUG-17 using channel ORA_DISK_1 using channel ORA_DISK_2 using channel ORA_DISK_3 using channel ORA_DISK_4 using channel ORA_DISK_5 using channel ORA_DISK_6 starting media recovery media recovery complete, elapsed time: 00:00:00 Finished recover at 14-AUG-17 sql statement: alter database datafile 5 online Recovery Manager complete. [oracle@hdp hm]$

再次查看文件的状态

SQL> col file_name for a15 SQL> col file_id for a15 SQL> col status for a15 SQL> / FILE_NAME FILE_ID STATUS --------------- ---------- --------------- /u01/app/oracle ########## AVAILABLE /oradata/orcl/u sers01.dbf /u01/app/oracle ########## AVAILABLE /oradata/orcl/u ndotbs01.dbf /u01/app/oracle ########## AVAILABLE /oradata/orcl/s ysaux01.dbf /u01/app/oracle ########## AVAILABLE /oradata/orcl/s ystem01.dbf /u02/oradata/OR ########## AVAILABLE CL/datafile/o1_ mf_test001_ds17 lv9r_.dbf

rman 甚至可以提前检测备份文件是否可以重建数据库

[oracle@hdp hm]$ rman target/ Recovery Manager: Release 11.2.0.4.0 - Production on Mon Aug 14 03:08:17 2017 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: ORCL (DBID=1477533441) RMAN> RESTORE DATABASE VALIDATE; Starting restore at 14-AUG-17 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=131 device type=DISK allocated channel: ORA_DISK_2 channel ORA_DISK_2: SID=197 device type=DISK allocated channel: ORA_DISK_3 channel ORA_DISK_3: SID=12 device type=DISK allocated channel: ORA_DISK_4 channel ORA_DISK_4: SID=73 device type=DISK allocated channel: ORA_DISK_5 channel ORA_DISK_5: SID=200 device type=DISK allocated channel: ORA_DISK_6 channel ORA_DISK_6: SID=135 device type=DISK datafile 4 not processed because file is offline channel ORA_DISK_1: starting validation of datafile backup set channel ORA_DISK_2: starting validation of datafile backup set channel ORA_DISK_3: starting validation of datafile backup set channel ORA_DISK_4: starting validation of datafile backup set channel ORA_DISK_1: reading from backup piece /u02/backup/ORCL/backupset/2017_08_14/o1_mf_nnndf_TAG20170814T020719_ds15br2s_.bkp channel ORA_DISK_2: reading from backup piece /u02/backup/ORCL/backupset/2017_08_14/o1_mf_nnndf_TAG20170814T020719_ds15br10_.bkp channel ORA_DISK_3: reading from backup piece /u02/backup/ORCL/backupset/2017_08_14/o1_mf_nnndf_TAG20170814T020719_ds15bqy7_.bkp channel ORA_DISK_4: reading from backup piece /u02/backup/ORCL/backupset/2017_08_14/o1_mf_nnndf_TAG20170814T022820_ds16l4h6_.bkp channel ORA_DISK_1: piece handle=/u02/backup/ORCL/backupset/2017_08_14/o1_mf_nnndf_TAG20170814T020719_ds15br2s_.bkp tag=TAG20170814T020719 channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: validation complete, elapsed time: 00:00:01 channel ORA_DISK_4: piece handle=/u02/backup/ORCL/backupset/2017_08_14/o1_mf_nnndf_TAG20170814T022820_ds16l4h6_.bkp tag=TAG20170814T022820 channel ORA_DISK_4: restored backup piece 1 channel ORA_DISK_4: validation complete, elapsed time: 00:00:01 channel ORA_DISK_2: piece handle=/u02/backup/ORCL/backupset/2017_08_14/o1_mf_nnndf_TAG20170814T020719_ds15br10_.bkp tag=TAG20170814T020719 channel ORA_DISK_2: restored backup piece 1 channel ORA_DISK_2: validation complete, elapsed time: 00:00:03 channel ORA_DISK_3: piece handle=/u02/backup/ORCL/backupset/2017_08_14/o1_mf_nnndf_TAG20170814T020719_ds15bqy7_.bkp tag=TAG20170814T020719 channel ORA_DISK_3: restored backup piece 1 channel ORA_DISK_3: validation complete, elapsed time: 00:00:03 Finished restore at 14-AUG-17

这里提示了我的datafile 4 是offline 状态

我移动一下备份集

[oracle@hdp backupset]$ mv 2017_08_14 2017_08_14.bak RMAN> RESTORE DATABASE VALIDATE; Starting restore at 14-AUG-17 using channel ORA_DISK_1 using channel ORA_DISK_2 using channel ORA_DISK_3 using channel ORA_DISK_4 using channel ORA_DISK_5 using channel ORA_DISK_6 datafile 4 not processed because file is offline channel ORA_DISK_1: starting validation of datafile backup set channel ORA_DISK_2: starting validation of datafile backup set channel ORA_DISK_3: starting validation of datafile backup set channel ORA_DISK_4: starting validation of datafile backup set channel ORA_DISK_1: reading from backup piece /u02/backup/ORCL/backupset/2017_08_14/o1_mf_nnndf_TAG20170814T020719_ds15br2s_.bkp channel ORA_DISK_2: reading from backup piece /u02/backup/ORCL/backupset/2017_08_14/o1_mf_nnndf_TAG20170814T020719_ds15br10_.bkp channel ORA_DISK_3: reading from backup piece /u02/backup/ORCL/backupset/2017_08_14/o1_mf_nnndf_TAG20170814T020719_ds15bqy7_.bkp channel ORA_DISK_4: reading from backup piece /u02/backup/ORCL/backupset/2017_08_14/o1_mf_nnndf_TAG20170814T022820_ds16l4h6_.bkp channel ORA_DISK_1: ORA-19870: error while restoring backup piece /u02/backup/ORCL/backupset/2017_08_14/o1_mf_nnndf_TAG20170814T020719_ds15br2s_.bkp ORA-19505: failed to identify file "/u02/backup/ORCL/backupset/2017_08_14/o1_mf_nnndf_TAG20170814T020719_ds15br2s_.bkp" ORA-27037: unable to obtain file status Linux-x86_64 Error: 2: No such file or directory Additional information: 3 channel ORA_DISK_2: ORA-19870: error while restoring backup piece /u02/backup/ORCL/backupset/2017_08_14/o1_mf_nnndf_TAG20170814T020719_ds15br10_.bkp ORA-19505: failed to identify file "/u02/backup/ORCL/backupset/2017_08_14/o1_mf_nnndf_TAG20170814T020719_ds15br10_.bkp" ORA-27037: unable to obtain file status Linux-x86_64 Error: 2: No such file or directory Additional information: 3 channel ORA_DISK_3: ORA-19870: error while restoring backup piece /u02/backup/ORCL/backupset/2017_08_14/o1_mf_nnndf_TAG20170814T020719_ds15bqy7_.bkp ORA-19505: failed to identify file "/u02/backup/ORCL/backupset/2017_08_14/o1_mf_nnndf_TAG20170814T020719_ds15bqy7_.bkp" ORA-27037: unable to obtain file status Linux-x86_64 Error: 2: No such file or directory Additional information: 3 channel ORA_DISK_4: ORA-19870: error while restoring backup piece /u02/backup/ORCL/backupset/2017_08_14/o1_mf_nnndf_TAG20170814T022820_ds16l4h6_.bkp ORA-19505: failed to identify file "/u02/backup/ORCL/backupset/2017_08_14/o1_mf_nnndf_TAG20170814T022820_ds16l4h6_.bkp" ORA-27037: unable to obtain file status Linux-x86_64 Error: 2: No such file or directory Additional information: 3 failover to previous backup datafile 5 will be created automatically during restore operation RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of restore command at 08/14/2017 03:11:14 RMAN-06026: some targets not found - aborting restore RMAN-06023: no backup or copy of datafile 3 found to restore RMAN-06023: no backup or copy of datafile 2 found to restore RMAN-06023: no backup or copy of datafile 1 found to restore RMAN>

2017.9.2 add 值得注意到是,这次rman的restore过程,是直接绕过已经损坏的文件,新增了一个文件。

[oracle@hdp datafile]$ ll total 40980 -rw-r–r–. 1 oracle oinstall 0 Aug 14 02:44 advise -rw-r–r–. 1 oracle oinstall 0 Aug 14 02:44 list -rw-r—–. 1 oracle oinstall 20979728 Aug 14 02:32 o1_mf_test001_ds16fwnb_.dbf -rw-r—–. 1 oracle oinstall 20979712 Aug 14 08:07 o1_mf_test001_ds17lv9r_.dbf

转载请注明原文地址: https://www.6miu.com/read-77122.html

最新回复(0)