TSPITR(表空间时间点恢复)用于将一个或多个表空间恢复到过去某个时间点的状态,而其他表空间仍然保持现有状态。
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)。主数据库是指用于存放应用系统数据的Oracle 数据库,也被称为产品数据库或目标数据库。当执行TSPITR 时,主数据库是指
包含被恢复表空间的数据库。
(5) 恢复集(Recovery Set)。恢复集是指在主数据库上需要执行 TSPITR 的表空间集合。注意,当在恢复集的表空间上执行TSPITR 时,要求这些表空间必须是自包
含的。
(6) 辅助数据库(Auxiliary Database)。辅助数据库是主数据库的一个副本数据库。当执行TSPITR 时,辅助数据库用于将恢复集表空间恢复到过去时间点。注意,
辅助数据库的所有物理文件都是从主数据库备份中取得,并且辅助数据库必须包含SYSTEM 表空间、UNDO 表空间以及恢复集表空间的备份文件。
(7) 辅助集(Auxiliary Set)。辅助集是指辅助数据库所需要的、除了恢复集表空间文件之外的其他文件集合。当执行 TSPITR 时,辅助数据库除了需要恢复集表空
间的备份文件之外,还需要备份控制文件、SYSTEM 表空间的备份文件、UNDO 表空间的备分文件。
一、TSPITR相关基本概念
1、什么是TSPITR?
TSPITR实际上是一种时间点恢复,只不过这里的恢复是针对单个表空间而言的,利用这种方法可以将数据库中的某一个或几个非系统表空间恢复到过去的某个时刻而保
持其他的表空间不变。
Oracle只有在控制文件、数据文件头、联机日志文件三者的scn都一致的情况才能正常打开数据库,所以我们不可能在需要进行TSPITR的数据库中直接进行恢复,这就牵
涉到另外一个概念辅助实例(auxiliary instance)/辅助数据库(auxiliary database)
2、主数据库、辅助数据库、辅助实例、恢复集、辅助集
主数据库是指需要进行TSPITR的数据库。
辅助数据库是主数据库的一个副本或是其一个子集,用于进行TSPITR,因为TSPITR不能直接在主数据库上进行。
辅助实例对应于辅助数据库的一个实例。
恢复集是指构成需要进行TSPITR的表空间的所有数据文件的备份。
辅助集是指表空间进行恢复所需的其它所有文件,包括system\undo\temp 表空间的备份文件、备份控制文件、归档日志文件、口令文件、参数文件等。
二、TSPITR的优缺点及常用情况
1、TSPITR的优点
TSPITR的过程是在辅助数据库上进行的,所以主数据库可以一直保持运行提高了系统的HA。
TSPITR的粒度是表空间,减少了进行恢复的时间。
TSPITR可以只对将某个表空间进行不完全恢复,而其他表空间维持不变,减少了数据丢失。
2、TSPITR的缺点
TSPITR的本质是一种基于时间点的恢复,在恢复时间点之后在该表空间创建的对象都会丢失。
TSPITR需要手工维护表空间之间对象的关联关系很麻烦
3、TSPITR的常用情况
错误的执行了某些dml而且commit了;
数据出现了逻辑上的不一致;
当完全恢复某个很大的数据库要很长时间,但只需要其一个子集时。
三、TSPITR的一般流程(以对users表空间进行TSPITR为例)
1、考虑TSPITR需要恢复到的时间点或scn,及其得失
通过TS_PITR_OBJECTS_TO_BE_DROPPED可以查询,创建时间晚于恢复时间的所有对象均将丢失。
SELECT OWNER, NAME, TABLESPACE_NAME,
TO_CHAR(CREATION_TIME, 'YYYY-MM-DD:HH24:MI:SS')
FROM TS_PITR_OBJECTS_TO_BE_DROPPED
WHERE TABLESPACE_NAME='USERS' AND CREATION_TIME > TO_DATE('02-NOV-02:07:03:11','YY-MON-DD:HH24:MI:SS')
ORDER BY TABLESPACE_NAME, CREATION_TIME;
2、创建辅助实例(NT平台需通过oradim手工创建),准备辅助数据库的相关目录。
3、拷贝相关的备份集和辅助集
4、修改辅助集中的pfile
注意:db_name不能修改, control_files必须指向与该备份集同时备份的控制文件。lock_name_space=auxiliary_sid, lock_name_space允许辅助数据库与主数据库的
更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/
db_name相同(当在与主数据库相同机器上进行TSPITR时必须设置)。另外还有两个可选参数db_file_name_convert,log_file_name_convert指定在mount时自动转换
controlfile中的文件名,也可以在mount后用"ALTER DATABASE RENAME FILE '<…>' TO '<…>';" 手动修改。
5、辅助数据库启动到mount状态
6、将辅助数据库启动到mount状态要用alter database mount clone database。这时辅助数据库会脱离归档模式,并且所有的数据文件都会offline。
7、将system、undo和users表空间的数据文件online
8、进行基于时间点或scn的恢复
Recover database using backup controlfile until time/change
Alter database open resetlogs;
9、检查恢复的目的是否已经实现,进行关联关系检查并处理相关关联问题。
10、将辅助数据库中的users表空间设为只读,导出其元数据(metadata)
Sql >alter tablespace users read only;
11、采用transport_tablespace 方式导出users表空间的原数据。
须设置的几个参数
User_id=”sys/pwd as sysdba”--必须以sysdba身份执行
Transport_tablespace=Y
Tablespaces=users
File=”d:\users.dmp”
12、处理主数据库上users表空间的关联关系,然后并将其删除或offline for recovery
13、将辅助数据库中users表空间的数据文件、元数据文件拷贝到主数据库
14、用FTP传输时注意使用二进制格式(bin命令)。
在主数据库上执行imp
User_id=”sys/pwd as sysdba”--必须以sysdba身份执行
Transport_tablespace=Y
Tablespaces=users
File= “/oracle/users.dmp”
Datafile=”/oracle/oradata/users01.dbf”,”/oracle/oradata/users02.dbf”
15、将users表空间设为读写模式
如果是原users表空间是offline for recovery 的话要先online。
16、恢复主数据库中的关联关系
17、备份users表空间
18、进行TSPITR后原有的备份就失效了,强烈建议立即备份TSPITR后的表空间。
从上面的过程可以看出Tspitr本质上就是一个把除了系统表空间、undo表空间、想恢复的表空间之外的所有表空间的数据文件给offline然后恢复,打开数据库,然后进
行transport。
四、如何检查并处理关联关系
当进行TSPITR的表空间中的某些对象与其他表空间的中对象相关联时(例如索引、约束等),需要对这些关系进行处理后才能进行TSPITR。
Oracle主要对以下几个方面的有效性进行检查:
1、表、集群和他们的索引(分区的or非分区的)必须都包含在恢复集中。
2、分区对象的所有分区必须都包含在恢复集中
3、包含父子关系(外键约束)的表必须都包含在恢复集中
4、lob对象和referencing tables必须全部包含在恢复集中。
通过查询SYS.TS_PITR_CHECK,可以找出相关联的各个对象然后进行相应处理。
以users表空间为例:
SELECT *FROM SYS.TS_PITR_CHECKWHERE ( TS1_NAME= 'USERS'AND TS2_NAME <>'USERS')OR( TS1_NAME<> 'USERS'AND TS2_NAME ='USERS'));
对于关联对象一般来说,有三种处理办法。
(1)将包含关联对象的表空间都纳入TSPITR范围
(2)移除该关系
(3)暂时SUSPEND该关系。
还有一部分是TSPITR后会丢失的对象,前面已经提到过,这部分也应该进行相应处理,以免丢失。
五、TSPITR注意事项
进行TSPITR后,不需要将表空间全部导回主数据库,只将特定的数据表导回即可。