前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关系型数据库 Oracle 之 resetlogs 的意义

关系型数据库 Oracle 之 resetlogs 的意义

作者头像
JiekeXu之路
发布2019-06-19 19:13:47
1.3K0
发布2019-06-19 19:13:47
举报
文章被收录于专栏:JiekeXu之路JiekeXu之路JiekeXu之路
incomplete media recoveryrecovery using a backup control filerecovery with a control file created withthe resetlogs option

当对做过不完全恢复时,联机重做文件中最近的 redo 记录没有被应用,resetlogs 选项在打开数据库之前,把这些未应用的 redo 记录从重做文件中清除掉。

(一起看看周末天坛风光在读哦

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

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

使用 resetlogs 选项,会把当前的日志序号(logsequence 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。

下图显示了一次 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。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JiekeXu之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档