Oracle技术:基于时间点的表空间恢复

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后,不需要将表空间全部导回主数据库,只将特定的数据表导回即可。

时间: 2024-10-21 23:41:37

Oracle技术:基于时间点的表空间恢复的相关文章

Oracle技术:使用rman进行表空间基于时间点的恢复

实例说明: (1)先创建2个表空间. create tablespace user01 datafile '+DG1' size 1M; create tablespace user02 datafile '+DG1' size 1M; (2)在每个表空间上各创建一张表. create table scott.customers (cust_id int,cust_name varchar2(10)) tablespace user01; create table scott.sales (id

oracle导出的数据库占用20G表空间

问题描述 oracle导出的数据库占用20G表空间 alter system set deferred_segment_creation=false scope=both; select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 exp posko/globalsoft@orcl file=d:pos1601.dmp owner=(posko) compress=n imp

[20170623]利用传输表空间恢复数据库2.txt

[20170623]利用传输表空间恢复数据库2.txt --//继续上午的测试,测试truncate,是否可行,理论讲应该没有问题.我主要的目的测试是否要切换日志. --//参考链接 : http://blog.itpub.net/267265/viewspace-2141166/ 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER -------------------------

[20170623]利用传输表空间恢复部分数据.txt

[20170623]利用传输表空间恢复部分数据.txt --//昨天我测试使用传输表空间+dblink,上午补充测试发现表空间设置只读才能执行impdp导入原数据,这个也很好理解. --//这样的操作模式仅仅减少expdp生成原数据的过程. --//我想一下,rman也支持建立传输表空间的命令.我仔细看了以前的笔记,发现这样最大的有点不用设置只读,实际上它是通过建立辅组实 --//例来建立传输文件,理论讲可以恢复到特定的scn,这样可以利用它解决一些误操作的问题,还是通过例子来说明问题. 1.环

Oracle数据库表空间恢复方案

oracle|恢复|数据|数据库 一. 用户表空间 错误: 在启动数据库时出现ORA-01157,ORA-01110或操作系统级错误例如ORA-07360,在关闭数据库(使用shutdown normal或shutdown immediate) 时将导致错误ORA -01116,ORA-01110以及操作系统级错误ORA-07368 解决,以下有两种解决方案: 1.用户的表空间可以被轻易地重建 即最近导出的对象是可用的或表空间中的对象可以被轻易地重建等.在这种情况下,最简单的方法是offline

RMAN使用备份按时间点传输表空间

使用until time或者SCN来执行transport tablespace 如果在执行传输表空间操作时,对transport tablespace命令指定了目标时间,那么RMAN将在辅助实例中使用备份将表空间还原到目标时间之前并执行按时间点恢复将辅助数据库恢复到指定的目标时间点.(对于按时间点恢复所需要的备份和重做日志必须可以使用) 恢复的目标时间可以使用SCN(包括当前incarnation或ancestors incarnation),日志序列号,还原点或时间表达式. 使用SCN来执行

Oracle Database 10g:改善的表空间管理

oracle 表空间管理得到了重大的改进,这可以归因于一个 sparser SYSTEM.为用户定义一个默认表空间的支持.新的 SYSAUX.甚至重命名 您曾经多少次因用户在 SYSTEM 表空间中创建了非 SYS 和 SYSTEM 的段而伤透脑筋? 在 Oracle9i Database 之前,如果在创建用户时没有指定默认表空间,那么它将默认为 SYSTEM 表空间.如果用户在创建一个段时没有显式地指定一个表空间,那么这个段将在 SYSTEM 中创建-前提是用户在 SYSTEM 表空间中拥有配

oracle中如何增加和扩展表空间

Oracle中增加表空间大小的四种方法 1:给表空间增加数据文件 ALTER TABLESPACE app_data ADD DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.DBF' SIZE 50M; 2:新增数据文件,并且允许数据文件自动增长 ALTER TABLESPACE app_data ADD DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP04.DBF' S

oracle 异构平台迁移之传输表空间一例

  第一章 传输表空间一例(win文件系统 -> linux asm )   blog 结构图:   1  场景描述 源平台为:windows xp 32系统 + oracle 11.2.0.1.0  + ORACLE_SID=orcl 目标平台:rhel6.5 + oracle 11.2.0.1.0 + asm 64位 + ORACLE_SID=orclasm 目标:要实现将自定义的应用程序表空间app1tbs,app2tbs,idxtbs从源平台传递到目标平台   注:   ① 从linux