`

oracle的resetlogs机制浅析

阅读更多

oracle的resetlogs机制浅析

原文出处:http://blog.csdn.net/wyzxg/archive/2010/09/07/5869543.aspx


oracle的resetlogs机制浅析

alter database open resetlogs 这个命令我想大家都很熟悉了,那有没有想过这个resetlogs选项为什么要用?什么时候用?
它的原理机制是什么?他都起哪些作用?

我们都知道数据在启动时候是要做一致性检查的,oracle在open阶段要做两次检查

1. 检查数据文件头的检查点计数(checkpoint cnt)是否和控制文件的检查点计数(checkpoint cnt)一致。目的是确认数据文件
   是否来自同一版本,而不是从备份中恢复的。如果这一步检查通过,就进行第二步检查

2. 检查数据文件头的开始scn和控制文件中记录该文件的结束scn是否一致。如果数据文件头的开始scn和控制文件中该文件的结束scn
   相等,那说明这个数据文件就不需要恢复,否则就要恢复文件

如果以上两步检查都通过,那就可以正常打开数据库,锁定数据文件,同时将控制文件中每个数据文件的结束scn设置无穷大。
我们在某些条件下打开数据,会提示让用resetlogs选项open数据库,为什么要用resetlogs呢?它是干嘛用的呢?问号一大堆了吧,
下面来具体分析下。

resetlogs的作用

防止陈旧的数据进入数据库(保证数据库的一致性),这也就是为什么在用resetlogs打开数据库,一定要立即对数据库做个全备。
在控制文件,data file header,redo log header里存储”resetlogs data“,当open resetlogs被执行时,可以通过这些内容检查一致性。

什么时候用resetlogs

1. 不完全恢复
2. 用备份的控制文件恢复
3. 新创建的控制文件来恢复

resetlogs的原理机制

resetlogs是如何来保证打开数据库是一致的呢?

1)在open resetlogs时,oracle要对比检查控制文件和数据字典file$,如果一个数据文件在file$中存在,但在控制文件中不存在,
   那在控制文件中将创建一个这个文件条目(MISSINGnnn ‘nnn’是十进制的file_id),同时这个文件被标记为离线并需要恢复。如果
   实际中这个文件存在的话,可以通过如下sql更改到正确的文件名。

   sql> alter database rename file 'MISSINGnnn' to '<filename>';

   然后数据文件被恢复,online。

2)如果一个数据文件存在控制文件中,而不在数据字典file$中,那么直接把控制文件中这个文件的记录条目删除(oracle认为file$文
   件是正确的,要以它为准)

3)当用旧的备份控制文件恢复的时候,如果有数据文件不在控制文件中注册(会提示控制文件比较旧的错误),那就不得不重建数据文件
   ,以使数据文件注册到控制文件中,然后系统会自动利用redo/archivelog恢复这个数据文件。

在保证控制文件和file$文件内容一致之后,oracle还有做如下检查才能open resetlogs

4)数据文件的版本要小于当前数据库的版本(counter)

5)offline的数据文件必须被online或者直接drop

6)所有的数据文件不能设置fuzzy bit,所有的数据文件要有相同的检查点(checkpoint SCN)

到目前为止,open resetlogs的前提条件都已经满足,resetlogs究竟做了哪些工作呢?(重新使用redo log)

1)所有的online logfile 的信息重新被放置在控制文件中。并且还要为有效的thread挑选一个logfile文件作为current logfile

2)log header被更新为log seq#

3)所有的online的数据文件头被新的checkpoint和新的‘resetlogs data’更新,offline的数据文件被标记为需要媒体恢复。

resetlogs data:当前的scn和counter被称作”resetlogs data“


如果oracle数据库一致性检查失败的,那数据库是不允许被open的,即 open resetlogs不成功。但也不是绝对不能open,可以通过隐含参数“_allow_resetlogs_curruption”,绕过oracle的一致性检查,但这样会引起数据库的不一致(文件可能有不同的scn或有fuzzy bit设置),如果open后,数据库一定要rebuild (建议ANALYZE TABLE ...VALIDATE  STRUCTURE  CASCADE;或者imp/exp )

分享到:
评论

相关推荐

    Open resetlogs操作对Oracle数据库恢复的影响.pdf

    1. Oracle数据库备份与恢复原理:了解在Oracle数据库中进行备份和恢复的基本原理,包括控制文件和数据文件的作用,以及重做日志(redo log)的机制。 2. 数据库形态(Oracle Incarnation)的概念:理解数据库形态的...

    Oracle Recovery Tools-最新版(202407)

    Oracle Recovery Tools是惜分飞(www.xifenfei.com)开发的使用于Oracle...5. 修改文件头resetlogs scn 6. 修改文件头fuzzy标记 7. 不同文件之间数据块拷贝 8. 修改oracle进程内存中内容,常见使用于修改oracle scn等

    直接拷贝数据文件实现Oracle数据迁移

    为了确保数据一致性,可能需要执行数据库的完整恢复,包括ALTER DATABASE OPEN RESETLOGS操作。在确认数据完整无误后,你可以在新环境中开始正常使用Oracle数据库。 总的来说,直接拷贝数据文件的迁移方式适用于...

    ORACLE DG日常运维手册

    ### Oracle DataGuard 主库丢失归档日志后备用库的 RMAN 增量恢复案例详解 #### 一、问题背景及场景描述 在Oracle DataGuard的架构中,当主库(Primary Database)与备用库(Standby Database)之间进行数据同步时...

    睿备份-oracle备份工具.zip

    可以支持oracle mysql sqlserver自动备份,mysql sqlserver恢复; oracle恢复: cmd rman target \ shutdown immediate; startup mount; restore database until time "to_date('...alter database open resetlogs;

    Oracle11g通过DBF恢复数据

    总之,Oracle11g的DBF恢复数据是一个涉及多个层面的过程,需要对Oracle数据库的内部机制有深入理解。通过有效的备份策略、详细的恢复计划和熟练的操作技巧,可以确保在面临数据灾难时能够迅速恢复,最小化业务中断。

    oracle 字符集的用法

    总的来说,处理Oracle字符集问题和数据库异常状态时,了解数据库的状态、进程管理和恢复机制至关重要。在进行任何更改之前,确保备份数据,遵循正确的操作流程,以防止数据丢失或系统不稳定。对于复杂的字符集更改,...

    NETBACKUP oracle 恢复脚步

    根据提供的文件信息,本文将详细解析NETBACKUP在Oracle数据库中的恢复步骤与脚本内容,重点探讨如何通过NETBACKUP实现Oracle数据库恢复到指定时间点的功能。 ### 一、NETBACKUP简介 NETBACKUP是Veritas公司开发的...

    (可参考)ORACLE 12C DATAGUARD环境搭建和主从切换.docx

    ### Oracle 12c DataGuard 环境搭建与主从切换详解 #### 环境概述 本文档旨在提供一份详细的Oracle 12c DataGuard环境搭建与主从切换的指南,适用于Linux操作系统下的Oracle 12c单实例部署场景。通过本文档的学习...

    ORACLE数据库跨平台迁移

    在目标数据库open resetlogs的过程中,将会自动创建控制文件和联机日志文件。 4. BFILE、外部表和directory将不会被传输。RMAN检查的时候将会把这些对象列出,用户可以手工创建这些对象。 5. 密码文件将不会被传输,...

    oracle日志文件大全

    ### Oracle日志文件大全知识点详解 #### 一、Oracle中的几类日志文件 Oracle数据库管理系统使用多种类型的日志文件来记录系统运行期间的各种活动,这些日志文件不仅有助于数据库的管理和维护,还为故障诊断提供了...

    ORACLE数据库备份与恢复测试

    总之,Oracle数据库的备份与恢复是一个复杂且细致的过程,需要对Oracle的内部机制有深入理解。通过实践和测试,我们可以更好地掌握这些技能,确保在面对数据危机时能够迅速恢复,保护企业的数据资产。

    Oracle11g 崩溃后-dbf数据库文件恢复

    6. **打开数据库**:最后,使用`ALTER DATABASE OPEN RESETLOGS`命令打开数据库,这将创建新的重做日志组并更新控制文件。 7. **验证数据**:打开数据库后,进行全面的数据验证,确保所有表和索引都处于一致状态。 ...

    Oracle 11g rman 异机还原再升级到 12c PDB

    alter database open resetlogs; ``` 3. **检查数据库状态:** ```sql select * from v$database; select * from v$instance; ``` #### 升级至12c PDB 1. **使用DBMS_PDB包进行转换:** ```sql -- 首先...

    Oracle恢复流程图

    Oracle数据库恢复是数据库管理系统中的一项重要操作,用于修复由于硬件故障、软件错误或人为失误导致的数据丢失或不一致。...同时,了解并熟悉Oracle的恢复机制和工具,如RMAN,能够大大提高恢复效率和成功率。

    oracle问题解决文档

    Oracle数据库是世界上最流行的数据库管理系统之一,它用于存储和管理大量结构化数据。当遇到“ORACLE not available”这样的错误时,通常意味着数据库服务没有正确运行。以下是对这个问题的详细解析和解决方案: ...

    oracle备份恢复五个案例

    总的来说,Oracle数据库的恢复是一个复杂的过程,需要对数据库结构和恢复机制有深入理解。每个案例都要求谨慎处理,确保在恢复过程中尽可能减少数据丢失和业务中断。定期备份、测试恢复计划以及了解这些恢复案例是...

    Oracle Recovery Tools-202207版

    Oracle Recovery Tools是惜分飞(www.xifenfei.com)开发的使用于Oracle...5. 修改文件头resetlogs scn 6. 修改文件头fuzzy标记 7. 不同文件之间数据块拷贝 8. 修改oracle进程内存中内容,常见使用于修改oracle scn等

Global site tag (gtag.js) - Google Analytics