背景:这里提到的常规恢复指的是数据库有完备可用的RMAN物理备份。

实验环境:RHEL6.4 + Oracle 11.2.0.4 单实例.

二、常规恢复之不完全恢复:部分数据丢失

二、常规恢复之不完全恢复:部分数据丢失

Oracle 数据库常规恢复的几个概念:

常规恢复之完全恢复:不丢失数据。

比如数据文件丢失,临时文件丢失,参数文件丢失。可以通过RMAN备份完全恢复数据库。

示例:Oracle Recovery 01 - 常规恢复之完全恢复

常规恢复之不完全恢复:部分数据丢失。

一般是有控制文件或是在线重做日志文件丢失。通过RMAN备份恢复,resetlogs会导致丢失数据。

示例:Oracle Recovery 02 - 常规恢复之不完全恢复

注意事项:每次不完全恢复完成后,按照规范,数据库应立即做一次全备,防止意外发生。

/bin/bash /usr2/backupsh/full_backup.rman

2.1 重做日志文件丢失或损坏

启动数据库报错:

SQL> startup
ORACLE instance started. Total System Global Area 1620115456 bytes
Fixed Size 2253704 bytes
Variable Size 939527288 bytes
Database Buffers 671088640 bytes
Redo Buffers 7245824 bytes
Database mounted.
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: '/u02/oracle/JINGYU/onlinelog/o1_mf_1_bwjsmn50_.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
ORA-00312: online log 1 thread 1: '/u02/oracle/JINGYU/onlinelog/o1_mf_1_bwjsmn1l_.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

恢复方法:

SQL> shutdown immediate
SQL> startup mount
SQL> recover database until cancel;
SQL> alter database open resetlogs;

恢复完成后,数据库做一次全备。

2.2 重做日志文件,数据文件丢失或损坏

### 启动数据库报错: ###

SQL> startup
ORACLE instance started. Total System Global Area 1620115456 bytes
Fixed Size 2253704 bytes
Variable Size 939527288 bytes
Database Buffers 671088640 bytes
Redo Buffers 7245824 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1:
'/u02/oracle/JINGYU/datafile/o1_mf_system_bwjsmpcw_.dbf'

恢复方法:

RMAN> restore database;
SQL> recover database until cancel;
SQL> alter database open resetlogs; # DRA建议:database point-in-time recovery
RMAN> restore database until scn 344834;
RMAN> recover database until scn 344834;
RMAN> alter database open resetlogs;

恢复完成后,数据库做一次全备。

2.3 控制文件丢失或损坏

启动数据库报错:

SQL> startup
ORACLE instance started. Total System Global Area 1620115456 bytes
Fixed Size 2253704 bytes
Variable Size 939527288 bytes
Database Buffers 671088640 bytes
Redo Buffers 7245824 bytes
ORA-00205: error in identifying control file, check alert log for more info

恢复方法:

查看alert.log, 是否所有的控制文件都丢失了?

第一种情况:并非所有的控制文件都丢失

这种情况其实并不算是不完全恢复,因为并没有丢失控制文件的信息。

可以直接从完好的控制文件拷贝到初始化参数文件中指定的控制文件的各个路径。

第一种情况恢复方法:

cp xxx01.ctl xxx02.ctl
SQL> alter database mount;
SQL> alter database open;

第二种情况:所有的控制文件都丢失

那么就只能从RMAN备份中恢复控制文件。

第二种情况恢复方法:

RMAN> restore controlfile from '/u02/BACKUP/20150812/controlfilec-3589019315-20150812-07';
RMAN> alter database mount;
RMAN> recover database;
RMAN> alter database open resetlogs;

恢复完成后,数据库做一次全备。

2.4 控制文件,数据文件丢失或损坏

启动数据库报错:

SQL> startup
ORACLE instance started. Total System Global Area 1620115456 bytes
Fixed Size 2253704 bytes
Variable Size 939527288 bytes
Database Buffers 671088640 bytes
Redo Buffers 7245824 bytes
ORA-00205: error in identifying control file, check alert log for more info

恢复方法:

RMAN> restore controlfile from '/u02/BACKUP/20150812/controlfilec-3589019315-20150812-07';
RMAN> alter database mount;
RMAN> restore database;
SQL> recover database using backup controlfile until cancel;
cancel
SQL> alter database open resetlogs;

恢复完成后,数据库做一次全备。

2.5 控制文件,重做日志文件,数据文件丢失或损坏

参考`2.4 控制文件,数据文件丢失或损坏`。
恢复完成后,数据库做一次全备。

