之前我有张表t,它所在的表空间是存放在qinghan01.dbf这个数据文件的,t表有条记录是panda,然后我模拟破坏故意把它删掉,在做不完全恢复的时候
虽然数据库提示media recovery成功但是这张表却没有回来
[oracle@CentOSForOracle9i lwlmj]$ strings qinghan01.dbf | grep panda
panda,
[oracle@CentOSForOracle9i lwlmj]$ strings redo01.log | grep panda
[oracle@CentOSForOracle9i lwlmj]$ strings redo02.log | grep panda
[oracle@CentOSForOracle9i lwlmj]$ strings redo03.log | grep panda
================================================================
因为是学习环境,所以都是默认的设置,redo日志文件就3个
我做的是基于时间点的不完全恢复,而且是resetlogs打开数据库
打开之后查询t表,数据库说此表不存在,但为什么
[oracle@CentOSForOracle9i lwlmj]$ strings qinghan01.dbf | grep panda
这个操作又会有结果
[oracle@CentOSForOracle9i lwlmj]$ strings redo0*.log | grep panda这些操作全都没有结果
我想把t表恢复,那应该怎么做呢
------解决方案--------------------
问题应该出现在你的备份
你restore 的数据文件不一致,仔细查看你restore的第13号文件scn
SQL> SELECT file#,checkpoint_change# from v$datafile;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 420568
2 420568
3 420568
4 420568
5 420568
6 420568
7 420568
8 420568
9 420568
10 420568
11 420568
FILE# CHECKPOINT_CHANGE#
---------- ------------------
12 420568
13 420568
13 rows selected.
SQL> SELECT file#,checkpoint_change# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 420567
2 420567
3 420567
4 420567
5 420567
6 420567
7 420567
8 420567
9 420567
10 420567
11 420567
FILE# CHECKPOINT_CHANGE#
---------- ------------------
12 420567
13 420568
这也导致你使用RECOVER database UNTIL TIME '2011-11-01 20:09:37'执行提示错误
SQL> RECOVER database UNTIL TIME '2011-11-01 20:09:37';
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 13 needs more recovery to be consistent
ORA-01110: data file 13: '/db_9i01/oradata/rman_new_location/app3_01.dbf'
正常操作后应该是提示
Media recovery complete.
问题就是这了,你要得到你的T表,你应该确定你操作之前的数据文件全备是否有问题
由于你的数据库已经resetlogs了,所以你这实验重新在做一遍吧,记得先对数据库做全备,建议使用RMAN来做数据库的全备,既方便又快捷