在生产环境中,有时候会遇到坏块的情况,无论是逻辑坏块,物理坏块,还是内存坏块,如果系统做足了备份,那对恢复来讲,还是非常简单的,这也体现了备份在生产环境中的重要性,我们简单来模拟一下坏块:
1. 首先创建一个表空间blocktest
1 2 3 |
SQL> create tablespace blocktest datafile '/opt/oracle/oradata/orcl/blocktest.dbf' size 10m; Tablespace created. |
2. 在此表空间上创建一个表
1 2 3 |
SQL> create table blocktest (a number) tablespace blocktest; Table created. |
3. 使用rman对数据库做一次全备
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
RMAN> backup database; Starting backup at 10-NOV-13 using channel ORA_DISK_1 using channel ORA_DISK_2 using channel ORA_DISK_3 using channel ORA_DISK_4 channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set input datafile file number=00003 name=/opt/oracle/oradata/orcl/sysaux01.dbf input datafile file number=00008 name=/opt/oracle/oradata/orcl/blocktest.dbf channel ORA_DISK_1: starting piece 1 at 10-NOV-13 channel ORA_DISK_2: starting full datafile backup set channel ORA_DISK_2: specifying datafile(s) in backup set input datafile file number=00001 name=/opt/oracle/oradata/orcl/system01.dbf input datafile file number=00007 name=/opt/oracle/oradata/orcl/test2.dbf channel ORA_DISK_2: starting piece 1 at 10-NOV-13 channel ORA_DISK_3: starting full datafile backup set channel ORA_DISK_3: specifying datafile(s) in backup set input datafile file number=00002 name=/opt/oracle/oradata/orcl/example01.dbf input datafile file number=00005 name=/opt/oracle/oradata/orcl/test.dbf channel ORA_DISK_3: starting piece 1 at 10-NOV-13 channel ORA_DISK_4: starting full datafile backup set channel ORA_DISK_4: specifying datafile(s) in backup set input datafile file number=00004 name=/opt/oracle/oradata/orcl/undotbs01.dbf input datafile file number=00006 name=/opt/oracle/oradata/orcl/users01.dbf channel ORA_DISK_4: starting piece 1 at 10-NOV-13 channel ORA_DISK_4: finished piece 1 at 10-NOV-13 piece handle=/opt/oracle/fast_recovery_area/ORCL/backupset/2013_11_10/o1_mf_nnndf_TAG20131110T123127_97zjqhmt_.bkp tag=TAG20131110T123127 comment=NONE channel ORA_DISK_4: backup set complete, elapsed time: 00:00:15 channel ORA_DISK_3: finished piece 1 at 10-NOV-13 piece handle=/opt/oracle/fast_recovery_area/ORCL/backupset/2013_11_10/o1_mf_nnndf_TAG20131110T123127_97zjqhkc_.bkp tag=TAG20131110T123127 comment=NONE channel ORA_DISK_3: backup set complete, elapsed time: 00:00:26 channel ORA_DISK_1: finished piece 1 at 10-NOV-13 piece handle=/opt/oracle/fast_recovery_area/ORCL/backupset/2013_11_10/o1_mf_nnndf_TAG20131110T123127_97zjqhj5_.bkp tag=TAG20131110T123127 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:46 channel ORA_DISK_2: finished piece 1 at 10-NOV-13 piece handle=/opt/oracle/fast_recovery_area/ORCL/backupset/2013_11_10/o1_mf_nnndf_TAG20131110T123127_97zjqhjh_.bkp tag=TAG20131110T123127 comment=NONE channel ORA_DISK_2: backup set complete, elapsed time: 00:00:46 Finished backup at 10-NOV-13 Starting Control File and SPFILE Autobackup at 10-NOV-13 piece handle=/opt/oracle/fast_recovery_area/ORCL/autobackup/2013_11_10/o1_mf_s_831126733_97zjrxlk_.bkp comment=NONE Finished Control File and SPFILE Autobackup at 10-NOV-13 |
4. 有了备份后,就不用担心什么了,我们直接对数据块修改一下,这里使用dd命令直接修改一下,也可以使用BBED标记坏块
1 2 3 4 5 6 7 |
oracle@linux-fz9d:~> dd of=/opt/oracle/oradata/orcl/blocktest.dbf bs=8192 conv=notrunc seek=15 <<! > this is test > ! 0+1 records in 0+1 records out 20 bytes (20 B) copied, 4.569e-05 s, 438 kB/s |
5. 标记了坏块后,使用dbv命令查看一下这个数据文件的坏块位置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
oracle@linux-fz9d:~> dbv file=/opt/oracle/oradata/orcl/blocktest.dbf DBVERIFY: Release 12.1.0.1.0 - Production on Sun Nov 10 12:09:04 2013 Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved. DBVERIFY - Verification starting : FILE = /opt/oracle/oradata/orcl/blocktest.dbf Page 15 is marked corrupt Corrupt block relative dba: 0x0200000f (file 8, block 15) Bad header found during dbv: Data in bad block: type: 62 format: 0 rdba: 0x69207369 last change scn: 0x7473.65742073 seq: 0xa flg: 0x3e spare1: 0x74 spare2: 0x68 spare3: 0xa0a consistency value in tail: 0xa4351e02 check value in block header: 0x2120 computed block checksum: 0x34b5 DBVERIFY - Verification complete Total Pages Examined : 1280 Total Pages Processed (Data) : 0 Total Pages Failing (Data) : 0 Total Pages Processed (Index): 0 Total Pages Failing (Index): 0 Total Pages Processed (Other): 129 Total Pages Processed (Seg) : 0 Total Pages Failing (Seg) : 0 Total Pages Empty : 1150 Total Pages Marked Corrupt : 1 Total Pages Influx : 0 Total Pages Encrypted : 0 Highest block SCN : 3122699 (0.3122699) |
6. 此时此数据文件是8号文件,在第15个数据块的地方有坏块,如果直接查询表,也会抛出这样一个错误,然后直接用rman blockrecover修复此数据块即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
oracle@linux-fz9d:~> rman target / Recovery Manager: Release 12.1.0.1.0 - Production on Sun Nov 10 12:19:05 2013 Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved. connected to target database: ORCL (DBID=1348370955) RMAN> blockrecover datafile 8 block 15; Starting recover at 10-NOV-13 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=60 device type=DISK allocated channel: ORA_DISK_2 channel ORA_DISK_2: SID=46 device type=DISK allocated channel: ORA_DISK_3 channel ORA_DISK_3: SID=47 device type=DISK allocated channel: ORA_DISK_4 channel ORA_DISK_4: SID=48 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 00008 channel ORA_DISK_1: reading from backup piece /opt/oracle/fast_recovery_area/ORCL/backup/Jerry_lev0_2poojtih_1_1_20131110 channel ORA_DISK_1: piece handle=/opt/oracle/fast_recovery_area/ORCL/backup/Jerry_lev0_2poojtih_1_1_20131110 tag=JERRY_LEV0 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:01 Finished recover at 10-NOV-13 |
因为此时只对当前数据块修复,数据只会在这一个数据块上可能有不一致的情况,一个数据块可能就几十条记录,也有可能此数据块的内容在备份后就没有修改,数据就不会丢失,有备份的简单恢复就到这里了,可关注博客中更多没有备份情况下的恢复文章。
- 本文固定链接: http://www.savedba.com/?p=389
- 转载请注明: 版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!