oracle中的 resetlogs+scn恢复

  1. 云栖社区>
  2. 博客>
  3. 正文

oracle中的 resetlogs+scn恢复

长烟慢慢 2012-02-16 11:52:09 浏览567
展开阅读全文

 关于resetlog的作用是将日志序列重置,这样以前的归档就作废。请高人指点,是什么样的一个工作机制?

首先一定要明白oracle工作的基本原理,归档情况下:大家一定要同步,谁也不能滞后或者超前,也就是SCN号,如果学oracle不懂scn的作用,那oracle就很难学懂了。

    为什么要resetlog,因为有一些地方不一致了,必须得需要着一个基准点,让大家以这个为起点,一起继续超前走。不知道楼主明白了吗?

alter database open noresetlogs与resetlog有什么区别啊?

http://www.oracle.com.cn/viewthread.php?tid=1490

个人理解:
resetlogs,由于不完全恢复导致日志不连续而不能使用恢复点之后的日志进行重做,所以使用resetlogs进行打开数据库。
noresetlogs,由于控制文件的版本是从备份中而来或是手工重建的,并且所有日志是连续的,可以用于重做,所以使用noresetlogs打开数据库,意为使用log进行重做。

目录 

1 概述 
2 运用场合 
3 作用 
4在RMAN中OPEN RESETLOGS与SQLPLUS中OPEN RESETLOGS的区别 
5在重建控制文件的时候使用ResetLog 

6总结scn与resetlogs的各种情况


1 、概述 

      The primary function of resetlogs is to discard the redo that was not applied during incomplete recovery, ensuring that the skipped redo can never be accidentally applied by a subsequent recovery. To accomplish this, resetlogs effectively invalidates all existing redo in all online and archived redo logfiles. This has the side effect of making any existing datafile backups unusable for future recovery operations.Resetlogs also reinitializes the controlfile information about online logs and redo threads, clears the contents of any existing online redo log files, creates the online redo log files if they do not currently exist, and resets the log sequence number in all threads to one. 
  resetlogs的主要功能是在不完全恢复过程中忽略不可用的重做日志,确保略过的日志不影响接下来的恢复。resetlogs把所有存在于在线或归档的日志文件中的重做信息都置为不可用。这带来一个副作用,使得已存在的数据文件备份对将来的数据恢复不再是安全可用的了。resetlogs同时还会:重新初使化控件文件中的在线日志信息及重做日志线程、清除已存在的重做日志文件、若重做日志不存在则创建日志文件、重置所有线程中的日志序号为1。 

2、 运用场合 
以下条件需要使用resetlog 
1)在不完全恢复(介质恢复) 
2)使用备份控制文件(backup的控制文件一般从日志文件和数据库的信息以及SCN的信息,相比目前的状态都已经过期了) 

3 、ResetLog的作用 

(1)将重做日志的序列号设为1 
(2)一般以该子句打开数据库后,要立即备份数据库,因为这个子句会使数据库以前的备份不能用. 
(3)在重做日志当前日志组出现错误时,要以该子句打开数据库.该子句会重新设置重做日志文件的状态. 
(4)让数据库系统归档初始化,重新生成归档文件. 

4、在RMAN中OPEN RESETLOGS与SQLPLUS中OPEN RESETLOGS的区别 

1) If you run the RMAN command (not the SQL statement) ALTER DATABASE OPEN RESETLOGS, then RMAN automatically creates a new database incarnation record in the recovery catalog. RMAN implicitly(隐式的) and automatically issues a RESET DATABASE command, which specifies that this new incarnation of the database is the current incarnation. RMAN associates all subsequent backups and log archiving done by the target database with the new database incarnation. 

