`
fyd222
  • 浏览: 106057 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

RMAN 还原与恢复

 
阅读更多

--====================

-- 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 0

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执行失败则转到ef,否则不用执行ef

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 归档日志

分享到:
评论

相关推荐

    Oracle 11g R2 Rman备份与恢复_刘耀龙的博客-CSDN博客_rman备份.pdf

    Oracle 11g R2 的 RMAN (Recovery Manager) 是 Oracle 数据库管理系统中的一个关键工具,主要用于数据库的备份和恢复。RMAN 提供了一种高效且灵活的方式来管理和保护数据库,确保在数据丢失或系统故障时能够快速恢复...

    实战Oracle rman还原和恢复

    3. 使用RMAN恢复:使用RMAN进行一系列命令来恢复数据文件,包括分配通道、离线数据文件、还原、恢复并重新上线数据文件。 二、恢复(Recover) 恢复操作则涉及数据库的一致性恢复,确保数据文件在逻辑上与其它文件...

    Oracle Database 11g RMAN备份与恢复 中文版

    《Oracle Database 11g RMAN备份与恢复》主要内容简介:《Oracle Database 11g RMAN备份与恢复》提供了在硬件、软件、操作发生故障时保护数据库的详细信息。详细解释了如何配置数据库,创建精确的归档以及如何执行...

    Rman备份与恢复

    ### RMAN备份与恢复知识点详解 #### 一、概述 RMAN(Recovery Manager)是Oracle数据库提供的一个强大且功能全面的数据备份与恢复工具。它主要用于实现对Oracle数据库的完整或部分备份,以及在出现故障时进行恢复。...

    RMAN备份与恢复

    RMAN的恢复过程通常涉及还原备份、应用redo日志和打开数据库等步骤。在恢复过程中,RMAN可以自动处理大部分复杂逻辑,简化了数据库恢复的操作。 "备份恢复"这个文件名可能是关于实际操作的实例或指南,涵盖了如何...

    Oracle数据库RMAN备份与恢复技术

    ### Oracle数据库RMAN备份与恢复技术详解 #### 引言 在信息技术领域,数据安全与完整性至关重要。Oracle数据库,作为全球领先的数据库管理系统之一,提供了多种数据保护机制,其中RMAN(Recovery Manager,恢复...

    【RMAN】RMAN跨版本恢复(上)--小版本异机恢复.pdf

    RMAN(Recovery Manager)是Oracle提供的一个用来进行数据库备份、恢复和迁移的工具。本文档主要讲述了RMAN在不同版本间进行跨版本恢复,尤其是小版本异机恢复的具体操作和步骤。在数据库维护和迁移过程中,掌握跨...

    【RMAN】RMAN跨版本恢复(中)--大版本异机恢复

    在当前给出的文件中,主要讨论了Oracle数据库使用RMAN(Recovery Manager)工具在不同版本和不同硬件平台之间的恢复过程。RMAN是Oracle提供的一个集备份、恢复和迁移数据库于一体的工具。文档中涉及的知识点涵盖了跨...

    Oracle19c rac备份数据通过rman恢复到单实例

    ### Oracle 19c RAC 数据库通过 RMAN 恢复至单实例流程详解 #### 背景概述 在进行Oracle 19c RAC(Real Application Clusters)数据库的数据备份与恢复操作时,可能会遇到需要将RAC集群环境下的备份数据恢复到单...

    Oracle 12c备份恢复-RMAN工具技术手册

    这包括已备份的内容、备份文件的位置、存在哪些归档日志文件、已有的永久配置设置,以及 RMAN 连接数据库和备份,以完全自动执行还原和恢复操作所需的所有细节。该库存在于一个或两个位置。库的一个副本总是存储在...

    rman 备份与恢复

    2. **Server Session**:服务器会话是由RMAN启动的Oracle服务器进程,它与目标数据库建立会话,执行实际的备份、还原和恢复操作。 3. **Channel**:通道是RMAN与目标数据库之间的通信路径,用于控制备份和恢复过程...

    windows下的oracle数据库rman自动备份和恢复.pdf

    " oracle数据库RMAN自动备份和恢复" Oracle数据库RMAN自动备份和恢复是指使用Oracle提供的RMAN(Recovery Manager)工具来实现数据库的自动备份和恢复。RMAN是Oracle数据库的备份和恢复解决方案,可以实现数据库的...

    基于RMAN的Oracle数据库备份与恢复机制.pdf

    RMAN执行恢复操作时,通过控制文件找到备份路径和备份文件,然后执行还原和恢复。RMAN还提供了多种备份模式,包括全备份、增量备份、累积备份等,可以根据不同的业务需求选择合适的备份模式。 在实际应用中,RMAN...

    oracle10g-rman备份与恢复

    ### Oracle 10g RMAN备份与恢复 在Oracle数据库管理中,RMAN(Recovery Manager)是一个重要的工具,用于数据库备份、恢复以及灾难恢复。本文将基于提供的标题、描述和部分上下文内容来深入探讨Oracle 10g环境下...

    oracle rman自动备份

    #### 六、RMAN 还原与恢复 一旦备份完成,了解如何使用RMAN进行恢复同样至关重要。 ##### 1. 恢复整个数据库 当数据库遭受严重损坏时,可能需要完全恢复整个数据库。这通常涉及以下几个步骤: - 将数据库置于MOUNT...

    rman 异地恢复,备份路径不一样时数据库恢复

    RMAN 异地恢复、备份路径不一样时数据库恢复 RMAN 异地恢复是指在不同的服务器或存储设备上恢复数据库的备份。这种恢复方式需要在不同的服务器或存储设备上创建软连接、恢复控制文件、重命名数据文件和日志文件、...

    rman备份与恢复官方文档

    文档内容涵盖了RMAN(Recovery Manager)备份与恢复、RMAN数据传输、Oracle Flashback技术以及用户管理的备份与恢复。 RMAN是Oracle提供的一个集成备份、恢复和迁移工具,它可以对Oracle数据库执行备份、还原和恢复...

Global site tag (gtag.js) - Google Analytics