表空间时间点恢复(TSPITR)可以将oracle数据库中的特定表空间恢复到制定的时间
主要的作用有:
1。找回误删除的表
2。回滚批量导入或删除的数据。

当使用表空间时间点恢复,oracle的处理步骤

1. Take the tablespaces requiring TSPITR offline.
2. Plan the setup of the auxiliary database.
3. Create the auxiliary database and recover it to the desired point in time.
4. Drop the tablespaces requiring TSPITR from the primary database.
5. Use the transportable tablespace feature to transport the set of tablespaces from the auxiliary database to the primary database.

 

在做表空间时间点恢复之前的准备:
1.确定表空间是否存在与其他表空间的关系。
SELECT *
FROM SYS.TS_PITR_CHECK
WHERE (TS1_NAME IN ('USERS','TOOLS')       AND TS2_NAME NOT IN ('USERS','TOOLS'))
      OR (TS1_NAME NOT IN ('USERS','TOOLS')AND TS2_NAME IN ('USERS','TOOLS') );
如果要做表空间时间点恢复需要先处理这些约束,可以删除或者禁止。
2.查询表空间时间点恢复后会被删除的表
SELECT OWNER, NAME, TABLESPACE_NAME,TO_CHAR(CREATION_TIME, 'YYYY-MM-DD:HH24:MI:SS')FROM SYS.TS_PITR_OBJECTS_TO_BE_DROPPED
如果需要保留这些表可以在做TSPITR之前先EXP出来,完成后再IMP进去。

执行表空间时间点恢复

RMAN> RECOVER TABLESPACE  TEST_DATA  UNTIL TIME "to_date('2013/03/27 16:28:01','YYYY/MM/DD HH24:MI:SS')" AUXILIARY DESTINATION  'D:\oracle\product\oradata\orclaux';

启动 recover 于 27-3月 -13
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=144 devtype=DISK
RMAN-05026: 警告: 假定以下表空间集适用于指定的时间点

表空间列表要求具有 UNDO 段
表空间 SYSTEM
表空间 UNDOTBS1

使用 SID='hszm' 创建自动实例

供自动实例使用的初始化参数:
db_name=ORCL
compatible=10.2.0.1.0
db_block_size=8192
db_files=200
db_unique_name=tspitr_ORCL_hszm
large_pool_size=1M
shared_pool_size=110M
#No auxiliary parameter file used
db_create_file_dest=D:\oracle\product\oradata\orclaux
control_files=D:\oracle\product\oradata\orclaux/cntrl_tspitr_ORCL_hszm.f


启动自动实例 ORCL

Oracle 实例已启动

系统全局区域总计     205520896 字节

Fixed Size                     1248092 字节
Variable Size                146801828 字节
Database Buffers              50331648 字节
Redo Buffers                   7139328 字节
自动实例已创建

内存脚本的内容:
{
# set the until clause
set until  time "to_date('2013/03/27 16:28:01','YYYY/MM/DD 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;';
}
正在执行内存脚本

正在执行命令: SET until clause

启动 restore 于 27-3月 -13
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=37 devtype=DISK

通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_AUX_DISK_1: 正在复原控制文件
通道 ORA_AUX_DISK_1: 正在读取备份段 D:\ORACLE\BACKUP\FULL\FULL_1324473315_ORCL_20130327_7
通道 ORA_AUX_DISK_1: 已恢复备份段 1
段句柄 = D:\ORACLE\BACKUP\FULL\FULL_1324473315_ORCL_20130327_7 标记 = FULLBAK
通道 ORA_AUX_DISK_1: 恢复完成, 用时: 00:00:02
输出文件名=D:\ORACLE\PRODUCT\ORADATA\ORCLAUX\CNTRL_TSPITR_ORCL_HSZM.F
完成 restore 于 27-3月 -13

sql 语句: alter database mount clone database

sql 语句: alter system archive log current

sql 语句: begin dbms_backup_restore.AutoBackupFlag(FALSE); end;
释放的通道: ORA_DISK_1
释放的通道: ORA_AUX_DISK_1

