一步一步学RMAN第八篇 演练rman恢复

原创 2007年09月18日 17:38:00
 

  首先注意:rman备份的时候并不会备份临时表空间的数据文件(想想也是,反正是临时的,备它干嘛),所以完全恢复之后,如果临时表空间的数据文件也丢失,需要手工重新创建临时表空间的数据文件。据消息灵通人士称,10G之后的版本会在恢复过程中自动创建临时表空间的数据文件,手头没有环境(11g都出了,俺还在学9i,落后啊。),未经尝试,有心的朋友如果落实该消息,也不妨通知俺一下:)

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

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

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

  再然后需要明白:我们在对目标数据库做任何形式的修复或者恢复之前,目标数据库必须处于加载状态,恢复指定数据文件时,也可以在打开状态下恢复(什么,控制文件丢了,进不了加载状态?黑黑,麻烦了,不过也并非完全无可救药,接着往下看吧)。

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

  过程有三个步骤:

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

RMAN> SHUTDOWN IMMEDIATE;

RMAN> STARTUP MOUNT;

  2、执行恢复操作(记的我们刚说过的,恢复分两步,有先有后的。)

  RMAN> RESTORE DATABASE;

  RMAN> RECOVER DATABASE DELETE ARCHIVELOGS SKIP TABLESPACE TEMP;

  注意:DELETE ARCHIVELOGS和SKIP TABLESPACE两个参数是可选择的,作用如下:

  DELETE ARCHIVELOGS:表示RMAN将在完成恢复过程后自动删除那些在恢复过程中修复的归档日志文件。

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

  3、打开数据库

  RMAN> ALTER DATABASE OPEN;

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

二、恢复表空间

同样也可以分成三个步骤:

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

RMAN> SHUTDOWN IMMEDIATE;

RMAN> STARTUP MOUNT;

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

RMAN> SQL 'ALTER TABLESPACE jweb OFFLINE IMMEDIATE';

RMAN> RESTORE TABLESPACE jweb;

RMAN> RECOVER TABLESPACE jweb;

RMAN> SQL 'ALTER TABLESPACE jweb ONLINE';

  3、打开数据库

  RMAN> ALTER DATABASE OPEN;

三、恢复数据文件

事实上,恢复表空间实际就是恢复其所对应的数据文件(一个表空间可能对应多个数据文件),所以步骤与上相似。

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

RMAN> SHUTDOWN IMMEDIATE;

RMAN> STARTUP MOUNT;

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;

四、示例:归档模式下,假设某数据文件丢失,恢复该数据文件。

我们来模拟一个过程,首先我们创建一份数据库的完全备份,然后在数据库中进行若干操作,之后删除该数据文件来模拟该文件意外丢失,最后我们通过rman来恢复该数据文件。

还记的我们6章实战备份里写的备份脚本吗,ok,我们先执行该脚本,进行数据库备份。

E:/oracleScript/backup> database_backup_jssweb.bat

千万表忘了执行完之后看一下输出的log,一定要确保你所有的操作都是正确执行了的。

Ok,下面连接数据库模拟一些操作。(我懒,以下就少注文字,大家重点看过程就是了。)

C:/Documents and Settings/Administrator>sqlplus /nolog

SQL*Plus: Release 9.2.0.1.0 - Production on 星期三 7月 18 10:17:44 2007

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

SQL> conn jss/jss

已连接。

SQL> create table tmp3(col varchar2(50));

######创建一个临时表并插入一些数据

表已创建。

SQL> insert into tmp3 values ('test1');

已创建 1 行。

SQL> insert into tmp3 values ('test2');

已创建 1 行。

SQL> insert into tmp3 values ('test3');

已创建 1 行。

SQL> select *from tmp3;

COL

--------------------------------------------------

test1

test2

test3

SQL> commit;

提交完成。

SQL> conn / as sysdba    ####已dba用户连接并关闭数据库

已连接。

SQL> shutdown immediate;

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> host del F:/OraHome1/oradata/jssweb/jweb.ora

######手动删除数据文件

SQL> startup

ORACLE 例程已经启动。

Total System Global Area  143727516 bytes

Fixed Size                   453532 bytes

Variable Size             109051904 bytes

Database Buffers           33554432 bytes

Redo Buffers                 667648 bytes

数据库装载完毕。

ORA-01157: 无法标识/锁定数据文件 10 - 请参阅 DBWR 跟踪文件

ORA-01110: 数据文件 10: 'F:/ORAHOME1/ORADATA/JSSWEB/JWEB.ORA'

#######看看,启动报错了吧

SQL> select instance_name,status from v$instance;

#######看看当前数据库状态,应该是处于mount

INSTANCE_NAME    STATUS

---------------- ------------

jssweb           MOUNTED

OK,下面该RMAN出马了。

SQL>exit

C:/Documents and Settings/Administrator>set oracle_sid=jssweb

C:/Documents and Settings/Administrator>rman target /

恢复管理器: 版本9.2.0.1.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation.  All rights reserved.

连接到目标数据库: JSSWEB (DBID=3391142503)

RMAN> restore datafile 'F:/ORAHOME1/ORADATA/JSSWEB/JWEB.ORA';

####首先修复数据文件。是不是有疑问,为什么不像上面第三节讲的那样先将该数据文件置为脱机,笨啊你,数据库都没打开,脱什么机啊,整个数据库现在都是脱机的。

启动 restore 于 18-7月 -07

正在使用目标数据库控制文件替代恢复目录

分配的通道: ORA_DISK_1

通道 ORA_DISK_1: sid=11 devtype=DISK

通道 ORA_DISK_1: 正在开始恢复数据文件备份集

通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件

