ORACLE跨越时间点的恢复

在oracle10g之前使用resetlogs打开数据库之后,之前的的备份就不能用于恢复了。即不能进行跨resetlogs时间点的恢复。所以要求执行完之后马上进行全库备份。

Oracle10g以后允许跨越resetlogs时间点进行完全或者不完全恢复。实验如下:

  1. 执行全库备份。

    RMAN> backup database plus archivelog delete all input;

    insert into test select * from test;

    SQL> alter system switch logfile;

    SQL> commit;

    Commit complete.

    SQL> alter system switch logfile;

    System altered.

    SQL> truncate table test;

    Table truncated.

    SQL> alter system switch logfile;

    System altered.

    SQL> select * from v$log_history;

    SQL> select recid,stamp,sequence#,first_change#,first_time,next_change# from v$log_history

    2 where recid >80;

    RECIDSTAMP FIRST_CHANGE# FIRST_TIME NEXT_CHANGE#

    ---------- ---------- ------------- ------------ ------------

    81 856723148 2130643 27-AUG-14 2130889

    82 856752323 2130889 27-AUG-14 2155374

    83 856753004 2155375 28-AUG-14 2175380

    84 856753636 2175380 28-AUG-14 2176030

    85 856754916 2176030 28-AUG-14 2177334

    86 856754945 2177334 28-AUG-14 2177347

    87 856755046 2177347 28-AUG-14 2178414

    88 856755142 2178414 28-AUG-14 2178471

    89 856755199 2178471 28-AUG-14 2178508

    90 856755243 2178508 28-AUG-14 2178543

    91 856755424 2178543 28-AUG-14 2178823

    RECIDSTAMP FIRST_CHANGE# FIRST_TIME NEXT_CHANGE#

    ---------- ---------- ------------- ------------ ------------

    92 856755456 2178823 28-AUG-14 2178836

    93 856755483 2178836 28-AUG-14 2178940

    13 rows selected.

  2. 关闭数据库、删除数据模拟故障

    删除之后,执行如下

    RMAN> startup mount;

    Oracle instance started

    database mounted

    Total System Global Area 599785472 bytes

    Fixed Size 2022600 bytes

    Variable Size 268436280 bytes

    Database Buffers 322961408 bytes

    Redo Buffers 6365184 bytes

    RMAN> run{

    set until sequence 12 thread 1;

    restore database;

    recover database;

    }

    这里判断具体到那个sequence,当前查询如下,历史查看v$log_history的sequence#:

    Sql>archive log list;

    如果出现这个错误:

    SQL> recover database until cancel;

    ORA-00283: recovery session canceled due to errors

    ORA-01610: recovery using the BACKUP CONTROLFILE option must be done

    SQL> recover database BACKUP CONTROLFILE

    ORA-00905: missing keyword

    解决:

    recover database using backup controlfile until cancel;

    RMAN> alter database open resetlogs;

    查看序号是否复位:

    SQL> archive log list;

    Database log mode Archive Mode

    Automatic archival Enabled

    Archive destination USE_DB_RECOVERY_FILE_DEST

    Oldest online log sequence 0

    Next log sequence to archive 1

    Current log sequence 1

    SQL> create conn xzsp create tt able tt as select * from dba_users;

    Table created.

    SQL> alter system switch logfile;

    System altered.

    SQL> select count(*) from tt;

    COUNT(*)

    ----------

    26

    SQL> inert in sert into tt select * from tt;

    26 rows created.

    SQL> /

    52 rows created.

    SQL> /

    104 rows created.

    SQL> commit

    2 ;

    Commit complete.

    SQL> alter system switch logfile;

    System altered.

    SQL> select recid,stamp,first_change#,first_time,next_change# from v$log_history;

    RECID STAMP SEQUENCE# FIRST_CHANGE# FIRST_TIME NEXT_CHANGE#

    ---------- ---------- ---------- ------------- ------------ ------------

    100 856759449 1 2179277 28-AUG-14 2179707

    101 856759476 2 2179707 28-AUG-14 2179788

    102 856761071 1 2179621 28-AUG-14 2179920

    103 856761108 2 2179920 28-AUG-14 2179945

    103 rows selected.

    Oracle保留了resetlogs之前的日志序列号,并且日志recid继续增长,控制文件也保留了归档日志的序列。所以可以跨RESETLOGS进行恢复。10g以前 是不能够使用当前控制文件恢复之前的备份的。

    RMAN> run {

    2> restore database;

    3> recover database;

    4> }

    SQL> select count(*) from tt;

    COUNT(*)

    ----------

    208

    恢复能够完成,还有log_archive_format有关系。

    Sql>show parameter log_archive_format

    log_archive_format string archive_%t_%s_%r.log

    这里的%R是oracle新增的参数,是resetlogs的标志号.这一归档日志格式可以是不同Incarnation的数据库归档日志避免相互覆盖,从而跨越resetlogs恢复的日志基础得以保证。

    ?

    ?

    思考:这里看到rman备份只有一次,是在resetlogs之前,第二次完全恢复是基于之前的备份。这里看到oracle10确实是越过了resetlog执行了恢复。

