Oracle基于一个或多个表空间的时间点恢复

本文详细介绍了Oracle中基于表空间的时间点恢复(TSPITR)的适用场景、限制、相关概念以及操作步骤。内容包括恢复错误的DML和DDL语句,恢复被删除的表空间,以及如何处理各种限制和自包含表空间集合。同时,文章还讨论了TSPITR与DBPITR的区别,并给出了一个完整的TSPITR操作实例。
摘要由CSDN通过智能技术生成

适用场景
(1)恢复错误的dml语句
(2)恢复错误的ddl语句,比如说更改了表结构,这个时候无法使用flashback table
(3)恢复drop+purge的表 (只是drop 可以使用闪回删除 flashback table xxx to before drop ;)
(4)恢复逻辑错误的表
(5)恢复被删除的表空间(rman可以在被drop的表空间上面执行TSPITR)

TSPITR的限制

1)你不能将其应用到SYSTEM表空间和UNDO表空间,或者任何包括回滚段的表空间上。
会报ORA-39917 错误 (如果报这个错,证明在AA表空间中这个表的拥有者是SYS ,但是表空间时间点恢复不能恢复system表空间,所以不能使用,如果是索引的话可以先删除。)
总结:拥有者是SYS 的表不能恢复。

2)包含相互依赖数据的多个表空间必须被一起同时恢复。例如:你要即时恢复拥有索引的表空间的话,必须和索引所引用的基表所在的表空间一起同时做时间点恢复,(还可以先把索引删除,恢复后再重新创建)

注意:恢复集表空间必须为自包含;
违反自包含表空间集合的常见情况如下:
1> 表空间集合包含有SYS 方案对象
2>表空间集合包含了索引所在的表空间,但没有包含索引基表所在的表空间
3>表空间集合没有包含分区表的所有分区
4> 表空间集合包含了表所在的表空间,但没有包含其LOB 列所在的表空间

检查自包含方式:
SQL> connect sys/oracle@demo as sysdba
SQL> executedbms_tts.transport_set_check(‘user01’,true);
SQL> Select * From transport_set_violations;

TSPITR 相关的概念:

(1) TSPITR (Tablespace Point-In-Time Recover)。TSPITR 是表空间时间点恢复的英文缩写格式,它表示将一个或多个表空间恢复到过去时间点的状态,而其他表空间仍然保持现有状态。

(2) TSPITR 实现方法。当实现表空间时间点恢复时,既可以使用用户管理的表空间时间点恢复方法,也可以使用RMAN 管理的表空间时间点恢复。

(3) DBPITR (Database Point-In-Time Recovery)。DBPITR 是数据库时间点恢复的英文缩写格式,它表示将数据库的所有表空间恢复到过去时间点的状态。注意,DBPITR 只适用于ARCHIVELOG 模式。

(4) 主数据库(Primary Database)。当执行TSPITR 时,主数据库是指包含被恢复表空间的数据库。也就是当前正在使用的数据库

(5) 恢复集(Recovery Set):需要恢复的表空间的集合。注意,当在恢复集的表空间上执行TSPITR 时,要求这些表空间必须是自包含的

(6) 辅助数据库(Auxiliary Database)。辅助数据库是主数据库的一个副本数据库。当执行TSPITR 时,辅助数据库用于将恢复集表空间恢复到过去时间点。注意,辅助数据库的所有物理文件都是从主数据库备份中取得,并且辅助数据库必须包含SYSTEM 表空间、UNDO 表空间以及恢复集表空间的备份文件。(恢复结束后会自动删除辅助数据库的所有物理文件)

(7) 辅助集(Auxiliary Set)。辅助集是指辅助数据库所需要的、除了恢复集表空间文件之外的其他文件集合。当执行 TSPITR 时,辅助数据库除了需要恢复集表空间的备份文件之外,还需要备份控制文件、SYSTEM 表空间的备份文件、UNDO 表空间的备份文件。

实验:
1.备份数据库
恢复之前先备份
创建表空间
SYS@ghyyk> create tablespace AAA datafile ‘+data’ size 20m autoextend on ;

RMAN> report schema;
6 20 AA *** +DATA/ghyyk/datafile/aa.262.103304359

RMAN> backup as compressed backupset full database include current controlfile plus archivelog delete all input;

RMAN>list backupset

RMAN> list backupset summary;

2 建立测试表并做truncate误操作

AA表空间下建立2个表,并建立一个索引在users表空间中,注意做误操作之前先切换一下日志。
(必须重新创建一个用户,不能在sys用户下创建这两张表,把新建用户创建到AA表空间上)

create user hjj identified by oracle;
grant dba to hjj;

SQL> alter system switch logfile;

SQL> alter system switch logfile;

create table hjj.tspitr_test111 tablespace AAA as select * from test221;

SYS@ghyyk> select count(*) from hjj.tspitr_test111;

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值