`
itspace
  • 浏览: 978639 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Oracle 10g数据库闪回之后怎么样noresetlogs打开数据库(一)

 
阅读更多
很多时候数据库resetlogs打开之后会引起诸多不便,比如在Oracle 10g下,闪回数据库之后必须要resetlogs打开,那怎么样才能避免数据库resetlogs打开呢?
以下步骤仅用于测试,在生产环境下慎用。
(1)将数据库启动在mount状态,打开强制模式的闪回点dd,记录控制文件的checkpoint和checkpoint count
SQL> startup mount
ORACLE instance started.

Total System Global Area 1069547520 bytes
Fixed Size                  2101704 bytes
Variable Size             276827704 bytes
Database Buffers          784334848 bytes
Redo Buffers                6283264 bytes
Database mounted.

SQL>  create restore point dd guarantee flashback database;

Restore point created.

SQL> select to_char(checkpoint_change#) from v$datafile;

TO_CHAR(CHECKPOINT_CHANGE#)
----------------------------------------
10999733115905
10999733115905
10999733115905
10999733115905


SQL> select file#,to_char(checkpoint_change#),CHECKPOINT_COUNT from v$datafile_header;

     FILE# TO_CHAR(CHECKPOINT_CHANGE#)              CHECKPOINT_COUNT
---------- ---------------------------------------- ----------------
         1 10999733115905                                         70
         2 10999733115905                                         70
         3 10999733115905                                         70
         4 10999733115905                                         69

(2)在mount状态下备份控制文件和日志文件
[ora10g@xe2 lank]$ cp redo01.log redo01.log.bak     
[ora10g@xe2 lank]$ cp redo02.log redo02.log.bak     
[ora10g@xe2 lank]$ cp redo03.log redo03.log.bak         
[ora10g@xe2 lank]$ cp control01.ctl control01.ctl.bak

(3)打开数据库之后切换几个归档
SQL> alter database open;

Database altered.

SQL> alter system switch logfile;

System altered.

SQL> /

System altered.

SQL> /

System altered.


(4)将数据库闪回至闪回点dd,可以发现数据文件的checkpoint和控制文件checkpoint均已闪回至闪回点状态,但是checkpoint count没有,这需要用bbed手动修改
SQL> flashback database to restore point dd;

Flashback complete.

SQL> select to_char(checkpoint_change#) from v$datafile_header;

TO_CHAR(CHECKPOINT_CHANGE#)
----------------------------------------
10999733115905
10999733115905
10999733115905
10999733115905

SQL>  select file#,to_char(checkpoint_change#),CHECKPOINT_COUNT from v$datafile_header;

     FILE# TO_CHAR(CHECKPOINT_CHANGE#)              CHECKPOINT_COUNT
---------- ---------------------------------------- ----------------
         1 10999733115905                                         74
         2 10999733115905                                         74
         3 10999733115905                                         74
         4 10999733115905                                         73


SQL> select file# ,fuzzy from v$datafile_header;

     FILE# FUZ
---------- ---
         1 NO
         2 NO
         3 NO
         4 NO
        
SQL> select to_char(checkpoint_change#) from v$datafile;

TO_CHAR(CHECKPOINT_CHANGE#)
----------------------------------------
10999733115905
10999733115905
10999733115905
10999733115905

(5)将之前备份的控制文件和日志文件还原
[ora10g@xe2 lank]$ cp control01.ctl.bak control01.ctl
[ora10g@xe2 lank]$ cp control01.ctl.bak control02.ctl
[ora10g@xe2 lank]$ cp control01.ctl.bak control03.ctl
[ora10g@xe2 lank]$ cp redo01.log.bak redo01.log
[ora10g@xe2 lank]$ cp redo02.log.bak redo02.log
[ora10g@xe2 lank]$ cp redo03.log.bak redo03.log

(6)mount数据库时alert日志会提示闪回日志比控制文件状态新,这主要是因为控制文件来自之前备份的控制文件。
SQL> startup mount
ORACLE instance started.

Total System Global Area 1069547520 bytes
Fixed Size                  2101704 bytes
Variable Size             276827704 bytes
Database Buffers          784334848 bytes
Redo Buffers                6283264 bytes
Database mounted.

Thu Oct 13 10:59:38 CST 2011
Errors in file /app/admin/lank/bdump/lank_rvwr_9155.trc:
ORA-38739: Flashback log file is more recent than control file.
ORA-38701: Flashback database log 1 seq 1 thread 1: "/app/flash_recovery_area/LANK/flashback/o1_mf_79dnqb8m_.flb"

如果直接打开数据库会有如下提示:
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-38760: This database instance failed to turn on flashback database
其解决办法是将闪回点删除
SQL> drop restore point dd;

Restore point dropped.

再次尝试将数据库打开,提示数据文件比控制文件新,但是之前看到控制文件和数据文件的checkpoint已经处于一致状态,且fuzzy为NO
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01122: database file 1 failed verification check
ORA-01110: data file 1: '/lank/db/lank/system01.dbf'
ORA-01207: file is more recent than control file - old control file

(7)进一步比较控制文件和数据文件的区别,这里主要比较checkpoint count和control seq
dump控制文件
SQL>  alter session set events 'immediate trace name controlf level 1';

Session altered.


DUMP OF CONTROL FILES, Seq # 2440 = 0x988
V10 STYLE FILE HEADER:
        Compatibility Vsn = 169870592=0xa200500
        Db ID=1193074783=0x471ce05f, Db Name='LANK'
        Activation ID=0=0x0
        Control Seq=2440=0x988, File size=430=0x1ae
        File Number=0, Blksiz=16384, File Type=1 CONTROL
       
dump 数据文件
SQL> alter session set events 'immediate trace name file_hdrs level 10';
DATA FILE #1:
  (name #4) /lank/db/lank/system01.dbf
creation size=38400 block size=8192 status=0xe head=4 tail=4 dup=1
tablespace 0, index=1 krfil=1 prev_file=0
unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
Checkpoint cnt:70 scn: 0x0a01.132f5c01 10/13/2011 10:53:56
Stop scn: 0x0a01.132f5c01 10/13/2011 10:53:56
Creation Checkpointed at scn:  0x0000.00000007 09/20/2011 15:54:10


V10 STYLE FILE HEADER:
        Compatibility Vsn = 169870592=0xa200500
        Db ID=1193074783=0x471ce05f, Db Name='LANK'
        Activation ID=0=0x0
        Control Seq=2464=0x9a0, File size=51200=0xc800
        File Number=1, Blksiz=8192, File Type=3 DATA
Tablespace #0 - SYSTEM  rel_fn:1
Creation   at   scn: 0x0000.00000007 09/20/2011 15:54:10
Backup taken at scn: 0x0000.00000000 01/01/1988 00:00:00 thread:0
reset logs count:0x2d901f29 scn: 0x0a01.132f57a3 reset logs terminal rcv data:0x0 scn: 0x0000.00000000
prev reset logs count:0x2d70c21f scn: 0x0000.00000001 prev reset logs terminal rcv data:0x0 scn: 0x0000.00000000
recovered at 10/13/2011 10:57:46
status:0x2000 root dba:0x00400179 chkpt cnt: 74 ctl cnt:73
begin-hot-backup file size: 0
Checkpointed at scn:  0x0a01.132f5c01 10/13/2011 10:53:56

发现控制文件和数据文件头的checkpoint count和control seq有区别,也就意味着数据库做闪回时,并没有闪回checkpoint count和control seq。
于是按照以下原则更改数据文件头的值:
a、数据文件头的control seq小于控制文件的control seq
b、数据文件头的chkpt cnt等于控制文件的chkpt cnt
经过查找需要修改的值在数据文件头的位置为:
   ub4 kccfhcsq                             @40 ==>control seq
   ub4 kcvfhcpc                             @140 ==>chkpt cnt                                                                   
   ub4 kcvfhccc                             @148 ==>ctl cnt
找到位置之后将所有文件用bbed修改即可 
   BBED> dump offset 40
   BBED> modify 0x8009
   BBED> dump offset 140
   BBED> modify 0x46
   BBED> dump offset 148
   BBED> modify 0x45
   BBED> sum apply
  
修改完毕之后,数据库就可以正常打开了。鼓掌!!!
  
分享到:
评论

相关推荐

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

    Oracle数据库是当前广泛使用的关系型数据库之一,它在医院数字化等领域有着广泛的应用。在数据库运行过程中,可能会遇到需要执行不完全恢复或使用备份控制文件恢复的情况。在这些情况下,Oracle数据库管理员常使用...

    Oracle数据库系统紧急故障处理方法.txt

    #### 一、Oracle数据库物理结构故障概述 Oracle数据库物理结构故障是指由数据库构成的各个物理文件损坏所导致的一系列数据库故障。这类故障的发生原因通常有两种:一种是由硬件故障引起的;另一种是由于人为误操作...

    oracle数据库故障紧急处理预案.doc

    本文档旨在为 Oracle 数据库管理员提供一份紧急处理预案,以便在数据库故障时能够快速恢复数据库。 Oracle 数据库故障可能是由于硬件故障或人为误操作引起的,因此在处理故障时首先需要判断问题的起因,如果是硬件...

    恢复Oracle数据库控制文件.pdf

    Oracle数据库的控制文件是系统的重要组成部分,记录了数据库的关键配置信息,如数据库名称、字符集、数据文件的位置等。一旦控制文件损坏或丢失,数据库无法正常启动,这是一个严重的问题。以下是如何恢复Oracle...

    (完整word版)Oracle数据库系统紧急故障处理方法.doc

    Oracle数据库系统紧急故障处理方法 Oracle数据库系统紧急故障处理方法是指在Oracle数据库系统出现故障时,如何快速诊断和解决问题的方法。本文将介绍Oracle数据库系统中的常见故障类型及其解决方法。 一、控制文件...

    BE oracle数据库还原注意事项.docx

    Oracle数据库是企业级广泛使用的数据库管理系统,其备份与恢复机制对于数据安全性至关重要。在使用BE (Backup Exec) 2012工具进行Oracle数据库备份和还原时,有一些关键的注意事项需要了解,以确保数据的完整性和...

    Oracle数据库系统紧急故障处理方法

    Oracle数据库系统紧急故障处理方法 Oracle数据库系统紧急故障处理方法是指在数据库系统出现紧急故障时,通过一定的处理步骤和方法来恢复数据库系统的正常运行。这种方法通常用于解决Oracle数据库系统中的物理结构...

    案例解决:一次oracle掉电的处理过程

    在本案例中,我们遇到了一个Oracle数据库在服务器主板故障后无法正常启动的问题。数据库在重启后尝试打开时,出现了ORA-01589错误,提示必须使用RESETLOGS或NORESETLOGS选项进行数据库打开。这通常意味着数据库在...

    Oracle备份与恢复讲义(3)

    这部分可能还会讲解到数据库的闪回功能,如闪回数据库、闪回表空间等,这些技术能够在不依赖备份的情况下进行数据恢复。 在具体的技术细节中,讲义提到了【复制数据库】的操作,这是一种验证备份完整性的方法。复制...

    数据库的物理结构(4).ppt

    控制文件是Oracle数据库的核心元素之一,它记录并维护了数据库的物理结构和状态信息。当数据库启动时,Oracle会根据初始化参数`control_files`定位并打开控制文件。控制文件中包含了如下的关键信息: 1. **数据库...

    非归档模式system表空间损坏数据库恢复.docx

    根据给定的部分内容来看,数据库管理员尝试启动一个处于非归档模式下的Oracle 11g数据库时遇到了以下问题: 1. **数据库状态为MOUNTED**:尝试查询数据库版本时收到ORA-01219错误提示,表明数据库当前处于MOUNTED...

    Oracle案例:损坏控制文件的恢复方法

    Oracle 数据库的控制文件是数据库的核心组件之一,对数据库的正常运行起着至关重要的作用。然而,控制文件的损坏可能会导致数据库无法启动或出错。因此,了解如何恢复损坏的控制文件是非常重要的。本文将介绍两种...

    oracle无备份回复各种场景处理

    在Oracle数据库管理中,无备份恢复(也称为灾难恢复)是一项关键技能,尤其是在面对各种突发情况时。本文将深入探讨在没有备份的情况下,如何处理Oracle数据库的多种常见故障场景,包括恢复密码文件、参数文件、控制...

    oracle六种物理文件.pdf

    控制文件是Oracle数据库中极为重要的组成部分之一,它是一个二进制文件,用于存储关于整个数据库的重要信息,包括数据库的结构信息。控制文件对于数据库的正常运行至关重要,因为它是数据库能够识别其组成元素的关键...

    详细讲解Oracle物理结构故障的处理方法

    Oracle数据库的物理结构是其运行的基础,当这些结构发生故障时,可能会对数据库的正常运行造成严重影响。本文将深入探讨如何处理Oracle物理结构中的常见故障,主要包括控制文件损坏、单个或所有控制文件损坏以及重做...

    oracle总结

    根据给定的Oracle相关命令和描述,我们可以总结出以下关键知识点: ...以上知识点覆盖了Oracle数据库中的多个核心领域,包括内存管理、文件管理、用户管理、日志管理和性能调优,是理解和操作Oracle数据库的重要基础。

    ORACLE备份恢复

    Oracle数据库的备份与恢复是确保数据安全和业务连续性的重要环节。本文主要探讨了Oracle数据库在不同场景下如何进行有效的备份恢复,特别是针对控制文件损坏的情况。 首先,控制文件是Oracle数据库的关键组件,它...

    Oracle 12c 12.1.0.1.0管理控制文件官方文档翻译说明(一抹曦阳)

    控制文件是Oracle数据库中的一个非常重要的组成部分,它包含了数据库的物理结构信息。这些信息包括数据文件的名字与位置、重做日志文件的位置以及其他关键元数据等。控制文件对于数据库来说至关重要,因为它记录了...

Global site tag (gtag.js) - Google Analytics