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. zabbix发送报警的脚本

    zabbix报警媒介:自定义脚本Custom alertscripts 邮件报警准备工作:安装sendEmail zabbix-server 的 配置文件 /etc/zabbix/zabbix_ser ...

  2. 使用SQLyog对mysql数据库的数据结构进行导出、导入

    主要分为两个步骤: 一.使用SQLyog对mysql数据库的数据结构进行导出 1.鼠标右键选择需要导出数据结构的数据库——>点击[备份/导出]——>点击[备份数据库,转储到SQL....] ...

  3. 将.py文件转换成.exe文件

    1.安装pyinstaller模块 pip install pyinstaller 2.打开python目录下的scripts文件夹 cmd下,使用pyinstaller -F test.py,运行后 ...

  4. Okhttp拦截器统一异常处理并多次读取response.body().string()

    参考:https://blog.csdn.net/a624806998/article/details/73863606 引言: 写这篇文章,因为在自己编写实现Http日志拦截器的时候,在拦截器中使用 ...

  5. 知名界面类控件Kendo UI for jQuery R2 2019 SP1发布|附下载

    Kendo UI for jQuery提供了在短时间内构建现在Web应用程序所需要的一切.从70多个UI中选择,并轻松地将它们组合起来,创建出酷炫响应式的应用程序,同时将开发时间加快了50%. [适用 ...

  6. vue项目中引入vant 使用rem布局问题

    postcss.config.js const autoprefixer = require('autoprefixer') const pxtorem = require('postcss-pxto ...

  7. NOIP2016提高A组五校联考4总结

    坑爹的第一题,我居然想了足足3个小时,而且还不确定是否正确. 于是,我就在这种情况下心惊胆跳的打了,好在ac了,否则就爆零了. 第二题,树形dp,本来差点就想到了正解,结果时间不够,没打完. 第三题, ...

  8. electron-vue ipcRenderer.on() 调用多次

    methods: { isSave (ev) { this.localFileUrl = ev.localFileUrl // 本地的路径 ipcRenderer.send('save-dialog' ...

  9. 使用linq将2个Datatable合并

    DataTable dtStepX = new DataTable("dtStepX"); DataTable dtStepS = new DataTable("dtSt ...

  10. Cassandra介绍

    Cassandra介绍 Apache Cassandra 是一个开源的.分布式.无中心.弹性可扩展.高可用.容错.一致性可调.面向列的数据库.它基于Amazon Dynamo的分布式设计 Cassan ...