2) If you issue the SQL statement (not the RMAN command) ALTER DATABASE OPEN RESETLOGS, then RMAN does not automatically run a RESET DATABASE command. Hence(因此,从此), RMAN cannot access the recovery catalog because it cannot distinguish between a RESETLOGS command and an accidental(以外的) restore of an old control file. To solve this problem, you must manually run the RESET DATABASE command in RMAN after executing the SQL statement ALTER DATABASE OPEN RESETLOGS. 

The RESET DATABASE command updates the repository to indicate(指示,说明) that the target database has been opened with the RESETLOGS option. In the rare situation(罕见的情况)in which you wish to restore backups of a prior incarnation of the database, use the RESET DATABASE TO INCARNATION key command to change the current incarnation to an older incarnation. For example, if you accidentally drop a table immediately after the most recent RESETLOGS, then you may want to recover the database to just before the time of the most recent RESETLOGS and then open it with the RESETLOGS option, thereby creating a new incarnation. 

5、在重建控制文件的时候使用ResetLogs 

create controlfile resetlogs/noresetlogs 
  1)用noresetlogs重建控制文件时,控制文件中datafile Checkpoint SCN来自online logs中的Current log头 
  2)用resetlogs重建控制文件时,控制文件中datafile Checkpoint SCN来自各数据文件头(Start SCN)。


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


6、总结scn与resetlogs的各种情况


当system scn,datafile scn,start scn 不全相等,需要介质恢复,如果stopscn null需要实例恢复。resetlogs抛弃所有在上一次恢复没有用到的日志信息,确保不被重新用与恢复。
1、系统正常关闭:
system scn=datafile scn=start scn=stop scn
1)system scn=datafile scn=start scn,不需要介质恢复

2)stopscn not null,不需要实例恢复


2、系统异常关闭:
system scn=datafile scn=start scn,stop scn null
1)system scn=datafile scn=start scn,不需要介质恢复

2)stopscn null,需要实例恢复


3、旧数据文件
system scn=datafile scn>start scn,stop scn null/notnull
1)system scn=datafile scn>start scn,需要介质恢复成system scn=datafile scn=start scn

2)stopscn null,需要实例恢复,not null 不需要实例恢复


4、备份控制文件
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)

2)为保证上一次恢复没有用到log日志不被使用,必须resetlogs


5、重建noresetlogs控制文件
控制文件中 datafile Checkpoint来自Online logs中的Current log头
current log scn=system scn=datafile scn>=start scn,stop scn not null/null
1)current log scn=system scn=datafile scn>=start scn,需要介质恢复成system scn=datafile scn=start scn=redolog scn(当前日志最大SCN),stop scn not null

2)stopscn not null 不需要实例恢复


6、重建resetlogs控制文件
控制文件中datafile Checkpoint来自各数据文件头。 
system scn>=datafile scn=start scn,stop scn not null/null
1)system scn>=datafile scn=start scn,需要使用using backup controlfile介质恢复成system scn=datafile scn=start scn(当前日志最大SCN),stop scn not null

2)stop notnull,因为SCN已经为redolog scn,log已经不能使用,必须resetlogs

数据库启动时,涉及到的不一致情况的分析:介质恢复,实例恢复和resetlogs

备份知识的说明:

recover database,从旧的数据文件恢复到控制文件中数据文件的scn位置

recover database using backup control,恢复到最新的log scn位置

完全恢复:所以文件保持一致

不完全恢复:只要有一个文件不一致

注意,对于数据文件头、控制文件中数据文件头信息与日志文件头一致,但控制文件中日志文件头信息不与之前三者一致也是不完全恢复,虽然数据没有丢失



这里我们定义一下最新控制文件的概念:1)所有文件全部一致,或           2)数据文件一致(除stopscn),日志文件一致

()内数据为一致数据

以下对各种启动情况进行分析:

1)正常关机

此时控制文件中的数据文件头信息、控制文件中的数据文件头stop scn、数据文件头、控制文件中的日志文件头信息、日志文件头信息全部一致,此时可以正常打开数据库

 

2)异常关机

