rman--君三思 收藏
第一篇 进入RMAN

哈哈~~~~~

天苍苍野茫茫,三思终于又出场。

要问三思来干啥,来把RMAN讲一讲。

吃喝玩乐 间 学习,心得体会一箩筐。

不管结论对与错,先把过程来分享。

如有异议务必提,共同学习共提高。

en, 写的还挺顺口,俺自满啊~~~~~以后俺要是找不着干dba的工作,俺就到说不得大师的玄幻世界里当吟唱诗人去。

  书归正传,在开始之前俺先强调一点, 通过RMAN的方式不论要备份还是要恢复,都必须先启动实例并加载数据库。 ( 有人在抗议,说这太初级了。俺说明一下,这是一个超

级菜鸟摸爬滚打的心路历程,别说初级,连弱智的内容都有,所以俺友情提醒 大虾们务必开启初级内容过滤功能,以妨过多占用您宝贵时间,什么?你不会这一招,哎,我这里有

秘制一目十行术,看你是大虾给你打8折,pm我吧 )

  RMAN有两种操作方式,一种是类似dos,通过键盘操作的 命令方式 ,第二种是类似windows通过鼠标操作的 图形化界面方式 。图形化方式操作简单但也因此省略了一些具体

过程,你可能成功操作但却不知道oracle究竟做了什么,怎么做的。俺立志也是要做名oracle大虾地,所以第二种方式完全不在考虑之列,最多只是参考。本篇后续内容所做的各

项操作也都将以命令方式进行。

一、 连接本地数据库

  通过rman连接本地数据库非常简单,以windows平台为例,进入到命令提示符界面:

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>
注:如果本地库只有一个实例,则不需要指定oracle_sid。Rman会自动连接到默认实例。

  当然,你也可以先启动rman,然后再通过connect来连接目标数据库,如下:

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

C:\Documents and Settings\Administrator>rman

恢复管理器: 版本9.2.0.1.0 - Production

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

RMAN> connect target /

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

RMAN>
二、 连接远程数据库

  如果要连接的目标数据库是一个远程数据库,那么必须在建立连接时指定一个有效的网络服务名,同时你本地的tnsname.ora文件中也必须已经建立了该网络服务名的正确配置

。示例如下:

C:\Documents and Settings\Administrator>rman target sys/ change_on_install @test db

恢复管理器: 版本9.2.0.1.0 - Production

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

连接到目标数据库: TEST DB  (DBID=22 2 0 2 62593)

RMAN>
  当然,在这里你也可以同样先启动rman,再通过connect创建连接。具体示例与上类似,如果再做演示那这个环节不仅是弱,而是超弱,即使坚定如我也承受不了如此强烈的呕

吐加鄙视的欲望,所以还是做罢吧。

三、 退出RMAN

  哈哈,退出就太简单啦,敲个EXIT试试~~~~~~

  还有一点各位新友也了解一下,对于以后写rman批处理会有帮助。在启动rman时可以指定日志输出,之前的示例中均没有指定,rman就将执行结果直接打印到屏幕了,如果我

们以后写了一堆超长的rman批处理放在后台执行,可能会希望能够把执行日志记录下来备查,这个时候日志输出功能就用上了。这个功能也非常简单,如下:

C:\Documents and Settings\Administrator>rman target /   log d:\logs\rman_log.txt
  rman 会将执行的结果直接输出到指定的d:\logs\rman_log.txt文件,一旦脚本放入后台执行出现问题,我们可以根据rman_log文件来辅助分析。
 
第二篇 RMAN命令知多少
[君三思] 2007-6-18
菩萨蛮 · 命令知多少

上一节讲了怎么进,这节开讲知多少

内容虽不多,排列费思量。

RMAN 贵灵活,应用是根本。

无须死硬记,策略定规则。

RMAN 非常有意思,做为一个专业的备份工具,它几乎考虑到了备份及恢复过程中可能遇到的各种操作,由此它也提供了各种各样的命令来为这些操作提供便利。

一、启动、关闭数据库

  在RMAN中执行关闭和启动数据库的命令与SQL环境下一模一样。当然,在执行之前,你需要先连接到目标数据库,如例:

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> shutdown immediate

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

数据库已关闭

数据库已卸载

Oracle  例程已关闭

RMAN> startup

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

Oracle  例程已启动

数据库已加载

数据库已打开

系统全局区域总计     143727516 字节

Fixed Size                      453532  字节

Variable Size                109051904  字节

Database Buffers              33554432  字节

Redo Buffers                    667648  字节

RMAN>
  当然,你也可以执行startup mount,然后再利用alter database open命令打开数据库以及shutdown normal,shutdown abort等。总之启动和关闭的命令跟SQL环境下相比就仨

字儿:完全一模一样。

二、执行操作系统命令

Rman 支持通过执行host命令暂时退出rman的命令提示符而进入到操作系统的命令环境,如下例:

RMAN> host;

Microsoft Windows [ 版本 5.2.3790]

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

C:\Documents and Settings\Administrator>cd \

C:\>exit

主机命令完成

RMAN>
执行完系统命令后可以再通过执行exit退出到rman命令提示符下。

三、执行SQL语句

在rman中执行sql语句稍嫌复杂。

在RMAN的命令提示符后输入SQL命令,然后在一对单引号(双引号亦可)中输入要执行的SQL语句,例如:

RMAN>  SQL ¨ALTER SYSTEM ARCHIVE LOG ALL¨ ;
需要注意的一点是, rman 中的sql环境不能执行SELECT语句 ,或者说执行不报错,但你也看不到结果。

其实我们完全可以通过更取巧的方式来实现更强大的SQL操作,比如利用第二项介绍的内容,如下:

RMAN> host;

Microsoft Windows [ 版本 5.2.3790]

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

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

SQL*Plus: Release 9.2.0.1.0 - Production on  星期四 6月 28 17:40:24 2007

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

SQL> conn / as sysdba

已连接。

SQL> select sysdate from dual;

SYSDATE

----------

28-6 月 -07

SQL> exit

从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 中断开

C:\Documents and Settings\Administrator>exit

主机命令完成

RMAN>
萝卜青菜各有所爱,大家是爱萝卜还是爱青菜啊,爱萝卜的请选第一种,爱青菜的请选第二种。我爱吃肉,我要找第三种出来~~~~~

四、定义RMAN配置

RMAN 中具有一系列的默认配置,这些配置决定了备份和恢复时的一些选项(此节内容枯燥,眼神不好的同学请自觉跳过),比如:

自动分配通道的配置;
备份保留时间的配置;
备份集大小的限制;
启用或禁用备份优化功能;
镜像复制的备份数量;
是否将某个表空间排队在备份之外。
修改配置是通过 CONFIGURE 命令 ,具体用法非常简单,但由于可供configure的配置非常之多,这里不做详细介绍,在后续实际演练章节中会有体现。当然,有心的朋友也可以通

过google搜索一下,更有耐心的新友就等着看俺写的外传。

五、显示RMAN默认配置

Rman 中可以利用show命令来显示当前的配置参数。例如,通过SHOW ALL显示当前所有的配置。

RMAN> show all;

RMAN  配置参数为:

CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;

CONFIGURE BACKUP OPTIMIZATION OFF; # default

CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default

CONFIGURE CONTROLFILE AUTOBACKUP ON;

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ¨d:/backup/%F¨;

CONFIGURE DEVICE TYPE DISK PARALLELISM 1; # default

CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default

CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default

CONFIGURE MAXSETSIZE TO UNLIMITED; # default

CONFIGURE SNAPSHOT CONTROLFILE NAME TO ¨F:\ORAHOME1\DATABASE\SNCFJSSWEB.ORA¨; #

default

RMAN>
注:配置项后面跟了# default的表示该项仍是初始配置,未被修改过。

该命令使用也相当灵活,其后跟上不同的类型的配置参数,即可以显示不同类型的配置,如:

SHOW CHANNEL;

SHOW DEVICE TYPE;

SHOW DEFAULT DEVICE TYPE;

六、列出备份信息

  LIST 命令用来查看通过RMAN生成的备份信息,照我看来,这个应用应该会非常少,大家了解即可(引申一下,不仅是list,俺基本认为备份这种操作,脚本一次定型,100年

不许变,哪有DBA天天干备份恢复的,如果真是这样,那您这库。。。。。。)。例如:

列出数据库中所有文件的备份信息:

RMAN> LIST BACKUP OF DATABASE;
列出指定表空间的备份信息:

RMAN> LIST COPY OF TABLESPACE ¨SYSTEM¨;
列出指定数据文件的备份信息:

