备份恢复4.1——rman备份基础概念*

来源:互联网 发布:乌克兰手机社交软件 编辑:程序博客网 时间:2024/05/17 00:58

1、RMAN备份基础:

rman组件:

1、目标数据库:就是要进行备份、转储、恢复的数据库。

2、服务器进程:一般要进行rman操作,要建立两个服务器进程: 默认服务器进程用于解析rman命令,并且生成隐含执行的PL/SQL块;轮询服务器进程用于检测备份、转储、恢复是否已经完成。

3、通道:当rman需要进行备份、转储、恢复数据库的时候,需要在存储设备(磁盘,磁带)目标数据库之间建立连接,这条连接就叫做通道。一般在存储设备上执行IO时,总会分配相应的通道。既可以手动分配通道,也可以由rman自动分配。

4、rman资料库(recovery manager repository) 和 rman元数据(recovery manager matedate):rman元数据是指在备份、转储、恢复中所使用的数据。rman元数据的集合称为rman资料库。当用rman进行brr时,oracle将rman元数据存放到目标数据库的控制文件中去。如果配置了恢复目录。

5、恢复目录:用于存放rman元数据,当控制文件内存在的rman元数据达到了参数control_file_record_keep_time的时间后,其元数据可能会被覆盖,从而导致之前的备份不能使用,通过使用恢复目录,可以永久保留需要的rman元数据,另外,在恢复目录中还可以存放存储脚本。记住,如果要用恢复目录存放rman元数据,那么一定要将恢复目录方案放在与目标数据库不同的数据库中。

6、介质管理层:介质管理层是rman与 磁带磁盘进行io操作的软件层。

7、rman包:当执行rman命令时,服务器进程首先会将rman命令解析为PL/SQL块,然后服务器进程通过执行该PL/SQL块完成rman命令任务。RMAN命令是由三个plsql包来完成的:

dbms_backup_restore——用于执行备份、转储、恢复操作的命令backup、copy、restore、recover等都被解析为对该包的调用;

 dbms_revcat——用于维护恢复目录的命令 resync catalog,catalog等都被解析为对该包的调用; 

dbms_revman——查询恢复目录和目标数据库的控制文件命令 list ,report命令都被解析为对该包的调用。

8、数据库内rman相关参数:

SQL> show parameter db_recover


NAME                                                      TYPE            VALUE
------------------------------------           -----------        ------------------------------
db_recovery_file_dest                     string                 /u01/app/oracle/fast_recovery_area


db_recovery_file_dest_size           big integer          4122M


rman的特点:

rman可以备份数据库、表空间、数据文件、控制文件、归档日志、参数文件(spfile),但是不能备份在线日志(rodo log),pfile、口令文件。还要注意因为rman是服务器进程完成的,所以要求目标数据库必须处于mount或者open状态。

可以预定义频繁执行的备份或者恢复操作:我们可以讲备份恢复相关的rman操作放到恢复目录中去,存储为 存储脚本。

跳过未使用块:这个就比用户管理的备份恢复先进的多。可以生成较少的备份数据,节约空间。

执行增量块级备份:这样在生成备份集(backup set )时,只备份已经使用的数据块的前提下,只备份上次备份以来改变的数据块,节约了时间空间。

指定备份限制:在使用rman备份时,可以指定备份集的最大尺寸和备份片(backup piece)的最大尺寸,通过限制备份片的最大尺寸,可以有效的将备份集分布到不同的磁带上。

在备份时自动检测坏块:我们知道在使用用户管理的备份恢复时,即使数据文件中出现了坏块,也可以备份数据文件,如果需要检查是否有坏块,那就需要使用DBVERIFY工具进行检查。当使用rman进行备份时,服务器进程自动将坏块信息写入动态性能视图(好几个视图里都写入了)通过查询v$backup_corruption我们就可以查看backup命令所检测到的坏块。通过查询v$copy_corruption视图可以看到执行copy或者backup as copy 命令所检测到的损坏块。

自动使用并行化:如果服务器有多个cpu,那么执行前可分配多个通道,分配后,rman会启用多个服务器进程并行执行备份恢复操作。


运行rman(连接数据库):

这个既可以在em上,也可以在命令行中运行。在进行备份恢复时,必须连接到目标数据库,如果需要使用恢复目录存放rman元数据,那么还需要连接到恢复目录数据库。如果使用了辅助数据库,那么还需要连接到辅助数据库。


