RMAN的恢复篇
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的恢复篇的更多相关文章
- oracle 备份恢复篇(一)---rman
一,rman介绍 RMAN(Recovery Manager)是随Oracle服务器软件一同安装的工具软件,它可以用来备份和恢复数据库文件.归档日志和控制文件,用来执行完全或不完全的数据库恢复.与传统 ...
- OCP考点实战演练01-备份恢复篇
本系列宗旨:真正掌握OCP考试中所考察的技能,坚决不做Paper OCP! 实验环境:RHEL 6.4 + Oracle 11.2.0.4 OCP考点实战演练01-备份恢复篇 1.数据库开启归档 2. ...
- Oracle DB备份恢复篇之丢失控制文件
实验目的 本篇主要模拟控制文件丢失后,如何根据实际情况恢复数据库,才能使数据库尽可能不丢失数据. 实验环境 1)Linux系统环境 [oracle@DG1 ~]$ lsb_release -a LSB ...
- RMAN的入门篇
一.RMAN连接数据库 1. 连接本地数据库 [oracle@oracle hotbak]$ export oracle_sid=orcl [oracle@oracle hotbak]$ rman ...
- Oracle RMAN备份恢复指导书
目 录 1 目的与范围... 1 2 术语和定义... 1 3 角色和职责... 2 4 使用RMAN备份数据库... 2 4.1.1 检查数据库模式... 2 4.1.2 连接到target数据库. ...
- RMAN数据库恢复 之归档模式有(无)备份-丢失数据文件的恢复
1.归档模式有备份,丢失数据文件的恢复归档模式有备份,不管丢失什么数据文件,直接在RMAN下RESTOER--->RECOVER--->OPEN即可. RMAN> STARUP MO ...
- OCP读书笔记(7) - 使用RMAN执行恢复
7.Using RMAN to Perform Recovery 使用RMAN进行完全恢复system表空间文件丢失的恢复 模拟损坏: SQL> conn /as sysdba; SQL> ...
- rman备份恢复命令之switch
rman备份恢复命令之switch 一 switch 命令 1 switch命令用途 更新数据文件名为rman下镜像拷贝时指定的数据文件名 更新数据文件名为 set newname 命令指定的名字. ...
- rman备份/恢复
全备脚本 cat rman_full.sh #!/bin/bash export ORACLE_BASE=/opt/oracle export ORACLE_HOME=$ORACLE_BASE/pro ...
随机推荐
- rabbitmq之work_pool
worker_pool_worker的作用是用来完成数据操作. 如何获取worker是从worker_pool里获取,并由worker_pool管理. 起动时间: -rabbit_boot_step( ...
- 使用Entity Framework 自动产生的Sql语句
对于一个单独实体的通常操作有3种:添加新的实体.修改实体以及删除实体. 1.添加新的实体 Entity Framework Code First添加新的实体通过调用DbSet.Add()方法来实现. ...
- php应用路径变量问题总结
实际效果测试,不考虑原理! 本地服务器,域名http://d.com,根路径D:\phpnow\vhosts\d.com.yii,相对根目录拥有文件/x.php代码里requeir_once /a/a ...
- Nodejs开发(1.Sublime Text 3配置)
本例使用Sublime Text 3开发 原因: 1. 有开发提示: 2. 非常easy的调试运行: 下载Sublime Text 3,官网地址:http://www.sublimetext.com/ ...
- JQuery data API实现代码分析
JQuery data 接口是什么? .data() Store arbitrary data associated with the matched elements or return the v ...
- ubuntu 常用命令集合版(二)【大侠勿喷,菜鸟欢迎】(转)
原文:http://page.renren.com/600759338/note/729595757 1.shutdown: 关闭系统,如果停留在TTY,请改用halt, poweroff等命令常用参 ...
- Leetcode: Assign Cookies
Assume you are an awesome parent and want to give your children some cookies. But, you should give e ...
- Thinkphp---------Call to a member function free_result() on a non-object
1.平时用框架用久了,直接执行原生的sql反而做起来反应迟钝了.今天遇到一个问题,就是直接执行一个添加的sql语句,然后我用了TP框架的M()->query();方法.运行以后,会报Call t ...
- sdutoj 2624 Contest Print Server
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2624 Contest Print Server ...
- Android--再探MVP模式
1,上一篇我们已经了解了大致的MVP模式,下面再通过这个登录功能的例子 ,我们能过更加容易的掌握MVP模式,再来补充一些闲外话:MVP 是 MVC 的变种,其实是一种升级.要说 MVP 就要说说 MV ...