RMAN> LIST BACKUP OF DATAFILE ¨F:\ORAHOME1\ORADATA\JSSWEB\JWEB.ORA¨;
七、删除备份

  用于删除RMAN备份记录及相应的物理文件。当使用RMAN执行备份操作时,会在RMAN资料库中生成RMAN备份记录,并且RMAN备份记录被存放在目标数据库的控制文件中,如果配

置了恢复目录,那么该备份记录也会被存放到恢复目录中。

1 、删除陈旧备份

当使用RMAN执行备份操作时,RMAN会根据备份冗余策略确定陈旧备份。      

RMAN>   delete obsolete ;
2 、删除EXPIRED备份

执行crosscheck命令核对备份集,那么会将该备份集标记为EXPIRED状态。为了删除相应的备份记录,可以执行delete expired backup命令。      

RMAN>   delete expired backu p;
3 、删除EXPIRED副本

RMAN>   delete expired copy ;
4 、删除特定备份集

RMAN>   delete backupset 19 ;
5 、删除特定备份片

RMAN>   delete backuppiece ¨d:\backup\DEMO_19.bak¨ ;
6 、删除所有备份集

RMAN>   delete backup ;
7 、删除特定映像副本

RMAN>   delete datafilecopy ¨d:\backup\DEMO_19.bak¨ ;
8 、删除所有映像副本

RMAN>   delete  copy;
9 、在备份后删除输入对象

RMAN>   delete archivelog all delete input ;
RMAN> delete backupset 22 format = ¨¨d:\backup\%u.bak¨¨ delete input;  
八、批处理命令RUN

重头戏来了,大家鼓掌。谢谢大家的掌声,RUN的用法虽然很简单,但run太重要了,是我们后面几乎经常都要遇到的,也正因此我不敢贸然下笔,于是我准备。。。。。。。。

。。。。。。。。。。。。。。。跳票,下章见~~
 
第三篇 RMAN备份演练初级篇
[君三思] 2007-6-21
  前面我们已经知道了如何进入rman,以及rman的一些基本命令,相信大家定会觉着rman操作的简单,事实也确实如此,但万不要因此小视rman的强大,简单往往意味着灵活,

灵活对于那些有心人则意味着主动权尽在掌握。

一、RMAN备份形式

  1、镜像复制(Image Copies)

  镜像复制实际上就是数据文件、控制文件或归档文件的复制,与用户通过操作系统命令建立的文件复制实质一样,只不过RMAN是利用目标数据库中的服务进程来完成文件复制

,而用户则是用操作系统命令。所以镜像复制的方式体现不出RMAN的优势,也并非我们讨论的重点,大家了解一下即可(啥?想知道镜像复制咋用?卡,问村长去~~~~~)。

  2、备份集(Backup Sets)

  备份集是通过RMAN创建的逻辑备份对象。一个备份集中可以包含多个数据文件、控制文件或归档文件。备份集在物理上是由多个备份片段组成,每个备份片段是一个操作系统

文件。

二、RMAN命令执行方式

  在进入演练之前,大家还有必要了解运行rman命令的方式,就目前已知的情况,共有4种运行方式。

  1、单个执行(没啥说的,之前的示例都是这种方式)

RMAN> backup database ;
  2、批处理(呵呵,跳票的补上)

RMAN> RUN{

.......................

.......................

}
  批处理方式实质是将原来单个执行的命令组合到一起,并放在run{}之间,这种方式最大的好处是所有在run中的命令被视为一个作业,如果作业中任何一条命令执行失败,则

整个命令停止执行,即失败命令后的其它命令都不会再被执行。这种方式是最常使用的方式,特别对于后台执行。

  3、运行脚本(又能细分为几种方式如下:)

C:\ > rman TARGET / @backup_db.rman

RMAN> @backup_db.rman

RMAN> RUN { @backup_db.rman }
  运行存储在恢复目录中的脚本(需要首先为rman创建恢复目录)

RMAN> RUN { EXECUTE SCRIPT backup_whole_db };
  看看,够灵活吧。

  4、操作系统脚本(linux,windows环境下小有差异,但只是操作系统命令的不同)

C:\ > rman cmdfile=backup_db.rman
  明眼人看的出来,后两种其实是前面两种加上操作系统命令的综合应用。

三、对数据库进行全备

  1、使用backup database命令执行备份

RMAN> BACKUP DATABASE;
  执行上述命令后将对目标数据库中的所有数据文件进行备份,由于没有显式指定FORMAT参数,rman会自动为每个备份片段命名,并保存在ORACLE_HOME/database目录下。

  当然,也可以通过显式指定format参数来自定义备份片段的命令规则,比如:

RMAN> BACKUP DATABASE FORMAT ¨D:\BACKUP\%U¨;
  ( 关于%U的格式说明,请参考本篇外传。Ooo,外传好像还没写,没关系没关系,大家表着急,我保证大家在有生之年一定等的到的。)

  2 、通过list命令查看刚刚创建的备份信息:

RMAN> list backup of database;

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

备份集列表

===================

BS  关键字  类型 LV 大小       设备类型 经过时间 完成时间

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

11      Incr 0  827M       DISK        00:01:30     26-6 月 -07

BP  关键字: 11   状态: AVAILABLE   标记:TAG20070629T150701

段名:D:\BACKUP\0CILGG8L_1_1

   备份集 11 中的数据文件列表

   文件 LV 类型 Ckp SCN    Ckp 时间   名称

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

  1    0  Incr 5233577896 26-6 月 -07 F:\ORAHOME1\ORADATA\JSSWEB\SYSTEM01.DBF

  2    0  Incr 5233577896 26-6 月 -07 F:\ORAHOME1\ORADATA\JSSWEB\UNDOTBS01.DBF

  3    0  Incr 5233577896 26-6 月 -07 F:\ORAHOME1\ORADATA\JSSWEB\DRSYS01.DBF

  4    0  Incr 5233577896 26-6 月 -07 F:\ORAHOME1\ORADATA\JSSWEB\EXAMPLE01.DBF

  5    0  Incr 5233577896 26-6 月 -07 F:\ORAHOME1\ORADATA\JSSWEB\INDX01.DBF

  6    0  Incr 5233577896 26-6 月 -07 F:\ORAHOME1\ORADATA\JSSWEB\ODM01.DBF

  7    0  Incr 5233577896 26-6 月 -07 F:\ORAHOME1\ORADATA\JSSWEB\TOOLS01.DBF

  8    0  Incr 5233577896 26-6 月 -07 F:\ORAHOME1\ORADATA\JSSWEB\USERS01.DBF

  9    0  Incr 5233577896 26-6 月 -07 F:\ORAHOME1\ORADATA\JSSWEB\XDB01.DBF

  10   0  Incr 5233577896 26-6 月 -07 F:\ORAHOME1\ORADATA\JSSWEB\JWEB.ORA;
四、备份表空间

  只要实例启动并处于加载状态,不论数据库是否打开,都可以在rman中对表空间进行备份,而且不需要像手动备份那样先¨ALTER TABLESPACE ... BEGIN BACKUP¨。例如:

RMAN> backup tablespace jweb;

启动 backup 于  26 - 6 月 -07

使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在启动 full 数据文件备份集

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

输入数据文件 fno=00010 name=F:\ORAHOME1\ORADATA\JSSWEB\JWEB.ORA

通道 ORA_DISK_1: 正在启动段 1 于  26 - 6 月 -07

通道 ORA_DISK_1: 已完成段 1 于  26 - 6 月 -07

段 handle=F:\ORAHOME1\DATABASE\0JIM0BBV_1_1 comment=NONE

通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:15

完成 backup 于  26 - 6 月 -07

启动 Control File and SPFILE Autobackup 于  26 - 6 月 -07

段 handle=D:\BACKUP\C-3391142503-20070704-00 comment=NONE

完成 Control File and SPFILE Autobackup 于  26 - 6 月 -07
  同样,我们在使用backup tablespace也可以通过显式指定format参数自定义备份片段名称。

  我们再通过LIST BACKUP 查看一下备份:

RMAN>  LIST BACKUP OF TABLESPACE JWEB ;
  发现有两份备份片段,复习一下2章的内容,删除其中一个备份(删除的方法非常多,下例使用删除backupset,有心的朋友不妨自己尝试一下通过其它方式删除指定备份片段)

RMAN>  DELETE BACKUPSET 18 ;
五、备份指定数据文件

  首先可以先通过数据字典DBA_DATA_FILES查询出表空间对应的数据文件及其序号,例如:

  select  file_name,file_id,tablespace_name  from  dba_data_files

  然后再通过BACKUP DATAFILE 备份指定序号的数据文件,例如:

RMAN>  BACKUP DATAFILE n;
  如果要查看指定数据文件的备份,可以用:

RMAN>  LIST BACKUP OF DATAFILE n;
  注:n=指定的的数据文件序号,如果需要备份的数据文件有多个,n=多个序号,中间以逗号分隔即可。

六、备份控制文件

  控制文件在ORACLE中的重要性是毋庸置疑的,你看,连RMAN都给予特殊的照顾,在RMAN中备份控制文件的方式是最多的。

  1. 最简单的方式,通过CONFIGURE命令将CONTROLFILE AUTOBACKUP置为ON。

RMAN>  CONFIGURE CONTROLFILE AUTOBACKUP ON;
  然后你再通过rman做任何备份操作的同时,都会自动对控制文件做备份。

  2. 在自动备份打开的情况下,备份任意表空间操作时,RMAN均会自动对控制文件做备份。

  3. 手动执行备份命令。

RMAN>  BACKUP CURRENT CONTROLFILE;
  4. 执行BACKUP时指定INCLUDE CURRENT CONTROLFILE参数,例如:

RMAN>  BACKUP DATABASE INCLUDE CURRENT CONTROLFILE;
  如果要查看备份的控制文件,可以通过:

RMAN>  LIST BACKUP OF CONTROLFILE;
七、备份归档日志文件

  归档日志对于数据库介质恢复相当关键,其虽然不像控制文件那样一旦损坏则数据库马上崩溃但重要性丝毫不减。归档日志文件能确保我们将数据库恢复到备份之前的任意时

刻。在RMAN中备份归档日志有两种方式:

  1 、利用BACKUP ARCHIVELOG命令备份

RMAN>  BACKUP ARCHIVELOG ALL;
  2 、在BACKUP过程中利用PLUS ARCHIVELOG参数备份,例如:

RMAN>  BACKUP DATABASE PLUS ARCHIVELOG;
则在备份数据库的同时自动对所有归档文件进行备份。这种方式与上种有什么区别呢,区别太明显了,BACKUP.....PLUS ARCHIVELOG命令在备份过程中会依次执行下列步骤:

1>. 运行ALTER SYSTEM ARCHIVE LOG CURRENT语句对当前redolog进行归档。

2>. 执行BACKUP ARCHIVELOG ALL命令备份所有已归档日志。

3>. 执行BACKUP命令对指定项进行备份。

4>. 再次运行ALTER SYSTEM ARCHIVE LOG CURRENT对当前redolog归档。

5>. 对新生成的尚未备份的归档文件进行备份。

  在完成归档日志文件备份后,我们通过需要删除已备份过的归档文件(归档文件记录下了数据库进行过的所有操作,如果您的数据库操作频繁而且量大,那归档文件大小也是相

当恐怖,备份后删除释放存储空间是相当有必要地)。RMAN提供了DELETE ALL INPUT参数,加在BACKUP命令后,则会在完成备份后自动删除归档目录中已备份的归档日志。

  完成备份之后,可以通过下列命令查看已备份的归档日志片段:

RMAN>  LIST BACKUP OF ARCHIVELOG ALL;
  综述:上述示例中出现的命令格式较多,但细细看来是否能发现些格式上的规律?比如查看备份基本都是LIST BACKUP OF备份项名称,如果想自定义片段的话则在备份命令后

加上FORMAT参数(后三项没有列举加format参的示例,大家千万表以为是不可以哟,俺都说乐rman是超灵活地泥,大家一定要多多尝试,反正执行的是备份操作不是删除,又搞不坏

目标数据库,你还有啥可担心的泥)。
 
第四篇 RMAN备份演练进阶篇
[君三思] 2007-6-28
忽悠

人间自有正义在,处处盛开自由花

三思也来玩布道,忽悠一 家 是一 家

  前篇介绍了通过rman进行各种备份,进阶篇则主要是rman的一些功能扩展和增加功能,利用前篇你已经完全可以完成数据库的备份,而通过本篇你可以更好更方便的完成数据

库的备份。

一、建立增量备份

  如果数据库运行于不归档模式下,那么你只能在数据库干净关闭的情况下(以NORMAL、IMMEDIATE、TRANSACTIONAL方式关闭)才能进行一致性的增量备份,如果数据库运行于归

档模式下,那即可以在数据库关闭状态进行,也可以在数据库打开状态进行备份。再次说明了打开归档模式的优势,归档日志也就是多占些磁盘空间,好处不是一些是很多,可是

也相当于又给数据库加了层保险啊。

  建立增量备份也是相当简单,实质就是一个参数INCREMENTAL LEVEL=n,在执行BACKUP命令时加上即可,例如,建立一个增量级别0的全库备份:

RMAN>  BACKUP INCREMENTAL LEVEL=0 DATABASE;
  再例如,建立一个增量级别1的users01.dbf数据文件备份

RMAN>  BACKUP INCREMENTAL LEVEL=1 TABLESPACE SYSTEM DATAFILE ¨ F:\ORAHOME1\ORADATA\JSSWEB\ USERS01 . DBF¨;
  注:Rman默认创建的增量备份是Differential方式,如果要建立Cumulative方式的增量备份,在执行BACKUP命令时显式指定即可,例如:

RMAN>  BACKUP INCREMENTAL LEVEL=2 CUMULATIVE DATABASE;
  关于增量备份概念性解释,比如Differential与Cumulative两种方式间的区别请参考本篇外传,括弧,外传整理中,如果您看到本篇的时候外传还没出,这个。。。。表着急

,耐心等候,面包牛奶都会有的。

二、建立镜像复制

  首先大家需要明了这个概念,rman中的镜像复制实质与通过操作系统copy命令备份相同,甚至连命令的格式都相似,只不过直接应用操作系统的copy命令复制数据文件时,只

是文件拷贝,而rman的copy则能够在复制的同时,验证数据的有效性。

  个人认为rman中的镜像复制应用有限,而且也体现不出rman的优势,所以俺也只是大致了解了概念,没有进行过实际操作,感兴趣的朋友可以自己做做试验,这里就不多做介

绍了。

三、建立冗余备份

  RMAN 提供了一种更谨慎的备份策略: Duplexed 方式备份 ,其实质即是在生成备份集的同时,向指定位置生成指定份数(最大不超过4份)的备份集复制,以避免在灾难性事故

时数据库损坏和备份丢失的情况下导致完全崩溃,提高备份可用性。当然,这是人类美好的愿意,对于那些没有异机异地备份条件的,假如机房发生火灾、地震之类大灾难,就算

dba把备份文件复制了100份也照样玩完,上述是个假设,万勿对号入座,火灾、地震也不是哪都会发生地,大家好好活着,别害怕。

  RMAN 中提供了三种方式实现Duplexed方式备份:

  1 、在RMAN中执行BACKUP命令时显式指定COPIES参数。例如:

RMAN>  BACKUP COPIES 3 DATABASE;
  上述命令将会在全库备份的同时,自动生成当前备份集的2份拷贝到默认备份目录。

  2 、在RUN{}命令块中利用SET BACKUP COPIES命令为该命令块中所有的BACKUP命令设置Duplexed方式,例如:

RMAN>  RUN{

2>SET BACKUP COPIES 2;

3>BACKUP DEVICE TYPE DISK FORMAT ¨D:\BACKUP1\%U¨,¨D:\BACKUP2\%U¨ 

4>TABLESPACE USERS,SALES;

5>}
  上述命令将生成两份备份集,分别存储到d:\backup1和d:\backup2目录。

3 、通过CONFIGURE ..... BACKUP COPIES命令设置预定义的备份Duplexed方式。

  CONFIGURE ... BACKUP COPIES 命令可以为指定的设备类型设置默认的备份拷贝数量。这个配置仅适用于数据文件与归档重做日志文件和备份,并且,只有在使用自动分配的

通道时才能够使用CONFIGURE ... BACKUP COPIES命令设置的配置。例如:

RMAN>  CONFIGURE DEFAULT DEVICE TYPE TO DISK;

RMAN>  CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE disk TO 2;

RMAN>  CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE disk TO 2;
  上述命令将disk设置上数据文件与归档文件的拷备数量设置为2,当再执行BACKUP DATABASE备份时,即会自动生成2份数据文件的备份集。

四、设置RMAN备份的保存策略

  策略,啧啧,想不到咱也能说出这么专业的词儿啊,人家说专家就是能把任何事务都描述的很专业,我一定要再多学几个类似的词,要让自己离专家的距离更近一些,或者,