内存脚本的内容:
{
# generated tablespace point-in-time recovery script
# set the until clause
set until  time "to_date('2013/03/27 16:28:01','YYYY/MM/DD 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_DATA' ||' offline for recover';
  krmicd.writeMsg(6162, sqlstatement);
  krmicd.execSql(sqlstatement);
exception
  when offline_not_needed then
    null;
end; >>>;
# set an omf destination filename for restore
set newname for clone datafile  1 to new;
# set an omf destination filename for restore
set newname for clone datafile  2 to new;
# set an omf destination tempfile
set newname for clone tempfile  1 to new;
# set an omf destination tempfile
set newname for clone tempfile  2 to new;
# set a destination filename for restore
set newname for datafile  13 to
"D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST_DATA";
# rename all tempfiles
switch clone tempfile all;
# restore the tablespaces in the recovery set plus the auxilliary tablespaces
restore clone datafile  1, 2, 13;
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  13 online";
# make the controlfile point at the restored datafiles, then recover them
recover clone database tablespace  "TEST_DATA", "SYSTEM", "UNDOTBS1" delete archivelog;
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_DATA offline for recover

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

临时文件 1 在控制文件中已重命名为 D:\ORACLE\PRODUCT\ORADATA\ORCLAUX\TSPITR_O\DATAFILE\O1_MF_TEMP_%U_.TMP
临时文件 2 在控制文件中已重命名为 D:\ORACLE\PRODUCT\ORADATA\ORCLAUX\TSPITR_O\DATAFILE\O1_MF_CHSS_TMP_%U_.TMP

启动 restore 于 27-3月 -13
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=39 devtype=DISK

通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_AUX_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到D:\ORACLE\PRODUCT\ORADATA\ORCLAUX\TSPITR_O\DATAFILE\O1_MF_SYSTEM_%U_.DBF
正将数据文件00002恢复到D:\ORACLE\PRODUCT\ORADATA\ORCLAUX\TSPITR_O\DATAFILE\O1_MF_UNDOTBS1_%U_.DBF
正将数据文件00013恢复到D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST_DATA
通道 ORA_AUX_DISK_1: 正在读取备份段 D:\ORACLE\BACKUP\FULL\FULL_1324473315_ORCL_20130327_6
通道 ORA_AUX_DISK_1: 已恢复备份段 1
段句柄 = D:\ORACLE\BACKUP\FULL\FULL_1324473315_ORCL_20130327_6 标记 = FULLBAK
通道 ORA_AUX_DISK_1: 恢复完成, 用时: 00:01:06
完成 restore 于 27-3月 -13

数据文件 1 已转换成数据文件副本
输入数据文件副本 recid=15 stamp=811182889 文件名=D:\ORACLE\PRODUCT\ORADATA\ORCLAUX\TSPITR_O\DATAFILE\O1_MF_SYSTEM_8O5CQ781_.DBF
数据文件 2 已转换成数据文件副本
输入数据文件副本 recid=16 stamp=811182889 文件名=D:\ORACLE\PRODUCT\ORADATA\ORCLAUX\TSPITR_O\DATAFILE\O1_MF_UNDOTBS1_8O5CQ7FH_.DBF

sql 语句: alter database datafile  1 online

sql 语句: alter database datafile  2 online

sql 语句: alter database datafile  13 online

启动 recover 于 27-3月 -13
使用通道 ORA_AUX_DISK_1

正在开始介质的恢复

存档日志线程 1 序列 164 已作为文件 D:\ORACLE\ARCH\ARC00164_0796692581.001 存在于磁盘上
存档日志线程 1 序列 1 已作为文件 D:\ORACLE\ARCH\ARC00001_0811181847.001 存在于磁盘上
存档日志线程 1 序列 2 已作为文件 D:\ORACLE\ARCH\ARC00002_0811181847.001 存在于磁盘上
存档日志文件名 =D:\ORACLE\ARCH\ARC00001_0811181847.001 线程 =1 序列 =1
存档日志文件名 =D:\ORACLE\ARCH\ARC00002_0811181847.001 线程 =1 序列 =2
介质恢复完成, 用时: 00:00:02
完成 recover 于 27-3月 -13

数据库已打开

内存脚本的内容:
{
# export the tablespaces in the recovery set
host 'exp userid =\"/@(DESCRIPTION=(ADDRESS=(PROTOCOL=beq)(PROGRAM=oracle)(ARGV0=oraclehszm)(ARGS=^'(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))^')(ENVS=^'ORACLE_SID=hszm^'))(CONNECT_DATA=(SID=hszm))) as sysdba\" point_in_time_recover=y tablespaces=
TEST_DATA file=
tspitr_a.dmp';

Export: Release 10.2.0.1.0 - Production on 星期三 3月 27 16:35:30 2013

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 字符集
注: 将不导出表数据 (行)

即将导出表空间时间点恢复对象...
对于表空间 TEST_DATA...
. 正在导出簇定义
. 正在导出表定义
. . 正在导出表                             AAA
. 正在导出引用完整性约束条件
. 正在导出触发器
. 终止时间点恢复
成功终止导出, 没有出现警告。

# shutdown clone before import
shutdown clone immediate
# import the tablespaces in the recovery set

host 'imp userid =\"/@ as sysdba\" point_in_time_recover=y file=
tspitr_a.dmp';

Import: Release 10.2.0.1.0 - Production on 星期三 3月 27 16:35:55 2013

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 字符集中的导入
. 正在将 SYS 的对象导入到 SYS
. 正在将 TEST 的对象导入到 TEST
. . 正在导入表                           "AAA"
. 正在将 SYS 的对象导入到 SYS
成功终止导入, 没有出现警告。

# online/offline the tablespace imported
sql "alter tablespace  TEST_DATA online";
sql "alter tablespace  TEST_DATA offline";
# enable autobackups in case user does open resetlogs from RMAN after TSPITR
sql 'begin dbms_backup_restore.AutoBackupFlag(TRUE); end;';
}
正在执行内存脚本

