新手求助 Oracle 10g rman恢复数据库后有数据未恢复,什么原因,如何解决?

来源:百度知道 编辑:UC知道 时间:2024/05/26 17:17:16
系统环境 solaris 10,Oracle 10g,数据库处于archivelog模式,未开启autobackup,其他参数未更改
使用以下命令备份数据库

$rman target ora10g catalog rman/rman@ora10g
rman> backup database;
rman> list backup;
(发现数据库备份和控制文件备份都已生成,没有单独输入backup current controlfile;控制文件自动

被备份了)
rman> quit

在企业管理器中删除测试表的3行数据
使用以下命令恢复数据库
$sqlplus / as sysdba
sql> shutdown immediate;
sql> startup nomount;
sql> quit
$rman target ora10g (未加catalog rman/rman@ora10g,因为目标数据库和目录数据库为同一个,在

nomount下无法使用catalog)
根据提示输入数据库密码
提示已连接到数据库
rman> restore controlfile from '控制文件的路径+文件名';
rman> alter database mount;
rman> restore database;
rman> recover database;
rman> alter database open resetlogs;

备份和恢复都未提示任何错误和警告,但是新删除的数据未恢复。
自我分析感觉是执行restore database;命令后数据库中的数据已经被恢复,但并未更改redo文件,存储在redo中的删除操作记录依然存在。在执行recover database命令后,该操作又被执行了。使得我被恢复的数据又被删除了。

请问我的分析是否正确,并且请回答如何恢复到数据删

你的分析是正确的。

你要用“Point-In-Time Recovery”来恢复到数据删除前的时间点。

在启动 RMAN 前,set 时间的 format:

alter session set NLS_DATE_FORMAT="MM-DD-YYYY HH24:MI:SS";

然后,用下面的指令:

RUN
{
SET UNTIL TIME ‘04-25-2009 16:30:00’;
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
}

这个时间 ‘04-25-2009 16:30:00’ 必须是你删除数据前的时间。

或者,你也可用 SCN。或者用 log sequence。你可以从 alert.log 里,找到删除数据前相应的 SCN 和 log sequence number。例如:

SET UNTIL SCN 58490;
SET UNTIL SEQUENCE 4823;

上面,我用的是 RMAN script。你也可以一条条的作为指令执行。