我直接搬到eygle他们家床头边上住去~~~~

  如果你的数据库非常大,并且备份执行也比较频繁(废话,不大不频繁也得这么干,优秀的dba一定要拥有对应其身份的良好的工作习惯),有必要对你这些备份文件的保存制订

合理的策略。该挪的挪,该搬的搬,该删除的删,合理释放,最大化利用有限的磁盘空间嘛。

  在通过RMAN创建的备份片段中,由于备份文件也是由rman创建和维护,所以手工删除并不明智,并且RMAN也提供了备份保留策略,合理制订,由RMAN自动删除过旧的备份文件

更加安全也更加方便。

  RMAN 中提供了两种备份保留策略: 基于时间 和 基于冗余数量 

  为RMAN设置了备份保留策略之后,RMAN会自动判断哪些备份集或镜像复制文件不必再保留。这些备份文件将会被标记为“废弃(Obsolete)”,可以通过REPORT OBSOLETE命令查

看当前处于废弃状态的备份文件,或者通过DELETE OBSOLETE命令删除这些废弃的备份。例如:

RMAN>  report obsolete;

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

RMAN  保留策略将应用于该命令

将 RMAN 保留策略设置为 3 天的恢复窗口

已废弃的备份和副本报表

类型                 关键字 完成时间           文件名/句柄

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

备份集               21     04-7月 -07

备份段       21     04-7月 -07         D:\BACKUP\C-3391142503-20070704-01

RMAN> delete obsolete;

RMAN  保留策略将应用于该命令

将 RMAN 保留策略设置为 3 天的恢复窗口

分配的通道: ORA_DISK_1

通道 ORA_DISK_1: sid=14 devtype=DISK

删除以下已废弃的备份和副本:

类型                 关键字 完成时间           文件名/句柄

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

备份集               21     04-7月 -07

备份段       21     04-7月 -07         D:\BACKUP\C-3391142503-20070704-01

是否确定要删除以上对象 (输入 YES 或 NO)? y

已删除备份段

备份段 handle=D:\BACKUP\C-3391142503-20070704-01 recid=21 stamp=627061645

1  对象已删除
在执行删除命令时有两点需要了解:

如果被判断为废弃的备份是一个单独数据文件的镜像复制,那么在执行DELETE命令时将直接删除这个镜像复制文件。
如果被判断为废弃的备份是一个备份集中的一部分,则必须等到整个备份集中所有其它文件都被废弃之后,才能删除这个备份集。
提示:

注意这里oracle对于obsolete和expired的定义与我们常规理解是相反的。Oracle的定义是这样的,对于手工删除的文件,物理上已经不存在了的,在执行了crosscheck之后,

oracle将其标记为expired,而对于那些超出了备份保留策略的备份集备份片,则标记为obsolete。
1 、基于时间的备份保留策略。

说的简单些,就是你希望数据库最早能恢复到几天前。比如将恢复时间段设置为7,那么RMAN所保留的备份即是可以保证你将数据库恢复到一周内任何时刻下那些文件。

设置基于时间的备份保留策略可以通过CONFIGURE命令,例如:

RMAN>  CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF n DAYS;
注:n=大于0的正整数

执行该命令后,RMAN将始终保留那些将数据库恢复到n天前的状态时需要用到的备份,比如,恢复时间段被设置为7天,那么各个数据文件的备份必须满足如下条件:

SYSDATE-(SELECT CHECKPOINT_TIME FROM V$DATAFILE)>=7

任何不满足上述条件的备份都将被RMAN废弃并可通过DELETE OBSOLETE命令删除。Ok,基本知识讲完了,下面考验你的时刻到了, 提问 :如果满足条件的备份你也想删,咋整?啥

?DEL?D你个大头鬼,再回去看看第二章。

2 、基于冗余数量的备份保留策略

基于冗余数量实质即某个数据文件以各种形式(包括备份集和镜像复制)存在的备份的数量。如果某个数据文件的冗余备份数量超出了指定数量,RMAN将废弃最旧的备份。

同样,基于数量的备份保留策略也是通过CONFIGURE命令设置,例如:

RMAN>  CONFIGURE RETENTION POLICY TO  REDUNDANCY n ;
同上:n=大于0的正整数

你也可以通过下列命令设置成不采用任何备份保留策略:

RMAN>  CONFIGURE RETENTION POLICY TO NONE;
五、备份优化

  RMAN 中的备份优化(Backup Optimization)是指在备份过程中,如果满足特定条件,RMAN将自动跳过某些文件而不将它们包含在备份集中以节省时间和空间。说的直白些就是

能不备的它就不备了,不像原来甭管文件有没有备份过统统再备一遍。由上可知,优化就是偷懒嘛,en,我也要优化的干活:)

  话说回来,这个懒也不是什么时候都能偷的,ooo,说错了,是优化。通常必须满足如下几个条件的情况下,才能够启用备份优化的功能:

CONFIGURE BACKUP OPTIMIZATION 参数置为on;
执行的BACKUP DATABASE或BACKUP ARCHIVELOG命令中带有ALL或LIKE参数。
分配的通道仅使用了一种设备类型,也就是没有同时分配使用sbt与disk的多个通道。(我知道我知道,通道还没讲,你也等着看外传吧。不过在这儿可以简单描述一下我的理解,

In my opinion,sbt与disk就像一条是公路,一条是海路,而通道则相当于你选择了走公路之后,还得选择是走北三环,还是走北五环,还是两条一块走)
  打开备份优化设置通过如下命令:

RMAN>  CONFIGURE BACKUP OPTIMIZATION ON;
  那么在进行备份优化时,RMAN是如何判断要备份的文件是否需要被优化呢,这个算法就相当复杂了,而且可能影响优化算法的因素也非常多,假如某库在上午9点被执行过一次

全库备份,等下午3点再次执行全库备份时,备份的文件没有变动而且也已经被备份过时,才会跳过这部分文件。所以理论上备份优化仅对于只读表空间或offline表空间起作用。

当然对于已经备份过的archivelog文件,它也会跳过(注:上述言论出自yangtingkun大牛,哎,我说老yang你能不能再多说两句,再给我们来一段20W字左右的简短发言呗,哎,你

别走啊,你跑什么呀。。。。。。。)。
 
第五篇 RMAN基础知识补充 一
[君三思] 2007-7-6
  注:以下文字多数摘抄自网络,如有错误纯属正常(出处我就不注明了,我也确实没找着出处);如有侵权,这个。。。千万别来找俺打版权官司。。。三思现在穷的底儿掉,

您要再给我来这么一把,我。。。我非拖家带口上你们家噌吃噌喝去。。。。。。。。。

  另外,对于这部分内容,我一项不主张死记硬背的,还是要多尝试,理解着去记忆。

一、FORMAT字符串替代变量

使用FORMAT参数时可使用的各种替换变量,如下:

%c :备份片的拷贝数(从1开始编号);

%d :数据库名称;

%D :位于该月中的天数 (DD);

%M :位于该年中的月份 (MM);

%F :一个基于DBID 唯一的名称,这个格式的形式为c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII 为该数据库的DBID,YYYYMMDD 为日期,QQ 是一个1-256 的序列;

%n :数据库名称,并且会在右侧用x字符进行填充,使其保持长度为8;

%u :是一个由备份集编号和建立时间压缩后组成的8字符名称。利用%u可以为每个备份集生成一个唯一的名称;

%p :表示备份集中备份片段的编号,从1 开始编号;

%U :是%u_%p_%c的简写形式,利用它可以为每一个备份片段(即磁盘文件)生成一个唯一名称,这是最常用的命名方式;

%s :备份集的号;

%t :备份集时间戳;

%T :年月日格式(YYYYMMDD);s

注:如果在BACKUP命令中没有指定FORMAT选项,则RMAN默认使用%U为备份片段命名。

二、CONFIGURE配置项介绍

  首先,我们先来查看一下当前配置,通过SHOW ALL命令:

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

RMAN>  show all ;

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

RMAN  配置参数为:

CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;

CONFIGURE BACKUP OPTIMIZATION OFF; # default

CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default

CONFIGURE CONTROLFILE AUTOBACKUP ON;

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ¨d:/backup/%F¨;

CONFIGURE DEVICE TYPE DISK PARALLELISM 1; # default

CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default

CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default

CONFIGURE MAXSETSIZE TO UNLIMITED; # default

CONFIGURE SNAPSHOT CONTROLFILE NAME TO ¨F:\ORAHOME1\DATABASE\SNCFJSSWEB.ORA¨; #

default

RMAN>
  Show 命令在RMAN命令篇简单介绍过,同时我们也已经知道后跟#default表示该条配置仍然是初始的默认配置,如果我们想把某条更改过的配置再置为初始应该怎么办呢,很简