如果是直接在目标数据库中使用控制文件存放rman元数据,那就不需要连接到恢复目录数据库,那就要指定nocatalog选项,通过target选项指定目标数据库。连接到目标数据库:rman target sys/liu123@ mynewdb nocatalog ——注意必须启动监听:lsnrctl start。


如果要连接目标数据库和恢复目录数据库,先通过target连接到目标数据库,在通过catalog选项,连接到恢复目录数据库,连接目标数据库用sysdba 或者sysoper连接;连接恢复目录数据库时,必须以恢复目录所有者身份进行连接。

rman target sys/liu123@mynewdb catalog rman/rman@rcat


若是在rman命令行中:>rman 进入rman命令行,RMAN> connect target sys/liu123@mynewdb 提示连接到目标数据库;>connect catalog rman/rman@rcat   提示连接到恢复目录数据库。

如果是要连接辅助数据库必须都用sysdba和sysoper用户进行连接,用auxiliary选项:rman target sys/liu123@mynewdb auxiliary  sys/liu456@aux;

若是在rman命令行中:>rman 进入rman命令行,RMAN> connect target sys/liu123@mynewdb 提示连接到目标数据库;>connect auxiliary sys/liu456@aux提示连接到辅助数据库。

rman命令:

rman命令分为独立命令和作业命令,独立命令顾名思义就是能单独执行的命令,除了set ,switch等少数命令之外,多数rman命令都可以单独执行。来看几个常见的单独执行命令:

关闭数据库:RMAN> shutdown immediate ——数据库关闭。

启动数据库:RMAN> startup

备份users表空间:RMAN >backup format '/u01/app/oracle/.../users_bp.bak' tablespace users;


再来看看作业命令:当使用多个rman命令完成某项任务时,应当以作业命令的方式执行这些命令。执行作业命令时,必须将这些相关的rman命令放在run块中。除了(connect 、create/delete/update catalog、create/delete/update script、list)rman命令。其他rman命令都可以被包含在run块内。示例:

 RMAN >run {allocate channel d1 type disk;

                backup format '/u01/..../usersbp.bak' tablespace users;

                release channel d1;

                 }

在rman提示符下还可以运行sql命令。但是必须以sql关键词开始,并且sql语句字符串需用单引号引住。

RMAN> sql 'alter system switch logfile';        注意rman中不能运行select。如果sql语句中包含单引号,那需要用两个单引号,此时的sql整个语句用双引号

 RMAN> sql "create tablespace user03 datafile ''/u01/app/.../user.dbf'' size 5m ";

运行存储脚本:当使用恢复目录存放rman资料库时,可以在恢复目录中建立存储脚本,建立后就可以在run块内运行。

RMAN > run {execute script s1;}

运行操作系统命令:在run块内运行,在os命令前加host,示例:RMAN > run { host "dir  /d:\backup";}


配置rman环境:

配置自动通道并行度:在rman进行备份、转储、恢复时,默认情况下会在目标数据库上非配一个 服务器进程,并由该服务器进程完成brr操作。通过使用configure device type 。。 prarllelism integer可以配置通道并行度。示例:

RMAN > configure  device type disk parallelism 3 ;

RMAN > configure device type sbt parallelism 3;


配置所有通道的备份文件格式:默认情况下,rman会自动为disk分配一个通道,并没有任何选项。通过配置自动通道,可以指定所有通道的备份文件格式。示例:

RMAN > configure channel device type disk format 'd:\backup\ %d_%s_%p.bak';


配置特定通道的备份文件格式:当配置自动通道时,如果不指定通道号,则会配置所有通道,如果要配置特定通道,则可以指定通道号。示例:

RMAN>  configure channel 1 device type disk format  'd:\backup\%d_%s_%p.bak';  

RMAN>  configure channel 2 device type disk format  'd:\backup\%d_%s_%p.bak';


 配置默认存储设备:默认情况下rman的存储设备为disk。但是可以改变,示例:

RMAN > configure default device type to sbt ;


配置备份集和备份片的最大尺寸:注意当配置备份集最大尺寸的时候,必须确保其尺寸可以容纳最大数据文件的备份集。

