表空间基于时间点的恢复(TSPITR)
环境:RHEL 6.4 + Oracle 11.2.0.4
准备模拟环境
## 0.1 初始化表空间,用户,表,数据 ##
初始化参考 [模拟业务最小测试用例01](http://www.cnblogs.com/jyzhao/p/4952487.html) 文章中的第1,2,3,4,5步骤初始化模拟环境。
## 0.2 再建立一个表空间,模拟生产环境其他表空间 ##
```
-- 创建表空间
conn /as sysdba
create tablespace dbs_d_test datafile size 30M autoextend off;
```
## 0.3 数据库确定存在有效RMAN备份 ##
```
RMAN> backup database;
RMAN> list backup of database;
```
## 0.4 误操作截断核心表T2 ##
```
-- 误操作truncate核心业务表T2
conn jingyu/jingyu
alter session set NLS_DATE_FORMAT="YYYY-MM-DD HH24:Mi:SS";
select sysdate from dual;
truncate table t2;
-- 之后创建T3表在dbs_d_test表空间
create table T3 tablespace dbs_d_test as select * from t1;
```
## 0.5 需求 ##
恢复核心表T2(T2表数据存在DBS_D_JINGYU表空间, 索引存在DBS_I_JINGYU表空间)
采用表空间基于时间点的恢复技术,正常的话T3表(在表空间DBS_D_TEST)应该不受影响。
```
-- 查询现状:当前表T2,T3数据量(表T2已被截断,已经没有数据;表T3在T2被截断后创建,有数据)
conn jingyu/jingyu
select count(1) from t2;
select count(1) from t3;
```
1. 验证表空间的依赖性
## 1.1 查询 TS_PITR_CHECK ##
```
conn / as sysdba
set linesize 1000
col obj1_owner for a10
col obj2_owner for a10
-- 如果只恢复表空间DBS_D_JINGYU
select OBJ1_OWNER, OBJ1_NAME, TS1_NAME, OBJ2_OWNER, OBJ2_NAME, TS2_NAME
from TS_PITR_CHECK
where (ts1_name = 'DBS_D_JINGYU' and ts2_name != 'DBS_D_JINGYU') or (ts1_name != 'DBS_D_JINGYU' and ts2_name = 'DBS_D_JINGYU');
-- 如果恢复表空间DBS_D_JINGYU,DBS_I_JINGYU
select OBJ1_OWNER, OBJ1_NAME, TS1_NAME, OBJ2_OWNER, OBJ2_NAME, TS2_NAME
from TS_PITR_CHECK
where (ts1_name in ('DBS_D_JINGYU','DBS_I_JINGYU') and ts2_name not in ('DBS_D_JINGYU','DBS_I_JINGYU')) or (ts1_name not in ('DBS_D_JINGYU','DBS_I_JINGYU') and ts2_name in ('DBS_D_JINGYU','DBS_I_JINGYU'));
## 1.2 处理依赖关系 ##
可以看到,如果只恢复表空间DBS_D_JINGYU,会有T2表的索引依赖表空间DBS_I_JINGYU。
我们这里同时恢复表空间DBS_D_JINGYU,DBS_I_JINGYU,这样就解决了依赖关系。
<h1 id="2">2. 确定执行TSPITR后会丢失的对象</h1>
## 2.1 查询 TS_PITR_OBJECTS_TO_BE_DROPPED ##
-- 查询执行TSPITR后会丢失的对象
select owner, name, tablespace_name, creation_time
from TS_PITR_OBJECTS_TO_BE_DROPPED
where tablespace_name in ('DBS_D_JINGYU','DBS_I_JINGYU')
and creation_time > to_date('2015-11-11 15:01:46','yyyy-mm-dd hh24:mi:ss');
## 2.2 预处理执行TSPITR后会丢失的对象 ##
我这里没有查出结果,如果有结果,最好先expdp导出这些对象的备份,待恢复表空间后,再导入这些对象。
当然如果确定这些对象是没有用的,可以直接忽略。
<h1 id="3">3. 自动执行TSPITR</h1>
## 3.1 RMAN自动执行TSPITR ##
恢复表空间`DBS_D_JINGYU, DBS_I_JINGYU`到`2015-11-11 15:01:46`时间点,辅助实例的临时存放目录为`/u01/orabak/auxiliary`
recover tablespace DBS_D_JINGYU, DBS_I_JINGYU until time '2015-11-11 15:01:46' auxiliary destination '/u01/orabak/auxiliary';
执行过程简要输出如下:
$ rman target / catalog vpc1/vpc1@catdb
Recovery Manager: Release 11.2.0.4.0 - Production on Wed Nov 11 15:39:27 2015
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORADB (DBID=2647366668)
connected to recovery catalog database
RMAN>
RMAN> recover tablespace DBS_D_JINGYU, DBS_I_JINGYU until time '2015-11-11 15:01:46' auxiliary destination '/u01/orabak/auxiliary';
Starting recover at 2015-11-11 15:03:29
using channel ORA_DISK_1
Creating automatic instance, with SID='nysi'
initialization parameters used for automatic instance:
db_name=ORADB
db_unique_name=nysi_tspitr_ORADB
compatible=11.2.0.4.0
db_block_size=8192
db_files=200
sga_target=1G
processes=80
db_create_file_dest=/u01/orabak/auxiliary
log_archive_dest_1='location=/u01/orabak/auxiliary'
No auxiliary parameter file used
...此省略大量输出内容
Removing automatic instance
Automatic instance removed
auxiliary instance file /u01/orabak/auxiliary/ORADB/datafile/o1_mf_temp_jin_c45t4498_.tmp deleted
auxiliary instance file /u01/orabak/auxiliary/ORADB/datafile/o1_mf_temp_c45t4486_.tmp deleted
auxiliary instance file /u01/orabak/auxiliary/ORADB/onlinelog/o1_mf_3_c45t43b3_.log deleted
auxiliary instance file /u01/orabak/auxiliary/ORADB/onlinelog/o1_mf_2_c45t42z3_.log deleted
auxiliary instance file /u01/orabak/auxiliary/ORADB/onlinelog/o1_mf_1_c45t42gx_.log deleted
auxiliary instance file /u01/orabak/auxiliary/ORADB/datafile/o1_mf_sysaux_c45t2wr3_.dbf deleted
auxiliary instance file /u01/orabak/auxiliary/ORADB/datafile/o1_mf_undotbs1_c45t2wrf_.dbf deleted
auxiliary instance file /u01/orabak/auxiliary/ORADB/datafile/o1_mf_system_c45t2wr9_.dbf deleted
auxiliary instance file /u01/orabak/auxiliary/ORADB/controlfile/o1_mf_c45t2hn2_.ctl deleted
Finished recover at 2015-11-11 15:06:22
## 3.2 备份表空间然后使表空间联机 ##
-- 备份表空间DBS_D_JINGYU, DBS_I_JINGYU
RMAN> backup tablespace dbs_d_jingyu, dbs_i_jingyu;
-- 表空间DBS_D_JINGYU联机
RMAN> sql 'alter tablespace dbs_d_jingyu online';
-- 表空间DBS_I_JINGYU联机
RMAN> sql 'alter tablespace dbs_i_jingyu online';
## 3.3 验证结果 ##
-- 最后验证
conn jingyu/jingyu
select count(1) from t2;
select count(1) from t3;
结果是:
SQL> conn jingyu/jingyu
SQL> select count(1) from t2;
COUNT(1)
100000
Elapsed: 00:00:00.01
SQL> select count(1) from t3;
COUNT(1)
100
Elapsed: 00:00:00.01
至此成功执行了表空间基于时间点的恢复:T2表数据已经恢复,T3表数据未受影响。
<h1 id="4">Reference</h1>
- OCP 认证考试指南 (1Z0-053)[M]. 清华大学出版社, 2010.
表空间基于时间点的恢复(TSPITR)的更多相关文章
- Oracle之表空间基于时间点的恢复
记一次优化过程中:一次误操作,在不影响其他表空间的情况下:采用表空间基于时间点的恢复(TSPITR)方法恢复数据的过程. 1.TSPITR恢复原理 TSPITR目前最方便的方法是使用RMAN进行 ...
- 【RMAN】TSPITR--RMAN表空间基于时间点的自动恢复
[RMAN]TSPITR--RMAN表空间基于时间点的自动恢复 一.1 BLOG文档结构图 一.2 前言部分 一.2.1 导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其 ...
- 1.MongoDB 2.7主从复制(master –> slave)环境基于时间点的恢复
(一)MongoDB恢复概述 对于任何类型的数据库,如果要将数据库恢复到过去的任意时间点,否需要有过去某个时间点的全备+全备之后的重做日志,MongoDB也不例外.使用全备将数据库恢复到固定时刻,然后 ...
- 直接删除undo及temp表空间文件后的数据库恢复一例
前几天,某用户研发找到我,说他们的研发库坏了,问我能恢复不?我问他们做了什么操作,一个小男孩儿说,看到空间满了,清除了点儿数据,我说是不是连数据库的文件也清除了,他说没有,他清除的是ORACLE_HO ...
- 非系统表空间损坏,rman备份恢复
实验条件:有完整可用备份--查询表空间情况SQL> select tablespace_name,status from dba_tablespaces;TABLESPACE_NAME STAT ...
- 2.MongoDB 4.2副本集环境基于时间点的恢复
(一)MongoDB恢复概述 对于任何数据库,如果要将数据库恢复到过去的任意时间点,否需要有过去某个时间点的全备+全备之后的重做日志. 接下来根据瑞丽航空的情况进行概述: 全备:每天晚上都会进行备份: ...
- Oracle DB 执行表空间时间点恢复
• 列出在执行表空间时间点恢复(TSPITR) 时会发生的操作 • 阐释TSPITR 使用的术语的定义 • 确定适合将TSPITR 用作解决方案的情况 • 确定时间点恢复的正确目标时间 • 确定不能使 ...
- Oracle误删除表空间的恢复
对于误删除表空间的恢复,本文通过基于数据库的时间点恢复和基于表空间的时间点恢复分别加以讨论 一 通过基于数据库的时间点恢复被误删除的表空间 1 需要注意的事项 a 基于数据库的时间点恢复将会回退整个数 ...
- SYSTEM 表空间管理及备份恢复
标签: systemoraclesqldatabasefile数据库 2010-11-28 18:14 12689人阅读 评论(0) 收藏 举报 分类: -----Oracle备份恢复(16) 版权声 ...
随机推荐
- Python之路【第三篇】python基础 之基本数据类型 补充
字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-310 ...
- Openssl生成证书三板斧
证书创建三步曲: 一.密钥文件 二.请求文 三.根证书签名 最后看需要是否合并证书文件 1. 创立根证书密钥文件(自己做CA)root.key: [kk@test ~]$ openssl genrsa ...
- finally回收资源
Java中的垃圾回收机制,也就是GC不会回收任何物理资源,垃圾回收机制只回收堆内存中对象所占用的内存,所以其他的物理资源需要用finally来回收. 如果try块中的某条语句引起了异常,该异常就会被c ...
- js 的一些知识 摘自http://img0.pconline.com.cn/Pc_intranet/1105/13/313647_7.pdf
Js 问题分析--js 影响页面性能现状分析:问题陈述分析问题:抽象问题根源,通过实例或推理证明问题的严重性问题引申:以现有问题为点开始扩散,这将导致其它什么问题,或同一类型的问题问题总结:从分散开始 ...
- 利用SSH Filesystem实现远程文件系统
远程文件系统的访问有很多种不同的实现方式,一些常见的连接方式比其它特定情况下的更有用.最著名的一个例子就是微软的通用互联网文件系统(CIFS),它可以容许微软Windows"映射网 ...
- 【腾讯Bugly干货分享】WebP原理和Android支持现状介绍
本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/582939577ef9c5b708556b0d 1.背景 目前网络中图片仍然是占 ...
- UI控件(UIImageView)
@implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; image1_ = [UIImage imageNa ...
- 你写的Try...Catch真的有必要么?
很多人喜欢用Try...Catch把每一个方法都包裹起来,可是真的有必要么? 为什么要这样做?我估计是大家被BUG吓怕了,生怕生产环境出现各种莫名其妙的错误,比如最经典的NullReferenceEx ...
- .Net组件程序设计之远程调用(一)
.Net组件程序设计之远程调用(一) 1应用程序域 我们知道我们写的C#代码是在操作系统逻辑体系结构中最上层的,然而操作系统本身是不会认识C#代码的,它只认识机器代码.那我们写的程序经过编译后是编译成 ...
- static与并发
在java中static用来修饰Class类中属性和方法. 被static修饰的成员属性和成员方法独立于该类的任何对象,它们在内存空间上会被放在描述Class的位置中,也就是说它们为此类(Class) ...