单,用如下命令: CONFIGURE ... CLEAR ; 例如:

RMAN>  CONFIGURE RETENTION POLICY CLEAR ;

旧的 RMAN 配置参数:

CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;

RMAN  配置参数已成功重置为默认值
上述的各项配置,我们在前面章节中有一些已经有所体现,下面我们再逐条过一遍。

1 、 CONFIGURE RETENTION POLICY 配置备份保留策略
第4章节我们详细讲过关于备份保留策略,也知道了它有两种保留策略:

基于时间:

CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF  n  DAYS;

基于冗余数量:

CONFIGURE RETENTION POLICY TO REDUNDANCY  n ;

也可以取消备份保留策略:

CONFIGURE RETENTION POLICY TO NONE;

2 、 CONFIGURE BACKUP OPTIMIZATION 配置备份优化
也是第4章节提到的内容,备份优化,包括OFF和ON两个状态

打开备份优化:

CONFIGURE BACKUP OPTIMIZATION ON;

关闭备份优化:

CONFIGURE BACKUP OPTIMIZATION O FF ;

3 、 CONFIGURE DEFAULT DEVICE TYPE  配置IO设备类型
RMAN 支持的IO设备类型有两种:磁盘(DISK)和磁带(SBT),默认情况下为磁盘。

使用磁盘设备:

CONFIGURE DEFAULT DEVICE TYPE TO DISK;

使用磁带设置:

CONFIGURE DEFAULT DEVICE TYPE TO SBT;

在这里需要注意的一点是:如果IO设备发生变化,相关配置项也需要修改。例如:

RMAN> CONFIGURE DEVICE TYPE  DISK  PARALLELISM 2;

4 、 CONFIGURE CONTROLFILE AUTOBACKUP 配置控制文件自动备份
是否自动备份,包含两个状态:OFF和ON

打开自动备份

CONFIGURE CONTROLFILE AUTOBACKUP  ON

禁止自动备份

CONFIGURE CONTROLFILE AUTOBACKUP  OFF

同时可以通过如下配置指定备份的控制格式,路径。例如:

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE  TYPE   DISK TO ¨d:/backup/%F¨;

在备份期间,将产生一个控制文件的快照,用于控制文件的读一致性,这个快照可以通过如下配置:

CONFIGURE SNAPSHOT CONTROLFILE NAME TO ¨ D:/BACKUP/ SNCFJSSWEB.ORA¨;

5 、 CONFIGURE DEVICE TYPE  设置并行备份
RMAN 支持并行备份与恢复,也可以在配置中指定默认的并行程度。例如:

CONFIGURE DEVICE TYPE DISK PARALLELISM 2;

指定在以后的备份与恢复中,将采用并行度为2,同时开启2个通道进行备份与恢复,当然也可以在run中指定通道来决定备份与恢复的并行程度。

并行的数目决定了开启通道的个数。如果指定了通道配置,将采用指定的通道,如果没有指定通道,将采用默认通道配置。有点儿绕是吧,我来给你白话一把。

默认情况下,自动分配通道的并行度为1,如果你通过设置PARALLELISM设置了并行通道为2,那么在run块中,如果你没有单独通过ALLOCATE CHANNEL命令指定通道,它会默认使用2

条并行通道,如果你在run命令块中指定了数个ALLOCATE CHANNEL,那么rman在执行备份命令时会以你设置的channel为准,而不管configure中配置了多少个并行通道。需要注意的

一点是,在backup命令中有一个FILESPERSET参数,该参数是指rman建立的每个备份集中所能包含的备份片段(即磁盘文件)的最大数,该参数默认值为64,如果在执行backup命令时

没有指定该参数值,那么rman会仅使用第一个通道来执行备份,其它通道将处于空闲状态。关于通道数与FILESPERSET值之间也有一个大小关系,逻辑稍显复杂这些就不多废话了,

总之一条,filesperset值不要小于你设定的通道数。

6 、 CONFIGURE DATAFILE BACKUP COPIES  设置备份文件冗余度
4 章也讲过,应该也还有印象吧,不记的了就赶紧回去翻翻。

7 、 CONFIGURE MAXSETSIZE  配置备份集的最大尺寸
该配置限制通道上备份集的最大尺寸。单位支持bytes,K,M,G。默认值是unlimited。相信应该也不会有什么人改它吧,我花了整整20秒时间思考,然后确认,我应该用不着它,OK

,跳过。

三、RMAN备份相关的动态性能表

V$ARCHIVED_LOG :本视图包含了所有归档重做日志文件的创建情况,备份情况以及其他信息。
V$BACKUP_CORRUPTION :这个视图显示了RMAN在哪些备份集中发现了损坏的数据坏。在你使用BACKUP VALIDATE命令对备份集进行检查时如果发现了损坏的数据块,RMAN将在这个视

图中写入记录。
V$COPY_CORRUPTIO :本视图显示了哪些镜像复制备份文件已经被损坏。
V$BACKUP_DATAFILE :本视图通常用来获取每个数据文件中非空白数据块的数量,从而帮助你创建出大小基本相等的备份集。另外,在视图中也包含了数据文件中损坏的数据块的

信息。
V$BACKUP_REDOLOG :本视图显示了在现有的备份集中饮食有哪些归档重做日志文件。
V$BACKUP_SET :本视图显示了已经创建的备份集的信息。
V$BACKUP_PIECE :本视图显示了已经创建的备份片段的信息。
可以通过如下SQL语句获得正在进行的镜像复制操作的状态信息:

Select  sid,
       serial#,
       context ,
       sofar,
       totalwork,
       round(sofar / totalwork *  100 ,  2 ) "% Complete"
   From  v$session_longops
  where  opname  like   ¨RMAN:%¨
    and  opname  not   like   ¨RMAN:aggregate%¨

通过如下SQL获得rman用来完成备份操作的服务进程的SID与SPID信息:

Select  sid, spid, client_info
   from  v$process p, v$session s
  where  p.addr = s.paddr
    and  client_info  like   ¨%id=rman%¨
 
第六篇 实战RMAN备份
[君三思] 2007-7-12
念奴娇·RMAN 历练

秋风细雨,落叶飞,多少RMAN命令,一一铭记,想当年,毫无备份概念。一步一步,一点一滴,多少无眠夜。

春风似剪,万千心事难寄。RMAN进展迅速,学习路漫漫,几经测试,错误不断,遍寻线上线下资料,过程痛苦,豁然顿悟 时 ,酣畅淋漓。

我心情愿,更看未来睛空。

经过前面的若干,我们已经了解并尝试了rman备份的一些命令,但是在实际环境中,不可能每次备份都要求DBA一条命令一条命令来敲(dba手指头都痉挛啦,老板看着更是肉疼,早

知道就是打几个字母,雇个打字的,成本不是更低么),通过前章的学习我们已经立志一定要优化的干活,所以我们应该写好一段脚本,然后放在服务器端定时执行。DBA只需要时

不时看看备份的结果就成了。

在写脚本之前,我们先明确一下我们的目标:

1 、每天夜间1点执行;

2 、数据库全备,同时备份控制文件及归档日志文件,备份文件保存至:D:\backup\目录下,并在完成归档日志文件备份后,自动删除已备份的归档日志;

3 、备份保留7天,过期则自动删除;

4 、保留操作日志备查;

以Windows环境为例(linux环境下与此基本类似,rman的脚本您甚至连改都不用改,就把调用rman脚本的命令行改改就行了):

1 、编写rman批处理文件

保存至: E:\oracleScript\backup\database_backup_jssweb.rman

RUN {

 CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF  7  DAYS;

 CONFIGURE CONTROLFILE AUTOBACKUP ON;

 CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ¨d:/backup/%F¨;

 ALLOCATE CHANNEL CH1 DEVICE TYPE DISK FORMAT ¨d:/backup/%U¨;

 BACKUP   DATABASE SKIP INACCESSIBLE FILESPERSET 10

     PLUS ARCHIVELOG FILESPERSET 20

     DELETE ALL INPUT;

 RELEASE CHANNEL CH1;

 }

 ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE DISK;

 CROSSCHECK BACKUPSET;

 DELETE NOPROMPT OBSOLETE;
上述的各项命令均在前面几个章节中提到过,如果有看着眼生的话,再回去翻翻前面。命令是都知晓地,可能有几个参数会不明白其意义,比如:BACKUP命令中的SKIT

INACCESSIBLE参数,大家表着急,静心等候俺的外。外外。。外外外。。。。(大锅,看个笔记而已,您不用拎着把菜刀到处晃吧,你你你,你别过来,我说还不成嘛)en,看到大家

