ITPub博客

首页 > Linux操作系统 > Linux操作系统 > resetlogs,noresetlogs,完全恢复,不完全恢复 2

resetlogs,noresetlogs,完全恢复,不完全恢复 2

原创 Linux操作系统 作者:tolywang 时间:2011-03-22 00:15:17 0 删除 编辑


http://space.itpub.net/index.php?action/viewspace/itemid/524593
http://www.eygle.com/faq/How.To.Backup.and.Recreate.Controlfile.htm


http://oracle.**.com/backup/810454_8.html 

 

resetlogs,noresetlogs, 完全恢复,不完全恢复

 

----- 定义:

完全恢复 --  利用重做日志或增量备份将数据块恢复到最接近当前时间的时间点。
之所以叫做完整恢复是由于Oracle应用了归档日志和联机重做日志中所有的修改。
如果只是数据文件损坏,且存在备份及备份以来的所有归档日志文件,那么就能
把数据库完全恢复到发生介质损坏的那个时间点。完全恢复分为数据库级别,数据
文件级别以及表空间级别 。

不完全恢复 -- 需要将数据库恢复到历史上某个时间点,或由于丢失了联机日志
件或某个归档日志文件,或者使用了以前备份的控制文件进行恢复,进行的恢复
叫做不完全恢复。 换句话说,恢复过程中不会应用备份产生后生成的所有的重
做日志(可能应用部分或不应用)。 


通常出现下面的情况需要进行不完全恢复:
a. 几个或全部的联机重做日志文件损坏;
b. 由于个别归档日志文件的丢失无法进行完整的恢复;
c. 用户操作造成的数据丢失,比如,用户误删除了一张表, 这时可进行不完全
   恢复将数据库恢复到误操作之前的时间点;
d. 丢失了当前的控制文件,必须使用备份的控制文件打开数据库。不过只要
   所有的归档日志文件和联机日志文件都在,仍然能够恢复所有的数据。

为了执行不完整介质恢复,必须使用恢复时间点以前的备份来还原数据文件,
并在恢复完成后使用RESETLOG选项打开数据库。resetlogs会重置日志序列号
(变为1)强制清空或重建REDO, noresetlogs则不会 。

 


------ 关系:

1. 不完全恢复必须使用resetlogs ;
2. 使用resetlogs大多数情况下是做不完全恢复,但也可以做完全恢复(视丢失文件类型不同);
3. noresetlogs 必须做完全恢复时使用,但完全恢复不一定都是noresetlogs; 
4. 使用备份的控制文件需要使用using backup controlfile,使用using backup controlfile
   就需要使用resetlogs开启数据库;
5. 使用resetlogs方式重建控制文件需要使用using backup controlfile,同上,需要使用
   resetlogs开启数据库;
6. 如果是以noresetlogs方式重建控制文件,不必要使用using backup controlfile,详细
   可以参考通过backup controlfile to trace 导出的脚本;
   (因为resetlogs重建控制文件是针对Use this only if online logs are damaged,
    而noresetlogs方式重建控制文件是针对the current versions of all online logs
    are available )

 

create controlfile resetlogs/noresetlogs

命令CREATE CONTROLFILE...NORESETLOGS使得控制文件最新。如记录了最新的联机日志和
日志序号。这个命令后介质恢复不是必需的。

- 用Noresetlogs重建控制文件时,控制文件中datafile Checkpoint SCN来自Online logs
  中的Current log头部
- 用Resetlogs重建控制文件时,控制文件中datafile Checkpoint SCN 来自各数据文件头。

 

 

------ 条件:

1. 使用备份的控制文件(using backup controlfile)则需要使用resetlogs方式打
   开数据库(当然不一定是不完全恢复,备份的控制文件不能自动进行完全恢复, 可
   以手工apply日志进行完全恢复; 重新创建控制文件则可以自动进行完全恢复);
2. 使用当前控制文件或noresetlogs方式重建控制文件来恢复,可以不需要resetlogs
   打开数据库;

