转自:http://blog.sina.com.cn/s/blog_63216bda0100zblr.html

Oracle文档中提到,一旦用备份的控制文件进行数据库恢复,就需要使用resetlogs的方法打开数据库,但是resetlogs通常意味着不完全恢复,而且更重要的是一旦用resetlogs方法打开数据库,日志的序号用重新从1开始。其实如果只是控制文件损坏,日志文件都完整的话,数据库是可以完全恢复的,而且不必非得用resetlogs打开。接下来,我们就对不完全恢复做出总结,如图9-10所示,然后再通过一些实验深入理解。

 
图9-10  控制文件的重建方法及后续恢复操作

9.6.1  使用alter database open resetlogs的场合

使用resetlogs选项,会把当前的日志序号(log sequence number)重设为1,并抛弃所有日志信息。在以下条件时需要使用resetlogs选项:

在不完全恢复(介质恢复);

使用备份控制文件。

使用resetlogs打开数据库后,务必要完整地进行一次数据库备份。

指定RESETLOGS会执行下列操作:

归档当前的在线重做日志文件(如果能访问到的话),然后清空内容并将日志文件序号重置为1(如果在线重做日志文件不存在,则重建)。

重置控制文件中关于在线日志文件的元数据

更新数据文件和在线重做日志文件中的RESETLOGS SCN和重置时间信息。

顾名思义,reset将重置日志顺序号,那么以前数据库的备份将不再可用

万事万物有果必有因,执行了不完全恢复操作,或者使用了备份的控制文件进行恢复,或者执行Flashback Database操作之后,在打开数据库时必须指定RESETLOGS选项,这是由Oracle自身特性决定的。

正常运行中Oracle内部有一个生命周期,这种生命周期在Oracle中也有一个专业词汇,叫incarnation。不完全恢复,顾名思义就是只恢复部分数据,由于已经无法将数据库恢复到当前状态(崩溃前的状态),Oracle数据库也不知道当前处于什么状态了,事务上也许一致,但是不是最新,Oracle自己无从判断,后续也许仍有重做日志文件,但却无法应用(或DBA不允许应用)。如果没有Incarnation的概念,正常Open数据库的话又会产生重做日志文件,并且这些日志文件的序号与之前相同(但内容可能不同),这样不管是备份还是恢复都会造成混淆,因此必须在执行不完全恢复后,标示之前生命周期结束,方法就是以RESETLOGS方式打开数据库。以RESETLOGS方式打开后,Oracle数据库又开始了一个新的生命周期,即重置Incarnation,日志文件序号也被重新初始化到1。

图7-4显示了一次OPEN RESETLOGS的操作。如果我们画一个时间轴的话,不完全恢复就是将数据库恢复到从备份时间到当前时间之间的某一个点。

数据库在日志文件序号为1000时创建了备份,在日志文件序号为4000时崩溃,由于日志文件序号为2501,因此你只能将数据库恢复到日志文件序号为2500时的状态,然后以RESETLOGS方式打开,Oracle数据库又开始了一个新的Incarnation,日志文件序号被重新初始化到1,然后随着数据库的运行不断增加并达到4000,但这些日志文件与之前的日志文件并不关联(虽然文件序号相同)。

 
 

指定RESETLOGS会执行下列操作:

归档当前的在线重做日志文件(如果能访问到的话),然后清空内容并将日志文件序号重置为1(如果在线重做日志文件不存在,则重建)。

重置控制文件中关于在线日志文件的元数据。

更新数据文件和在线重做日志文件中的RESETLOGS SCN和重置时间信息。

在10g之前的版本,数据库执行完OPEN RESETLOGS操作之后,都建议立刻进行一次完全备份,因为之前版本中在执行OPEN RESETLOGS操作时并不对当前的Online Redologs文件进行归档,这会导致归档文件不再连续,因此之前创建的备份不再有效(恢复不到当前状态了,只能恢复到OPEN RESETLOGS操作之前)。10g及之后版本就不存在这个问题了,OPEN RESETLOGS操作会首先将当前在线重做日志文件归档(如果能够访问到的话),并且OPEN RESETLOGS操作也会记入Online Redologs文件并正常归档,相当于OPEN RESETLOGS只是一个命令操作,就像其他SQL命令一样,这样保证了归档日志文件的连续性,之前的备份依然有效,不过三思仍然建议执行OPEN RESETLOGS操作之后马上进行一次全库备份。

提示

什么是Incarnation?

Oracle数据库的Incarnation在有些资料中译作对应物,在我看来可以将其理解成生命周期。Oracle数据库从创建到遇到RESETLOGS操作为一个生命周期,这个生命周期内数据库的逻辑属性,如SCN、日志文件序列号等具有相同的特征。当通过OPEN RESETLOGS方式打开数据库后,原生命周期即宣告结束,原生命周期中生成的重做日志文件也被废弃,日志文件序号自动重置为1。

