成都网站建设设计

将想法与焦点和您一起共享

Oracle表空间时间点恢复技术TSPITR

假定Oracle数据库发生了以下情形:

沙河口网站建设公司创新互联建站,沙河口网站设计制作,有大型网站制作公司丰富经验。已为沙河口上千提供企业网站建设服务。企业网站搭建\成都外贸网站建设公司要多少钱,请找那个售后服务好的沙河口做网站的公司定做!

1、表空间中,某个表的重要数据被破坏或删除。

2、误用DDL语言更改了表空间中的一个或多个表的结构,因此无法使用闪回来恢复这些表。

3、表被误删,并且已不在回收站中,如使用了带purge选项的删表操作。

那么我们该如何恢复呢?

一种可行的方法就是利用Oracle的表空间时间点恢复技术TSPITR(Tablespace Point In Time Recover),这是一种仅在部分数据库上执行不完整恢复的技术。该技术依据目标数据库的表空间的一个子集来创建辅助数据库,仅在此子集上执行不完整的恢复,然后使用辅助数据库的表空间来替代目标数据库中的表空间。最终结果看起来好像仅恢复和还原了该子集,而保持目标数据库的其余部分是最新的。

手动完成表空间的时间点恢复非常繁琐,但利用RMAN可以自动执行TSPITR,在不影响数据库中其他表空间或对象的前提下,方便的将一个或多个表空间的内容还原到过去的某个时间点。TSPITR是一个有用的恢复工具,但使用前需要明确以下前提:

1、数据库必须位于归档模式,且存在相应的备份集合。

2、要恢复的表空间必须是自包含的,不依赖于其它表空间中的对象。例如,如果一个表在其它表空间中包含索引,则它们或者一起参与恢复,或者先将依赖关系解除才能做恢复。

当然,TSPITR并非是发生所有表空间灾难后的万能救星。例如,不能使用它来恢复已经删除的表空间。另外,如果重命名了表空间,则无法将其恢复到重命名之前的时间点。

使用RMAN执行TSPITR很简单,在此之前需要执行几个步骤以确保操作成功,下面我们通过一个例子说明TSPITR技术的使用方法。

1、假定表空间CMES中的一张表被误删,且已无法从回收站中找回

sqlplus cmes/cmes@mes

drop table c_material_t purge;

2、确定破坏大致发生的时间点

这里,首先在操作系统提示符下设置用于控制日期时间格式的环境变量,并使用此会话完成后面的工作,确保日期时间的正确解析:

set nls_date_format=yyyy-mm-dd hh34:mi:ss

查看当前时间:

select sysdate from dual;

SYSDATE

-------------------

2016-02-15 21:30:48

3、验证表空间的依赖性

查看数据字典视图TS_PITR_CHECK来确定某个表空间是否与其它表空间存在依赖关系:

select obj1_owner, obj1_name, ts1_name, obj2_owner, obj2_name, ts2_name

  from ts_pitr_check

 where (ts1_name = 'CMES' and ts2_name != 'CMES')

    or (ts1_name != 'CMES' and ts2_name = 'CMES');

该视图填充了一对一关系的行,其中表空间ts1_name中的一个对象依赖于表空间ts2_name中的一个对象。检查结果是cmes表空间中的对象没有和其它表空间对象存在依赖关系。

倘若发现表空间对象存在依赖关系,可以临时将依赖关系解除,或者将包含依赖对象的表空间一并添加到恢复集中。后者效果更好,可以确保维护表之间逻辑上的一致性。

4、确定在执行TSPITR后会丢失的对象

查看数据字典视图TS_PITR_OBJECTS_TO_BE_DROPPED来确定表空间在按目标时间进行恢复后将会丢失的对象:

select owner, name, to_char(creation_time, 'yyyy-mm-dd hh34:mi:ss') create_time

  from ts_pitr_objects_to_be_dropped

 where tablespace_name = 'CMES'

   and creation_time > to_date('2016-02-15 21:20:00', 'yyyy-mm-dd hh34:mi:ss');

检查结果,按选取的时间恢复表空间cmes将是安全的,没有对象会丢失。倘若存在丢失的对象,可以在执行恢复操作前先导出这些对象,然后在完成恢复后重新将它们导入。

5、使用RMAN命令自动执行TSPITR

在D:\下新建一个辅助目录auxdata,RMAN将使用该目录创建临时辅助数据库。

启动RMAN命令连接到目标数据库:

rman target /

执行恢复命令:

recover tablespace cmes until time '2016-02-15 21:20:00' auxiliary destination 'd:\auxdata';

6、恢复后的表空间会处于脱机状态,因此还需要手动执行命令将表空间联机

sql'alter tablespace cmes online';

7、验证表空间状态,确认丢失的表已恢复

select tablespace_name, status from dba_tablespaces;

TABLESPACE_NAME                STATUS

------------------------------ ---------

SYSTEM                         ONLINE

SYSAUX                         ONLINE

UNDOTBS1                       ONLINE

TEMP                           ONLINE

USERS                          ONLINE

CMES                           ONLINE

RMES                           ONLINE

INDX                           ONLINE

select count(*) from cmes.c_material_t;

  COUNT(*)

----------

       345

另外一点需要注意,在TSPITR执行完成后,恢复目标时间之前的表空间备份将不能再使用,因此应当尽快重新备份一次表空间或整个数据库。


名称栏目:Oracle表空间时间点恢复技术TSPITR
转载来于:http://chengdu.cdxwcx.cn/article/gjchdd.html