RMAN > configure maxsetsize to 1g;       

默认情况,每个备份集只包含一个备份片文件,通过配置备份片的最大尺寸,可将一个备份集划分为几个相对小的备份片文件,并将这些备份片文件分布到多个设备上,示例:RMAN >  configure channel device type disk maxpiecesize 500M;


配置备份优化:备份优化只是用与 backup database , backup archivelog all/like 、 backup backupset all 命令。默认情况下rman进制备份优化。激活备份优化:

RMAN > configure backup optimization on ;


配置多重备份:默认rman备只生成一个备份片副本,为了生成多个备份片副本,可以配置多重备份,示例:

RMAN > configure datafile backup copies for device type disk to 3;


配置免除表空间:默认情况下,backup tablespace 命令会备份除了临时表空间外的所有表空间。如果某些表空间不需要备份,可以在rman备的时候免除这些表空间:

RMAN > configure exclude for tablespace user03;


配置备份冗余策略:通过配置备份冗余策略。可以使得rman将早期备份标记为陈旧,并且使用delete obsolete 命令可以删除陈旧备份。示例:

RMAN> configure retention policy to redundancy 2 ;


配置辅助实例的数据文件名:当使用rman执行表空间时间点恢复(tspitr)或者复制数据库时,可能需要设置辅助实例数据文件名。示例:

 RMAN> configre auxname for datafile 2 to ‘d:\auxi\df_2.dbf’;


配置快照控制文件名:当重新同步恢复目录或者备份控制文件时,rman需要建立快照控制文件。在windows平台,快照控制文件的默认名为:%ORACLE_HOME%\database\snfcSID.ora。改变控制文件的名称和位置:

RMAN > configure snapshot controlfile name to 'd:\oracle\ora10\snfcDEMO.ora';


显示rman配置:

显示当前rman环境配置。用 命令:RMAN >show all; 

显示默认设备类型:   RMAN > show default device type;

显示自动通道配置: RMAN> show channel for device type disk;

显示备份冗余策略:RMAN> show retention policy;

显示备份优化:RMAN > show backup optimization;

显示快照控制文件:RMAN> show snapshot controlfile name;

显示备份集最大尺寸:RMAN>show maxsetsize;

显示数据文件多重备份:RMAN> show datafile backup copies;

显示控制文件多重备份:RMAN> show archivelog  backup copies;

清除rman配置:如果要将rman配置修改为默认配置,则可以使用 clear选项清除相应的rman配置。下面以将备份冗余策略修改为默认配置为例,说明rman配置的方法:

RMAN > configure retention policy clear ;


2、rman备份:

rman备份可用两种格式存储:备份集(backup set ) 和  映像副本(image copy)。

说说备份集和备份片吧,一个备份集可以存储好几个数据文件,只存储有数据的块,不存储空快;备份片是用于存储备份信息的二进制文件,每个备份片对应一个操作系统文件,默认情况下一个备份集只有一个备份片,如果将一个备份集存储到多个设备上,那可以将备份集划分为多个备份片。

映像副本:类似于用户管理备份出来的数据文件备份。占用空间与源文件一样大小。只能 备到磁盘,不能到磁带。

建立备份集:

备份片的文件名格式:
%c——当生成多重备份时,用于生成备份片的副本号。 ——如果要生成多个备份片副本,这个是必须有的。
%d——用于指定数据库名。
%e——用于指定归档日志序列号。
%p——用于指定备份集内备份片的编号。 ——如果建立多个备份片,这个是必须有的。
%s——用于指定备份集编号。 ——这个是必须有的。
%N——用于指定表空间名称。
%f——用于指定绝对文件号。


1、完全数据库备份集:是指使用backup database 命令备份数据库的所有数据文件和控制文件的方法。完全数据库备份又包括一致性备份和非一致性备份。
一致性备份:既适用于archivelog模式,也适用于noarchivelog模式。操作:
C;\> rman target sys/liu123@mynewdb  nocatalog;  
RMAN> shutdown immediate
RMAN> startup mount
RMAN> backup database  format =' d:\backup\%d_%s.dbf';
RMAN> sql ' alter system archive log current';
当执行backup database 命令时不仅会备份所有的数据文件,还会自动备份控制文件。