备注: 备份的控制文件之所以不能自动进行完全恢复,是因为备份的控制文件的
检查点SCN是比较旧的SCN, Oracle需要知道从哪个归档日志文件开始恢复,以及
从这个归档日志文件的哪个位置开始恢复。存储在备份的控制文件中的日志序列号
以及对应于控制文件检查点SCN的RBA (Redo Bytes Address)指出了从哪个归档文件
开始以及从文件的哪个位置(重做记录)开始恢复。

 

 

 

----- 各种情况下的恢复:

1. 所有控制文件丢失,而其他文件没有丢失


恢复方式A:  从备份中恢复控制文件。

恢复原理: 这时控制文件记录的数据文件检查点SCN显然要小于当前数据
文件头中记录的检查点SCN (控制文件比数据文件要旧,也比联机日志或归
档日志要旧), 开启到mount状态,可以通过v$datafile及v$datafile_header
中的字段checkpoint_change# 进行对比。

然后通过recover database using backup controlfile; 去恢复数据库,
这时Oracle需要知道从哪个归档日志文件开始恢复,以及从这个归档日志文
件的哪个位置开始恢复。

存储在备份的控制文件中的日志序列号以及对应于控制文件检查点SCN的RBA
(Redo Bytes Address)指出了从哪个归档文件开始以及从文件的哪个位置
(重做记录)开始恢复。

RBA是什么,参考 http://space.itpub.net/35489/viewspace-690115 

输入auto开始恢复,会应用完所有的归档日志文件,然后报错找不到最后
的归档文件,其实这时是准备应用联机日志文件,但是由于是恢复的备份
控制文件,而当前使用的联机日志文件的信息保存在当前控制文件中(而不
在备份的控制文件中),但我们丢失了当前的控制文件,所以auto时报告
无法找到归档日志文件的错误信息。 我们需要手工尝试apply每组联机
日志文件,运气好的话,尝试第一组联机日志文件就会提示Media recovery
complete了,如果不成功,我们需要再次发出recover database using
backup controlfile; 再次输入第二组联机日志文件。

最后我们以resetlogs打开数据库,alter database open resetlogs;
虽然是以resetlogs打开的数据库,但由于我们应用了所有需要应用的
日志文件,数据没有丢失,其实是一次完全恢复。

 

---------------------------------------------------------------
备份控制文件
system scn=datafile scn<=start scn(当数据文件为旧的相等),stop scn notnull/null
1)system scn=datafile scn<=start scn,需要使用using backup controlfile
介质恢复成system scn=datafile scn=start scn=current log scn(当前日志最大SCN)
---------------------------------------------------------------

 

 

控制文件会去读数据文件头中与检查点SCN对应的RBA(redo block
address) 信息来确定从那个序列的归档日志开始恢复,一直推进恢复到NEXT SCN是无穷大的那个REDOLOG,此时恢

复是完全
恢复的,但打开的时候还要以resetlogs方式打开,这样要重置归档日志的sequence,也就是说,如果你恢复时使

用了备份控
制文件,那么打开数据库时必然是要resetlogs的。附测试用例:
先确定是哪个归档文件,然后是从这个归档文件的哪里开始恢复 ????
之所有要冻结DATAFILE的检查点SCN及日志序列号,是为了将来使用热备恢复的时候知道从
哪里开始应用重做记录,也就是从备份出来的数据文件头部记录的日志序列号对应的日志
文件开始,而在该日志文件中,则从数据文件头部记录的检查点SCN开始向后应用所有的
日志文件 。
恢复步骤:
(1). 恢复备份的控制文件到原控制文件目录下。
(2). SQL> startup mount; 
(3). SQL> recover database; (使用备份控制文件不能自动进行完全恢复,可手工apply) 
(4). SQL> alter database open resetlogs;
(5). 完成完全恢复,事实证明不完全恢复时必须RESETLOGS,但是如果使用备份控制
     文件来恢复,使用RESETLOGS也可以完全恢复。其实丢失控制文件也可以不使用
     RESETLOGS方式打开数据库。