正将数据文件00010恢复到F:/ORAHOME1/ORADATA/JSSWEB/JWEB.ORA

通道 ORA_DISK_1: 已恢复备份段 1

段 handle=D:/BACKUP/1AIN4JU5_1_1 tag=TAG20070718T092837 params=NULL

通道 ORA_DISK_1: 恢复完成

完成 restore 于 18-7月 -07

RMAN> recover datafile 'F:/ORAHOME1/ORADATA/JSSWEB/JWEB.ORA';

########恢复数据文件

启动 recover 于 18-7月 -07

使用通道 ORA_DISK_1

正在开始介质的恢复

完成介质的恢复

完成 recover 于 18-7月 -07

RMAN> alter database open;   ########看起来很顺利,打开数据库看看

数据库已打开

RMAN> host;

Microsoft Windows [版本 5.2.3790]

(C) 版权所有 1985-2003 Microsoft Corp.

C:/Documents and Settings/Administrator>sqlplus jss/jss  ####连到该用户

SQL*Plus: Release 9.2.0.1.0 - Production on 星期三 7月 18 10:33:50 2007

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

连接到:

Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production

With the Partitioning, OLAP and Oracle Data Mining options

JServer Release 9.2.0.1.0 - Production

SQL> select *from tmp3;     ######查询我们备份后创建的表

COL

--------------------------------------------------

test1

test2

test3

#######yeah,成功恢复,没有数据丢失。

SQL>

附个SQL:用来查询数据文件,临时文件与表空间对应及数据文件序号:

select ts.tablespace_name, df.file_name, df.file_id, tf.file_name

  from dba_tablespaces ts, dba_data_files df, dba_temp_files tf

 where ts.tablespace_name = df.tablespace_name(+)

   and ts.tablespace_name = tf.tablespace_name(+)

 

【转帖】一步一步学RMAN之实战RMAN备份

一步一步学RMAN之实战RMAN备份[收藏此页] [打印]作者:IT168 李丙洋  2007-10-26 内容导航:第1页 第1页: 第1页 init_Nav(); 【IT168 技术文档】    ...
  • xihii6
  • xihii6
  • 2008年11月12日 16:21
  • 278

一步一步学RMAN第一篇 进入RMAN

 哈哈~~~~~天苍苍野茫茫,三思终于又出场。要问三思来干啥,来把RMAN讲一讲。吃喝玩乐间学习,心得体会一箩筐。不管结论对与错,先把过程来分享。如有异议务必提,共同学习共提高。  en,写的还挺顺口...
  • junsisi
  • junsisi
  • 2007年09月17日 16:58
  • 3538

一步一步学rman

http://stjup.blog.163.com/blog/static/26728520200971591239990/
  • cheliu
  • cheliu
  • 2010年01月29日 00:03
  • 110

一步一步学RMAN第三篇 RMAN备份演练初级篇

   前面我们已经知道了如何进入rman,以及rman的一些基本命令,相信大家定会觉着rman操作的简单,事实也确实如此,但万不要因此小视rman的强大,简单往往意味着灵活,灵活对于那些有心人则意味着...
  • junsisi
  • junsisi
  • 2007年09月17日 17:03
  • 3291

一步一步学RMAN第四篇 RMAN备份演练进阶篇

 忽悠人间自有正义在,处处盛开自由花三思也来玩布道,忽悠一家是一家前篇介绍了通过rman进行各种备份,进阶篇则主要是rman的一些功能扩展和增加功能,利用前篇你已经完全可以完成数据库的备份,而通过本篇...
  • junsisi
  • junsisi
  • 2007年09月17日 17:05
  • 2545

一步一步学ROP之linux_x86篇

0x00    本文仅解释说明蒸米大神一步一步学ROP之linux_x86篇,读者应先阅读这篇文章,遇到问题再来看我这篇文章。    阅读完这两篇文章后,我们会理解ROP(返回导向编程),DEP(堆栈...
  • jltxgcy
  • jltxgcy
  • 2016年02月19日 11:16
  • 2446

12C-RMAN基于时间点单表恢复

重要提示: 1、确保对于辅助数据库在/u01文件系统下有足够的可用空间,同时对数据泵文件也有同样保证 2、必须要存在一份完整的数据库备份,或者至少是要有SYSTEM相关的表空间备份 3、以下是在RMA...
  • gguxxing008
  • gguxxing008
  • 2016年10月31日 16:26
  • 643

几种RMAN恢复场景

前期准备: 做一次全库备份: [oracle@localhost ~]$ rman target / Recovery Manager: Release 11.2.0.4.0 - Productio...
  • cscscscsc
  • cscscscsc
  • 2016年09月10日 22:39
  • 1872

一步一步学RMAN第二篇 RMAN命令知多少

菩萨蛮·命令知多少上一节讲了怎么进,这节开讲知多少内容虽不多,排列费思量。RMAN贵灵活,应用是根本。无须死硬记,策略定规则。RMAN非常有意思,做为一个专业的备份工具,它几乎考虑到了备份及恢复过程中...
  • junsisi
  • junsisi
  • 2007年09月17日 17:01
  • 4804

一步一步学RMAN第六篇 实战RMAN备份

 念奴娇·RMAN历练秋风细雨,落叶飞,多少RMAN命令,一一铭记,想当年,毫无备份概念。一步一步,一点一滴,多少无眠夜。春风似剪,万千心事难寄。RMAN进展迅速,学习路漫漫,几经测试,错误不断,遍寻...
  • junsisi
  • junsisi
  • 2007年09月17日 17:22
  • 2126
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一步一步学RMAN第八篇 演练rman恢复
举报原因:
原因补充:

(最多只允许输入30个字)