千家信息网

Oracle 学习之RMAN(十三)恢复实战--数据块修复

发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,在很多情况下,数据库只是某个数据文件的些许数据块发生损坏。这种情况,我们当然可是使用数据库恢复或者数据文件恢复的方式来解决问题。但是有点高射炮打蚊子的感觉。幸好RMAN提供了块级别的恢复。下面我们来演
千家信息网最后更新 2024年11月22日Oracle 学习之RMAN(十三)恢复实战--数据块修复

在很多情况下,数据库只是某个数据文件的些许数据块发生损坏。这种情况,我们当然可是使用数据库恢复或者数据文件恢复的方式来解决问题。但是有点高射炮打蚊子的感觉。幸好RMAN提供了块级别的恢复。下面我们来演示一下。

1. 创建一个表空间,大小小一点。

SQL> conn / as sysdbaConnected.SQL> create tablespace tbs_blkerr datafile '/u01/app/oracle/oradata/devdb/blkerr01.dbf' size 128K;Tablespace created.

2. 在这个表空间上创建一个表,并且装满数据。

SQL> create table emp_blk tablespace tbs_blkerr as select * from scott.emp;Table created.SQL> insert into emp_blk select * from scott.emp;14 rows created.SQL> /14 rows created.。。。。SQL> insert into emp_blk select * from scott.emp;insert into emp_blk select * from scott.emp*ERROR at line 1:ORA-01653: unable to extend table SYS.EMP_BLK by 8 in tablespace TBS_BLKERRSQL> commit;Commit complete.SQL> select count(*) from emp_blk;  COUNT(*)----------       686SQL>

3. 备份该表空间或者数据文件。

RMAN> backup datafile '/u01/app/oracle/oradata/devdb/blkerr01.dbf';Starting backup at 2015/07/09 10:30:11using channel ORA_DISK_1channel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setinput datafile file number=00007 name=/u01/app/oracle/oradata/devdb/blkerr01.dbfchannel ORA_DISK_1: starting piece 1 at 2015/07/09 10:30:11channel ORA_DISK_1: finished piece 1 at 2015/07/09 10:30:12piece handle=/u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_nnndf_TAG20150709T103011_bsvq5mw9_.bkp tag=TAG20150709T103011 comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time: 00:00:01Finished backup at 2015/07/09 10:30:12

4. 使用vi编辑数据文件blkerr01.dbf,对文件尾部做稍微的修改

SQL> shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down.SQL> startupORACLE instance started.Total System Global Area  839282688 bytesFixed Size             2233000 bytesVariable Size                553651544 bytesDatabase Buffers     281018368 bytesRedo Buffers                   2379776 bytesDatabase mounted.ORA-01157: cannot identify/lock data file 7 - see DBWR trace fileORA-01110: data file 7: '/u01/app/oracle/oradata/devdb/blkerr01.dbf'RMAN> restore datafile 7;Starting restore at 2015/07/09 10:36:25using target database control file instead of recovery catalogallocated channel: ORA_DISK_1channel ORA_DISK_1: SID=20 device type=DISKchannel ORA_DISK_1: starting datafile backup set restorechannel ORA_DISK_1: specifying datafile(s) to restore from backup setchannel ORA_DISK_1: restoring datafile 00007 to /u01/app/oracle/oradata/devdb/blkerr01.dbfchannel ORA_DISK_1: reading from backup piece /u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_nnndf_TAG20150709T103011_bsvq5mw9_.bkpchannel ORA_DISK_1: piece handle=/u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_nnndf_TAG20150709T103011_bsvq5mw9_.bkp tag=TAG20150709T103011channel ORA_DISK_1: restored backup piece 1channel ORA_DISK_1: restore complete, elapsed time: 00:00:01Finished restore at 2015/07/09 10:36:27RMAN> recover datafile 7;Starting recover at 2015/07/09 10:36:40using channel ORA_DISK_1starting media recoverymedia recovery complete, elapsed time: 00:00:00Finished recover at 2015/07/09 10:36:41

此次修改破坏了文件的头部,发生了意外。(也可能是编辑datafile时,没有关闭数据库)我们先恢复数据文件。再次编辑文件。

此实验始终没有做成功,后续有时间再研究。

恢复的方法如下:

RMAN TARGET / BLOCKRECOVER DATAFILE 12 BLOCK 12;


0