如此虔诚,俺就提前透露这部分内容吧。

SKIP 选项 说明

SKIP INACCESSIBLE :表示跳过不可读的文件。我们知道一些offline的数据文件只要存在于磁盘上就仍然可被读取,但是可能有些文件已经被删除或移到它处造成不可读,加上这

个参数就会跳过这些文件;

SKIP OFFLINE :跳过offline的数据文件;

SKIP READONLY :跳过那些所在表空间为read-only的数据文件;

注意哟,你从网上搜索rman备份脚本,可能有些脚本中会出现一项:sql ¨alter system archive log current¨;这句是让archivelog日志归档,实际上完全没必要,我们在第三

节的时候讲过,通过plus archivelog方式备份时,rman会自动对当前的archivelog进行归档。

2 、编写dos批处理

保存至:E:\oracleScript\backup\database_backup_jssweb.bat

设定要备份的数据库sid为jssweb,将日志按照日期输出到 E:\oracleScript\backup\logs\ 目录。

set oracle_sid=jssweb

rman target / msglog E:\oracleScript\backup\logs\%date:~0,10%.log cmdfile=E:\oracleScript\backup\database_backup_jssweb.rman
3 、设定执行计划

控制面板->任务计划中添加计划,运行E:\oracleScript\backup\database_backup_jssweb.bat,设定日程安排中的时间。

竣工!

说是实战,实际上演练的味道依然浓厚,谁让咱这是在测试泥。上述脚本已初具雏形,当然还应该再增加一些更合理的配置,比如根据您的数据库大小,适当调整通道数量,以及

加上日期的判断,根据时间进行增量备份(关于增量备份,限于篇幅这里不介绍,俺保证在外传2尽可能白话,敬请期待)。

由于三思专职dba生涯刚刚开始,所接触到的数据库在体积上都属于小型数据库(不超100G),即使每次备份都是全备也是可以接受的,所以在备份策略上能够非常灵活,或者说随意

。对于那些数百G甚至过T的数据库,我想就需要很是花些心思来考虑备份策略的问题了,在这方面三思目前还无法给出具有建设性的提议,但是有一点我想是毋庸置疑的:备份不

仅仅只是在数据库崩溃时才会用到,备份是为了更好的恢复。所以我想做好备份与恢复之间开销的平衡应该是所有备份策略的终极目标吧。

备份终于完了。别松气,这仅仅只是开始,加油~~~~~
 
第七篇 RMAN基础知识补充 二
[君三思] 2007-7-2
  经过前面的练习,我们已经能够使用rman完成数据库的备份,但是我想对于初次接触rman的朋友,多数人肯定心中有很多疑问,现在大家应该是处在知道 How to do.but don

¨t konw why 的境界,表怕,此是俺有意为之,缘由嘛,且听俺慢慢道来。

  多数技术书籍在初始几章往往都是介绍基础知识,从命名、来由到基础概念,几乎都是大篇幅介绍,就俺看来这种方式在当前情况下极不适宜,原因有二。第一:多数有兴趣

的朋友在研究某种技术之初往往都是想先看看其大致的使用方法,而概念介绍多数都是枯燥的连篇文字,很少有人有毅力在毫不了解这项技术的情况下研读进去,这就造成几种后

果,有些人跳过初始几章直接从实际应用开始,等了解之后再翻回来看前面的介绍,有些人耐着性子看完前面却发现更加一头雾水,选择重看一遍或者不管接着往后看,而有些人

则更是直接就放弃了。第二:目前技术发展日新月异,从业人员水平参差不齐,有些工作在分配给技术人员时,该技术甚至对此项工作一无所知,如种情况下还让他去看基础概念

恐怕费时费力,保不齐书还没翻几篇,饭碗已不保,毕竟多数老板都是只看结果,过程是不管地。有鉴于此,俺希望能够在最开始的几章少一些枯燥的概念,多一些实际的操作,

先让大家把手动来,把饭碗保住。同时,在经过一些操作之后,无论是对其了解或是兴趣应该都大大增加,这个时候再转回头来看看一些基本的概念,理解起来能够更加事半功倍

吧。

  基础毕竟是基础,乃物之根本,重中之重,俺老大每每在俺向其讨教时均向俺强调基础的重要,俺也深以为然,对于一个真正想要精通oracle的dba而言,无论如何都需要做到

深入理解,认真铭记的。经过一些练习之后,相信大家对rman已经有所了解,对其操作也有了一定兴趣,我想这个时候来面对这些枯燥文字也应该稍稍能有些主观意愿吧,事不宜

迟,请睡着的同学赶紧醒醒,进入补基础时间。

一、RMAN通道

上次基础知识讲理里简单提到了通道,在那里我把它形容为三环和五环,我感觉从便于理解的角度是可以这样描述的,RMAN通道实质是一个到存储设备的数据流。如果你想城市交

通流通的更快些,多建几个环路对于缓解交通是有意义的。在RMAN中可以通过手动方式或自动方式分配通道。

1 、手工分配通道

在执行BACKUP、RESTORE、DELETE等需要进行磁盘I/O操作的命令时,可以将它们与ALLOCATE CHANNEL命令放在一个RUN的命令块中,利用ALLOCATE CHANNEL为它们分配通道。例如:

RUN{

ALLOCATE CHANNEL CH1 DEVICE TYPE DISK FORMAT ¨d:/backup/%U¨;

BACKUP DATAFILE ¨F:\ORAHOME1\ORADATA\JSSWEB\JWEB.ORA¨;

}
需要注意的是,RMAN中执行的每一条BACKUP、DELETE等命令都至少要求使用一个通道,通道数决定了这些操作执行的并行度。

2 、自动分配通道

如果没有使用手工分配通道,那么RMAN在执行BACKUP等操作I/O的命令时将会使用预定义配置(configure,记起来了吧)中的设置来自动分配通道。

下列预定义配置命令均可以分配通道:

CONFIGURE DEVICE TYPE ... PARALLELISM
CONFIGURE DEFAULT DEVICE TYPE
CONFIGURE CHANNEL DEVICE TYPE
CONFIGURE CHANNEL n DEVICE TYPE
二、RMAN备份类型

利用RMAN进行备份时,可以通过三种方式来对RMAN的备份做分类

完全备份(Full Backup)与增量备份(Incremental Backup)
全备与增备是针对数据文件而言,控制文件和归档日志文件不能进行增量备份。当然,后两者可以做备份优化。

打开备份(Open Backup)或关闭备份(Closed Backup)
数据库打开状态下进行备份即是打开备份,数据库关闭状态下(加载状态)进行的备份即关闭备份。

一致备份(Consistent Backup)与不一致备份(Inconsistent Backup)
数据库打开状态或不干净关闭状态(shutdown abort)进行的备份是不一致备份,利用不一致的备份修复数据库后还需要做数据库的恢复。在数据库干净关闭状态进行的备份是一致

备份,利用一致备份修复数据库后不需要做数据库的恢复。

三、增量备份的工作机制

  所谓增量备份,顾名思义即是每次备份仅操作那些发生了"变化"的数据块。RMAN中增量备份有两种:Differential方式和Cumulative方式。下面将分别胡扯,请看官自辨真伪

。。。

  1 、差异备份Differential

  说起Differential,相当有意思,大家可以这样理解。有一家名为Differential的红社会组织,他们民主自由善良博爱为人忠恳正直(以下省略5000个褒义形容词),总之呢,

黑黑,他们会按照你与其约定的周期来向你收取保护费,因为他们的组织非常严密,(以上图为例吧)所有成员按照0,1,2分为不同等级,0级最高就是老大。贵为老大自然身份尊崇

,手底下小弟多,开销也大,所以如果0级老大亲自登门收取的话,没啥说的,甭管它什么时候来,你的家底他都要重新清点一遍,从你成立开始到现在,总共应交多少保护费,一

个子儿都不能少的都要交出来。每次来都是这样。而1级成员就显的温和多了,它每次来,只要求你将上次0级收到之后到现在应交的税款给交了就行了。甚至于如果上次也是个1级

成员(与它平级)来收取的话,它也认同。当然,如果上次来收的是个2级成员,它是不承认的,好歹它也是个有身份的人,比它低级的成员打的收条它向来是不认同地。它至少要求

将最后一个与它平级或级别比它要高的成员收取日期到现在应结的给它。1级成员带了头,2级成员也按这个来。

  2 、累积增量备份Cumulative

  继续白话,名为Cumulative的红社会组织相比Differential差距就比较大,虽然它们也会按照与你约定的同期来收取,但是,这家组织显然作风是属于比较凶悍的。仍然以上

