Oracle 数据库的恢复实际上包含了两个概念:数据库修复(RESTORE)与数据库恢复(RECOVER):

  数据库修复:是指利用备份的数据库文件来替换已经损坏的数据库文件或者将其恢复到一个新的位置。RMAN 在进行修复操作时,会利用恢复目录(没有建立恢复目录的话就使用目标数据库的控制文件)来获取备份信息,并从中选择最合适的备份进行修复操作。选择备份时有两个原则(1、选择距离恢复目录时刻最近;2、优先选择镜像复制,其次才是备份集)

  数据库恢复:是指利用重做日志或增量备份来重建丢失的数据。

一、对数据库进行完全介质恢复

1、启动数据库到加载状态

RMAN> SHUTDOWN IMMEDIATE;
RMAN> STARTUP MOUNT;

2、执行恢复操作

RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE DELETE ARCHIVELOGS SKIP TABLESPACETEMP;

注意:DELETE ARCHIVELOGS 和SKIP TABLESPACE 两个参数是可选择的,作用如下:
DELETEARCHIVELOGS:表示RMAN将在完成恢复过程后自动删除那些在恢复过程中修复的归档日志文件。

SKIPTABLESPACE:跳过指定表空间,比如临时表,当然临时表空间即使你不跳过它也不会恢复的。

3、打开数据库

RMAN> ALTER DATABASE OPEN;

如果你的数据库并非处于归档模式,那么必须使用ALTER DATABASEOPEN RESETLOGS 来打开数据库,因为RMAN 会认为在非归档模式下是一个不一致的备份,执行resetlogs 之后,oracle 将会把scn 重新置为0。

二、恢复表空间

1、启动数据库到加载状态

RMAN> SHUTDOWN IMMEDIATE;
RMAN> STARTUPMOUNT;

2、进行恢复操作,在恢复之前,如果需要被恢复的表空间未处于脱机状态,需要通过alter tablespace ...Offline 语句将其置为脱机:

RMAN> SQL 'ALTER TABLESPACEjweb OFFLINE IMMEDIATE';
RMAN> RESTORE TABLESPACEjweb;
RMAN> RECOVER TABLESPACEjweb;
RMAN> SQL 'ALTER TABLESPACEjweb ONLINE';

3、打开数据库

RMAN> ALTER DATABASE OPEN;

三、恢复数据文件

1、启动数据库到加载状态

RMAN> SHUTDOWN IMMEDIATE;
RMAN> STARTUPMOUNT;

2、进行恢复操作,在恢复之前,如果需要被恢复的表空间未处于脱机状态,需要通过alter tablespace ...Offline 语句将其置为脱机,操作数据文件时可以直接指定数据文件,也可以以数据文件序号代替:

RMAN>SQL 'ALTER DATABASE DATAFILE 10 OFFLINE;
RMAN> RESTORE DATAFILE 10;
RMAN> RECOVER DATAFILE 10;
RMAN>SQL ' ALTER DATABASE DATAFILE 10 ONLINE;

3、打开数据库

RMAN> ALTER DATABASE OPEN;

演示:

演示一、数据文件丢失

SQL> conn dog/dog
Connected. ######创建一个临时表并插入一些数据
SQL> create table tmp1(col varchar(50)); Table created. SQL> insert into tmp1 values('test1'); 1 row created. SQL> insert into tmp1 values('test2'); 1 row created. SQL> insert into tmp1 values('test3'); 1 row created. SQL> commit; Commit complete. SQL> select * from tmp1; COL
--------------------------------------------------
test1
test2
test3 SQL> conn / as sysdba
Connected. SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down. ###手动删除数据文件
SQL> host rm /u01/app/oracle/oradata/orcl/test.dbf; SQL> startup
ORACLE instance started. Total System Global Area 805875712 bytes
Fixed Size 2217672 bytes
Variable Size 595593528 bytes
Database Buffers 201326592 bytes
Redo Buffers 6737920 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: '/u01/app/oracle/oradata/orcl/test.dbf' SQL> select instance_name,status from v$instance; INSTANCE_NAME STATUS
---------------- ------------
orcl MOUNTED

使用RMAN进行恢复

[oracle@oracle ~]$ rman target/

恢复管理器: Release 11.2.0.1.0 - Production on 星期一 12月 26 18:54:46 2016

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

已连接到目标数据库: ORCL (DBID=1458478724, 未打开)

RMAN> restore datafile 5;