恢复方式B: 使用trace文件脚本重新生成控制文件(具体用法参考生成的trace文件)。
恢复原理:重建控制文件后,显然有关的检查点SCN号都丢了。这时查询v$log中的
current redo log的first_change# 及v$database中的系统检查点SCN, 发现重建的
控制文件中的系统检查点SCN从当前redo log的起始检查点SCN获得,而控制文件里
记录的数据文件检查点SCN(v$datafile)从数据文件头部(v$datafile_header)获得.
重建控制文件以后,数据库会自动启动到mount状态,于是我们可以开始进行恢复。
recover database;  恢复完成后,直接打开数据库,不需要resetlogs,数据完全
恢复。

 

具体恢复中遇到的问题可能需要具体对待,这种方法通常是在没有控制文件(二进制
文件)备份的情况下使用的,如果存在备份应该使用备份的控制文件尝试恢复.

恢复步骤:
(1). 使用脚本重新生成控制文件(因为在线日志没有损坏,所以用noresetlogs选项)。
SQL> startup nomount ;
SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  ARCHIVELOG
  2      MAXLOGFILES 16
  3      MAXLOGMEMBERS 3
  4      MAXDATAFILES 100
  5      MAXINSTANCES 8
  6      MAXLOGHISTORY 292
  7  LOGFILE
  8    GROUP 1 'G:\ORADATA\ORCL\REDO01.LOG'  SIZE 50M,
  9    GROUP 2 'G:\ORADATA\ORCL\REDO02.LOG'  SIZE 50M,
10    GROUP 3 'G:\ORADATA\ORCL\REDO03.LOG'  SIZE 50M
11  -- STANDBY LOGFILE
12  DATAFILE
13    'G:\ORADATA\ORCL\SYSTEM01.DBF',
14    'G:\ORADATA\ORCL\SYSAUX01.DBF',
15    'G:\ORADATA\ORCL\UNDOTBS01.DBF',
16    'G:\ORADATA\ORCL\USERS01.DBF',
17    'G:\ORADATA\ORCL\NAM01.DBF'
18  CHARACTER SET ZHS16GBK
19  ;
# Recovery is required if any of the datafiles are restored backups,
# or if the last shutdown was not normal or immediate.
(2). SQL> recover database; (使用重建的控制文件可以自动进行完全恢复) 
(3). SQL> alter database open ;
(4). 完全恢复完成。如果在线日志有损坏,重建控制文件需要使用resetlogs
     选项,恢复时需要 RECOVER DATABASE USING BACKUP CONTROLFILE;
     ALTER DATABASE OPEN RESETLOGS;


2. 部分数据文件丢失,而其他文件没有丢失

3. 非当前联机日志文件丢失,而其他文件没有丢失

4. 当前联机日志文件丢失,而其他文件没有丢失

5. 控制文件与部分数据文件丢失,而其他文件没有丢失

5. 控制文件与部分数据文件丢失,而其他文件没有丢失

5. 控制文件与非当前联机日志文件丢失,而其他文件没有丢失

5. 控制文件与当前联机日志文件丢失,而其他文件没有丢失

QUOTE:
--------------------------------------------------------------------------------
最初由 cross 发布
A:重新创建了新的控制文件,从数据文件中得到数据文件状态及检查点信息.
B:在使用旧的控制文件做恢复时候,旧的控制文件记录的scn与当前数据文件scn是不一致的,需要这样做来恢复
--------------------------------------------------------------------------------
对于A,SCN信息不一定是从数据文件获取的,你可以手工做实验DUMP建立的控制文件看看,在联机日志存在时,他获取

的是日志
末尾的SCN号码
对于B,不光是控制文件小于数据文件头SCN时才使用,只要你的控制文件相对于联机日志或归档日志较旧时,都可以

使用

至此完成完全恢复,事实证明不完全恢复时必须RESETLOGS,但是完全恢复时如果使用备份控制文件来恢复,那么

