咨询微信: dbservice1234 7 x 24 在线支持!

Oracle 使用flashback database闪回数据库从DROP TABLESPACE 中恢复

Oracle 使用flashback database闪回数据库从DROP TABLESPACE 中恢复

 

 

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

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

服务热线 : 13764045638 QQ号:47079569 邮箱:service@parnassusdata.com

 

适用于:

Oracle Database - Enterprise Edition – 版本 10.2.0.4 到 11.1.0.7 [Release 10.2 到 11.1]
本文信息适用于任何平台。

 

目的

本文介绍了如何使用闪回数据库从一个​​DROP TABLESPACE语句中恢复。

范围

要使用闪回数据库从DROP TABLESPACE中恢复,必须满足以下条件:

  • 在发出DROP TABLESPACE之前,表空间的备份必须存在。
  • 从创建备份到发出DROP TABLESPACE语句期间,所有的归档日志文件必须存在。

详细信息

1. 在警报日志中,Oracle记录DROP TABLESPACE语句的发出时间和它的完成时间。找出表明发出DROP TABLESPACE语句的信息。例如:

Tue Feb 17 10:02:02 2009
drop tablespace ts1 including contents and datafiles

2. 确保数据库可以闪回到DR​​OP TABLESPACE命令之前。如果以下查询返回的时间在发出DROP TABLESPACE语句之后,则无法使用闪回数据库恢复表空间。

SQL> select to_char(oldest_flashback_time,'Dy Mon DD HH24:MI:SS YYYY')
from v$flashback_database_log;

TO_CHAR(OLDEST_FLASHBACK
------------------------
Wed Feb 10 19:34:12 2009

3. 闪回数据库到DROP TABLESPACE命令之前。使用从警报日志获取的日期戳。

RMAN> run {

# Flashback database requires a mounted database
shutdown immediate;
startup mount;

# Flashback the database to just before the DROP occurred
flashback database to before time
"to_date('Tue Feb 17 10:02:02 2009','Dy Mon DD HH24:MI:SS YYYY')";
}

注意在闪回数据库操作过程中,作为被drop的表空间一部分的数据文件被添加回控制文件,成为UNNAMED数据文件。正确恢复被drop的表空间需要未命名UNNAMED数据文件名和数据文件最初被创建的名称。

Recovery deleting file #6:'/u01/app/oracle/product/11.1.0/11.1.0.7/db/dbs/UNNAMED00006' from controlfile.
Recovery deleting file #7:'/u01/app/oracle/product/11.1.0/11.1.0.7/db/dbs/UNNAMED00007' from controlfile.
Recovery dropped tablespace 'TS1'
Flashback recovery: Added file #6 to control file as OFFLINE and 'UNNAMED00006'
because it was dropped during the flashback interval
or it was added during flashback media recovery.
File was originally created as:
'+ENG/demo/datafile/ts1.14360.679053609'
File will have to be restored from a backup or
recreated using ALTER DATABASE CREATE DATAFILE command,
and the file has to be onlined and recovered.
Flashback recovery: Added file #7 to control file as OFFLINE and 'UNNAMED00007'
because it was dropped during the flashback interval
or it was added during flashback media recovery.
File was originally created as:
'+ENG/demo/datafile/ts1.17165.679053609'
File will have to be restored from a backup or
recreated using ALTER DATABASE CREATE DATAFILE command,
and the file has to be onlined and recovered.

 

注意:可以在只读模式打开数据库来查询被drop表空间以外存在的数据,以确定闪回操作是否应该继续(被drop表空间中的数据不可用,直到它在后续步骤中被恢复)。如果你想在只读下打开数据库后继续闪回数据库操作,在下一步之前SHUTDOWN 并 STARTUP MOUNT数据库。

4. 确保在表空间被drop之前有其备份。使用从警报日志中获取的日期戳。Crosscheck备份来验证状态。

RMAN> list backup of tablespace ts1 completed before 
"to_date('Tue Feb 17 10:02:02 2009','Dy Mon DD HH24:MI:SS YYYY')";

List of Backup Sets
===================

BS Key  Type LV Size       Device Type Elapsed Time Completion Time   
------- ---- -- ---------- ----------- ------------ ------------------
5       Full    184.00K    DISK        00:00:01     17-FEB-09 10:00:42
        BP Key: 5   Status: AVAILABLE  Compressed: NO  Tag: TAG20090217T100041
        Piece Name: +ENG/demo/backupset/2009_02_17/nnndf0_tag20090217t100041_0.9705.679053641
  List of Datafiles in backup set 5
  File LV Type Ckp SCN    Ckp Time           Name
  ---- -- ---- ---------- ------------------ ----
  6       Full 1039902    17-FEB-09 10:00:41 /u01/app/oracle/product/11.1.0/11.1.0.7/db/dbs/UNNAMED00006
  7       Full 1039902    17-FEB-09 10:00:41 /u01/app/oracle/product/11.1.0/11.1.0.7/db/dbs/UNNAMED00007

Crosscheck 备份来验证状态。

RMAN> crosscheck backup of tablespace ts1 completed before
"to_date('Tue Feb 17 10:02:02 2009','Dy Mon DD HH24:MI:SS YYYY')";

using channel ORA_DISK_1
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=+ENG/demo/backupset/2009_02_17/nnndf0_tag20090217t100041_0.9705.679053641 RECID=5 STAMP=679053641
Crosschecked 1 objects

如果表空间没有有效备份,则无法恢复表空间。Flashback database 命令应通过运行RECOVER DATABASE来abandon。参见 Oracle Database Backup and Recovery User's Guide 获取详情。

5. 如果有被drop表空间的有效备份,则继续恢复被drop表空间并打开数据库。在此步骤中,必须使用SET NEWNAME将所有未命名的数据文件重命名回它们的正确名称。该信息从上面识别的警报日志输出中获取。

RMAN> run {

# Rename the UNNAMED datafiles back to their original names.
# There will be one SET NEWNAME command for each UNNAMED datafile.
set newname for
  datafile '/u01/app/oracle/product/11.1.0/11.1.0.7/db/dbs/UNNAMED00007'
  to '+DATA/demo/datafile/ts1.17165.679053609';

set newname for
  datafile '/u01/app/oracle/product/11.1.0/11.1.0.7/db/dbs/UNNAMED00006'
  to '+DATA/demo/datafile/ts1.14360.679053609';

# Restore the files from the backup
# and switch the controlfile to point to them
restore tablespace ts1;
switch datafile all;

# Open resetlogs - required for flashback database
alter database open resetlogs;

# Recover and online the tablespace that was dropped
recover tablespace ts1;
sql "alter tablespace ts1 online";
}