2.6 控制文件,重做日志文件丢失或损坏

参考`2.3 控制文件丢失或损坏`,如果是控制文件有其他备份,同时参考`2.1 重做日志文件丢失或损坏`。
恢复完成后,数据库做一次全备。

2.7 控制文件,重做日志文件,参数文件丢失或损坏

启动数据库报错:

SQL> startup
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/u01/app/oracle/product/11.2.0/db_1/dbs/initjingyu.ora'

恢复方法:

#恢复参数文件:
vi /u01/app/oracle/product/11.2.0/db_1/dbs/initjingyu.ora
SQL> startup pfile='/u01/app/oracle/product/11.2.0/db_1/dbs/initjingyu.ora'
RMAN> restore spfile from '/u02/BACKUP/20150813/controlfilec-3589191014-20150813-0b';
RMAN> shutdown immediate;
RMAN> startup nomount; #恢复控制文件
RMAN> restore controlfile from '/u02/BACKUP/20150813/controlfilec-3589191014-20150813-0b';
RMAN> alter database mount; #恢复数据库
RMAN> restore database;
SQL> recover database using backup controlfile until cancel;
auto
SQL> recover database using backup controlfile until cancel;
cancel
SQL> alter database open resetlogs; ##DRA的建议(启动到mount后,恢复到SCN 834531,测试也可行)
RMAN> restore database until scn 834531;
RMAN> recover database until scn 834531;
RMAN> alter database open resetlogs;

恢复完成后,数据库做一次全备。

2.8 控制文件,重做日志文件,参数文件,数据文件丢失或损坏

参考`2.7 控制文件,重做日志文件,参数文件丢失或损坏`。

恢复完成后,数据库做一次全备。

2.9 把数据库恢复到某个SCN

误操作truncate了表:

SQL> create table t_scn as select * from user_objects;

Table created.

SQL> select count(1) from t_scn;

  COUNT(1)
----------
4 SQL> select dbms_flashback.get_system_change_number from dual; GET_SYSTEM_CHANGE_NUMBER
------------------------
1025158 SQL> truncate table t_scn; Table truncated.
SQL> select count(1) FROM T_SCN; COUNT(1)
----------
0

注意:这里用到的select dbms_flashback.get_system_change_number from dual;,在现实情况这个scn或者下面的时间点都是需要通过Logmnr分析日志获取的。

关于Logmnr的使用,后续会单独整理一篇文章。

恢复方法:

run {
shutdown immediate;
startup mount;
allocate channel c1 type disk;
allocate channel c2 type disk;
set until scn 1025158;
restore database;
recover database;
alter database open resetlogs;
}

验证t_scn的表记录已经恢复回来:

SQL> select count(1) from t_scn;

  COUNT(1)
----------
4

恢复完成后,数据库做一次全备。

2.10 把数据库恢复到某个时间点

误操作truncate了表:

SQL> alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';

Session altered.

SQL> select sysdate from dual;

SYSDATE
-------------------
2015-08-14 10:10:16 SQL> select count(1) from t_scn; COUNT(1)
----------
4 SQL> truncate table t_scn; Table truncated.

恢复方法:

run {
shutdown immediate;
startup mount;
allocate channel c1 type disk;
allocate channel c2 type disk;
sql "alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''";
set until time '2015-08-14 10:10:16';
restore database;
recover database;
alter database open resetlogs;
}

恢复完成后,数据库做一次全备。

2.11 表空间基于时间点的恢复(TSPITR)

参考:表空间基于时间点的恢复(TSPITR)

恢复完成后,数据库做一次全备。