使用
RESETLOGS一样可以完全恢复。但是丢失控制文件也可以不使用RESETLOGS方式打开数据库,这样也就可以避免重置

日志序列
号带来的不变,详情请见第四种情况

第二种情况,不完全恢复,不管你是要什么样的不完全恢复,SCN,TIME,跨越REDO,都必须使用resetlogs。测试

用例可以
参见EYGLE老师的相关教程。

第三种情况,丢失REDOLOG,这就更需要resetlogs了,因为resetlogs能够重建REDOLOG。如果你的REDOLOG、控制

文件、数据
文件丢失的话,需要先恢复控制文件,然后restore database;recover database;alter database open

resetlogs;注意,
这时候做的是不完全恢复,因为REDO没有了。在recover过程中可能会报错然后自动退出RMAN,无视,alter

database open
resetlogs即可,
从数据验证的结果来看,除了REDO里面的记录没有恢复,其他基本都恢复了,REDO及ARCHIVELOG的序列被重置。

第四种情况,没有丢失控制文件及各种日志,仅丢失数据文件,这种问题比较常见,有可能磁盘损坏造成数据文件

丢失,等
磁盘故障排除后,需要恢复,此时的恢复就很简单了,restore database;recover database;alter database

open;就一切
OK,也就是说,在不使用备份控制文件恢复的情况下,是可以使用noresetlog方式打开数据库的。前提有一,不能

丢失日志
文件。假若丢失了控制文件和数据文件但还是想以noresetlog打开的话,就必须手动以noresetlogs方式重建控制

文件,而且
REDOLOG的状态都必须正常,否则是无法使用noresetlogs方式打开。

 

 

 

 

using backup controlfile 与 recreate controlfile 区别


1、recover database using backup controlfile
   以下条件需要使用using backup controlfile 
    1) 使用备份控制文件
    2) 重建resetlogs控制文件
  如果重建noresetlogs控制文件,不必要使用using backup controlfile

 

2. 使用备份的控制文件需用使用using backup controlfile恢复,且需要使
   用resetlogs方式打开数据库(当然不一定是不完全恢复,备份的控制文件不
   能自动进行完全恢复, 可以手工apply日志进行完全恢复;
   重新创建控制文件则可以自动进行完全恢复);
 
3. 使用当前控制文件或重建控制文件来恢复,可以不需要resetlogs打开数据库;

 

 

 

 

 

1、recover database using backup controlfile
i;rE#PA@'Si.V0以下条件需要使用using backup controlfileDOIT博客r6e.R-T-I
    1)使用备份控制文件DOIT博客;b'e|)UG\N"l8n6QQ
    2)重建resetlogs控制文件,如果重建立noresetlogs不必要使用using backup controlfileDOIT博客._8x1t

([!L6[4_


LU l8v0p/g(| u02、alter database open resetlogDOIT博客hpwg [ZME
指定RESETLOGS将重设当前LOG sequence number为1,抛弃所有日志信息。DOIT博客G#j#^B!Jf+[
以下条件需要使用resetlogDOIT博客6RQF9{ ET(f}.{
    1)在不完全恢复(介质恢复)DOIT博客 T/kk/M:@)\)m$qT
    2)使用备份控制文件
2WGrs]CS$eJ0使用resetlogs打开数据库后无必完整地备份一次数据库。

h.?8S&uP{:K0

)s)BF'ML8S03、create controlfile resetlogs/noresetlogsDOIT博客J @ tK4aFJc
    1)用Noresetlogs重建控制文件时,控制文件中 datafile Checkpoint来自Online logs中的Current log头

DOIT博客+yO\'z6? M
    2)用Resetlogs重建控制文件时,控制文件中datafile Checkpoint来自各数据文件头。DOIT博客Q G q+Ar