图为例,假设它们也按照0,1,2分为三个等级,0级老大身份尊崇,表现倒与Differential家的相同。但级别比它低的那些小弟表现与Differential家的就相差较多。对于那些级别

高于它们的成员打的收条,他们还是会认可,但是其它人,甚至与它们平级的成员它们都不认。哪怕上次就是它来收取的,他也能翻脸不认帐。比如某个1级成员昨天来时就直接从

上次0级收取的时间开始算的,而今天来的又是这个家伙,可它对昨天的所为都拒不认帐,坚持还要从上次0级收取的时间开始算。

  注意:这两家非0级成员都有个毛病,假如它们来收费时发现自你成立起,自家的0级老大从来都没来过,本着为老大尽心为老大尽责的高贵品格,他们都会替老大把你的家底

翻个底朝天,来个大清算。

  现在,大家对它们两家都有所了解了吧。另外backup命令在不显式指定的情况下,默认会选择Differential地哟:)

四、备份集概述

  备份集由RMAN创建的具有特定格式的逻辑备份对象,一个备份集中可能包含多个数据库文件(包括数据文件,控制文件和归档日志文件)。RMAN中通过BACKUP命令建立备份集

  一个备份集是由多个备份片段组成,每个备份片段即是一个物理文件。

五、RMAN恢复目录(CATALOG)

  Oracle9i版本因为控制文件的自动备份,可以很大程度不需要使用恢复目录。当然,号称使用目录数据库控制文件的方式将会非常的不安全,因为一旦备份文件丢失,不仅数

据库崩溃,rman备份信息也将丢失(就个人使用而言,我觉着没有这么严重,9i中的控制文件备份就已经多种多样,而且恢复及重建方式也有许多,所以假如您在没有使用恢复目

录的情况下丢失了控制文件,千万表以为就此玩完,准备摸脚走人。Google一下rman 控制文件 恢复,您会发现无数个能够挽救您饭碗的页面存在),扯了一堆,但愿没有给像上

个礼拜的俺一样的初学者造成印象上的混淆,如果能用恢复目录还是推荐使用恢复目录,恢复目录实际上也是一个数据库,一般独立于目标数据库。因为它自己就是个数据库,所

以一个恢复目录可以同时被多个目录数据库使用。网上搜了一些特点如下:

· 有些命令只被恢复目录支持(找着不少,大家自己gg吧,这里就不一一介绍了,要不然俺这就不像在做笔记,倒像是在写高级参考大全,o对了还有,控制文件方式中无法直接

存储rman备份脚本)

· 能保留更多的历史备份信息

· 一个恢复目录能管理与备份多个目标数据库

· 如果没有恢复目录,而且发生了结构上的改变,时间点的恢复需要小心操作

· 能存储备份与恢复的脚本

  可以看到,主要是可以保留更多的备份信息与方便的管理多个目标数据库,这个在众多目标数据库的情况下,绝对是强烈推荐的,能省很多事儿。

  同样,如果您选择使用恢复目录方式,千万表忘了对恢复目录数据库做备份哟,当然这个库您就不用再使用rman做备份了,呵呵:),exp是个好法子,简单又方便,反正rman

的恢复目录数据库也占不了什么空间。而且通过exp备份之后,一旦恢复目录数据库发生故障,也可能很轻易的通过imp进行恢复。
 
第八篇 演练RMAN恢复
[君三思] 2007-7-16
  首先 注意: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将在完成恢复过程后自动删除那些在恢复过程中产生的归档日志文件,RMAN并不会删除restore命令之前的归档文件。

  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:用来查询数据文件,临时文件与表空间对应及数据文件序号:

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恢复(1)丢失控制文件的恢复
[君三思] 2007-7-18
  无数次我对自己说,可以了,足够了,你已经明白了,需要学习的东西还很多,赶紧冲着下个目标去吧。尤幸的是在下一刻,另一个声音在脑海中响起,再加把劲,真的搞明

白了,亲手去做个测试吧。

  前面说过的,在非恢复目录(catalog)模式下,rman的备份信息都将存储在目标数据库的控制文件中,所以一旦控制文件丢失,不仅目标数据库崩溃,而且rman备份信息也尽数

丢失,这种情况下,如果您有控制文件备份,那还有救(没有备份的话,也并非完全没有希望,如果您对自己的oracle结构非常了解,可以通过写脚本的方式自已重建控制文件。看

看oracle是不是考虑的很周全了,很多情况下你认为没救了的时候,也并非完全陷入绝境)。

  本章将模拟归档模式下,控制文件丢失情况下的恢复,在本例中,我们仍然借助上节中建立的备份做恢复,大家应该还记的。

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

志,其中登陆到rman之后会显示出目标数据库的DBID

SQL> select *from jss.tmp3;

COL

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

test4

test1

test2

test3

SQL> shutdown immediate;

数据库已经关闭。

已经卸载数据库。

ORACLE  例程已经关闭。

SQL> host del  F:\OraHome1\oradata\jssweb\CONTROL *;

SQL> EXIT;

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

恢复管理器: 版本9.2.0.1.0 - Production

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

连接到目标数据库: jssweb(未安装)

RMAN>  set dbid 3391142503

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

正在执行命令: SET DBID

RMAN>  restore controlfile from ¨d:\backup\C-3391142503-20070718-04¨;

######## 如果打开了自动备份,通过restore controlfile from autobackup也可以

######## 不过需要 注意 ,因为控制文件没有了,所以rman的配置信息也丢失了,你需要用 set controlfile autobackup format for device type disk to ¨d:\backup\%F¨;

命令重设一个自动备份的控制文件所在路径。

启动 restore 于 18-7月 -07

使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在恢复控制文件

通道 ORA_DISK_1: 恢复完成

正在复制控制文件

输出文件名=F:\ORAHOME1\ORADATA\JSSWEB\CONTROL01.CTL

输出文件名=F:\ORAHOME1\ORADATA\JSSWEB\CONTROL02.CTL

输出文件名=F:\ORAHOME1\ORADATA\JSSWEB\CONTROL03.CTL

完成 restore 于 18-7月 -07

RMAN>  sql ¨alter database mount¨;

####### 控制文件已恢复,将目标数据库置为加载状态

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

sql  语句: alter database mount

RMAN>  restore database;

######## 修复数据库

启动 restore 于 18-7月 -07

分配的通道: ORA_DISK_1

通道 ORA_DISK_1: sid=12 devtype=DISK

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

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

正将数据文件00001恢复到F:\ORAHOME1\ORADATA\JSSWEB\SYSTEM01.DBF

正将数据文件00002恢复到F:\ORAHOME1\ORADATA\JSSWEB\UNDOTBS01.DBF

正将数据文件00003恢复到F:\ORAHOME1\ORADATA\JSSWEB\DRSYS01.DBF

正将数据文件00004恢复到F:\ORAHOME1\ORADATA\JSSWEB\EXAMPLE01.DBF

正将数据文件00005恢复到F:\ORAHOME1\ORADATA\JSSWEB\INDX01.DBF

正将数据文件00006恢复到F:\ORAHOME1\ORADATA\JSSWEB\ODM01.DBF

正将数据文件00007恢复到F:\ORAHOME1\ORADATA\JSSWEB\TOOLS01.DBF

正将数据文件00008恢复到F:\ORAHOME1\ORADATA\JSSWEB\USERS01.DBF

正将数据文件00009恢复到F:\ORAHOME1\ORADATA\JSSWEB\XDB01.DBF

正将数据文件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 database;

######## 恢复数据库

启动 recover 于 18-7月 -07

使用通道 ORA_DISK_1

正在开始介质的恢复

存档日志线程 1 序列 7 已作为文件 F:\ORAHOME1\ORADATA\JSSWEB\REDOC02.LOG 存在于

盘上

存档日志线程 1 序列 8 已作为文件 F:\ORAHOME1\ORADATA\JSSWEB\REDOA01.LOG 存在于

盘上

存档日志线程 1 序列 9 已作为文件 F:\ORAHOME1\ORADATA\JSSWEB\REDOB02.LOG 存在于

盘上

通道 ORA_DISK_1: 正在启动到默认目标的存档日志恢复

通道 ORA_DISK_1: 正在恢复存档日志

存档日志线程 =1 序列=5

通道 ORA_DISK_1: 已恢复备份段 1

段 handle=D:\BACKUP\1BIN4K16_1_1 tag=TAG20070718T093014 params=NULL

通道 ORA_DISK_1: 恢复完成