启动 restore 于 2016-12-26 18:54:53
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=129 设备类型=DISK 通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 将数据文件 00005 还原到 /u01/app/oracle/oradata/orcl/test.dbf
通道 ORA_DISK_1: 正在读取备份片段 /backup/0nro5ada_1_1
通道 ORA_DISK_1: 段句柄 = /backup/0nro5ada_1_1 标记 = TAG20161223T011314
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:15
完成 restore 于 2016-12-26 18:55:13 RMAN> recover datafile 5; 启动 recover 于 2016-12-26 18:55:36
使用通道 ORA_DISK_1 正在开始介质的恢复 线程 1 序列 9 的归档日志已作为文件 /u01/ARCHLOG/1_9_931133551.dbf 存在于磁盘上
线程 1 序列 10 的归档日志已作为文件 /u01/ARCHLOG/1_10_931133551.dbf 存在于磁盘上
线程 1 序列 11 的归档日志已作为文件 /u01/ARCHLOG/1_11_931133551.dbf 存在于磁盘上
线程 1 序列 12 的归档日志已作为文件 /u01/ARCHLOG/1_12_931133551.dbf 存在于磁盘上
线程 1 序列 13 的归档日志已作为文件 /u01/ARCHLOG/1_13_931133551.dbf 存在于磁盘上
线程 1 序列 14 的归档日志已作为文件 /u01/ARCHLOG/1_14_931133551.dbf 存在于磁盘上
线程 1 序列 15 的归档日志已作为文件 /u01/ARCHLOG/1_15_931133551.dbf 存在于磁盘上
通道 ORA_DISK_1: 正在开始将归档日志还原到默认目标
通道 ORA_DISK_1: 正在还原归档日志
归档日志线程=1 序列=8
通道 ORA_DISK_1: 正在读取备份片段 /backup/0oro5afm_1_1
通道 ORA_DISK_1: 段句柄 = /backup/0oro5afm_1_1 标记 = TAG20161223T011430
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:02
归档日志文件名=/u03/ARCHLOG/1_8_931133551.dbf 线程=1 序列=8
归档日志文件名=/u01/ARCHLOG/1_9_931133551.dbf 线程=1 序列=9
归档日志文件名=/u01/ARCHLOG/1_10_931133551.dbf 线程=1 序列=10
归档日志文件名=/u01/ARCHLOG/1_11_931133551.dbf 线程=1 序列=11
归档日志文件名=/u01/ARCHLOG/1_12_931133551.dbf 线程=1 序列=12
归档日志文件名=/u01/ARCHLOG/1_13_931133551.dbf 线程=1 序列=13
介质恢复完成, 用时: 00:00:45
完成 recover 于 2016-12-26 18:56:29

验证数据是否得到恢复

SQL> alter database open;

Database altered.

SQL> conn dog/dog
Connected.
SQL> select * from tmp1; COL
--------------------------------------------------
test1
test2
test3

演示二、控制文件丢失

在应用备份恢复时,必须知道目标数据库的DBID,有多种方式可查,比如我们创建自动备份时,如果没有更改其命名方式,文件名中会包含DBID;或者查看之前的rman 备份日志,其中登陆到rman 之后会显示出目标数据库的DBID

删除控制文件