(qV oIw:A

当system scn, datafile, scn start scn 不全相等,需要介质恢复,如果stop scn null需要实例恢复
,} _v[3|&b)b,K&s3O0resetlogs抛弃所有在上一次恢复没有用到的日志信息,确保不被重新用与恢复。DOIT博客

DpRp7j0l&aL f/t

1、系统正常关闭:DOIT博客[6F,nc&?TcI3~d
system scn=datafile scn=start scn=stop scnDOIT博客/V!QUn}-v#S3F,P K/w&d
    1)system scn=datafile scn=start scn,不需要介质恢复DOIT博客X P1lqhl)}G
    2)stopscn not null,不需要实例恢复

{^Tf]0
2、系统异常关闭:DOIT博客1?ee"fP-rR ]pm
system scn=datafile scn=start scn,stop scn nullDOIT博客Y1lG@ Sf
    1)system scn=datafile scn=start scn,不需要介质恢复DOIT博客w8u/o9?*`&r8{`
    2)stopscn null,需要实例恢复DOIT博客r pA'^/[R _ A a

3、旧数据文件DOIT博客Am5b\8`3]2_4B+nM
system scn=datafile scn>start scn,stop scn null/notnullDOIT博客"i5x{`4xgln1~{I
    1)system scn=datafile scn>start scn,需要介质恢复成system scn=datafile scn=start scnDOIT博客%

sepOG#z
    2)stopscn null,需要实例恢复,not null 不需要实例恢复DOIT博客a!Y p+_x-D^

4、备份控制文件DOIT博客v |T5tz&o-am _p
system scn=datafile scn<=start scn(当数据文件为旧的相等),stop scn notnull/nullDOIT博客c&B@2?1w2}

#@3X%M%G
    1)system scn=datafile scn<=start scn,需要使用using backup controlfile介质恢复成system

scn=datafile scn=start scn=current log scn(当前日志最大SCN)DOIT博客fJ [q|~P3y r0B
    2)为保证上一次恢复没有用到log日志不被使用,必须resetlogsDOIT博客A SK"A*po1Z!\5L0l

5、重建noresetlogs控制文件DOIT博客#d9k'nc;V0te
控制文件中 datafile Checkpoint来自Online logs中的Current log头
A/lk g W0current log scn=system scn=datafile scn>=start scn,stop scn not null/nullDOIT博

客nolPh+B-D
    1)current log scn=system scn=datafile scn>=start scn,需要介质恢复成system scn=datafile

scn=start scn=redolog scn(当前日志最大SCN),stop scn not nullDOIT博客yw1P.IRqXC
    2)stopscn not null 不需要实例恢复DOIT博客KoSs*R2K7s#I"Bn

6、重建resetlogs控制文件DOIT博客Ht%_;_1M0q;Y s
控制文件中datafile Checkpoint来自各数据文件头。DOIT博客o(y*WFT@
system scn>=datafile scn=start scn,stop scn not null/null
4f&b\)H"y;FY!YYY0    1)system scn>=datafile scn=start scn,需要使用using backup controlfile介质

恢复成system scn=datafile scn=start scn(当前日志最大SCN),stop scn not nullDOIT博客;iHhV4AA1DcV
    2)stop notnull,因为SCN已经为redolog scn,log已经不能使用,必须resetlogsDOIT博客}

s#E8s7Dn4m&i0y#C

7、不完成恢复
+y"]!y#m4v%x)l0    1)DOIT博客8y/bN3OK_ |
    2)为保证上一次恢复没有用到log日志不被使用,必须resetlogsDOIT博客y.p |-S,^ g4E

转自http://hi.baidu.com/zwfha/blog/item/7fb1d9cd0e896e520fb3452b.htmlDOIT博客/}"f,o Z(NW U:c

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-690119/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 淘宝
请登录后发表评论 登录
全部评论
Oracle , MySQL, SAP IQ, SAP HANA, PostgreSQL, Tableau 技术讨论,希望在这里一起分享知识,讨论技术,畅谈人生 。

注册时间:2007-12-10

  • 博文量
    5595
  • 访问量
    13474716