Oracle Recovery 02 - 常规恢复之不完全恢复的更多相关文章

  1. Oracle Recovery 01 - 常规恢复之完全恢复

    背景:这里提到的常规恢复指的是数据库有完备可用的RMAN物理备份. 实验环境:RHEL6.4 + Oracle 11.2.0.4 DG primary. 一.常规恢复之完全恢复:不丢失数据 1.1 单 ...

  2. 本文将详细介绍oracle 10g OEM常规错误

    本文将详细介绍oracle 10g OEM常规错误-------Unknown host specified解决方法,需要了解的朋友可以参考下 详细出处参考:http://www.jb51.net/a ...

  3. Oracle数据库02

    EXISTS子查询 特征:将主查询中的数据带到子查询中进行验证,如果验证成功则子查询返回true,当主查询接收到true的时候被验证的数据就显示,如果在子查询中验证失败则返回false,当主查询接收到 ...

  4. Oracle recovery manager failed to restore

    解决办法: 1:清理过期失效的备份, 2:增加recovery_file_dest_size参数值即可: SQL> show parameter db_recover NAME          ...

  5. Oracle案例02——ORA-12034: "SCOTT"."USER_TABLE" 上的实体化视图日志比上次刷新后的内容新

    最近同事在交接工作时,发现有几个schedule job没有执行成功,我这边给看了下,其中一个是由于数据库迁移,调用dblink的host主机IP在tnsnames中没有变更导致,还有一个是无法视图的 ...

  6. Oracle基础 02 临时表空间 temp

    --查看临时文件的使用/剩余空间 SQL> select * from v$temp_space_header; --查看SCOTT用户所属的临时表空间 SQL> select usern ...

  7. Oracle使用中的常规操作总结

    写一篇在使用Oracle过程中一些常用的操作,以便于忘记的时候查看 一.创建用户和给用户赋予权限 create user 用户名 identified by 密码; --12c一下版本 create ...

  8. OCP考点实战演练01-备份恢复篇

    本系列宗旨:真正掌握OCP考试中所考察的技能,坚决不做Paper OCP! 实验环境:RHEL 6.4 + Oracle 11.2.0.4 OCP考点实战演练01-备份恢复篇 1.数据库开启归档 2. ...

  9. Oracle 基于 RMAN 的不完全恢复(incomplete recovery by RMAN)

    Oracle 数据库可以实现数据库不完全恢复与完全恢复.完全恢复是将数据库恢复到最新时刻,也就是无损恢复,保证数据库无丢失的恢复.而不完全恢复则是根据需要特意将数据库恢复到某个过去的特定时间点或特定的 ...

随机推荐

  1. Xamarin的不归路-ios模拟器调整窗口大小

    ios模拟器调整窗口大小:

  2. SQL——行值表达式(Row Value Expressions)

    概述 最近接触了一个新概念——行值表达式,也叫做行值构造器.这是一个很强大的SQL功能,通常我们所操作的SQL表达式都只能针对一行中的单一字段进行操作比较,而行值表达式可以针对一行中的多个字段进行操作 ...

  3. linux用户管理(二)

    最简单的加入用户useradd 用户名这样的命令不好,因为会新建一个组为这个用户. 这里提到一个问题,为什么普通用户没有/etc/shadow的写权限却能修改自己的密码呢. 因为 /user/bin/ ...

  4. 正在运行的android程序,按home键之后退回到桌面,在次点击程序图标避免再次重新启动程序解决办法

    正在运行的android程序,按home键之后退回到桌面,在次点击程序图标避免再次重新启动程序解决办法 例如:一个android程序包含两个Activity,分别为MainActivity和Other ...

  5. HDU1039-Easier Done Than Said?(字符串处理)

    一,题意: 判断三个条件 1:有元音字母 2:不能三个连续元音或辅音 3:不能连续两个相同的字母,除非ee或oo二,思路 写函数一个条件一个条件去判断 #include<iostream> ...

  6. JS请求服务器并使页面跳转(转)

    前段时间在项目中用到了前台框架EasyUI,各种组件都是差不多都是用js来渲染的,这样一些页面请求就必须用js代码来写. 但是js请求就不和html请求的玩法不怎么相同,比如我要向服务器发送一个请求然 ...

  7. 《Linux内核设计与实现》读书笔记 第十八章 调试

    第十八章调试 18.1 准备开始          需要准备的东西: l  一个bug:大部分bug通常都不是行为可靠而且定义明确的 l  一个藏匿bug的内核版本:找出bug首先出现的版本 l  相 ...

  8. HDFS DataNode 设计实现解析

    前文分析了 NameNode,本文进一步解析 DataNode 的设计和实现要点. 文件存储 DataNode 正如其名是负责存储文件数据的节点.HDFS 中文件的存储方式是将文件按块(block)切 ...

  9. 论如何在手机端web前端实现自定义原生控件的样式

    手机开发webapp的同学一定遇到过这样问题,如何为丑极了的手机元素应用自定义的样式.首先,要弄清楚为什么要定义手机原生控件的样式,就需要看看手机的那些原生框样式的丑陋摸样: android: ios ...

  10. Web3DGame之路,Babylonjs 和TypeScript学习笔记(二)

    先来认识一下Babylonjs,由于基于webgl来开发,所以先介绍一下基础知识. Webgl是一个html标准,他要在canvas元素上初始化. Html页面上的准备 所以我们先从html页面开始看 ...