使用Oracle RMAN 恢复数据库到时间点

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638    QQ号:47079569    邮箱:[email protected]

RMAN 备份和执行不完全恢复

有时你可能需要执行不完全恢复将数据库恢复到具体的时间点,假设你丢失了一个归档重做日志文件,不能继续进行恢复,或者不小心删除了一个重要的表也被从数据库中清除,并且只有用户管理备份,在这种情况下,执行不完全恢复,只应用有限数量的归档重做日志文件,例如重做条目。

这里是三种主要类型的不完全恢复:

  • 基于时间的
  • 基于改变的
  • 基于取消的

执行不完全恢复之后,你需要使用重设日志选项打开数据库。通过使用重设日志选项打开数据库,改变所有的数据文件头部,使用新的重设日志scn timestamp 值更新所有的数据文件头部,这些值被存储在 v$datafile_header视图的 resetlogs_change# resetlogs_time 列中。

接下来生成的归档重做日志文件头部也是使用scn timestamp新的重设日志信息进行更新,这样做,Oracl保证不会应用属于之前数据库的归档重做日志文件。 

在下面的情境中,你会看到, Oracle 不使用带有要求的scn值得归档重做日志文件,因为数据文件头部和归档重做日志文件头部是不连贯的,作为代替,使用之前的归档重做日志文件。

获得归档重做日志文件的列表:

SQL>
select
sequence#, first_change#, resetlogs_change#, resetlogs_time, name from
v$archived_log;

 SEQUENCE# FIRST_CHANGE# RESETLOGS_CHANGE# RESETLOGS_TIME      NAME
———- ————- ——————————–      —–
1   440636    440636   01-MAY-10 ../2010_05_01/o1_mf_1_1_5xqvyxbz_.arc
2   446878    440636   01-MAY-10 ../2010_05_01/o1_mf_1_2_5xqw4g79_.arc

关闭数据库,采用所有数据文件的备份,然后切换一些日志文件:

SQL>
shutdown
immediate
#Take backup of the database
SQL>
startup

#Switch some log files and query the V$ARCHIVED_LOG view
SQL>
select
sequence#, first_change#, resetlogs_change#, resetlogs_time, name from
v$archived_log;

SEQUENCE# FIRST_CHANGE# RESETLOGS_CHANGE# RESETLOGS_TIME      NAME
———- ————- ——————————–     —–
1      440636    440636 01-MAY-10 ../2010_05_01/o1_mf_1_1_5xqvyxbz_.arc
2      446878    440636 01-MAY-10 ../2010_05_01/o1_mf_1_2_5xqw4g79_.arc
3      448433    440636 01-MAY-10 ../2010_05_01/o1_mf_1_3_5xqw83n7_.arc
4      454114    440636 01-MAY-10 ../2010_05_01/o1_mf_1_4_5xqw86ht_.arc
5      459265    440636 01-MAY-10 ../2010_05_01/o1_mf_1_5_5xqwb034_.arc

关闭数据库,删除所有的数据文件, 从而模拟多媒体故障,在安装模式下启动数据库,恢复数据库到第四个归档重做日志,使用重设日志选项打开数据库:

SQL>
shutdown
immediate
# Delete all datafiles and restore the backup to the original location
SQL>
startup
mount
#We have 5 archived redo logs generated. Now we recover until the
fourth archived redo log file and open the database with resetlogs
option (It’s MUST, as we’ve performed incomplete recovery)

SQL>
recover
database until change 454000;
ORA-00279: change 448776 generated at 05/01/2010 05:13:07 needed for
thread 1
ORA-00289: suggestion : ../2010_05_01/o1_mf_1_3_%u_.arc
ORA-00280: change 448776 for thread 1 is in sequence #3

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
AUTO
Log applied.
Media recovery complete.
SQL>
alter
database open resetlogs;
Database altered.
SQL>

发出一些 DML,提交交易,然后切换重做日志文件,你会获得带有一个新的resetlogs_change值的归档重做日志文件,因为你已经使用重设日志选项打开数据库,会在之后生成的数据文件头部和归档重做日志文件头部将会包含新的 scn 值,数据库的 resetlogs_change# 值也是一样。

SQL>
select
sequence#, first_change#, resetlogs_change#, resetlogs_time, name
from
v$archived_log;

SEQUENCE# FIRST_CHANGE# RESETLOGS_CHANGE# RESETLOGS_TIME      NAME
———- ————- ——————————–      —–
1      440636    440636 01-MAY-10 ../2010_05_01/o1_mf_1_1_5xqvyxbz_.arc
2      446878    440636 01-MAY-10 ../2010_05_01/o1_mf_1_2_5xqw4g79_.arc
3      448433    440636 01-MAY-10 ../2010_05_01/o1_mf_1_3_5xqw83n7_.arc
4      454114    440636 01-MAY-10 ../2010_05_01/o1_mf_1_4_5xqw86ht_.arc
5      459265    440636 01-MAY-10
../2010_05_01/o1_mf_1_5_5xqwb034_.arc         6      470689    440636 01-
AY-10 ../2010_05_01/o1_mf_1_6_5xqwhjxx_.arc
1      454001    454001 01-MAY-10 ../2010_05_01/o1_mf_1_1_5xqwj716_.arc
2      454871    454001 01-MAY-10 ../2010_05_01/o1_mf_1_2_5xqwjrwq_.arc

8 rows selected.

假设你的数据库已崩溃,你有一个重设日志之前的数据库备份,复原所有的数据文件,执行不完全恢复直到scn 454700.

Oracle不会应用生成的最后一个归档重做日志文件,即便第二个归档重做日志文件包含scn454700之前的变化 ,因为备份从之前的数据库恢复,在它的数据文件头部包含scn 440636,它会为同样的信息寻找归档重做日志文件,恢复进程会查看归档重做日志文件头部,检查scn值。

SQL>
shutdown
immediate
SQL>
startup
mount
SQL>
recover
database until change 454700;
ORA-00279: change 448776 generated at 05/01/2010 05:13:07 needed for
thread 1
ORA-00289: suggestion : ../2010_05_01/o1_mf_1_3_%u_.arc
ORA-00280: change 448776 for thread 1 is in sequence #3

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
AUTO
Log applied.
Media recovery complete.
SQL>
alter
database open resetlogs;

Database altered.
SQL>

如果你检查归档重做日志文件,你会看到 Oracle从第一个数据库应用了第三个归档重做日志文件:

alter database recover    continue default
Sat May  1 05:21:57 2015
Media Recovery Log ../2010_05_01/o1_mf_1_3_5xqw83n7_.arc
Sat May  1 05:21:58 2015
Recovery of Online Redo Log: Thread 1 Group 2 Seq 1 Reading mem 0
Mem# 0 errs 0: /u01/ORACLE/product/10.2.0/db_1/oradata/new/redo02.log
Sat May  1 05:21:58 2015
Incomplete Recovery applied until change 454837
Sat May  1 05:21:58 2015
Media Recovery Complete (new)
Completed: ALTER DATABASE RECOVER    CONTINUE DEFAULT


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *