`

RESETLOGS后没有备份情况下的数据恢复

阅读更多
  媒体恢复分完全恢复和不完全恢复。不完全恢复可以恢复到指定的时刻或系统更改号,但不完全恢复之后剩余日志文件就不可用,必须重置日志序列号,用RESETLOGS选项打开数据库,此后数据库变成一个新形体,为了将来的恢复,必须重做一致备份。而且,RESETLOGS之前的备份已不可用。但是,很可能在RESETLOGS后没有做数据库的一致备份,而数据库又不认识RESETLOGS之前的备份,此时该如何恢复RESETLOGS后的数据呢?虽说本文提供的技术能实现用RESETLOGS之前的备份恢复到RESETLOGS之后某一时刻的数据,但这也是挽救措施,笔者强烈建议读者要做RESETLOGS之后的一致数据库备份。

  技术的理论基础

  Oracle仅根据系统更改号(SCN)进行恢复操作,所有数据文件必须恢复到同一时间点,并在该点后未作任何改动,才能打开数据库。数据库的SCN是唯一的,并随着数据库生存期间的操作事务增加而增加(可能不连续)。SCN的值永远不会为0,除非重新创建数据库。SCN的序列的递增性不随数据库的任何操作而改变,即使是RESETLOGS也如此。RESETLOGS清除所有联机日志文件中未应用的重做记录,RESETLOGS只重置日志文件的序列号为1,但对SCN无影响,SCN仍按原序列递增。

  在控制文件中保存resetlogs SCN和计数器,以便唯一地标识用RESETLOGS选项执行的每一次打开数据库的操作。这个值被写进每个数据文件头以及重做日志文件。如果重做日志文件的日志序列号与Oracle的要求值不相符,则在恢复中不能应用重做日志文件。执行不完全恢复后,数据库要求日志序列号为1的日志文件,所以原来的日志序列中剩余的日志文件将不可用。RESETLOGS操作创建数据库的新形体,即一个拥有从1开始的新的日志序列号流的数据库。

  根据以上理论,SCN为顺序数据流,在数据库存在期间始终递增,而日志文件序列流也是递增序列,只不过会因RESETLOGS而重置,但日志文件序列流中的SCN序列流却保持递增不变。因此可以用RESETLOGS之前的归档日志流和RESETLOGS之后的归档日志流来连接和延续SCN序列流,这样就实现了用RESETLOGS之前的备份恢复RESETLOGS之后的数据。前提是保证两股日志流(RESETLOGS之前的归档日志流和RESETLOGS之后的归档日志流)完整,并且有相应两股日志流的控制文件。

关键字: 触发器语法 Oracle物化视图 跟踪sql语句 密码丢失 数据仓储 Oracle 9i个人版
本文详细介绍RESETLOGS后没有备份情况下的数据恢复

  即使能够挽救数据,也要满足下列条件

  (1)Oracle版本等于或高于7.3.3。

  (2)能够成功实现RESETLOGS之前的不完全媒体恢复。

  (3)RESETLOGS后没有提供一致备份。

  (4)RESETLOGS之前提供一致性备份(冷或热)。

  (5)必须备份RESETLOGS之前和之后的控制文件。

  (6)分别保存RESETLOGS之前和之后的归档日志文件到不同位置,提供用于恢复的所有归档日志,并保证日志可用。

  建议

  (一)强烈建议RESETLOGS之后要备份数据库。

  (二)在RESETLOGS前保证数据库以前备份的数据安全,在创建RESETLOGS之后的一个一致性备份之前,一定不可删掉在RESETLOGS前创建的一致数据库备份。如不是为了空间需要,建议永久保留RESETLOGS前创建的一致数据库备份,包括数据文件、控制文件和归档日志。

  (三)在RESETLOGS之后立即创建控制文件备份,并把归档日志单独存放。

  (四)在以RESETLOGS方式打开数据库前,备份在恢复中用过的所有归档日志和联机重做日志。

  (五)进行RESETLOGS后,备份alter.log文件,因为该文件保存着point-in-time恢复后记录的change#(系统更改号SCN)。

  (六)把RESETLOGS之前和之后的归档日志文件保存到不同位置,用于恢复。因为可能存在如下情形:如果RESETLOGS之前和之后的归档日志文件保存到相同位置,而RESETLOGS之后的归档日志文件序列号从1开始,随着日志切换的不断发生,新的日志序列号要增长到与RESETLOGS之前日志序列号相同的时候,那时RESETLOGS之前的归档日志文件将被新日志文件覆盖,从而使RESETLOGS之前的日志序列出现空洞。

  实例演示的详细过程

  系统环境

  ● 软件环境:Windows Server 2000、Oracle Enterprise Edition 9.0.1、数据库SID:TEST

关键字: 触发器语法 Oracle物化视图 跟踪sql语句 密码丢失 数据仓储 Oracle 9i个人版
本文详细介绍RESETLOGS后没有备份情况下的数据恢复

  ● 数据库文件的目录(文件)及意义:

  f:  est 在线数据文件和归档日志文件

  f:  est1、f:  est2、f:  est3 联机重做日志和在线控制文件

  f:coolcoola 时刻A点的一致性冷备份数据文件目录

  f:coolarcha_b 时刻A、B两点间的归档日志备份目录

  f:coolarchb_c 时刻B、C两点间的归档日志备份目录

  f:coolctl_actl.ctl 时刻A点的控制文件备份

  f:coolctl_cctl.ctl 时刻C点的控制文件备份

  操作过程

  本例中首先建立试验用户demo和表空间demo,当前时刻记为A点,用户demo建立表a后,插入数据1、2、3,之后的时刻记为B点,接着插入数据4、5、6后的时刻记为B'点,接着模拟丢失B'点的数据文件,从A点恢复到B点,用RESETLOGS选项打开数据库后,再向表a插入数据7、8、9,之后的时刻记为C点。此时模拟丢失C点的数据文件,用A点的备份和A、B之间及B、C之间的归档日志加上A、C两点的控制文件将数据库恢复到C点。下列步骤中的第17步最为关键,详细步骤如下:

  (1)准备工作:建立表空间demo和临时用户demo。

  create tablespace demo datafile 'f:  estdemo.dbf' size 5M;
create user demo identified by demo
default tablespace demo quota unlimited on demo
temporary tablespace temp;
grant connect,alter system to demo;
alter user demo account unlock;
  (2)以SYSDBA身份查看归档日志并关闭数据库。

  SQL> archive log list
Database log mode Archive Mode
Automatic archival  Enabled
Archive destination  f:  est
Oldest online log sequence   18
Next log sequence to archive 19
Current log sequence 19
SQL> shutdown;
关键字: 触发器语法 Oracle物化视图 跟踪sql语句 密码丢失 数据仓储 Oracle 9i个人版
本文详细介绍RESETLOGS后没有备份情况下的数据恢复

  (3)当前时刻记为A点,做数据库的一致冷备份。

  copy f:  est*.dbf f:coolcoola
copy f:  est1ctl.ctl f:coolctl_a
  (4)以试验用户demo登录,并插入数据到表a中。

  create table a (i number);
commit;
insert into a values(1);
commit;
alter system switch logfile;
insert into a values(2);
commit;
alter system switch logfile;
insert into a values(3);
commit;
alter system switch logfile;
  (5)记录当前时刻为B点。

  SQL> select to_char(sysdate,'DD-MONTH-YYYY HH24:MI:SS') "DATE" from dual;
DATE
--------------------------
04-OCTOBER -2002 09:18:52
  (6)继续由用户demo向表a插入数据。

  insert into a values(4);
commit;
alter system switch logfile;
insert into a values(5);
commit;
alter system switch logfile;
insert into a values(6);
commit;
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
  (7)记录当前时刻为B'点。

  SQL> select to_char(sysdate,'DD-MONTH-YYYY HH24:MI:SS') "DATE" from dual;
DATE
--------------------------
04-OCTOBER -2002 09:21:13
  (8)以SYSDBA身份查看归档日志并关闭数据库。

  SQL> archive log list
Database log mode    Archive Mode
Automatic archival Enabled
Archive destination  f:  est
Oldest online log sequence 27
Next log sequence to archive  28
Current log sequence  28
SQL> shutdown
关键字: 触发器语法 Oracle物化视图 跟踪sql语句 密码丢失 数据仓储 Oracle 9i个人版
本文详细介绍RESETLOGS后没有备份情况下的数据恢复

  (9)模拟丢失所有当前(B'点)数据文件和控制文件。首先保存归档日志文,再把点A的数据文件和控制文件恢复到在线数据文件的目录。

  del  f:  est*.dbf
copy  f:  est*.arc f:coolarcha_b
copy  f:coolcoola*.dbf f:  est
copy  f:coolctl_actl.ctl f:  est1
copy  f:coolctl_actl.ctl f:  est2
copy  f:coolctl_actl.ctl f:  est3
  (10)以SYSDBA身份登录,执行从时刻A到时刻B的基于时间点的不完全媒体恢复,因为媒体恢复过程使用时刻A的控制文件,所以要加上using backup controlfile子句。

  conn /@test as sysdba
startup mount
SQL> recover database until time '2002-10-04:09:18:52' using backup controlfile;
ORA-00279: change 690619 generated at 10/04/2002 08:56:01 needed for thread 1
ORA-00289: suggestion : F:TESTARCH19.ARC
ORA-00280: change 690619 for thread 1 is in sequence #19
  Specify log: {<RET&gt;=suggested | filename | AUTO | CANCEL}
f:coolarcha_barch19.arc
ORA-00279: change 690763 generated at 10/04/2002 09:18:21 needed for thread 1
ORA-00289: suggestion : F:TESTARCH20.ARC
ORA-00280: change 690763 for thread 1 is in sequence #20
ORA-00278: log file 'f:coolarcha_barch19.arc' no longer needed for this
recovery
  …… ……
  接下来顺序应用归档日志文件直到日志序列号为22的日志文件f:coolarcha_barch22.arc,注意归档日志文件的目录为f:coolarcha_b。

关键字: 触发器语法 Oracle物化视图 跟踪sql语句 密码丢失 数据仓储 Oracle 9i个人版
本文详细介绍RESETLOGS后没有备份情况下的数据恢复

  (11)以SYSDBA身份打开数据库,因为是不完全媒体恢复,所以要使用RESETLOGS选项。查看表demo.a,证实时刻B之前插入的数据已被恢复。

  SQL> alter database open resetlogs;
SQL> select * from demo.a;
 I
----------
 1
 2
 3
  (12)以demo用户登录数据库,接着向表a插入数据。

  insert into a values(7);
commit;
alter system switch logfile;
insert into a values(8);
commit; alter system switch logfile;
insert into a values(9);
commit;
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
  (13)记录当前时刻为C点。

  SQL> select to_char(sysdate,'DD-MONTH-YYYY HH24:MI:SS') "DATE" from dual;
DATE
--------------------------
04-OCTOBER -2002 10:04:46
  (14)以SYSDBA身份查看归档日志并关闭数据库。

  SQL> conn /@test as sysdba
Connected.
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination  f:  est
Oldest online log sequence 6
Next log sequence to archive  7
Current log sequence  7
SQL> shutdown
  由此可见,RESETLOGS后日志序列号从1重新开始。

  (15)不备份C点的数据文件,但要备份C点的控制文件和时刻B和时刻C之间的归档日志。删除当前(时刻C)数据文件,从A点复制数据文件和控制文件到当前位置。

关键字: 触发器语法 Oracle物化视图 跟踪sql语句 密码丢失 数据仓储 Oracle 9i个人版
本文详细介绍RESETLOGS后没有备份情况下的数据恢复

  del f:  est*.dbf
copy f:  est*.arc f:coolarchb_c
copy f:  est1ctl.ctl f:coolctl_c
copy f:coolcoola*.dbf f:  est
copy f:coolctl_actl.ctl f:  est1
copy f:coolctl_actl.ctl f:  est2
copy f:coolctl_actl.ctl f:  est3
  (16)以SYSDBA身份登录,执行从时刻A到时刻B的基于时间点的不完全媒体恢复,因为媒体恢复过程使用时刻A的控制文件,所以要加上using backup controlfile子句。该步骤类似于步骤(10)。

  conn /@test as sysdba
startup mount
recover database until time '2002-10-04:09:18:52' using backup controlfile;
  (17)该步骤最为关键!!不要打开数据库。首先关闭数据库,然后把C点的控制文件恢复到在线控制文件的位置,然后用C点的控制文件恢复步骤(16)结束之后的数据文件,恢复进程会自动应用时刻B和时刻C之间的归档日志文件,从序列号为1的归档日志arch1.arc开始。注意:本例执行的是完全媒体恢复,必须在不丢失联机重做日志文件的情况下。否则,要恢复联机重做日志文件。当然,也可执行不完全媒体恢复,恢复到时刻B和时刻C之间的任一时刻。本步骤的关键技术在于要备份时刻C的控制文件,并用它实现跨越时刻B的媒体恢复。

  SQL> shutdown
copy f:coolctl_cctl.ctl f:  est1
copy f:coolctl_cctl.ctl f:  est2
copy f:coolctl_cctl.ctl f:  est3 SQL&gt;
conn /@test as sysdba Connected to an idle instance.
SQL&gt; startup mount
SQL&gt; recover database;
ORA-00279: change 690773 generated at 10/04/2002 09:59:31 needed for thread 1
ORA-00289: suggestion : F:TESTARCH1.ARC
ORA-00280: change 690773 for thread 1 is in sequence #1
  Specify log: {&lt;RET&gt;=suggested | filename | AUTO | CANCEL}
f:coolarchb_carch1.arc
ORA-00279: change 690989 generated at 10/04/2002 10:04:11 needed for thread 1
ORA-00289: suggestion : F:TESTARCH2.ARC
ORA-00280: change 690989 for thread 1 is in sequence #2
ORA-00278: log file 'f:coolarchb_carch1.arc' no longer needed for this
recovery
…… ……
Log applied.
Media recovery complete.
关键字: 触发器语法 Oracle物化视图 跟踪sql语句 密码丢失 数据仓储 Oracle 9i个人版
本文详细介绍RESETLOGS后没有备份情况下的数据恢复

  (18)打开数据库,查看表demo.a,结果显示没有丢失时刻B和时刻C之间插入的数据7、8、9。

  SQL> alter database open;
Database altered. SQL> select * from demo.a;
 I
----------
 1
 2
 3 
 7
 8
 9
 
6rows selected.
  (19)马上做数据库的一致备份(冷备份或热备份)。

  附加说明

  另外要指出,如果忘记或不能提供时刻B的准确时间,可以查看报警日志文件,搜索"change",找到系统更改号(SCN),也可在步骤(10)和步骤(16)中指定基于改变的恢复。命令格式如下:

  recover database until change integer_scn [using backup controlfile]
  注:integer_scn要用整数SCN替换。

  本例中,数据库TEST的报警日志文件为f:  estdump  estALRT.log,在其中找到以下片段:

  Fri Oct 04 09:57:15 2002
ALTER DATABASE RECOVER LOGFILE ' f:coolarcha_barch22.arc'
Media Recovery Log f:coolarcha_barch22.arc
Incomplete recovery done UNTIL CHANGE 690772
Media Recovery Complete
Completed: ALTER DATABASE RECOVER LOGFILE 'f:coolarcha_b
Fri Oct 04 09:59:31 2002
alter database open resetlogs
  Fri Oct 04 09:59:31 2002
RESETLOGS after incomplete recovery UNTIL CHANGE 690772
Resetting resetlogs activation ID 1770840999 (0x698ce3a7)
  由此可发现恢复到时刻B(2002-10-04:09:18:52)的SCN为690772,可以在不完全恢复中指定恢复到更改号690772,如下语句所示:

  recover database until change 690773 using backup controlfile;
  数据库执行过不完全恢复后,并在以RESETLOGS选项打开之前,SCN已经记录在报警日志文件中,也可以通过查询

  select RESETLOGS_CHANGE#-1 from v$database;
  找到SCN,这个结果与报警日志中的SCN相同,这样就可以恢复到该SCN。
分享到:
评论

相关推荐

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

    通常情况下,在使用resetlogs选项打开数据库后,就无法使用resetlogs点之前的备份进行数据库恢复。因此,强烈建议在执行resetlogs操作打开数据库后,进行一次一致性的全库备份。 在进行数据库备份时,需要注意的是...

    oracle备份恢复五个案例

    本文将深入解析Oracle数据库的五个关键恢复案例,帮助读者理解和掌握如何在不同情况下进行有效的数据恢复。 **恢复案例一:恢复个别表空间或者数据文件** 在某些情况下,可能只需要恢复数据库中的某个特定表空间或...

    三思Oracle_RMAN数据备份恢复

    1. 恢复数据库:在数据库崩溃或数据丢失的情况下,可以使用RMAN进行恢复。首先,确保所有需要的备份和归档日志都可用。然后,启动数据库到恢复模式: ``` $ sqlplus / as sysdba SQL&gt; ALTER DATABASE MOUNT; SQL...

    备份与恢复测试

    - 执行数据恢复等操作。 **3. Redo Log文件管理** - **3.1 Redo Log文件大小调整** - 可以通过调整Redo Log文件的大小来优化性能。 - **3.2 Redo Log文件清理** - 在某些情况下,可能需要清理Redo Log文件。这...

    31.Oracle数据备份和恢复1

    恢复是当故障发生时,利用备份数据重建数据库的过程。分为实例恢复(Oracle 自动进行)和介质恢复(针对硬件故障)。介质恢复包括完全恢复和不完全恢复,前者恢复至失败状态,后者可恢复至特定时间点,但需使用 ...

    10g冷备份与恢复

    对于Oracle 10g数据库而言,冷备份主要用于备份数据文件、控制文件、重做日志文件等关键组件。 #### 二、冷备份的关键概念 **1. 数据文件(Data Files)** - 数据文件包含了数据库中的所有数据。 - 在`V$DATA...

    oracle 9i 数据库备份与恢复过程说明

    - 在丢失所有数据文件或控制文件的情况下,需要使用全备和归档日志进行恢复。 ``` rman target / run { restore database; recover database using backup controlfile; alter database open resetlogs; } `...

    rman备份与恢复实例

    - 如果在执行 resetlogs 操作之前发生了数据文件丢失的情况,而这些文件又没有被备份过,那么恢复将变得非常困难。在这种情况下,可能需要尝试使用其他方法来恢复丢失的数据,比如使用 RMAN 的其他特性或者第三方...

    ORACLE数据库备份与恢复测试

    此外,Oracle的闪回技术(Flashback Technology)也是恢复策略的一部分,包括闪回查询、闪回事务、闪回数据库等,它们允许用户在不依赖备份的情况下,恢复到过去的某个时间点。 在实践中,我们还需要关注备份的策略...

    oracle备份恢复

    当面临数据丢失、系统崩溃或其他紧急情况时,Oracle备份与恢复机制成为保护数据的关键环节。本篇将详细介绍Oracle备份恢复的基本概念、流程以及常用方法。 1. Oracle备份概述 Oracle备份是为了防止数据丢失而对...

    Oracle误删的重要数据恢复指导

    首先,理解Oracle的数据恢复机制至关重要。Oracle数据库提供了一套完整的恢复策略,包括归档日志模式、闪回功能、RMAN(恢复管理器)等工具。当数据被误删除后,我们可以借助这些工具来尝试恢复。 1. **闪回查询...

    ORACLE 备份与恢复

    - 在执行不完全恢复后,通常需要使用`resetlogs`选项来重新打开数据库。 - `resetlogs`选项的使用标志着数据库一个逻辑生存周期的结束和下一个逻辑生存周期的开始。 - 每次使用`resetlogs`打开数据库后都会创建一...

    某大厂hrecp系统TSM备份恢复oracle手册

    2. **数据库全备份**:全备份是指备份整个数据库,包括数据文件、控制文件、redo logs等,确保在灾难情况下能完全恢复数据库。 3. **删除过期备份**:定期清理不再需要的旧备份,可以节省存储空间并优化备份管理。...

    数据库的备份和断点恢复

    - **业务连续性**:及时的数据恢复机制有助于迅速恢复正常运营,减少停机时间。 - **法规遵从性**:许多行业都有关于数据保留的规定,备份是遵守这些规定的必要手段之一。 #### 备份策略实施 ##### 1. 利用任务...

    《Oracle数据恢复流程图》

    《Oracle数据恢复流程详解》 在企业级数据库管理中,Oracle数据库因其卓越的性能和可靠性而备受青睐。然而,即使是如此稳定的技术,在面对硬件故障、软件错误或人为操作失误时,也难免会出现数据丢失或损坏的情况。...

    ORACLE备份&恢复案例

    本章将探讨一些特殊情况下的恢复策略,如损坏的联机日志、控制文件以及回滚数据文件等。 **5.1 损坏联机日志的恢复方法** - **5.1.1 损坏非当前联机日志** - 关闭数据库。 - 重新创建或替换损坏的日志文件。 - ...

    Oracle备份与恢复讲义(3)

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

    备份数据库

    在本场景中,我们讨论的是如何使用RMAN进行数据库的备份以及在不同机器和路径下的恢复过程。 1. **RMAN备份**: - **全库备份**:RMAN的`backup full database`命令用于创建整个数据库的备份,包括数据文件、控制...

Global site tag (gtag.js) - Google Analytics