RMAN 基于时间的不完全恢复

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

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

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

 

RMAN 备份和基于时间的不完全恢复 

使用 until time 命令,以前的ingkuang已经得以解决,看下面的例子。

创建表,填充数据,如下:

SQL>
create
table tbl_indexes
as select * from
all_indexes;
Table created.

SQL>
select
count(1)
from
tbl_indexes;

COUNT(1)
———-
1675

表创建之后,取用RMAN 备份:

RMAN> backup database;

当用户发出 drop table命令时,他知道了大致时间,我们查询当前时间只是为了证实:

SQL>
select
to_char(sysdate,’dd/mm/yyyy hh24:mi:ss’) ddate
from
v$database;

DDATE
—————–
26/10/2009 10:34:16

然后,删除表:

SQL>
drop
table tbl_indexes;
Table dropped.

SQL>
select
count(1)
from
tbl_indexes;
select count(1) from tbl_indexes
*
ERROR at line 1:
ORA-00942: table or view does not exist

现在,到了恢复表的时间。关闭数据库,在安装模式下打开,然后执行恢复,如下:

RMAN> shutdown immediate
RMAN> startup mount
RMAN> run
2> {
3> set until time=”to_date(‘26102009 10:34:16′,’ddmmyyyy hh24:mi:ss’)”;
4> restore database;
5> recover database;
6> }
RMAN> alter database open resetlogs;
database opened
RMAN>

最后连接到 SQL*Plus ,查询删除的表:

SQL>
select
count(1)
from
tbl_indexes;

COUNT(1)
———-
1675
SQL>

这表示表成功恢复。

基于变化的不完全恢复

It is在日志序列号基础上恢复数据库是可能的,每次发生日志切换,Oracle 给重做日志文件制定一个新的日志序列号,如果数据库管理员直到包含损坏SQL命令的归档重做日志文件的确切的序列号,他们可以不执行SQL命令,不完全恢复到序列号,打开数据库, Bob 执行不完全恢复的情况,如下

基于下列all_tables视图,Bob创建了一个表:

SQL>
create
table test as
select * from
all_tables;
Table created.

接着,由于一些数据库操作,数据库中存在两个日志切换,为人为控制这些日志切换,使用下列命令:

SQL>
alter
system switch logfile;
System altered.
SQL>
alter
system switch logfile;
System altered.

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

SEQUENCE#         NAME
———-        ———-
2   C:\ORACLE\product\10.2.0\flash_recovery_area\
db1\archivelog\o1_mf_1_2_5gcdbfoz_.arc
3   C:\ORACLE\product\10.2.0\flash_recovery_area\
db1\archivelog\2009_10_26\o1_mf_1_3_5gcdcr1g_.arc

SQL>
select
sequence#, status
from
v$log;

SEQUENCE# STATUS
———- —————-
2 ACTIVE
3 ACTIVE
4 CURRENT

正如你看到的,存在两个日志切换,生成了两个归档重做日志文件。

为了计算行的数量,用户运行下列查询:

SQL>
select
count(1)
from
test;

COUNT(1)
———-
1521

然后,它们不小心删除了表, 并进行会话:

SQL>
delete from
test;
1521 rows deleted.

SQL>
commit;
Commit complete.

SQL>
select
count(1)
from
test;
COUNT(1)
———-
0

接着,有一个日志切换:

SQL>
alter
system switch logfile;
System altered.

用户很快联系了Bob,告诉他发生的事情,得知情况后,Bob决定恢复数据库到最后一个归档重做日志文件,他获得了归档重做日志文件的列表,有了下列的日志序列号:

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

SEQUENCE#        NAME
———-       ———-
2  C:\ORACLE\product\10.2.0\flash_recovery_area\
db1\archivelog\o1_mf_1_2_5gcdbfoz_.arc
3  C:\ORACLE\product\10.2.0\flash_recovery_area\
db1\archivelog\2009_10_26\o1_mf_1_3_5gcdcr1g_.arc
C:\ORACLE\product\10.2.0\flash_recovery_area\
db1\archivelog\2009_10_26\o1_mf_1_4_5gcdgqhn_.arc

通过获得此查询,Bob明白了删除语句在日志序列 #3后面执行,所以,应该恢复数据库到序列 #4,他关闭数据库,在安装模式下打开,执行回复,如下:

SQL>
shutdown immediate
SQL>
startup
mount

RMAN> run
2> {
3> set until sequence 4;
4> restore database;
5> recover database;
6> }

RMAN> alter database open resetlogs;
database opened
RMAN>

为检查表中数据,Bob 运行下列查询:

SQL>
select
count(1)
from
test;

COUNT(1)
———-
1521
SQL>

这表明通过使用基于变化的不完全恢复,Bob 能够恢复到具体的归档重做日志,重新获得数据。

不完全恢复的另一种类型是基于取消的不完全恢复,不由RMAN进行,在用户管理恢复过程中会用到,在第十二章会讲到。 


Posted

in

by

Tags:

Comments

Leave a Reply

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