SQL> conn / as sysdba
Connected.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> host rm /u01/app/oracle/oradata/orcl/*.ctl;

使用RMAN进行恢复

[oracle@oracle ~]$ rman target/

恢复管理器: Release 11.2.0.1.0 - Production on 星期一 12月 26 19:10:54 2016

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

已连接到目标数据库 (未启动)

#####由于目标数据库控制文件丢失,在此处必须指定dbid#######

RMAN> set dbid 1458478724

正在执行命令: SET DBID

RMAN> restore controlfile from autobackup;

启动 restore 于 2016-12-26 19:13:09
使用目标数据库控制文件替代恢复目录
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: restore 命令 (在 12/26/2016 19:13:09 上) 失败
RMAN-12010: 自动通道分配初始化失败
RMAN-06403: 无法获得完全授权的会话
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory

报错了,需要启动到nomount

SQL> startup force nomount;
ORACLE instance started. Total System Global Area 805875712 bytes
Fixed Size 2217672 bytes
Variable Size 595593528 bytes
Database Buffers 201326592 bytes
Redo Buffers 6737920 bytes

再次进入RMAN进行恢复

###从备份中恢复控制文件文件########如果打开了自动备份,通过可以通过 restore controlfile from autobackup
RMAN> restore controlfile from '/backup/c-1458478724-20161223-00'; 启动 restore 于 2016-12-26 19:22:33
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=129 设备类型=DISK 通道 ORA_DISK_1: 正在还原控制文件
通道 ORA_DISK_1: 还原完成, 用时: 00:00:16
输出文件名=/u01/app/oracle/oradata/orcl/control01.ctl
输出文件名=/u01/app/oracle/flash_recovery_area/control02.ctl
完成 restore 于 2016-12-26 19:22:51

#######控制文件已恢复,将目标数据库置为加载状态
RMAN> sql 'alter database mount'; sql 语句: alter database mount
释放的通道: ORA_DISK_1 RMAN> restore database; 启动 restore 于 2016-12-26 19:24:12
启动 implicit crosscheck backup 于 2016-12-26 19:24:12
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=129 设备类型=DISK
已交叉检验的 3 对象
完成 implicit crosscheck backup 于 2016-12-26 19:24:16 启动 implicit crosscheck copy 于 2016-12-26 19:24:16
使用通道 ORA_DISK_1
完成 implicit crosscheck copy 于 2016-12-26 19:24:17 搜索恢复区中的所有文件
正在编制文件目录...
没有为文件编制目录 使用通道 ORA_DISK_1 通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 将数据文件 00001 还原到 /u01/app/oracle/oradata/orcl/system01.dbf
通道 ORA_DISK_1: 将数据文件 00002 还原到 /u01/app/oracle/oradata/orcl/sysaux01.dbf
通道 ORA_DISK_1: 将数据文件 00003 还原到 /u01/app/oracle/oradata/orcl/undotbs01.dbf
通道 ORA_DISK_1: 将数据文件 00004 还原到 /u01/app/oracle/oradata/orcl/users01.dbf
通道 ORA_DISK_1: 将数据文件 00005 还原到 /u01/app/oracle/oradata/orcl/test.dbf
通道 ORA_DISK_1: 将数据文件 00006 还原到 /u01/app/oracle/oradata/orcl/bk02.dbf
通道 ORA_DISK_1: 正在读取备份片段 /backup/0nro5ada_1_1
通道 ORA_DISK_1: 段句柄 = /backup/0nro5ada_1_1 标记 = TAG20161223T011314
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:02:38
完成 restore 于 2016-12-26 19:26:57 RMAN> recover database; 启动 recover 于 2016-12-26 19:27:49
使用通道 ORA_DISK_1 正在开始介质的恢复 线程 1 序列 14 的归档日志已作为文件 /u01/app/oracle/oradata/orcl/redo02.log 存在于磁盘上
线程 1 序列 15 的归档日志已作为文件 /u01/app/oracle/oradata/orcl/redo03.log 存在于磁盘上
线程 1 序列 16 的归档日志已作为文件 /u01/app/oracle/oradata/orcl/redo01.log 存在于磁盘上
通道 ORA_DISK_1: 正在开始将归档日志还原到默认目标
通道 ORA_DISK_1: 正在还原归档日志
归档日志线程=1 序列=8
通道 ORA_DISK_1: 正在读取备份片段 /backup/0oro5afm_1_1
通道 ORA_DISK_1: 段句柄 = /backup/0oro5afm_1_1 标记 = TAG20161223T011430
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
归档日志文件名=/u03/ARCHLOG/1_8_931133551.dbf 线程=1 序列=8
归档日志文件名=/u01/ARCHLOG/1_9_931133551.dbf 线程=1 序列=9
归档日志文件名=/u01/ARCHLOG/1_10_931133551.dbf 线程=1 序列=10
归档日志文件名=/u01/ARCHLOG/1_11_931133551.dbf 线程=1 序列=11
归档日志文件名=/u01/ARCHLOG/1_12_931133551.dbf 线程=1 序列=12
归档日志文件名=/u01/ARCHLOG/1_13_931133551.dbf 线程=1 序列=13
归档日志文件名=/u01/app/oracle/oradata/orcl/redo02.log 线程=1 序列=14
归档日志文件名=/u01/app/oracle/oradata/orcl/redo03.log 线程=1 序列=15
归档日志文件名=/u01/app/oracle/oradata/orcl/redo01.log 线程=1 序列=16
介质恢复完成, 用时: 00:01:01
完成 recover 于 2016-12-26 19:28:55 RMAN> sql 'alter database open resetlogs'; sql 语句: alter database open resetlogs

总结:

SQL> startup force nomount;
RMAN target/
RMAN> setdbid xxxxx
RMAN> restore controlfile from autobackup;
或者:
RMAN> restore controlfile from 'd:\backup\C-xxxxx';
RMAN> sql 'alter databasemount';
RMAN> restore database;
RMAN> recover database;
RMAN> sql 'alter database open resetlogs';

RMAN的恢复篇的更多相关文章

  1. oracle 备份恢复篇(一)---rman

    一,rman介绍 RMAN(Recovery Manager)是随Oracle服务器软件一同安装的工具软件,它可以用来备份和恢复数据库文件.归档日志和控制文件,用来执行完全或不完全的数据库恢复.与传统 ...

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

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

  3. Oracle DB备份恢复篇之丢失控制文件

    实验目的 本篇主要模拟控制文件丢失后,如何根据实际情况恢复数据库,才能使数据库尽可能不丢失数据. 实验环境 1)Linux系统环境 [oracle@DG1 ~]$ lsb_release -a LSB ...

  4. RMAN的入门篇

    一.RMAN连接数据库 1.  连接本地数据库 [oracle@oracle hotbak]$ export oracle_sid=orcl [oracle@oracle hotbak]$ rman ...

  5. Oracle RMAN备份恢复指导书

    目 录 1 目的与范围... 1 2 术语和定义... 1 3 角色和职责... 2 4 使用RMAN备份数据库... 2 4.1.1 检查数据库模式... 2 4.1.2 连接到target数据库. ...

  6. RMAN数据库恢复 之归档模式有(无)备份-丢失数据文件的恢复

    1.归档模式有备份,丢失数据文件的恢复归档模式有备份,不管丢失什么数据文件,直接在RMAN下RESTOER--->RECOVER--->OPEN即可. RMAN> STARUP MO ...

  7. OCP读书笔记(7) - 使用RMAN执行恢复

    7.Using RMAN to Perform Recovery 使用RMAN进行完全恢复system表空间文件丢失的恢复 模拟损坏: SQL> conn /as sysdba; SQL> ...

  8. rman备份恢复命令之switch

    rman备份恢复命令之switch 一 switch 命令 1 switch命令用途 更新数据文件名为rman下镜像拷贝时指定的数据文件名 更新数据文件名为 set newname 命令指定的名字. ...

  9. rman备份/恢复

    全备脚本 cat rman_full.sh #!/bin/bash export ORACLE_BASE=/opt/oracle export ORACLE_HOME=$ORACLE_BASE/pro ...

随机推荐

  1. setAlpha方法 设置透明度

    public void setAlpha (int x) 其中,参数x为透明度,取值范围为0~255,数值越小越透明.

  2. wpf 将Style应用到 ListView 中的 ListViewItem 元素

    例: 为每个条目元素设置右键菜单 1. 新建右键菜单元素和样式元素 注意: 同时设置样式元素的 TargetType 属性和 x:Key 属性, 将样式元素限定为应用于 ListViewItem 类型 ...

  3. Python requests模块学习笔记

    目录 Requests模块说明 Requests模块安装 Requests模块简单入门 Requests示例 参考文档   1.Requests模块说明 Requests 是使用 Apache2 Li ...

  4. Log4j学习

    学习链接: http://www.codeceo.com/article/log4j-usage.html http://www.blogjava.net/kit-soft/archive/2009/ ...

  5. VMware安装Linux第一天

    今天上午下载了VMware-workstation_full_12.1.1.6932,它的Key是5A02H-AU243-TZJ49-GTC7K-3C61N,这些都是网络上搜罗到的. VMWare安装 ...

  6. css样式管理

    css命名 传统网站页面(企业级),大概就是about,product,register等,他们的名字较好区分,他们的样式整体也不会很大,用简单的驼峰法就够了,或者简单的模块. 非传统企业页面,命名驼 ...

  7. django for monkey(chapter one)

    一.获取设备驱动 class monkey(object): def get_devices(self): self.a = os.popen('adb devices') self.devices ...

  8. Hausdorff distance

    微分动力系统原理 这本书里有介绍 Hausdorff距离是描述两组点集之间相似程度的一种量度,它是两个点集之间距离的一种定义形式:假设有两组集合A={a1,…,ap},B={b1,…,bq},则这两个 ...

  9. 换手率的公司使用MQTT的框架

    向换手率公司学习.该公司貌似也使用 Golang

  10. php函数、php定义数组和数组遍历

    <?php //php函数//1.简单函数//四要素:返回类型,函数名,参数列表,函数体 /*function Show(){ echo "hello";} Show();* ...