非一致性备份:这个是指在open状态下备份所有的数据文件和控制文件,只适用于archivelog模式:
RMAN> backup database  format =' d:\backup\%d_%s.dbf';
RMAN> sql ' alter system archive log current';


免除表空间:正常是除了临时表空间都备,但是如果有类似于只读表空间这样的变化很少的表空间,可以设定不备份。
设置:
RMAN> configure exclude for  tablespace user03;
RMAN> backup database  format =' d:\backup\%d_%s.dbf';
RMAN> sql ' alter system archive log current';


2、表空间备份集:是指用backup tablespace 命令备份一个或多个表空间的方法,注意备份表空间只适用于archivelog模式,并且要求数据库必须处于open状态。示例:RMAN >backup  tablespace user03 format='d:\backup\%N_%s.dbf';


3、数据文件备份集:是指用backup datafiel备份一个或多个数据文件的方法,数据库既可以处于mount状态,也可以处于open状态。示例:

RMAN > backup datafile 5 format ='d:\bakup\%N_%f_%s.dbf';


4、控制文件备份集:示例:RMAN>backup current confrolfile format='d:\backup\%d_%s.ctl';


注意当备份数据文件1时,自动备份当前控制文件,当备份其他数据文件时,通过指定include current controlfile 选项可以同时备份控制文件。示例:

RMAN > backup datafile 5 format =‘d:\backup\%d_%s.dbf’ include currrent controlfile;


5、spfile备份集:示例:RMAN> backup spfile format='d:backup\%d_%s.par';


6、归档日志备份集:示例:RMAN>backup format =‘d:\backup\%d_%s.arc’ archivelog from time 'sysdate -1 ' until time 'sysdate';


7、并行化备份集:应该为每个备份集分配一个通道,(可以用configure命令配置并行度,也可以使用allocate channel命令手工配置多个通道)

RMAN> configure device type disk parallelism 3;

RMAN> backup database format ='d:\backup\%d_%s.dbf';

RMAN> configure device type disk clear;


8、建立多重备份:通过backup命令后带有copies选项,可以指定生产多重备份副本,以备份users表空间,生产三个备份副本为例:

RMAN> backup copies 3 tablespace users format= 'd;\bak;%N_%s.dbf , 'd:\bak2\%N_%s.dbf ' , 'd:\bak3\%N_%s.dbf' ;


9、备份备份集:是指用backup backupset 命令备份已存在的备份集的方法。下面将编号问32的备份集备份到d:\bak1 目录下:

RMAN> backup backupset 32 format=‘d:\bak1\%d_%s.bak’;


10、建立多个备份片:注意当建立多个备份片时,必须指定%p匹配符。示例:

RMAN> configure channel device type sbt  maxpiecesize 4G;

RMAN> backup device type sbt format '%d_%s_%p.dbf' database;


11、建立压缩备份集:通过使用backup 命令的as compressed backupset 选项,可以有效地利用二进制压缩特征,注意这样好处是节省空间,但是坏处是增加了cpu的开销。 RMAN > backup as compressed backupset  tablespace users format = ' d:\backup\%d_%s.dbf';


12、备份数据文件和归档日志:当使用backup命令备份数据文件时,通过制定 plus archivelog选项同时备份归档日志:

RMAN> backup format ’d:\backup\%d_%s.dbk‘ tablespace user01 plus archivelog;


13、制定 备份集标记:默认情况下rman会自动为备份集提供标记,为了给备份集提供更有意义的名称,可以使用tag选项指定备份集标记,示例:

RMAN > backup format ’d:\backup\%d_%s.bak‘ tablespace users tag='users';


建立映像副本

映像副本信息会被记载到RMAN资料库,只能基于数据文件,控制文件,归档日志建立映像副本,而不能基于spfile建立映像副本,只能在磁盘上建立,不能在磁带上建立。10g以前用的是copy命令,10g后用的是backup命令的as copy选项,

建立数据文件映像副本:

示例:RMAN> backup as copy format = 'd:\backup\df_5.dbf' datafile 5;

或者: RMAN> copy datafile 5 to ’d:\backup\df_5.dbf‘;


 建立控制文件映像副本:

RMAN> backup as copy format ='d:\backup\demo.ctl' currnt controlfile;

RMAN> copy current controlfile to 'd:\backup\demo.ctl';


建立归档日志映像副本:

示例:RMAN> backup as copy format = 'd:\backup\archive\arc20.log' archivelog sequence 20;

RMAN> copy archivelog 'd:\demo\archive\arc00020_0538067512.001' to 'd:backup\cachive\arc20.log';


并行化建立映像副本:就和并行化备份集差不多,可以分配多个通道,既可以使用configure命令配置并行度。也可以使用allocate channel手工配置多个通道,为了使用并行化映像副本,不仅需要分配多个通道,而且应该在一个backup as copy 或者copy命令下备份所有文件。下面以备份数据文件5、6、7为例:

RMAN >configure  device type disk parallelism 3 ; 

RMAN >backup as copy format='d:\backup\df_%f.dbf' datafile 5,6,7;

RMAN > configure device type disk clear;


指定映像副本标记:默认情况下rman会自动为映像副本提供标记,为了给映像副本提供更有意义的名称,可以使用tag选项指定备份集标记,示例:

RMAN > backup as copy format=’d:\backup\df_%f.dbf‘ datafile 5 tag_df_5;

RMAN> copy datafile 5 to 'd:\backup\df_df_%f.dbf' tag=df_5;


3、rman显示备份信息:

当使用rman备份操作时,rman资料库信息会被存放的目标数据库的控制文件中。

通过查询目标数据库的动态性能视图,可以取得rman资料库的相关信息。

1、v$archived_log .该动态性能视图用于显示所有归档日志映像副本的信息。

SQL> select sequence#,name,first_change# from v$archived_log where status='A';


2、v$backup_datafile 该动态性能视图用于显示控制文件和数据文件的备份集信息,通过在视图v$backup_datafile 、 v$backup_piece之间连接查询。可以显示特定数据文件的备份片的信息。例如,下面显示所有数据文件的备份片信息为例。书面使用该视图的方法:

SQL> select a.file# , b.handle, a.block*a.block_size byte from v$backup_datafile a, v$backup_piece b where a.set_stamp=b.set_stamp and b.status='A';

file#用于标识数据文件编号。其中0表示控制文件,handle标识备份片对应的文件名。byte标识数据文件备份在备份片内占用的空间。set_stamp用于唯一标示备份集的数字值。


3、v$backup_redolog.该动态性能视图用于显示归档日志备份集的信息。每个归档日志备份集可以包含一个或者多个归档日志。通过在v$backup_piece / v$backup_redolog 之间进行连接查询。可以显示备份片文件所包含的归档日志备份信息。

SQL> select distinct a.handle, b.sequence#, b.first_change#,b.blocks from v$backup_piece a, v$backup_redolog b where a.set_stamp=b.set_stamp and a.status='A';

handle标识备份片对应的文件名,sequence#标识日志序列号,blocks用于标识被备份的日志块个数。


4、v$backup_set 和 v$backup_piece .v$backup_set用于显示备份集的详细信息,v$backup_piece用于显示备份片的详细信息。通过而知之间的链接查询,可以显示备份集所对应的备份片的信息。

SQL> select b.handle, a.backup_type, a.pieces , a.elapsed_seconds form v$backup_set a, v$backup_piece b where a.set_stamp=b.set_stamp and b.status='A';

backup_type用于显示备份片类型。(D:数据文件完全备份。 I : 数据文件增量备份。 L: 归档日志备份。) pieces 用于标识备份片个数,elapsed_seconds用于标识备份的总开销时间。


5、v$backup_corruption  用于显示在执行backup名利时所检测的损坏数据块信息。显示backup所检测到的所有损坏数据块的信息示例:

SQL>select file# , block#, blocks, marked_corrupt from v$backup_corruption;

其中file#标识损坏块所在的数据文件编号。block#用于标识损坏块的其实块编号。blocks用于标识被损坏的连续块个数。marked_corrupt用于标识块是否已经被数据块标记问损坏值为YES或NO。

6、v$copy_corruption :该动态性能视图用于显示当执行copy命令时所检测到的损坏数据块信息。

SQL> select file#, block#, blocks marked_corrupt  from  v$copy_corruption;

其中file#标识损坏块所在的数据文件编号。block#用于标识损坏块的其实块编号。blocks用于标识被损坏的连续块个数。marked_corrupt用于标识块是否已经被数据块标记问损坏值为YES或NO。