如果自己搞不定可以找诗檀软件专业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
4 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进行,在用户管理恢复过程中会用到,在第十二章会讲到。
Leave a Reply