1.首先我们需要创建一个辅助实例。
2.然后备份目标数据库。
backup as compressed backupset database include
current controlfile plus all archivedlog format=......;
SQL> select * from t;
ID NAME BRITH
---------- -------------------- --------------
1 a 14-12月-06
SQL> set time on
12:29:30 SQL> SELECT TABLE_NAME FROM USER_TABLES;
TABLE_NAME
------------------------------
T
TT
12:41:48 SQL> create table ttt(id int) tablespace test;
表已创建。
12:42:07 SQL> insert into ttt values(1);
已创建 1 行。
12:42:12 SQL> commit;
提交完成。
12:42:14 SQL> drop table t;
表已删除。
C:>RMAN TARGET SYS/SYSTEM@TEST AUXILIARY
SYS/SYSTEM@AUXI CATALOG RMAN/RMAN@ORCL
恢复管理器: Release 10.2.0.1.0 - Production
on 星期五 12月 15 15:02:21 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到目标数据库: TEST (DBID=1906627575)
连接到恢复目录数据库
已连接到辅助数据库: TEST (未装载)
RMAN> RUN{
2> allocate auxiliary channel c1 type disk;
3> recover tablespace 'TEST' until
time "to_date('12/15/2006 12:42:14' , 'mm/dd/
yyyy hh24:mi:ss')" AUXILIARY
DESTINATION 'E:oracleproduct10.2.0oradataauxi'
;
4> release channel c1;
5> }
分配的通道: c1
通道 c1: sid=156 devtype=DISK
启动 recover 于 15-12月-06
内存脚本的内容:
{
# set the until clause
set until time "to_date
('12/15/2006 12:42:14' , 'mm/dd/yyyy hh24:mi:ss')";
# restore the controlfile
restore clone controlfile;
# mount the controlfile
sql clone 'alter database mount clone database';
# archive current online log for tspitr to a resent until time
sql 'alter system archive log current';
# avoid unnecessary autobackups for
structural changes during TSPITR
sql 'begin dbms_backup_restore.AutoBackupFlag(FALSE); end;';
# resync catalog after controlfile restore
resync catalog;
}
正在执行内存脚本
正在执行命令: SET until clause
启动 restore 于 15-12月-06
通道 c1: 正在开始恢复数据文件备份集
通道 c1: 正在复原控制文件
通道 c1: 正在读取备份段 E:RMANATEST_09I50SMU_1_1.BAK
通道 c1: 已恢复备份段 1
段句柄 = E:RMANATEST_09I50SMU_1_1.BAK 标记 = TAG20061215T124006
通道 c1: 恢复完成, 用时: 00:00:03
输出文件名=E:ORACLEPRODUCT10.2.0ORADATAAUXICONTROL01.CTL
输出文件名=E:ORACLEPRODUCT10.2.0ORADATAAUXICONTROL02.CTL
完成 restore 于 15-12月-06
sql 语句: alter database mount clone database
sql 语句: alter system archive log current
sql 语句: begin dbms_backup_restore.AutoBackupFlag(FALSE); end;
正在启动全部恢复目录的 resync
完成全部 resync
内存脚本的内容:
{
# generated tablespace point-in-time recovery script
# set the until clause
set until time "to_date
('12/15/2006 12:42:14' ,'mm/dd/yyyy hh24:mi:ss')";
plsql <<<-- tspitr_2
declare
sqlstatement varchar2(512);
offline_not_needed exception;
pragma exception_init(offline_not_needed, -01539);
begin
sqlstatement := 'alter tablespace '||
'TEST' ||' offline for recover';
krmicd.writeMsg(6162, sqlstatement);
krmicd.execSql(sqlstatement);
exception
when offline_not_needed then
null;
end; >>>;
# set a destination filename for restore
set newname for datafile 1 to
"E:ORACLEPRODUCT10.2.0ORADATAAUXISYSTEM01.DBF";
# set a destination filename for restore
set newname for datafile 2 to
"E:ORACLEPRODUCT10.2.0ORADATAAUXIUNDOTBS01.DBF";
# set a destination tempfile
set newname for tempfile 1 to
"E:ORACLEPRODUCT10.2.0ORADATAAUXITEMP01.DBF";
# set a destination tempfile
set newname for tempfile 2 to
"E:ORACLEPRODUCT10.2.0ORADATAAUXITMP.DBF";
# set a destination filename for restore
set newname for datafile 4 to
"E:ORACLEPRODUCT10.2.0ORADATATESTTEST.DBF";
# rename all tempfiles
switch clone tempfile all;
# restore the tablespaces in the recovery
set plus the auxilliary tablespaces
restore clone datafile 1, 2, 4;
switch clone datafile all;
#online the datafiles restored or flipped
sql clone "alter database datafile 1 online";
#online the datafiles restored or flipped
sql clone "alter database datafile 2 online";
#online the datafiles restored or flipped
sql clone "alter database datafile 4 online";
# make the controlfile point at the restored
datafiles, then recover them
recover clone database tablespace "TEST",
"SYSTEM", "UNDOTBS1" delete archivelo
g;
alter clone database open resetlogs;
# PLUG HERE the creation of a temporary
tablespace if export fails due to lack
# of temporary space.
# For example in Unix these two lines would do that:
#sql clone "create tablespace aux_tspitr_tmp
# datafile ''/tmp/aux_tspitr_tmp.dbf'' size 500K";
}
正在执行内存脚本
正在执行命令: SET until clause
sql 语句: alter tablespace TEST offline for recover
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
启动 restore 于 15-12月-06
通道 c1: 正在开始恢复数据文件备份集
通道 c1: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到E:ORACLEPRODUCT10.2.0ORADATAAUXISYSTEM01.DBF
正将数据文件00002恢复到E:ORACLEPRODUCT10.2.0ORADATAAUXIUNDOTBS01.DBF
正将数据文件00004恢复到E:ORACLEPRODUCT10.2.0ORADATATESTTEST.DBF
通道 c1: 正在读取备份段 E:RMANATEST_08I50SL7_1_1.BAK
通道 c1: 已恢复备份段 1
段句柄 = E:RMANATEST_08I50SL7_1_1.BAK 标记 = TAG20061215T124006
通道 c1: 恢复完成, 用时: 00:01:09
完成 restore 于 15-12月-06
数据文件 4 已转换成数据文件副本
输入数据文件副本 recid=9 stamp=609260651 文件名=E:ORACLEPRODUCT10.2.0ORADATA
TESTTEST.DBF
sql 语句: alter database datafile 1 online
sql 语句: alter database datafile 2 online
sql 语句: alter database datafile 4 online
启动 recover 于 15-12月-06
正在开始介质的恢复
存档日志线程 1 序列 116 已作为文件 E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREA
TESTARCHIVELOG2006_12_15O1_MF_1_116_2R49V29R_.ARC 存在于磁盘上
存档日志线程 1 序列 117 已作为文件 E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREA
TESTARCHIVELOG2006_12_15O1_MF_1_117_2R4L4S2X_.ARC 存在于磁盘上
存档日志文件名 =E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG200
6_12_15O1_MF_1_116_2R49V29R_.ARC 线程 =1 序列 =116
存档日志文件名 =E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG200
6_12_15O1_MF_1_117_2R4L4S2X_.ARC 线程 =1 序列 =117
介质恢复完成, 用时: 00:00:02
完成 recover 于 15-12月-06
数据库已打开
内存脚本的内容:
{
# export the tablespaces in the recovery set
host 'exp userid ="SYS/SYSTEM@AUXI as sysdba"
point_in_time_recover=y tablespa
ces=
TEST file=
tspitr_a.dmp';
# shutdown clone before import
shutdown clone immediate
# import the tablespaces in the recovery set
host 'imp userid ="SYS/SYSTEM@TEST as sysdba" point_in_time_recover=y file=
tspitr_a.dmp';
# online/offline the tablespace imported
sql "alter tablespace TEST online";
sql "alter tablespace TEST offline";
# enable autobackups in case user does
open resetlogs from RMAN after TSPITR
sql 'begin dbms_backup_restore.AutoBackupFlag(TRUE); end;';
# resync catalog after tspitr finished
resync catalog;
}
正在执行内存脚本
Export: Release 10.2.0.1.0 - Production
on 星期五 12月 15 15:04:34 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise
Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
服务器使用 ZHS16CGB231280 字符集 (可能的字符集转换)
注: 将不导出表数据 (行)
即将导出表空间时间点恢复对象...
对于表空间 TEST...
. 正在导出簇定义
. 正在导出表定义
. . 正在导出表 TT
EXP-00091: 正在导出有问题的统计信息。
EXP-00008: 遇到 ORACLE 错误 6552
ORA-06552: PL/SQL: Compilation unit analysis terminated
ORA-06553: PLS-553: 无法识别字符集名称
. . 正在导出表 T
EXP-00091: 正在导出有问题的统计信息。
EXP-00008: 遇到 ORACLE 错误 6552
ORA-06552: PL/SQL: Compilation unit analysis terminated
ORA-06553: PLS-553: 无法识别字符集名称
. . 正在导出表 TTT
. 正在导出引用完整性约束条件
. 正在导出触发器
. 终止时间点恢复
导出成功终止, 但出现警告。
主机命令完成
数据库已关闭
数据库已卸载
Oracle 实例已关闭
Import: Release 10.2.0.1.0 - Production
on 星期五 12月 15 15:05:01 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise
Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
经由常规路径由 EXPORT:V10.02.01 创建的导出文件
即将导入表空间时间点恢复对象...
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
导入服务器使用 ZHS16CGB231280 字符集 (可能的字符集转换)
. 正在将 SYS 的对象导入到 SYS
. 正在将 XYS 的对象导入到 XYS
. . 正在导入表 "TT"
. . 正在导入表 "T"
. . 正在导入表 "TTT"
. 正在将 SYS 的对象导入到 SYS
成功终止导入, 没有出现警告。
主机命令完成
sql 语句: alter tablespace TEST online
sql 语句: alter tablespace TEST offline
sql 语句: begin dbms_backup_restore.AutoBackupFlag(TRUE); end;
正在启动全部恢复目录的 resync
完成全部 resync
已删除辅助实例文件 E:ORACLEPRODUCT10.2.0ORADATAAUXICONTROL01.CTL
已删除辅助实例文件 E:ORACLEPRODUCT10.2.0ORADATAAUXICONTROL02.CTL
已删除辅助实例文件 E:ORACLEPRODUCT10.2.0ORADATAAUXISYSTEM01.DBF
已删除辅助实例文件 E:ORACLEPRODUCT10.2.0ORADATAAUXIUNDOTBS01.DBF
已删除辅助实例文件 E:ORACLEPRODUCT10.2.0ORADATAAUXITEMP01.DBF
已删除辅助实例文件 E:ORACLEPRODUCT10.2.0ORADATAAUXITMP.DBF
完成 recover 于 15-12月-06
--====================================
14:48:22 SQL> select tablespace_name , status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ------------------
SYSTEM ONLINE
UNDOTBS1 ONLINE
SYSAUX ONLINE
TEMP ONLINE
TEST OFFLINE
TMP ONLINE
TEST1 ONLINE
已选择7行。
15:06:14 SQL> alter tablespace test online;
表空间已更改。
15:06:28 SQL> show user
USER 为 "XYS"
15:06:32 SQL> select * from t;
ID NAME BRITH
---------- -------------- --------
1 a 2006/12/14 08:44:24 |
现在,我们就可以发现,被删除的表T被找回来了 |