时间: 2024-08-28 17:54:09

ORACLE跨越时间点的恢复的相关文章

Veritas Netbackup Oracle数据库本机备份恢复

概述: 本次实验环境采用Veritas Netbackup 7.7.3软件版本,对Redhat Linux Oracle数据库的备份和恢复. 操作系统 主机名 IP地址 Windows Server 2008R2  nbumaster 192.168.60.59 Redhat Linux 6.5 x86_64 rhel6 192.168.60.100 Oracle备份恢复实验拓扑: 备份RedHat Linux环境下的Oracle 11gR2数据库到Master Server端: 通过Maste

[转]Oracle DB 使用RMAN执行恢复

? 在丢失关键或非关键数据文件后执行完全恢复 ? 使用增量更新的备份进行恢复 ? 切换到映像副本进行快速恢复 ? 将数据库还原到新主机上 ? 使用备份控制文件进行恢复 使用RMAN RESTORE和RECOVER命令 ? RESTORE命令:从备份中还原数据库文件 ? RECOVER命令:通过应用增量备份和重做日志文件中记录的更改来恢复已还原文件 RMAN> SQL 'ALTER TABLESPACE inv_tbs OFFLINE IMMEDIATE'; RMAN> RESTORE TABL

Oracle基础 数据库备份和恢复

原文:Oracle基础 数据库备份和恢复 一.为什么需要数据备份 造成数据丢失的主要原因: 1.介质故障. 2.用户的错误操作. 3.服务器的彻底崩溃. 4.计算机病毒. 5.不可预料的因素. Oracle中故障类型分为以下4种. 1.语句故障: 执行SQL语句过程发生的逻辑故障可导致语句故障.如果用户编写的SQL语句无效,就会发生语句故障.Oracle可自我修复语句故障,撤销语句产生的而印象,并将控制权交给应用程序. 2.用户进程故障 当用户程序出错而无法访问Oracle数据库时,就会发生用户

Oracle 12C 新特性之 恢复表

RMAN的表级和表分区级恢复应用场景: 1.You need to recover a very small number of tables to a particular point in time. In this situation, TSPITR is not the most effective solution because it moves all the objects in the tablespace to a specified point in time.2.You

Oracle数据库中闪回恢复的详细分析

Oracle9i开始提供闪回查询,以便能在需要的时候查到过去某个时刻的一致性数据,这是通过Undo实现的.这个功能有很大的限制,就是相关事务的undo不能被覆盖,否则就无力回天了.oracle10g大大的增强了闪回查询的功能,并且提供了将整个数据库回退到过去某个时刻的能力,这是通过引入一种新的flashback log实现的. flashback log有点类似redo log,只不过redo log将数据库往前滚,flashback log则将Oracle数据库往后滚.为了保存管理和备份恢复相

Oracle简单的备份和恢复-导出和导入(2)

ylbtech-Oracle:Oracle简单的备份和恢复-导出和导入(2) 简单的备份和恢复-导出和导入(2) 1. 用户导入导出文件中的一张表(emp)返回顶部 0.1, 我们在sql plus中删除掉一张表emp,把dept表的记录删空. drop table emp; delete from dept; 之后我们先利用刚才导出的mytable.dmp导入emp表.具体导入步骤如下: 1.在命令行下输入imp命令. 2.系统首先提示我们输入用户名和密码,在这里我们可以用scott/tige

ORACLE日期时间函数大全

ORACLE日期时间函数大全    TO_DATE格式(以时间:2007-11-02   13:45:25为例) Year:              yy two digits 两位年                显示值:07        yyy three digits 三位年                显示值:007        yyyy four digits 四位年                显示值:2007 Month:              mm    numbe

案例:Oracle dul数据挖掘 非常规对ORACLE 12C CDB数据库进行恢复

没有数据库备份的情况下,非常规对ORACLE 12C CDB数据库进行恢复 熟悉dul的朋友都知道dul是通过file# 1 block 1的kcvfhrdb找到bootstarp$的segment header(其实kcvfhrdb就是bootstarp$ segment header的rdba地址),然后通过bootstarp$中存储的相关sql找对一些基础的基表对象(obj$,tab$,col$,seg$等),然后通过他们定位到具体的对象的segment记录,从而通过segment找到ex

表空间基于时间点的恢复

步骤:1.检测和解决对要恢复的表空间有依赖关系的对象问题select *  from sys.ts_pitr_check where (ts1_name = 'UERS' and ts2_name != 'USERS')    or (ts1_name != 'USERS' and ts2_name = 'USERS');如果有依赖约束,可以考虑disable掉约束:或者同时还原依赖对象所在的表空间 2.检测哪些对象不会被还原如果有些表,在还原后还需要存在,可以使用数据泵等工具导出,等表空间还原