转自: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. CSUOJ 1525 Algebraic Teamwork

    Problem A Algebraic Teamwork The great pioneers of group theory and linear algebra want to cooperate ...

  2. 使用UltraEdit配置多行注释和取消多行注释

    UltraEdit功能强大,使用方便,成为软件开发者必备的文档和代码编辑工具.有很多人也直接用它来写代码,如C/Java,脚本如:Perl/Tcl/JavaScript 等. 如果用来写代码,有一个不 ...

  3. 我的RTOS 之二 --Threadx在skyeye上仿真測试(基于2410)

    对于RTOS 移植来说,移植平台至少要提供双方面的设备. 1.OS执行时,须要tick,所以须要提供Timer定时器 2.OS执行时,须要调度,就是挂起当前线程,把控制权交给系统,所以须要訪问系统各个 ...

  4. OpenCASCADE 麻花钻头造型实例分析

    OpenCASCADE 麻花钻头造型实例分析 eryar@163.com Abstract. OpenCASCADE provides a simple twist drill bit modelin ...

  5. Vue项目自动转换 px 为 rem,高保真还原设计图

    技术栈 vue-cli:使用脚手架工具创建项目. postcss-pxtorem:转换px为rem的插件. 自动设置根节点html的font-size 因为rem单位是相对于根节点的字体大小的,所以通 ...

  6. php 根据html table生成excel文件

    <?php /* *处理Excel导出 *@param $datas array 设置表格数据 *@param $titlename string 设置head *@param $title s ...

  7. HDU 1495 很可乐(BFS 倒水问题)

    题意  将体积为s的可乐  利用容积分别为n和m的两个杯子平均分为两份  至少须要倒多少次可乐 能够把容器s,n,m中装的可乐量看成一种状态 容器都是没有刻度的  所以每次倒可乐要么把自己倒完 要么把 ...

  8. 50行python代码实现个代理server(你懂的)

    之前遇到一个场景是这种: 我在自己的电脑上须要用mongodb图形client,可是mongodb的server地址没有对外网开放,仅仅能通过先登录主机A,然后再从A连接mongodbserverB. ...

  9. Maven和Ant的差别

    近期做的项目中一直是在使用maven.可是要知道最早出来的构建工具是Ant,如今Ant依旧有好多人再用.于是自己就抽出来时间.学习了一下Ant的主要的使用.这样也能跟好的理解Maven提供的新特性. ...

  10. Javascript 继承和克隆

    个人总结: call 继承的是父类私有 prototype 继承的父类公有 create 可以将公有或私有继承到子类上去(克隆) for in 克隆 不管公有还是私有的都克隆成私有的 1.原型继承:将 ...