在Oracle下我们如何正确的执行数据库恢复(一)

2014-11-24 17:31:40 · 作者: · 浏览: 0

数据库需要进行介质恢复时,为了确保数据库能够顺利的执行恢复过程,恢复数据库到当前状态。我们要做的就是验证!验证什么呢?当然是验证备份集和归档是否能够进行有效的恢复。防止我们restore后,执行recover时却发现归档缺少了一堆,顿时傻眼。


比方说,在数据库当前日志序列号为3时我们完全备份了数据库。在数据库当前联机日志序列号为13时数据库损坏需要恢复。假设数据库联机日志组为3组,则可以推断数据库联机日志序列号分别为11、12、13。因此当数据库执行restore database后,再执行recover时不难推断数据库需要应用归档3、4、5、6、7、8、9、10以及联机日志11、12、13来进行完全恢复。


为了能够顺利的执行完全恢复,我们在执行恢复前,需要对restore调用的备份集进行恢复验证(语句为:restoreva lidate database)以及验证recover过程所需的归档3-10(语句为:restore validate archivelog sequence between 3 and10)。


以完全恢复为例,举例如下:


1数据库当前日志seq号为59,我们备份数据库


SQL> selectgroup#,archived,sequence#,status from v$log;



GROUP# ARC SEQUENCE# STATUS
---------- --- ---------- ----------------
1 YES 58 INACTIVE
2 NO 59 CURRENT
3 YES 57 INACTIVE



RMAN> backup database format'/backup/fullbk-%T-%U.bak';



2 当数据库联机日志为69时数据库崩溃需要进行介质恢复



SQL> selectgroup#,archived,sequence#,status from v$Log;



GROUP# ARC SEQUENCE# STATUS
---------- --- ---------- ----------------
1 YES 67 INACTIVE
2 YES 68 INACTIVE
3 NO 69 CURRENT



注意:这里其实我们可以推断,如果数据库需要恢复到当前状态,那么归档59到归档66的所有归档,必须能够进行有效的恢复。我们只需要发起restore database preview命令,Oracle便可以给出我们归档列表,继续往下看。




3 判定当前数据库恢复所需要备份集和归档条目



注意对于restore database preview列出的归档条目,recover执行完全恢复时并不会完全应用,因为完全恢复recover过程是:应用相关归档+ 所有联机日志,seq号从小到大依次应用。后面会抓取recover过程,这里先暂且提一下。



RMAN> restore database preview;



Starting restore at 2014-02-17 16:14:21
using target database control file insteadof recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=63 device type=DISK




List of Backup Sets
===================




BS Key Type LV Size Device TypeElapsed Time Completion Time
------- ---- -- ---------- ----------------------- -------------------
108 Full 2.03G DISK 00:02:26 2014-02-17 12:05:38
BP Key: 108 Status:AVAILABLE Compressed: NO Tag: TAG20140217T120328
Piece Name:/backup/fullbk-20140217-3ep0rj0h_1_1.bak
注意:这里显示备份片总是rman资料库中记录的数据文件最新的备份
List of Datafiles in backup set 108
File LV Type Ckp SCN CkpTime Name
---- -- ---- ---------- ------------------- ----
1 Full 4028039 2014-02-17 12:03:29/oracle/CRM/CRM/system01.dbf
2 Full 4028039 2014-02-17 12:03:29/oracle/CRM/CRM/sysaux01.dbf
3 Full 4028039 2014-02-17 12:03:29/oracle/CRM/CRM/undotbs01.dbf
4 Full 4028039 2014-02-17 12:03:29/oracle/CRM/CRM/users01.dbf
5 Full 4028039 2014-02-17 12:03:29 /oracle/CRM/CRM/crm.dbf
6 Full 4028039 2014-02-17 12:03:29 /oracle/CRM/test.dbf
7 Full 4028039 2014-02-17 12:03:29 /oracle/CRM/user01.dbf
8 Full 4028039 2014-02-17 12:03:29 /oracle/CRM/jxc.dbf
using channel ORA_DISK_1



List of Archived Log Copies for databasewith db_unique_name CRM
=====================================================================



Key Thrd Seq S Low Time
------- ---- ------- - -------------------
131 1 59 A 2014-02-17 11:55:37
Name:/oracle/archivelog/arch_1_59_839098938.arch



132 1 60 A 2014-02-17 12:10:20
Name:/oracle/archivelog/arch_1_60_839098938.arch



133 1 61 A 2014-02-17 12:10:21
Name:/oracle/archivelog/arch_1_61_839098938.arch



134 1 62 A 2014-02-17 12:10:26
Name:/oracle/archivelog/arch_1_62_839098938.arch



135 1 63 A 2014-02-17 12:10:30
Name:/oracle/archivelog/arch_1_63_839098938.arch



136 1 64 A 2014-02-17 12:10:31
Name:/oracle/archivelog/arch_1_64_8390989