RMAN 还原与恢复
为什么80%的码农都做不了架构师?>>>
--====================
-- RMAN 还原与恢复
--====================
在Oracle中,三大文件即控制文件,数据文件,日志文件的丢失与破坏都将需要使用还原或恢复来使数据库正常化。而RMAN还原与恢复
是实现数据库完整性、可靠性必不可少的手段之一。还原简言之即是将所需的文件从备份中复制到原来文件所在的路径。还原通常可以包括
数据库、表空间、数据文件级别的还原。通常还原后的内容会滞后于最新的数据库SCN,因此将归档日志、联机重做日志文件中的内容更新到
还原的数据文件中,这个过程称之为恢复。
恢复的几种情形
1.在mount 或open 阶段完成的灾难恢复
非系统表空间,undo表空间,所有的数据文件
2.在nomount 阶段完成的灾难恢复
控制文件(controlfile)
3.在mount 阶段完成的灾难恢复
系统表空间,联机重做日志文件
有关恢复、介质恢复、一致性或非一致性恢复的详细概念请参考:Oracle 基于用户管理恢复的处理
一、RMAN在归档模式下的还原与恢复的简化例子
RMAN> connect target /
RMAN> startup mount;
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open;
二、使用RMAN进行还原与恢复(非catalog方式)
1.数据文件丢失的恢复处理
--设定客户端环境变量并连接到数据库
C:/>set NLS_LANG=AMERICAN_AMERICA.AL32UTF8
C:/>rman target sys/redhat@dedicated nocatalog
--对数据库做全备
RMAN> backup as backupset
2> format '/u01/bk/rmbk/wb_%U'
3> tag=Whole_bak database;
RMAN> sql 'alter system archive log current';
--对数据库做级增量备份
RMAN> run{
2> allocate channel ch1 type disk;
3> backup incremental level 0 database
4> format '/u01/bk/rmbk/Inc_0_%U'
5> tag=Inc_0;
6> release channel ch1;}
--对表插入新记录并切换日志
SQL> select * from tb2;
ID NAME
---------- ---------------------------------------------
1 Robinson
2 Henry
SQL> insert into tb2 select 3,'Danny' from dual;
SQL> commit;
SQL> alter system checkpoint;
SQL> alter system switch logfile;
--对数据库做级增量备份
RMAN> run{
2> allocate channel ch1 type disk;
3> backup incremental level 1 database
4> format '/u01/bk/rmbk/Inc_1%U'
5> tag=Inc_1;
6> release channel ch1;}
SQL> shutdown immediate; --关闭数据库
SQL> ho rm $ORACLE_BASE/oradata/orcl/*.dbf --删除所有的数据文件 */
SQL> startup mount
--使用RMAN连接到未mount状态的数据库
RMAN> connect target sys/redhat@dedicated
connected to target database: ORCL (DBID=1257415066, not open)
--执行数据库还原
--注意当存在完整备份也同时存在级增量备份时,Oracle会自动使用级增量备份来还原数据库
RMAN> restore database;
piece handle=/u01/bk/rmbk/Inc_0_0alqu132_1_1 tag=INC_0 --下面可以看出还原的数据来自级增量备份
--执行数据库恢复
RMAN> recover database;
piece handle=/u01/bk/rmbk/Inc_10clqu1fe_1_1 tag=INC_1
--打开数据库验证恢复
RMAN> alter database open;
SQL> select * from bk.tb2;
ID NAME
---------- ---------------------------------------------
1 Robinson
2 Henry
3 Danny
2.磁盘损坏导致数据文件无法恢复到原始位置或不想恢复到原始位置的处理
使用set newname 命令将数据文件还原到新路径
set newname for datafile 1 to '<newdir>/system01.dbf'; --为恢复的数据文件指定新路径或重命名
使用switch命令将变更更新到控制文件
switch datafile n | all ; --等同于alter database rename file命令,该命令将恢复的数据文件重命名更新到控制文件
--下面的示例首先删除tbs01.dbf,接下来将其恢复到oradata目录中
SQL> ho rm $ORACLE_BASE/oradata/orcl/tbs01.dbf
SQL> startup mount force;
RMAN> connect target sys/redhat@dedicated
connected to target database: ORCL (DBID=1257415066, not open)
RMAN> run{
2> set newname for datafile 6 to '/u01/app/oracle/oradata/tbs01.dbf';
3> restore database;
4> switch datafile all;
5> recover database;
6> alter database open;}
SQL> select file#,name,status from v$datafile where file#=6;
FILE# NAME STATUS
---------- -------------------------------------------------- -------
6 /u01/app/oracle/oradata/tbs01.dbf ONLINE
SQL> select count(1) from bk.tb2; --表tb2位于tbs01.dbf内
COUNT(1)
----------
3
3.恢复表空间
--删除表空间内的数据文件,删除后在针对位于该表空间的表进行插入记录以及实施检查点进程
SQL> ho rm $ORACLE_BASE/oradata/tbs01.dbf
SQL> insert into bk.tb2 select 4,'Jackson' from dual;
SQL> commit;
SQL> alter system checkpoint;
--强制检查点后,告警日志出现错误提示,视图v$recover_file给出了故障数据文件
[oracle@oradb ~]$ tail -n 50 $ORACLE_BASE/admin/orcl/bdump/alert_orcl.log
Errors in file /u01/app/oracle/admin/orcl/bdump/orcl_ckpt_4724.trc:
ORA-01110: data file 6: '/u01/app/oracle/oradata/tbs01.dbf'
ORA-01116: error in opening database file 6
ORA-01110: data file 6: '/u01/app/oracle/oradata/tbs01.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
SQL> select * from v$recover_file;
FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
---------- ------- ------- ------------------ ---------- ---------
6 OFFLINE OFFLINE FILE NOT FOUND
SQL> select name,status from v$datafile where file#=6;
NAME STATUS
-------------------------------------------------- -------
/u01/app/oracle/oradata/tbs01.dbf RECOVER
--使用RMAN命令恢复数据文件,此时数据库处于OPEN状态,因此首先需要将表空间脱机,恢复完成之后再将其联机
RMAN> run{
2> sql 'alter tablespace tbs1 offline immediate';
3> set newname for datafile 6 to '/u01/app/oracle/oradata/orcl/tbs01.dbf';
4> restore tablespace tbs1;
5> switch datafile all;
6> recover tablespace tbs1;
7> sql 'alter tablespace tbs1 online';}
SQL> select name,status from v$datafile where file#=6; --位置变动到orcl子目录下,状态变为online
NAME STATUS
-------------------------------------------------- -------
/u01/app/oracle/oradata/orcl/tbs01.dbf ONLINE
--也可以使用下面的命令完成同样的功能
--注意如果表空间内有多个数据文件,而仅有单个数据文件损坏则采用下面的方式处理更为妥当
RMAN> run{
2> sql 'alter database datafile 6 offline immediate';
3> set newname for datafile 6 to '/u01/app/oracle/oradata/tbs01.dbf';
4> restore datafile 6;
5> switch datafile all;
6> recover datafile 6;
7> sql 'alter databaes datafile 6 online';}
4.RMAN实现不完全恢复
对于RMAN的不完全恢复,使用Oracle的闪回特性的处理有更多的优势。关于闪回请参考:Oracle 闪回特性
步骤
a.加载数据到mount状态(建议恢复前先做备份)
b.为高并发分配多个通道
c.还原所有(所需)的数据文件
d.使用until time,until sequence,until scn来恢复数据库
e.使用resetlogs打开数据库
f.全备数据库
演示RMAN基于until time的例子
SQL> show user;
USER is "BK"
SQL> create table tb1(id int,name varchar2(10));
SQL> insert into tb1 select 1,'Lancy' from dual;
SQL> ho strings $ORACLE_BASE/oradata/orcl/redo02.log | grep Lancy --查看联机日志文件中不存在刚刚插入的记录
SQL> commit; --注意commit是将日志缓冲内容写入到日志文件
SQL> ho strings $ORACLE_BASE/oradata/orcl/redo02.log | grep Lancy --提交后联机日志文件中才有新增的记录
Lancy
SQL> alter system switch logfile;
SQL> ho ls $ORACLE_BASE/oradata/arch
log_1_1_732989230.arc log_1_1_732989889.arc
RMAN> run{
2> allocate channel ch1 type disk;
3> allocate channel ch2 type disk;
4> backup as compressed backupset database plus archivelog delete input
5> format '/u01/bk/rmbk/wh_lg_%U'
6> tag='Wholebak_Pluslog';
7> release channel ch1;
8> release channel ch2;}
18:10:36 SQL> drop table tb1;
RMAN> run{
2> allocate channel ch1 type disk;
3> allocate channel ch2 type disk;
4> set until time "to_date('2010-10-21 18:10:36','yyyy-mm-dd hh24:mi:ss')";
5> restore database;
6> recover database;
7> alter database open resetlogs;
8> release channel ch1;
9> release channel ch2;}
SQL> select * from tb1;
ID NAME
---------- ----------
1 Lancy
5. SPFILE文件丢失的恢复
SPFILE参数文件可以在RMAN中进行备份,因此可以使用RMAN来恢复SPFILE文件。可以自动备份SPFILE。
SPFILE的自动备份是随着控制文件的备份一起被完成的,因此可以通过自动备份控制文件来实现自动备份SPFILE文件的目的
其次,在备份系统表空间时将引发控制文件的自动备份,而不论是否设置自动备份参数为ON,此时同样也备份SPFILE文件
有关SPFILE文件请参考:Oracle 参数文件
SPFILE 错误导致数据库无法启动(ORA-01565)
SPFILE文件恢复步骤
a. startup nomount [force];
b. set dbid=dbid_no;
c. restore spfile from autobackup | '<dir>'
d. startup force; 如果d执行失败则转到e,f,否则不用执行e,f。
e. set dbid=dbid_no;
f. startup;
下面设定控制文件的自动备份以及设置其备份路径(注意要预先知道目标数据库的DBID,此次演示的DBID为)
RMAN> configure controlfile autobackup on;
RMAN> configure controlfile autobackup format for device type disk to '/u01/bk/rmbk/auto_ctl_%d_%F';
RMAN> exit
sys@ORCL> alter tablespace users add datafile '$ORACLE_BASE/oradata/orcl/users02.dbf' size 5m;
[oracle@oradb rmbk]$ ls auto* --执行上一条alter tablespace users add datafile 语句将引发控制文件的自动备份
auto_ctl_ORCL_c-1263182651-20101124-00
sys@ORCL> shutdown immediate;
[oracle@oradb dbs]$ mv spfileorcl.ora spfileorcl.ora.bak --将原来的spfile文件重命名
[oracle@oradb ~]$ rman target / nocatalog
RMAN> startup nomount force;
RMAN> set dbid=1263182651;
RMAN> restore spfile from autobackup; --此处并没有找到文件路径,按Oracle联机文档,在nomount状态应该可以找到
RMAN-06172: no autobackup found or specified handle is not a valid copy or piece
RMAN> restore spfile from '/u01/bk/rmbk/auto_ctl_ORCL_c-1263182651-20101124-00'; --手动指定路径
RMAN> startup force;
6.联机重做日志文件丢失的恢复请参考:
基于catalog 的RMAN 备份与恢复
Oracle 联机重做日志文件(ONLINE LOG FILE)
7.控制文件的恢复处理
控制文件中描述了数据库的相关物理信息,如创建时间、DBID、数据文件、日志文件等相关信息,因此一旦控制文件丢失数据库将
不能启动,鉴于其重要性,控制文件的备份与恢复将单独列出。有关控制文件请参考下列
基于catalog 的RMAN 备份与恢复
Oracle 控制文件的备份与恢复
三、更多参考
有关基于用户管理的备份和备份恢复的概念请参考:
Oracle 冷备份
Oracle 热备份
Oracle 备份恢复概念
Oracle 实例恢复
Oracle 基于用户管理恢复的处理(详细描述了介质恢复及其处理)
有关RMAN的恢复与管理请参考:
RMAN 概述及其体系结构
RMAN 配置、监控与管理
RMAN 备份详解
RMAN 还原与恢复
有关Oracle体系结构请参考:
Oracle实例和Oracle数据库(Oracle体系结构)
Oracle 表空间与数据文件
Oracle 密码文件
Oracle 参数文件
Oracle 数据库实例启动关闭过程
Oracle 联机重做日志文件(ONLINE LOG FILE)
Oracle 控制文件(CONTROLFILE)
Oracle 归档日志
原文链接: http://blog.csdn.net/robinson_0612/article/details/6041247
转载于:https://my.oschina.net/dtec/blog/47387
RMAN 还原与恢复相关推荐
- Oracle RMAN 还原与恢复(一)--还原服务器参数文件
一. RMAN 还原与恢复基础 在RMAN 用于中,还原与恢复是两个不同的概念. 还原(restore):指访问先前生成的备份,从中得到一个或多个对象,然后在磁盘上的某个位置还原这些对象. 恢复(re ...
- RMAN简明教程之五——RMAN还原和恢复
一.常规还原与恢复 RMAN 的整个恢复过程可以分为还原(restore)与恢复(recover) ,他们在含义上是有很大差别的,一个是指物理意义的文件的还原与拷贝,一个是指数据库一致性 ...
- 19.Oracle10g服务器管理恢复--RMAN表空间恢复(练习33)
在练习12-14中我们学习了如何将数据库中删除的表恢复到错误发生之前,而不需要恢复整个数据库.Oracle可以恢复数据库的一个表空间,此时还原表空间数据文件,然后应用归档日志文件直到失效前或错误发生处 ...
- 中小型数据库 RMAN CATALOG 备份恢复方案(一)
对于数据库的稳定性,高可用,跨平台以及海量数据库的处理,Oracle 数据库通常是大型数据库和大企业的首选.尽管如此,仍然不乏很多中小企业想要品尝一下Oracle腥味,因此在Oracle环境中也有不少 ...
- centos7 mysql还原dmp_Linux平台下RMAN异机恢复总结
下面总结.整理一下RMAN异机恢复这方面的知识点,这篇笔记在个人笔记里面躺了几年了,直到最近偶然被翻看到,遂整理.总结一下.如下所示,个人将整个RMAN异机恢复分为准备工作和操作步骤两大部分.当然,准 ...
- 执行RMAN恢复的高级场景_通过网络还原和恢复文件
RMAN让你通过经由网络连接到包含需要的文件的物理备数据库还原或恢复文件.你可以还原整个数据库,数据文件,控制文件,spfile或表空间.在需要同步主和备数据库的场景中通过网络还原文件是非常有用的. ...
- 如何用Dummy实例执行数据库的还原和恢复
今天实验了一下,如何在所有文件,包括数据文件,在线日志文件,控制文件都丢失的情况下,利用RMAN备份恢复和还原数据库.该实验的重点是用到了Dummy实例. 具体步骤如下: 备份数据库 [oracle@ ...
- oracle 11g 从rman全备中恢复控制文件,拥有RMAN全备(缺少后增文件),丢失全部数据文件,控制文件的恢复...
1.做一个RMAN的全备 E:\oracle\rman_scripts>rman catalog target 恢复管理器: Release 10.2.0.1.0 - Production on ...
- Oracle学习笔记:备份、还原、恢复的一点理解
oracle提供了丰富.灵活的备份.还原.恢复管理机制和手段! 首先要明确的是这三个概念: 备份--backup:基于状态点的"拍照".归档 还原--restore:回滚到&quo ...
最新文章
- 推荐15个实用强大的网站,每一个都让人惊艳
- Open×××的新钩子设计
- MongoDB 进阶-关联查询
- go read text file into string array
- Locust学习--Locust远程部署要点
- 每天一个设计模式之享元模式
- 基于Pytorch的多任务推荐系统开源框架
- Linux下grafana安装方式
- guzz 1.3.0大版本发布,支持Spring事务
- 第八章、Zigbee模块的性能及测试
- APP渠道:安卓app推广渠道都有这几个!
- osgearth各版本源码下载
- 手机怎么设置企业邮箱的服务器,如何在手机上设置网易企业邮箱
- 计算机三级考点6:网络关键设备选型。
- 三个Python自动化测试高效工具的使用总结
- ST_Geometry 的关系函数
- java基于springboot+vue的驾校报名预约管理系统 nodejs
- android studio修改app图标
- 重写drf的ValidationError, 改变抛出异常的状态码
- vue全局配置_silent
热门文章
- list steam_在 Steam 中国版上玩单机游戏也会受到防沉迷系统管控
- java ssm 系统的搭建_SSM框架下的javaweb学生管理系统--搭建系统结构
- c语言字面量的作用是为变量,C语言(五) C 全局变量,局部变量,静态变量和常量...
- Java 设计模式 Day3 之面向抽象原则:什么是面向抽象编程?面向抽象编程如何应用?
- 《软件项目管理(第二版)》第 9 章——项目监督与控制 重点部分总结
- 获取行信息_论文推荐 | 周乐韬,黄丁发,袁林果,等:基于状态和残差的北斗基准站观测数据表达与信息分级...
- oracle 字段除以1000,ORACLE常用}1000(之一)_oracle
- ef mysql 的坑_C# EF 与 MySql 的那些坑
- 树莓派4B (aarch64) 安装PyTorch 1.8 的可行方案
- checkbox ajax 不选中的值,php – 无法通过ajax传递checkbox的值