对数据库进行验证
RMAN> validate database;
如果发现错误,会把这些错误记录到自动诊断库中,使用list failure命令列出故障。
RMAN> validate database; Starting validate at 12-JUL-19 using channel ORA_DISK_1 channel ORA_DISK_1: starting validation of datafile channel ORA_DISK_1: specifying datafile(s) for validation input datafile file number=00006 name=/u01/app/oraData/orcl/CMS69_DATA.dbf input datafile file number=00001 name=/u01/app/oraData/orcl/system01.dbf input datafile file number=00002 name=/u01/app/oraData/orcl/sysaux01.dbf input datafile file number=00003 name=/u01/app/oraData/orcl/undotbs01.dbf input datafile file number=00007 name=/u01/app/oraData/undoTbs/hbk_undotbs.dbf input datafile file number=00005 name=/u01/app/oraData/bak/hbk_data.dbf input datafile file number=00008 name=/u01/app/oraData/undoTbs/hbk_undotbs_auto input datafile file number=00004 name=/u01/app/oraData/orcl/users01.dbf channel ORA_DISK_1: validation complete, elapsed time: 00:01:04 List of Datafiles ================= File Status Marked Corrupt Empty Blocks Blocks Examined High SCN ---- ------ -------------- ------------ --------------- ---------- 1 OK 0 12686 87041 2006312 File Name: /u01/app/oraData/orcl/system01.dbf Block Type Blocks Failing Blocks Processed ---------- -------------- ---------------- Data 0 58964 Index 0 12277 Other 0 3113 File Status Marked Corrupt Empty Blocks Blocks Examined High SCN ---- ------ -------------- ------------ --------------- ---------- 2 OK 0 19468 73022 2006297 File Name: /u01/app/oraData/orcl/sysaux01.dbf Block Type Blocks Failing Blocks Processed ---------- -------------- ---------------- Data 0 15098 Index 0 10751 Other 0 27643 File Status Marked Corrupt Empty Blocks Blocks Examined High SCN ---- ------ -------------- ------------ --------------- ---------- 3 OK 0 1 9600 1402693 File Name: /u01/app/oraData/orcl/undotbs01.dbf Block Type Blocks Failing Blocks Processed ---------- -------------- ---------------- Data 0 0 Index 0 0 Other 0 9599 File Status Marked Corrupt Empty Blocks Blocks Examined High SCN ---- ------ -------------- ------------ --------------- ---------- 4 OK 0 455 640 1701516 File Name: /u01/app/oraData/orcl/users01.dbf Block Type Blocks Failing Blocks Processed ---------- -------------- ---------------- Data 0 20 Index 0 2 Other 0 163 File Status Marked Corrupt Empty Blocks Blocks Examined High SCN ---- ------ -------------- ------------ --------------- ---------- 5 OK 0 6208 6400 1886833 File Name: /u01/app/oraData/bak/hbk_data.dbf Block Type Blocks Failing Blocks Processed ---------- -------------- ---------------- Data 0 22 Index 0 1 Other 0 169 File Status Marked Corrupt Empty Blocks Blocks Examined High SCN ---- ------ -------------- ------------ --------------- ---------- 6 OK 0 10786 160000 1125031 File Name: /u01/app/oraData/orcl/CMS69_DATA.dbf Block Type Blocks Failing Blocks Processed ---------- -------------- ---------------- Data 0 3629 Index 0 651 Other 0 144934 File Status Marked Corrupt Empty Blocks Blocks Examined High SCN ---- ------ -------------- ------------ --------------- ---------- 7 OK 0 65 8000 2006312 File Name: /u01/app/oraData/undoTbs/hbk_undotbs.dbf Block Type Blocks Failing Blocks Processed ---------- -------------- ---------------- Data 0 0 Index 0 0 Other 0 7935 File Status Marked Corrupt Empty Blocks Blocks Examined High SCN ---- ------ -------------- ------------ --------------- ---------- 8 OK 0 1132 1280 1403272 File Name: /u01/app/oraData/undoTbs/hbk_undotbs_auto Block Type Blocks Failing Blocks Processed ---------- -------------- ---------------- Data 0 0 Index 0 0 Other 0 148 channel ORA_DISK_1: starting validation of datafile channel ORA_DISK_1: specifying datafile(s) for validation including current control file for validation including current SPFILE in backup set channel ORA_DISK_1: validation complete, elapsed time: 00:00:01 List of Control File and SPFILE =============================== File Type Status Blocks Failing Blocks Examined ------------ ------ -------------- --------------- SPFILE OK 0 2 Control File OK 0 596 Finished validate at 12-JUL-19
可以看出我的数据库没有异常。
RMAN> list failure;
举例:如果有故障的情况下,该如何进行修复
上图可知有两个故障,分别是142和101
通过如下命令,获取故障的详情
RMAN> list failure 142 detail;
得到故障的修复建议
RMAN> advise failure;
也可以指定故障的修复建议
RMAN> advise failure 101;
执行故障修复
RMAN> repair failure;
恢复整个数据库
如果数据库在运行,则强制启动到mount阶段
RMAN> startup force mount; Oracle instance started database mounted Total System Global Area 6680915968 bytes Fixed Size 2213936 bytes Variable Size 3556771792 bytes Database Buffers 3087007744 bytes Redo Buffers 34922496 bytes
进行还原数据库
RMAN> restore database; Starting restore at 12-JUL-19 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=18 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 00001 to /u01/app/oraData/orcl/system01.dbf channel ORA_DISK_1: restoring datafile 00002 to /u01/app/oraData/orcl/sysaux01.dbf channel ORA_DISK_1: restoring datafile 00003 to /u01/app/oraData/orcl/undotbs01.dbf channel ORA_DISK_1: restoring datafile 00004 to /u01/app/oraData/orcl/users01.dbf channel ORA_DISK_1: restoring datafile 00006 to /u01/app/oraData/orcl/CMS69_DATA.dbf channel ORA_DISK_1: restoring datafile 00007 to /u01/app/oraData/undoTbs/hbk_undotbs.dbf channel ORA_DISK_1: restoring datafile 00008 to /u01/app/oraData/undoTbs/hbk_undotbs_auto channel ORA_DISK_1: reading from backup piece /home/oracle/rman_back_2_1_1013419522 channel ORA_DISK_1: piece handle=/home/oracle/rman_back_2_1_1013419522 tag=TAG20190712T092522 channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:27:06 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 /u01/app/oraData/bak/hbk_data.dbf channel ORA_DISK_1: reading from backup piece /home/oracle/data_file_hbk_data_5_1_1013422543 channel ORA_DISK_1: piece handle=/home/oracle/data_file_hbk_data_5_1_1013422543 tag=TAG20190712T101543 channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:45 Finished restore at 12-JUL-19
恢复数据库
RMAN> recover database; Starting recover at 12-JUL-19 using channel ORA_DISK_1 starting media recovery media recovery complete, elapsed time: 00:00:54 Finished recover at 12-JUL-19
打开数据库
RMAN> alter database open; database opened
恢复单个表空间
举例,比如,我们要恢复HBK_DATA表空间
第一步,使表空间offline
RMAN> sql 'alter tablespace HBK_DATA offline'; sql statement: alter tablespace HBK_DATA offline
第二步,执行如下命令
RMAN> run{ set newname for datafile '/u01/app/oraData/bak/hbk_data.dbf' to '/u01/app/oraData/bak/hbk_data_new.dbf';#重命名数据文件 restore tablespace HBK_DATA; #还原表空间 switch datafile all;#更新控制文件 recover tablespace HBK_DATA;#执行表空间的恢复 } executing command: SET NEWNAME Starting restore at 12-JUL-19 using channel ORA_DISK_1 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 /u01/app/oraData/bak/hbk_data_new.dbf channel ORA_DISK_1: reading from backup piece /home/oracle/data_file_hbk_data_5_1_1013422543 channel ORA_DISK_1: piece handle=/home/oracle/data_file_hbk_data_5_1_1013422543 tag=TAG20190712T101543 channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:08 Finished restore at 12-JUL-19 datafile 5 switched to datafile copy input datafile copy RECID=2 STAMP=1013440072 file name=/u01/app/oraData/bak/hbk_data_new.dbf Starting recover at 12-JUL-19 using channel ORA_DISK_1 starting media recovery media recovery complete, elapsed time: 00:00:04 Finished recover at 12-JUL-19
第三步:使表空间online
RMAN> sql 'alter tablespace HBK_DATA online'; sql statement: alter tablespace HBK_DATA online
可以看到,hbk_data.dbf改成了hbk_data_new.dbf
SQL> select file_name from dba_data_files; FILE_NAME -------------------------------------------------------------------------------- /u01/app/oraData/orcl/users01.dbf /u01/app/oraData/orcl/undotbs01.dbf /u01/app/oraData/orcl/sysaux01.dbf /u01/app/oraData/orcl/system01.dbf /u01/app/oraData/bak/hbk_data_new.dbf /u01/app/oraData/orcl/CMS69_DATA.dbf /u01/app/oraData/undoTbs/hbk_undotbs.dbf /u01/app/oraData/undoTbs/hbk_undotbs_auto 8 rows selected.
恢复单个数据文件
如果单个数据文件损坏,不必恢复整个表空间,更不必恢复整个数据库,只需要恢复损坏的数据文件即可。
如果数据库还有这个数据文件,需要将其offline,否则会报如下错误
RMAN> restore datafile '/u01/app/oraData/bak/hbk_data_new.dbf'; Starting restore at 12-JUL-19 using channel ORA_DISK_1 channel ORA_DISK_1: restoring datafile 00005 input datafile copy RECID=3 STAMP=1013440072 file name=/u01/app/oraData/bak/hbk_data.dbf destination for restore of datafile 00005: /u01/app/oraData/bak/hbk_data_new.dbf RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of restore command at 07/12/2019 15:23:03 ORA-19573: cannot obtain exclusive enqueue for datafile 5 ORA-19600: input file is datafile-copy 3 (/u01/app/oraData/bak/hbk_data.dbf) ORA-19601: output file is datafile 5 (/u01/app/oraData/bak/hbk_data_new.dbf)
1:从备份中还原数据文件
RMAN> restore datafile '/u01/app/oraData/bak/hbk_data_new.dbf';
2:执行如下命令恢复
RMAN> recover datafile ‘/u01/app/oraData/bak/hbk_data_new.dbf’; Starting recover at 12-JUL-19 using channel ORA_DISK_1 starting media recovery media recovery complete, elapsed time: 00:00:00 Finished recover at 12-JUL-19
3:使数据文件online
SQL> alter database datafile '/u01/app/oraData/bak/hbk_data_new.dbf' online; Database altered.
修复数据块
如果数据块冲突,不必关闭数据库,可以在线修复冲突块。
找出冲突块。
方法1:
SQL> select * from v$database_block_corruption;
方法2:这种方法不知道好不好使,我没研究过。
SQL> select name,value from v$diag_info;
使用RMAN进行修复冲突块,如下为修复数据文件7中的坏块3及数据文件2中的坏块235
RMAN> blockrecover datafile 7 block 3 datafile 2 block 235;
也可以使用下面命令修复所有的冲突块
RMAN> recover corruption list;