主机命令完成

数据库已关闭
数据库已卸载
Oracle 实例已关闭

主机命令完成

sql 语句: alter tablespace  TEST_DATA online

sql 语句: alter tablespace  TEST_DATA offline

sql 语句: begin dbms_backup_restore.AutoBackupFlag(TRUE); end;

删除自动实例
自动实例已删除
已删除辅助实例文件 D:\ORACLE\PRODUCT\ORADATA\ORCLAUX\CNTRL_TSPITR_ORCL_HSZM.F
已删除辅助实例文件 D:\ORACLE\PRODUCT\ORADATA\ORCLAUX\TSPITR_O\DATAFILE\O1_MF_SYSTEM_8O5CQ781_.DBF
已删除辅助实例文件 D:\ORACLE\PRODUCT\ORADATA\ORCLAUX\TSPITR_O\DATAFILE\O1_MF_UNDOTBS1_8O5CQ7FH_.DBF
已删除辅助实例文件 D:\ORACLE\PRODUCT\ORADATA\ORCLAUX\TSPITR_O\DATAFILE\O1_MF_TEMP_8O5CSXYC_.TMP
已删除辅助实例文件 D:\ORACLE\PRODUCT\ORADATA\ORCLAUX\TSPITR_O\DATAFILE\O1_MF_CHSS_TMP_8O5CSY0C_.TMP
已删除辅助实例文件 D:\ORACLE\PRODUCT\ORADATA\ORCLAUX\TSPITR_O\ONLINELOG\O1_MF_1_8O5CSQTG_.LOG
已删除辅助实例文件 D:\ORACLE\PRODUCT\ORADATA\ORCLAUX\TSPITR_O\ONLINELOG\O1_MF_2_8O5CSRQ4_.LOG
已删除辅助实例文件 D:\ORACLE\PRODUCT\ORADATA\ORCLAUX\TSPITR_O\ONLINELOG\O1_MF_3_8O5CSVYC_.LOG
完成 recover 于 27-3月 -13