可以通过备份,做不完全恢复来找回。
做不完全恢复之前,有一个问题要先解决。就是如何让 控制文件 识别出该表空间和它的数据文件。
点击(此处)折叠或打开
-
sys@BJDB>select tablespace_name from dba_tablespaces; -- NEWTS表空间还存在
-
-
TABLESPACE_NAME
-
------------------------------
-
SYSTEM
-
SYSAUX
-
TEMPTS1
-
TS_ASSM
-
SMALL_UNDO
-
NEWTS
-
-
6 rows selected.
-
-
sys@BJDB>select current_scn from v$database; -- NEWTS被删除前的一个SCN。 通常应该做日志挖掘来确定这个点
-
-
CURRENT_SCN
-
-----------
-
8486756
-
-
sys@BJDB>drop tablespace newts including contents and datafiles; -- 删除表空间NEWTS 连同数据文件
-
-
Tablespace dropped.
-
-
sys@BJDB>select tablespace_name from dba_tablespaces; -- NEWTS表空间已经查不到了
-
-
TABLESPACE_NAME
-
------------------------------
-
SYSTEM
-
SYSAUX
-
TEMPTS1
-
TS_ASSM
- SMALL_UNDO
在这个案例里。事先做好了数据库的备份(其中含有 NEWTS表空间的备份 已经 controlfile的备份 (这个备份的controlfile 是能够识别NEWTS表空间的)
1,把系统重新启动到nomount状态。
2,转储备份的controlfile ( 该controlfile能够识别 NEWTS表空间)
点击(此处)折叠或打开
-
[oracle@Redhat55 hot]$ cp /u02/backup/BJDB/hot/control.backup /oradata/BJDB/control01.ctl
- [oracle@Redhat55 hot]$ cp /u02/backup/BJDB/hot/control.backup /oradata/BJDB/control02.ctl
点击(此处)折叠或打开
-
sys@BJDB>alter database mount;
-
-
Database altered.
-
-
sys@BJDB>select name from v$tablespace; -- 这里能够识别出 NEWTS表空间了
-
-
NAME
-
------------------------------
-
SYSTEM
-
SYSAUX
-
NEWTS
-
TS_ASSM
-
SMALL_UNDO
-
TEMPTS1
-
- 6 rows selected.
3, 转储所有的数据文件
点击(此处)折叠或打开
- cp /u02/backup/BJDB/hot/*.dbf /oradata/BJDB/
点击(此处)折叠或打开
-
sys@BJDB>recover database until change 8486756 using backup controlfile; -- 8486756是drop tablespace 前的scn。 恢复时用的备份的控制文件
-
ORA-00279: change 8486573 generated at 07/06/2014 21:36:39 needed for thread 1
-
ORA-00289: suggestion : /u02/backup/BJDB/disk1/1_12_852176132.dbf
-
ORA-00280: change 8486573 for thread 1 is in sequence #12
-
-
-
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
-
auto
-
ORA-00279: change 8486675 generated at 07/06/2014 21:38:09 needed for thread 1
-
ORA-00289: suggestion : /u02/backup/BJDB/disk1/1_13_852176132.dbf
-
ORA-00280: change 8486675 for thread 1 is in sequence #13
-
ORA-00278: log file \'/u02/backup/BJDB/disk1/1_12_852176132.dbf\' no longer needed for this recovery
-
-
-
ORA-00279: change 8486678 generated at 07/06/2014 21:38:11 needed for thread 1
-
ORA-00289: suggestion : /u02/backup/BJDB/disk1/1_14_852176132.dbf
-
ORA-00280: change 8486678 for thread 1 is in sequence #14
-
ORA-00278: log file \'/u02/backup/BJDB/disk1/1_13_852176132.dbf\' no longer needed for this recovery
-
-
-
ORA-00279: change 8486681 generated at 07/06/2014 21:38:12 needed for thread 1
-
ORA-00289: suggestion : /u02/backup/BJDB/disk1/1_15_852176132.dbf
-
ORA-00280: change 8486681 for thread 1 is in sequence #15
-
ORA-00278: log file \'/u02/backup/BJDB/disk1/1_14_852176132.dbf\' no longer needed for this recovery
-
-
-
Log applied.
- Media recovery complete.
点击(此处)折叠或打开
-
sys@BJDB>alter database open resetlogs;
-
-
Database altered.
-
-
sys@BJDB>select tablespace_name from dba_tablespaces; -- 恢复到 删除前。 NEWTS表空间被找回。
-
-
TABLESPACE_NAME
-
------------------------------
-
SYSTEM
-
SYSAUX
-
TEMPTS1
-
TS_ASSM
-
SMALL_UNDO
-
NEWTS
-
- 6 rows selected.
第四步可能会出现下列情况
点击(此处)折叠或打开
-
sys@BJDB>recover database until change 8487247 using backup controlfile;
-
ORA-00279: change 8487168 generated at 07/06/2014 22:13:13 needed for thread 1
-
ORA-00289: suggestion : /u02/backup/BJDB/disk1/1_5_852242502.dbf
-
ORA-00280: change 8487168 for thread 1 is in sequence #5
-
-
-
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
-
auto
-
ORA-00279: change 8487245 generated at 07/06/2014 22:13:27 needed for thread 1
-
ORA-00289: suggestion : /u02/backup/BJDB/disk1/1_6_852242502.dbf
-
ORA-00280: change 8487245 for thread 1 is in sequence #6
-
ORA-00278: log file \'/u02/backup/BJDB/disk1/1_5_852242502.dbf\' no longer needed for this recovery
-
-
-
ORA-00308: cannot open archived log \'/u02/backup/BJDB/disk1/1_6_852242502.dbf\'
-
ORA-27037: unable to obtain file status
-
Linux-x86_64 Error: 2: No such file or directory
- Additional information: 3
由于我们用的是备份的控制文件,该控制文件并不知道该选择哪个联机日志文件来恢复。这里,我们到 数据库目录下,一般情况下,最后更新时间最新的那个日志文件,就是我们要的那个 还未归档的日志文件。
点击(此处)折叠或打开
-
[oracle@Redhat55 hot]$ ll -lt /oradata/BJDB | grep log
-
-rw-r----- 1 oracle oinstall 104858112 Jul 6 22:13 redo02a.log -- 最新的那个就 redo02a.log
-
-rw-r----- 1 oracle oinstall 104858112 Jul 6 22:13 redo01a.log
-
-rw-r----- 1 oracle oinstall 104858112 Jul 6 22:12 redo04.log
-
-rw-r----- 1 oracle oinstall 104858112 Jul 6 22:12 redo03a.log
-
-rw-r----- 1 oracle oinstall 52429312 Jul 4 21:51 redo05a.log
- -rw-r----- 1 oracle oinstall 52429312 Jul 4 21:51 redo04a.log
点击(此处)折叠或打开
-
sys@BJDB>recover database until change 8487247 using backup controlfile;
-
ORA-00279: change 8487245 generated at 07/06/2014 22:13:27 needed for thread 1
-
ORA-00289: suggestion : /u02/backup/BJDB/disk1/1_6_852242502.dbf
-
ORA-00280: change 8487245 for thread 1 is in sequence #6
-
-
-
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
-
/oradata/BJDB/redo02a.log
-
Log applied.
- Media recovery complete.
这案例的前提:
1, NEWTS表空间有备份
2, NEWTS表空间被删除前, 控制文件做了备份
3, 不完全恢复需要的日志不缺