12.3 主动恢复

主动不完全恢复是将数据库“撤回”到从前的传统方法,主要用来撤销认为修改。一般需要先判断PIT点的时间或SCN

--1 重启db到mount状态

--2 用restore将所有的数据文件还原到PIT点之前

--3 用recover命令将数据库恢复到PIT点

--4 用resetlogs方式打开数据库。

场景1: 10分钟前,人为truncate了某些重要的表,业务无法运行,

使用RMAN命令可将数据库恢复到10分钟之前:

RMAN> run {
startup force mount;
set until time "sysdate-interval '' minute";
restore database;
recover database;
alter database open resetlogs;
}

必须注意“unti time”的PIT目标不一定是极其准确的。

场景2:执行了一个批处理脚本,该脚本将对很多吧进行了大量的不确定性修改。现在需要将批处理的修改结果撤销。

解决这样的问题,最好能在执行批处理之前记录一下当前的SCN以便将来使用until scn不完全恢复,这样处理比较严谨,因为使用until time存在3秒定位问题,使用until time时oracle还要先将时间转换成SCN,这样做只有3秒的精确度。

SQL> set linesize 99
SQL> select
timestamp_to_scn(systimestamp-to_dsinterval('00 00:00:0'||level)) SCN,
systimestamp-to_dsinterval('00 00:00:0'||level) TIME
from dual connect by level <10; 2 3 4
SCN TIME
---------- ---------------------------------------------------------------------------
1196059 29-JUL-19 10.21.50.751565000 AM +08:00
1196059 29-JUL-19 10.21.49.751565000 AM +08:00
1196058 29-JUL-19 10.21.48.751565000 AM +08:00
1196058 29-JUL-19 10.21.47.751565000 AM +08:00
1196058 29-JUL-19 10.21.46.751565000 AM +08:00
1196057 29-JUL-19 10.21.45.751565000 AM +08:00
1196057 29-JUL-19 10.21.44.751565000 AM +08:00
1196057 29-JUL-19 10.21.43.751565000 AM +08:00
1196056 29-JUL-19 10.21.42.751565000 AM +08:00

在批处理开始之前,查询到SCN

SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
1195995

或是直接对当前的SCN号取别名,即在控制文件中创建一个还原点

SQL> create restore point before_batch;

这样,若在批处理后需要撤销

RMAN> run {
startup force mount;
set until scn 1195995;
restore database;
recover database;
alter database open resetlogs;
}

或者

RMAN> run {
startup force mount;
set until restore point before_batch;
restore database;
recover database;
alter database open resetlogs;
}

另外,还原点可以被删除

SQL> drop restore point before_batch;

12.4 数据库的incarnation

既然不完全恢复可以让数据库回到过去,那么能否利用不完全恢复让数据库回到resetlogs打开数据库之前呢?

数据库的每一次resetlogs(不完全恢复)都会创建一个新的incarnation

SQL> select * from v$database_incarnation;
RMAN> list incarnation;
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1 1 ORCL 1542322764 PARENT 1 25-JUL-19
2 2 ORCL 1542322764 PARENT 1013511 25-JUL-19
3 3 ORCL 1542322764 CURRENT 1055594 25-JUL-19

结果发现当前的incarnation编号是3,时间发生在SCN为1055594

现在尝试利用不完全恢复回到SCN是1051693

RMAN> run {
startup force mount;
set until scn 1051693;
restore database;
recover database;
alter database open resetlogs;
}
RMAN-03002: failure of restore command at ...
RMAN-06004: ORACLE error from recovery catalog database:RMAN-20208: UNTIL CHANGE is before RESETLOGS change

RMAN报错06004,表示不可能回到resetlogs之前

RMAN> reset database to incarnation 2; ##进入incarnation为2
RMAN> run {
startup force mount;
set until scn 1051693;
restore database;
recover database;
alter database open resetlogs;
}

注意,以上操作是在使用catalog的情况下进行,若仅仅使用控制文件作为RMAN资料库,理论上可行,但却不太实际。

因为让数据库回到之前的incarnation就需要当时的备份及其归档日志,可能只有catalog才能保留那么多的资料,单凭控制文件可能会有些问题。

12.5 小范围不完全恢复

比如以不完全恢复一张表,dba可以完全不需要在生产库上做,在另外一个数据库上进行不完全恢复(首先按照参数文件,控制文件,控制文件的顺序还原数据库),在新的数据库上进行不完全恢复,完成导出这张表,再导入生产库。

Oracle在RMAN中实现了一个全自动的表空间一级的不完全恢复命令

recover tablespace .. until

将一个命名为test1的表空间不完全恢复到15分钟前

RMAN> recover tablespace test1 until time “sysdate - interval ‘15’ minute” auxiliary destination ‘/u01/app/oracle/oradata/aux/’;

其中auxiliary destination 是克隆数据库必要文件的临时保存目录,包括其控制文件,关键数据文件、重做日志等。该命令自动为克隆数据库及其实例分别命名,

并将控制文件、system、sysaux、undotbs1表空间的数据文件还原到‘/u01/app/oracle/oradata/aux/’目录的子目录下,将test1表空间的数据文件还原到原路径,

其余数据文件一律下线,然后在克隆库上(只包含system、sysaux、undotbs1和test1表空间)进行PIT点位15分钟前的不完全恢复,待使用resetlogs打开克隆数据库后,