(转)alter database open resetlogs 的意义的更多相关文章

  1. alter database open resetlogs

    使用resetlogs选项,会把当前的日志序号(log sequence number)重设为1,并抛弃所有日志信息.在以下条件时需要使用resetlogs选项: 在不完全恢复(介质恢复): 使用备份 ...

  2. 关于alter database open resetlogs及incarnation的一点理解

    关于alter database open resetlogs及incarnation的一点理解 不完全恢复只能做一次吗? 采用rman的默认设置,对数据库进行了backup database备份,进 ...

  3. 丢失全部控制文件,noresetlogs重建控制文件,alter database open

    測试2: (1)一致性的全备 SQL> shutdown immediate; $ cp -rf $ORACLE_BASE/oradata/boss/*.dbf /oradata/bossbak ...

  4. 非域环境下搭建自动故障转移镜像无法将 ALTER DATABASE 命令发送到远程服务器实例的解决办法

    非域环境下搭建自动故障转移镜像无法将 ALTER DATABASE 命令发送到远程服务器实例的解决办法 环境:非域环境 因为是自动故障转移,需要加入见证,事务安全模式是,强安全FULL模式 做到最后一 ...

  5. backup, file manipulation operations (such as ALTER DATABASE ADD FILE) and encryption changes on a database must be serialized.

    昨天在检查YourSQLDba备份时,发现有台数据库做备份时出现了下面错误信息,如下所示: <Exec>   <ctx>yMaint.ShrinkLog</ctx> ...

  6. 由于无法在数据库 'TestNonContainedDB' 上放置锁 ALTER DATABASE 失败

    Error: 消息5601,级别16,状态1,第1行,由于无法在数据库 'TestNonContainedDB' 上放置锁,ALTER DATABASE 失败.请稍后再试.消息5069,级别16,状态 ...

  7. [Hive - LanguageManual] Create/Drop/Alter Database Create/Drop/Truncate Table

    Hive Data Definition Language Hive Data Definition Language Overview Create/Drop/Alter Database Crea ...

  8. Use ALTER DATABASE to Move Databases

    Use ALTER DATABASE to Move Databases Follow Our Daily Tips •facebook.com/TechNetTips• twitter.com/Te ...

  9. ORA-01093: ALTER DATABASE CLOSE only permitted with no sessions connected解决方法

    在进行物理主备库角色转换的时候遇到ORA-01093错误 SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY; ALTER ...

随机推荐

  1. final使用方法

     final的作用随着所修饰的类型而不同 1.final修饰类中的属性或者变量 不管属性是基本类型还是引用类型.final所起的作用都是变量里面存放的"值"不能变. 这个值,对 ...

  2. Vue自定义指令实现下拉加载:v-loadmore

    和methods平级: directives: { loadmore: {//自定义指令: 下拉加载 bind(el, binding) {    var p = 0;    var t = 0;  ...

  3. 今日SGU 5.9

    SGU 297 题意:就是求余数 收获:无 #include<bits/stdc++.h> #define de(x) cout<<#x<<"=" ...

  4. 【hdu 4289】Control

    [Link]:http://acm.hdu.edu.cn/showproblem.php?pid=4289 [Description] 给出一个又n个点,m条边组成的无向图.给出两个点s,t.对于图中 ...

  5. HDU 4107 Gangster

    Gangster Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 4 ...

  6. 顶级、块级、内联,html元素的三大分类

    学习html后, 你会了解一些基本的html元素(Element), 如p, h1~h6, br, div, li, ul, img等.如果将这些元素细分, 又可以分别归为顶级(top-level)元 ...

  7. springboot整合Beetl、BeetlSql实现ajax分页

    Beetl是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,超过当前流行的模板引擎.而且还易学易用. BeetSql是一个 ...

  8. 项目报错:Cannot find class file for javax/servlet/ServletException

    两种解决方法: 1. 假设是Maven项目,加入servlet-api依赖包: <dependency> <groupId>javax.servlet</groupId& ...

  9. ajax嵌套ajax 可能出现问题 的解决办法

    ajax由于他的异步特性 在第一次请求中的循环中嵌套第二个ajax会数据会读不出来 第一种 描述:如果条件许可,把两次请求都放在服务端处理掉一起发回来,这些就在客户端只有一次ajax了 优点:代码放在 ...

  10. js 限制只能输入数字小数点

    function checkNum(e) { var re = /^\d+(?=\.{0,1}\d+$|$)/ if (e.value != "") { if (!re.test( ...