存档日志文件名 =F:\ORAHOME1\RDBMS\ARC00005.001 线程 =1 序列 =5

存档日志文件名 =F:\ORAHOME1\RDBMS\ARC00006.001 线程 =1 序列 =6

存档日志文件名 =F:\ORAHOME1\ORADATA\JSSWEB\REDOC02.LOG 线程 =1 序列 =7

存档日志文件名 =F:\ORAHOME1\ORADATA\JSSWEB\REDOA01.LOG 线程 =1 序列 =8

存档日志文件名 =F:\ORAHOME1\ORADATA\JSSWEB\REDOB02.LOG 线程 =1 序列 =9

完成介质的恢复

完成 recover 于 18-7月 -07

RMAN>  sql ¨alter database open resetlogs¨;

###### 由于使用备份的控制文件恢复,该文件内不包含目标数据库redologs和数据文件头部scn信息,所以必须通过resetlogs方式open。

sql  语句: alter database open resetlogs

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 17:40:28 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

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

test4

test1

test2

test3

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

SQL> exit

从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 中断开

C:\Documents and Settings\Administrator>exit

主机命令完成

RMAN>
  注意,恢复之后表忘了重建临时表空间。另外,由于resetlogs,建议立即对数据库进行一次完全备份。
 


第11篇 RMAN笔记之综述
[君三思] 2007-7-15

何故
rman 路
困难多处
刻苦勤学读
希望早日克服
参考资料数十部
不厌其烦尝试几度
刻苦终见回报幕
一丝恍然飘入
测试再加速
几见明路
再思故
顿悟

  很多rman的文章或书籍的开头,总是会先写为什么要用rman,rman的优势等等。俺偏偏不如此,反倒把它放到最后面。俺认为但凡关注rman,不管了不了解、知不知道为什么要用,都不会影响到其选择rman的决定。至于其优势,相信通过前面篇章的论述,大家对其特点已经很了解,我再总结性的摘抄一些rman 的优点 ,大家对号选择看看它们有没有自夸吧。

各种故障背景下的恢复方法
 
丢失或损坏的文件
 归档模式
 数据库状态
 恢复方法
 
一个或多个数据文件
 不归档模式
 关闭状态
 利用一致的完全数据库备份修复整个数据库,自从备份之后发生的所有修改都将丢失;修复数据库后不需要进行恢复,利用RESETLOGS选项直接打开数据库;

注意:在这种情况下进行恢复时,惟一一种可以不利用RESETLOGS选项打开数据库的情况就是在执行最近一次备份之后,联机重做日志中的内容没有被覆盖掉。
 
一个或多个数据文件,以及联机重做日志文件
 不归档模式
 关闭状态
 利用一致的完全数据库备份修复整个数据库,自从备份之后发生的所有修改都将丢失;修复数据库后不需要进行恢复,利用RESETLOGS选项直接打开数据库。
 
一个或多个数据文件以及所有的控制文件
 不归档模式
 关闭状态
 利用一致的完全数据库备份修复整个数据库,自从备份之后发生的所有修改都将丢失;修复数据库后不需要进行恢复,利用RESETLOGS选项直接打开数据库。
 
注:以上三种不归档模式下的数据库恢复都需要在数据库关闭状态下进行,并且需要拥有正确的控制文件备份。
 
一个或多个数据文件
 归档模式
 加载状态
 在数据库打开状态下执行表空间或数据文件恢复操作,首先将表空间或数据文件置为脱机状态,然后利用备份修复它们,对它们进行恢复,最后再将它们重新置为联机状态;任何数据修改都不会丢失,并且在恢复过程中数据库的其他部分仍然是可以访问的。
 
全部的数据文件
 归档模式
 关闭状态
 利用备份修复数据文件,然后使用控制文件加载数据库,并且执行完全恢复;如果所有的联机重做日志文件都没有丢失或损害,最后可以用正常方式打开数据库(不需要使用RESETLOGS选项)
 
一个或多个数据文件以及恢复所需的归档重做日志文件。
 归档模式
 加载状态
 对包含丢失的数据文件的表空间进行基于时间的表空间恢复,将这个表空间恢复到最近的可用归档重做日志所对应的时刻下的状态。
 
所有的控制文件,还可能包括一个或多个数据文件
 归档模式
 未加载状态
 利用备份修复丢失的控制文件与数据文件,然后对数据文件进行恢复;任何数据修改都不会丢失,但是在恢复过程中数据库将处于不可用状态。
 
所有的控制文件,还可能包含一个或多个数据文件,以及恢复所需的归档惩一儆百日志文件与联机重做日志文件
 归档模式
 未加载状态
 利用备份修复丢失的控制文件与数据文件,然后进行不完全恢复,将数据库恢复到最近的可用归档重做日志所对应的时刻下的状态;包含在丢失的日志文件中以及它随后的其它日志文件中的数据修改都将会丢失;最后需要使用RESETLOGS选项来打开数据库。
 
注:归档模式下的数据库恢复并不一定要求关闭数据库,其中某些情况要求在加载模式下进行恢复,并且也需要拥有正确的控制文件备份。
 
不同备份恢复方式的特点
 
RMAN 方式
 自定义方式
 
在对联机数据文件进行备份时,RMAN将对当前处于不一致状态的数据块进行反复读取,直到读取到一个一致状态的数据块为止;你不将包含数据文件的表空间设置为进入备份模式
 必须将包含要进行备份的数据文件的表空间设置为进入备份状态,然后在备份完成后再将表空间设置为退出备份模式;在表空间处于备份模式期间,数据库的性能将会由于频繁的I/O操作而受到严重影响(oracle会将用户修改的数据块先写入联机重做日志文件中)
 
可以进行增量备份,即仅对那些上一次自动备份以来发生变化的数据块进行备份;可以使用增量备份对数据库进行恢复,这就意味着你可以对运行在不归档模式下的数据库进行恢复;不过当数据库运行在不归档模式时,所做的增量备份也必须是一致的(即完全关闭状态下建立的备份)
 在备份时只能对所有的数据块进行备份(复制文件),而不能仅对变化的数据块进行备份;如果数据库运行在不归档模式下,就只能进行数据库修复而不能进行任何恢复操作。
 
在备份过程中会对复制的每一个数据块进行校验,在利用备份进行修复时也会对数据库的正确性进行检查
 在备份和修复过程中都不会对数据块进行任何校验与检查;如果修复所使用的备份中包含损坏的数据块,那么恢复后的数据库中将包含错误的数据
 
在备份过程中仅会复制那些包含数据的数据块,而并不会复制那些完全空白的数据块,这样得到的备份文件的大小就会大大缩小。
 在备份过程中只能完全复制数据文件,无论数据文件中包含了多少实际数据,备份的大小与数据库的大小是相同的。
 
利用恢复目录来存放与备份和恢复相关的重要信息,包括:

l  数据库中包含的模式

l  哪些文件需要进行备份

l  哪些文件在经过了指定的天数后还没有进行新的备份

l  哪些文件由于已经有了更新的备份或者已经无法用户恢复过程而需要删除

l  当前RMAN的参数配置等
 不会对用户的备份与恢复操作进行任何记录,除非你自己以手工方式进行记录
 
可以将一系统相关的RMAN命令作为脚本保存在档案库中,在需要时招行这些脚本就可以完成特定的备份或恢复操作
 只能将备份或恢复命令保存成操作系统批处理文件,维护起来比较困难。
 
可以利用RMAN备份轻松地复制出一个与当前数据库一模一样的数据库,你可以利用复制出来的数据库作为测试用数据库或者备用数据库使用
 如果要建立测试用数据库或备份数据库,必须按照创建普通数据库的过程来进行复杂的操作。
 
在进行备份或修复操作时可以自动进行并行操作
 必须根据要进行备份或恢复的文件以手工方式并行招行操作系统命令
 
提供归档日志自动容错功能:如果RMAN发现某个备份中丢失了或损坏一个归档重做日志文件,它会自动利用其它备份中的相同的归档重做文件来进行替换
 无法自动提供归档日志的容错替换功能
 
通过使用介质管理API,RMAN可以与其它第三方的介质管理软件紧密地结合在一起进行工作。
 无法与任何第三方介质管理软件直接结合在一起进行工作。
 

  在前面我已经不止一次的提到过,RMAN非常简单,同时也非常灵活,经过这近一个月的学习和实践,我们介绍了很多基础性的操作,当然RMAN的功能绝不止于此,一些更高级的功能,比如数据块恢复,通过Duplicate创建standby等等。路漫漫其修远矣,吾将上下而求索~~~~~
 


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/minitoy/archive/2010/12/21/6089657.aspx