再使用expdp的可传输表空间功能将test1表空间迁移到目标库,最后关闭克隆库。

小结

虽然实际生产环境中很少使用不完全恢复,这里还是介绍了不完全恢复的原理和使用方式,并介绍了incarnation。

--被动不完全恢复的主要原因是日志的丢失或损坏,所以采用精确到日志文件的形式(until sequence,until cancel),

--主动恢复是因为日志大多数情况下无损,采用精确到重做记录的形式(until time,until scn/change)

不完全恢复绝非解决问题的首选方案。

Oracle不完全恢复-主动恢复和incarnation/RMAN-20208/RMAN-06004的更多相关文章

  1. Oracle DataGuard主库丢失归档日志后备库的RMAN增量恢复一例

    第一部分  问题描述和环境状态确认 ----1. 问题场景 Oracle DataGuard主库丢失archivelog,如何不重建备库完成同步? 在Oracle DataGuard主从同步过程中可能 ...

  2. Oracle【IT实验室】数据库备份与恢复之四:RMAN(备份与恢复管理器)

    RMAN是ORACLE提供的一个备份与恢复的工具,可以用来备份和还原数据库文件. 归档日志和控制文件.它也可以用来执行完全或不完全的数据库恢复. RMAN可以由命令行接口或者 OEM的 Backup ...

  3. Oracle 不同故障的恢复方案

    之前在Blog中对RMAN 的备份和恢复做了说明,刚看了下,在恢复这块还有知识点遗漏了. 而且恢复这块很重要,如果DB 真要出了什么问题,就要掌握对应的恢复方法. 所以把DB的恢复这块单独拿出来说明一 ...

  4. Oracle 基于用户管理恢复的处理

    ================================ -- Oracle 基于用户管理恢复的处理 --================================ Oracle支持多种 ...

  5. 【RMAN】RMAN跨版本恢复(下)--大版本异机恢复

    [RMAN]RMAN跨版本恢复(下)--大版本异机恢复 BLOG文档结构图 ORACLE_SID=ORA1024G 关于10g的跨小版本恢复参考:http://blog.chinaunix.net/u ...

  6. ORACLE 11g 用Duplicate恢复Data Guard 备库详细过程

    1.先查找备库控制文件路径 先在备库上找出控制文件的路径,通过和主库一样,不过为了以防万一,还是check为好. SQL>  select name from v$controlfile; NA ...

  7. Oracle 数据库备份和恢复配置

    可能的失败及其解决方法 失败类型 我们坑你遇到的失败或错误分为两大类:物理和逻辑.物理错误一般是硬件错误或使用数据库的应用程序中的软件错误,而逻辑错误一般在终端用户级别(数据库用户和管理员). 按从轻 ...

  8. Oracle 数据库异机恢复(归档模式)

    操作必须在服务器上进行(在192.168.12.71上执行) 0.按需要恢复的日期,把距恢复日期最近的全部备份和全部备份日期后的日志备份一同拷贝到需要恢复的机器上: 1.用RMAN登陆 C:\User ...

  9. [Oracle][RMAN] Use RMAN to Migrate database from CentOS_5-11201-SingleDB to OracleLinux_5-11204-SingleDB

    リンク:How to Move/Restore DB to New Host and File System using RMAN (Doc ID 1338193.1)https://docs.ora ...

随机推荐

  1. Centos7安装RocketMQ4.4

    网上的教程坑贼鸡儿多 一.安装maven RocketMQ依赖maven打包,所以先要在虚拟机中安装maven,我使用的是v3.3.9. 1:进入指定目录下载maven 包 cd /usr/local ...

  2. CSS3 transform 属性 旋转 div 元素

    div { transform:rotate(7deg); -ms-transform:rotate(7deg); /* IE 9 */ -moz-transform:rotate(7deg); /* ...

  3. c++判断当前登录账户是否在域环境内

    #include <Windows.h> #include <DSRole.h> #pragma comment(lib, "netapi32.lib") ...

  4. Webdriver处理页面元素的方式

    Webdriver执行JavaScript代码的方式 WebDriver driver = new ChromeDriver(); JavascriptExecutor jse = (Javascri ...

  5. Java数组反转

    public static void reverseArr(int[] arr) { /* 循环中定义变量min=0最小索引 max=arr.length‐1最大索引 min++,max‐‐ */ f ...

  6. DRF介绍,DRF项目开发,DRF项目的视图类的dispatch源码解析

    目录 一.DRF介绍 1. 什么是DRF 2. 为什么要用DRF (1)使用DRF的原因 (2)站在开发者的角度来说用DRF的好处(暂时列举这么多) 二.用DRF开发后端项目 三.APIView请求生 ...

  7. requests中text,content,json之间的区别

    response.text : 返回一个字符串\n",content : 返回二进制\n",json() : 返回对象"

  8. CodeForces-707B(思维)

    链接: https://vjudge.net/problem/CodeForces-707B 题意: Masha wants to open her own bakery and bake muffi ...

  9. Vue路由参数设置可有可无

    参数后面使用 ? id 后面加个 ‘ ? ’ ,将 id 设置为可选参数 { name: "index", path: '/p/:id?', component: resolve ...

  10. kafka——分布式的消息队列系统

    总听公司人说kafka kafka... 所以这玩意到底是个啥? 好像是一个高级版的消息队列,什么高吞吐量,数据持久,消息均衡,emmm https://blog.csdn.net/nawenqian ...