控制文件中的数据文件头信息与、数据文件头一致,所以不需要介质恢复,数据文件和控制文件一致

此时控制文件是最新的,即控制文件中的日志文件头信息、日志文件头信息一致

(控制文件中数据文件头信息、数据文件头信息)(控制文件中的日志文件头信息、日志文件头信息)不一致,但此时stop scn=null, 所以不需要resetlogs,最新的控制文件。

控制文件中的数据文件头stop scnnull,所以需要进行实例恢复,说明数据文件和日志文件不一致

 

3)旧的数据文件,最新的控制文件

控制文件中的数据文件头信息与、数据文件头不一致,所以需要介质恢复,数据文件和控制文件不一致

如果:

 1recover database恢复到当前控制文件中数据文件头信息的位置(完全恢复)

如果:

1

(控制文件中数据文件头信息、数据文件头信息)(控制文件中的日志文件头信息、日志文件头信息)一致,所以不需要resetlogs

控制文件中的数据文件头stop scn不为null,不需要进行实例恢复,数据文件和日志文件一致

2

(控制文件中数据文件头信息、数据文件头信息)(控制文件中的日志文件头信息、日志文件头信息)不一致,但stop scnnull

控制文件中的数据文件头stop scnnull,需要进行实例恢复,数据文件和日志文件不一致

 

 2recover database until ***恢复到之前的某个点(不完全恢复)

(控制文件中数据文件头信息、数据文件头信息)(控制文件中的日志文件头信息、日志文件头信息)不一致,且stop scnnull,所以需要resetlogs。同时将stop scn重置为null

 

4)旧的数据文件,不是最新的控制文件

控制文件中的数据文件头信息与、数据文件头不一致,所以需要介质恢复,数据文件和控制文件不一致

如果:

 1recover database恢复到当前控制文件中数据文件头信息的位置(不完全恢复)

控制文件中的日志文件头信息、日志文件头信息不一致,所以需要resetlogs。同时将stopscn重置为null

 2recover database using backupcontrolfile恢复到当前日志文件的最大scn(不完全恢复)

(控制文件中数据文件头信息、数据文件头信息、日志文件头信息)与 控制文件中的日志文件头信息 不一致,所以需要resetlogs。同时将stop scn重置为null

注意:在恢复过程中,控制文件中的日志文件信息并不会虽然恢复而进行推进

 

5)旧的或备份的控制文件,较新的数据文件

控制文件中的数据文件头信息与、数据文件头不一致,所以需要介质恢复,数据文件和控制文件不一致

recover database using backup controlfile恢复到当前日志文件的最大scn(不完全恢复)

(控制文件中数据文件头信息、数据文件头信息、日志文件头信息)与 控制文件中的日志文件头信息 不一致,所以需要resetlogs。同时将stopscn重置为null

 

6)重建控制文件resetlogs

此时控制文件中的数据文件头信息scn从当前数据文件头scn中获取,而控制文件中的日志文件头信息全零,与日志文件不一致,所以可以理解为是旧的控制文件

(1)(控制文件中数据文件头信息、数据文件头信息、日志文头信息)一致,可以不用介质恢复

 日志文件头和控制文件中日志文件头信息不一致,所有需要resetlogs(丢失联机日志数据)



      2)也可以用recover database using controlfile 恢复到当前最近日志的scn位置

日志文件头和控制文件中日志文件头信息不一致,所有需要resetlogs(如果联机日志完好,数据不会丢失)

 

7)重建控制文件noresetlogs

此时控制文件中的数据文件头信息scn从当前日志头scn中获取current log scn,控制文件全部scn都设置为最新,包括日志部分。

1)如果此时数据文件过旧,则需要介质恢复recover database,此时所有文件一致,不需要resetlogs

2)如果数据文件已经一致,则可以直接 alter database open。

网友评论

登录后评论
0/500
评论
长烟慢慢
+ 关注